Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
		| @ -175,7 +175,7 @@ sms: | |||||||
|   # 配置源类型用于标定配置来源(interface,yaml) |   # 配置源类型用于标定配置来源(interface,yaml) | ||||||
|   config-type: yaml |   config-type: yaml | ||||||
|   # 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制 |   # 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制 | ||||||
|   restricted: true |   restricted: false | ||||||
|   # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 |   # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 | ||||||
|   minute-max: 1 |   minute-max: 1 | ||||||
|   # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 |   # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 | ||||||
|  | |||||||
| @ -326,7 +326,7 @@ ys7: | |||||||
|   app-key: 3acf9f1a43dc4209841e0893003db0a2 |   app-key: 3acf9f1a43dc4209841e0893003db0a2 | ||||||
|   app-secret: 09e29c70ae1161fbc3ce2030fc09ba2e |   app-secret: 09e29c70ae1161fbc3ce2030fc09ba2e | ||||||
|   job: |   job: | ||||||
|     capture-enabled: true   # 控制是否启用萤石抓拍任务 |     capture-enabled: false   # 控制是否启用萤石抓拍任务 | ||||||
|     device-sync-enabled: true # 控制是否同步萤石设备 |     device-sync-enabled: true # 控制是否同步萤石设备 | ||||||
| # 斯巴达算法 | # 斯巴达算法 | ||||||
| sparta: | sparta: | ||||||
|  | |||||||
| @ -186,14 +186,6 @@ public class ProjectBigScreenController extends BaseController { | |||||||
|     @GetMapping("/news/{projectId}") |     @GetMapping("/news/{projectId}") | ||||||
|     public R<List<BusProjectNewsVo>> getProjectNews(@NotNull(message = "主键不能为空") |     public R<List<BusProjectNewsVo>> getProjectNews(@NotNull(message = "主键不能为空") | ||||||
|                                                     @PathVariable Long projectId) { |                                                     @PathVariable Long projectId) { | ||||||
| //        List<BusCorporateEvents> busCorporateEvents = projectBigScreenMapper.getBusCorporateEvents(); |  | ||||||
| //        return R.ok(busCorporateEvents.stream().map(event -> { |  | ||||||
| //            BusProjectNewsVo vo = new BusProjectNewsVo(); |  | ||||||
| //            vo.setId(event.getId()); |  | ||||||
| //            vo.setTitle(event.getHeadline()); |  | ||||||
| //            vo.setContent(event.getContent()); |  | ||||||
| //            return vo; |  | ||||||
| //        }).toList()); |  | ||||||
|         return R.ok(projectBigScreenService.getProjectNews(projectId)); |         return R.ok(projectBigScreenService.getProjectNews(projectId)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -204,23 +196,6 @@ public class ProjectBigScreenController extends BaseController { | |||||||
|     @GetMapping("/safetyInspection/{projectId}") |     @GetMapping("/safetyInspection/{projectId}") | ||||||
|     public R<List<ProjectSafetyInspectionVo>> getProjectSafetyInspection(@NotNull(message = "主键不能为空") |     public R<List<ProjectSafetyInspectionVo>> getProjectSafetyInspection(@NotNull(message = "主键不能为空") | ||||||
|                                                                          @PathVariable Long projectId) { |                                                                          @PathVariable Long projectId) { | ||||||
| /*        BusProject project = projectService.getById(projectId); |  | ||||||
|         projectId = project.getGoId(); |  | ||||||
|         String pic; |  | ||||||
|         if (projectId == 60) { |  | ||||||
|             pic = "http://xny.yj-3d.com:7464"; |  | ||||||
|         } else { |  | ||||||
|             pic = "http://xny.yj-3d.com:7363"; |  | ||||||
|         } |  | ||||||
|         List<BusTour> busTours = projectBigScreenMapper.selectTourByProjectId(projectId); |  | ||||||
|         return R.ok(busTours.stream().map(tour -> { |  | ||||||
|             ProjectSafetyInspectionVo vo = new ProjectSafetyInspectionVo(); |  | ||||||
|             vo.setId(tour.getId()); |  | ||||||
|             vo.setViolationType(tour.getTourType()); |  | ||||||
|             vo.setPicture(pic + tour.getPicture()); |  | ||||||
|             vo.setCreateTime(tour.getCreatedAt()); |  | ||||||
|             return vo; |  | ||||||
|         }).toList());*/ |  | ||||||
|         return R.ok(projectBigScreenService.getProjectSafetyInspection(projectId)); |         return R.ok(projectBigScreenService.getProjectSafetyInspection(projectId)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -231,51 +206,6 @@ public class ProjectBigScreenController extends BaseController { | |||||||
|     @GetMapping("/people/{projectId}") |     @GetMapping("/people/{projectId}") | ||||||
|     public R<ProjectPeopleVo> getProjectPeople(@NotNull(message = "主键不能为空") |     public R<ProjectPeopleVo> getProjectPeople(@NotNull(message = "主键不能为空") | ||||||
|                                                @PathVariable Long projectId) { |                                                @PathVariable Long projectId) { | ||||||
| //        BusProject project = projectService.getById(projectId); |  | ||||||
| //        projectId = project.getGoId(); |  | ||||||
| //        Integer projectUserCount = projectBigScreenMapper.getProjectUserCount(projectId); |  | ||||||
| //        ProjectPeopleVo vo = new ProjectPeopleVo(); |  | ||||||
| //        vo.setPeopleCount(BigDecimal.valueOf(projectUserCount)); |  | ||||||
| //        Integer attendanceCount = projectBigScreenMapper.getAttendanceCount(projectId, DateUtils.getDate()); |  | ||||||
| //        vo.setAttendanceCount(BigDecimal.valueOf(attendanceCount)); |  | ||||||
| //        vo.setAttendanceRate(BigDecimalUtil.toPercentage(BigDecimal.valueOf(attendanceCount), BigDecimal.valueOf(projectUserCount))); |  | ||||||
| //        List<BusConstructionUser> projectUserList = projectBigScreenMapper.getProjectUserList(projectId); |  | ||||||
| //        List<BusProjectTeamByGo> teamList = projectBigScreenMapper.getTeamList(projectId); |  | ||||||
| // |  | ||||||
| //        List<ProjectTeamAttendanceVo> teamAttendanceList = new ArrayList<>(); |  | ||||||
| //        String punchRange = project.getPunchRange(); |  | ||||||
| //        String punchTime = ""; |  | ||||||
| //        if (punchRange != null) { |  | ||||||
| //            String start = punchRange.split(",")[0]; |  | ||||||
| //            punchTime = LocalDate.now() + " " + start; |  | ||||||
| //        } |  | ||||||
| //        if (projectUserList != null && teamList != null) { |  | ||||||
| //            projectUserList = projectUserList.stream().filter(user -> user.getTeamId() != null).toList(); |  | ||||||
| //            Map<Long, List<BusConstructionUser>> userMap = projectUserList.stream() |  | ||||||
| //                .collect(Collectors.groupingBy(BusConstructionUser::getTeamId)); |  | ||||||
| //            for (BusProjectTeamByGo team : teamList) { |  | ||||||
| //                ProjectTeamAttendanceVo vo1 = new ProjectTeamAttendanceVo(); |  | ||||||
| //                vo1.setId(team.getId()); |  | ||||||
| //                vo1.setTeamName(team.getName()); |  | ||||||
| //                vo1.setAttendanceTime(punchTime); |  | ||||||
| //                vo1.setAttendanceNumber(BigDecimal.ZERO); |  | ||||||
| //                List<BusConstructionUser> userList = userMap.get(team.getId()); |  | ||||||
| //                if (CollUtil.isNotEmpty(userList)) { |  | ||||||
| //                    List<String> list = userList.stream().map(BusConstructionUser::getOpenid).distinct().toList(); |  | ||||||
| //                    Integer aCount = projectBigScreenMapper.getAttendanceCountByOpenIds(list, LocalDate.now()); |  | ||||||
| //                    vo1.setAttendanceNumber(BigDecimal.valueOf(aCount)); |  | ||||||
| //                } |  | ||||||
| //                vo1.setAllNumber(BigDecimal.valueOf(userMap.getOrDefault(team.getId(), List.of()).size())); |  | ||||||
| //                if (vo1.getAttendanceNumber() != null && vo1.getAllNumber() != null && vo1.getAllNumber().compareTo(BigDecimal.ZERO) != 0) { |  | ||||||
| //                    vo1.setAttendanceRate(BigDecimalUtil.toPercentage(vo1.getAttendanceNumber(), vo1.getAllNumber())); |  | ||||||
| //                } else { |  | ||||||
| //                    vo1.setAttendanceRate(BigDecimal.ZERO); |  | ||||||
| //                } |  | ||||||
| //                teamAttendanceList.add(vo1); |  | ||||||
| //            } |  | ||||||
| //        } |  | ||||||
| //        vo.setTeamAttendanceList(teamAttendanceList); |  | ||||||
| //        return R.ok(vo); |  | ||||||
|         return R.ok(projectBigScreenService.getProjectPeople(projectId)); |         return R.ok(projectBigScreenService.getProjectPeople(projectId)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -296,18 +226,7 @@ public class ProjectBigScreenController extends BaseController { | |||||||
|     @GetMapping("/generalize/{projectId}") |     @GetMapping("/generalize/{projectId}") | ||||||
|     public R<String> getProjectGeneralize(@NotNull(message = "主键不能为空") |     public R<String> getProjectGeneralize(@NotNull(message = "主键不能为空") | ||||||
|                                           @PathVariable Long projectId) { |                                           @PathVariable Long projectId) { | ||||||
| //        BusProject project = projectService.getById(projectId); |  | ||||||
| //        if (project != null) { |  | ||||||
| //            Long goId = project.getGoId(); |  | ||||||
| //            if (goId != null) { |  | ||||||
| //                List<SysProjectIntroduce> sysProjectIntroduces = projectBigScreenMapper.selectByProjectId(goId); |  | ||||||
| //                if (CollUtil.isNotEmpty(sysProjectIntroduces)) { |  | ||||||
| //                    return R.ok(sysProjectIntroduces.getFirst().getRichText()); |  | ||||||
| //                } |  | ||||||
| //            } |  | ||||||
| //        } |  | ||||||
|         return R.ok(projectBigScreenService.getProjectGeneralize(projectId)); |         return R.ok(projectBigScreenService.getProjectGeneralize(projectId)); | ||||||
| //        return R.ok(); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @ -347,11 +266,11 @@ public class ProjectBigScreenController extends BaseController { | |||||||
|             if (count > 0) { |             if (count > 0) { | ||||||
|                 throw new ServiceException("已存在同名萤石摄像头", HttpStatus.CONFLICT); |                 throw new ServiceException("已存在同名萤石摄像头", HttpStatus.CONFLICT); | ||||||
|             } |             } | ||||||
|             // todo 更新云端名称 |             // 更新云端名称 | ||||||
| /*            Boolean result = ys7Manager.updateDeviceName(one.getDeviceSerial(), deviceName); |             Boolean result = ys7Manager.updateDeviceName(one.getDeviceSerial(), deviceName); | ||||||
|             if (!result) { |             if (!result) { | ||||||
|                 throw new ServiceException("更新云端萤石摄像头名称异常", HttpStatus.ERROR); |                 throw new ServiceException("更新云端萤石摄像头名称异常", HttpStatus.ERROR); | ||||||
|             }*/ |             } | ||||||
|         } |         } | ||||||
|         return toAjax(othYs7DeviceService.updateById(ys7Device)); |         return toAjax(othYs7DeviceService.updateById(ys7Device)); | ||||||
|     } |     } | ||||||
| @ -409,7 +328,7 @@ public class ProjectBigScreenController extends BaseController { | |||||||
|     @SaCheckPermission("project:big:screen") |     @SaCheckPermission("project:big:screen") | ||||||
|     @PostMapping("/updatePosition") |     @PostMapping("/updatePosition") | ||||||
|     public R<Void> updatePosition(@RequestBody ProjectUpdateDto dto) { |     public R<Void> updatePosition(@RequestBody ProjectUpdateDto dto) { | ||||||
|        return toAjax(projectService.updatePosition(dto)); |         return toAjax(projectService.updatePosition(dto)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -437,7 +356,7 @@ public class ProjectBigScreenController extends BaseController { | |||||||
|      */ |      */ | ||||||
| //    @SaCheckPermission("project:big:screen") | //    @SaCheckPermission("project:big:screen") | ||||||
|     @GetMapping("/setWrjHc") |     @GetMapping("/setWrjHc") | ||||||
|     public void setWrjHc(){ |     public void setWrjHc() { | ||||||
|         projectBigScreenService.setWrjHc(); |         projectBigScreenService.setWrjHc(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -446,7 +365,7 @@ public class ProjectBigScreenController extends BaseController { | |||||||
|      */ |      */ | ||||||
| //    @SaCheckPermission("project:big:screen") | //    @SaCheckPermission("project:big:screen") | ||||||
|     @GetMapping("/getInfoData") |     @GetMapping("/getInfoData") | ||||||
|     public R<Map<String, Map<String, Object>>> getInfoData(TanchuangInfoReq req){ |     public R<Map<String, Map<String, Object>>> getInfoData(TanchuangInfoReq req) { | ||||||
|         return R.ok(projectBigScreenService.getInfoData(req)); |         return R.ok(projectBigScreenService.getInfoData(req)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -19,9 +19,7 @@ import org.dromara.system.service.ISysRoleService; | |||||||
| import org.dromara.system.service.ISysUserService; | import org.dromara.system.service.ISysUserService; | ||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.*; | ||||||
| import java.util.Date; |  | ||||||
| import java.util.List; |  | ||||||
|  |  | ||||||
| @Slf4j | @Slf4j | ||||||
| @Component | @Component | ||||||
| @ -59,6 +57,7 @@ public class DesignFileJob { | |||||||
|             .eq(DesSmsRecord::getAgain, "1") |             .eq(DesSmsRecord::getAgain, "1") | ||||||
|             .le(DesSmsRecord::getCreateTime, threeDaysAgo) // Date类型直接比较 |             .le(DesSmsRecord::getCreateTime, threeDaysAgo) // Date类型直接比较 | ||||||
|         ); |         ); | ||||||
|  |         HashSet<String> phoneNumbers = new HashSet<>(); | ||||||
|         for (DesSmsRecord record : records) { |         for (DesSmsRecord record : records) { | ||||||
|             DesVolumeFile desVolumeFile = designFileService.getById(record.getVolumeFileId()); |             DesVolumeFile desVolumeFile = designFileService.getById(record.getVolumeFileId()); | ||||||
|             DesVolumeCatalog desVolumeCatalog = volumeCatalogService.getById(desVolumeFile.getVolumeCatalogId()); |             DesVolumeCatalog desVolumeCatalog = volumeCatalogService.getById(desVolumeFile.getVolumeCatalogId()); | ||||||
| @ -85,10 +84,13 @@ public class DesignFileJob { | |||||||
|             List<Long> list1 = list.stream().map(DesVolumeFileViewer::getUserId).toList(); |             List<Long> list1 = list.stream().map(DesVolumeFileViewer::getUserId).toList(); | ||||||
|             //找出没有查看的人 发送短信 |             //找出没有查看的人 发送短信 | ||||||
|             List<SysUser> list2 = sysUsers.stream().filter(vo -> !list1.contains(vo.getUserId())).toList(); |             List<SysUser> list2 = sysUsers.stream().filter(vo -> !list1.contains(vo.getUserId())).toList(); | ||||||
|             asyncUtil.sendSms(list2.stream().map(SysUser::getPhonenumber).toList(), "config5"); |             phoneNumbers.addAll(list2.stream().map(SysUser::getPhonenumber).toList()); | ||||||
|  |  | ||||||
|         } |         } | ||||||
|  |         if(CollectionUtil.isEmpty(phoneNumbers)){ | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  |         asyncUtil.sendSms(new ArrayList<>(phoneNumbers), "config5"); | ||||||
|         List<Long> list1 = records.stream().map(DesSmsRecord::getId).toList(); |         List<Long> list1 = records.stream().map(DesSmsRecord::getId).toList(); | ||||||
|  |  | ||||||
|         desSmsRecordService.lambdaUpdate().in(DesSmsRecord::getId, list1) |         desSmsRecordService.lambdaUpdate().in(DesSmsRecord::getId, list1) | ||||||
|  | |||||||
| @ -51,32 +51,40 @@ public class InspectionJob { | |||||||
|  |  | ||||||
|         SmsBlend smsBlend = SmsFactory.getSmsBlend("config4"); |         SmsBlend smsBlend = SmsFactory.getSmsBlend("config4"); | ||||||
|  |  | ||||||
|  |         List<String> phones = new ArrayList<>(); | ||||||
|  |         List<Long> userIds = new ArrayList<>(); | ||||||
|         // 每500条记录作为一批进行处理 |         // 每500条记录作为一批进行处理 | ||||||
|         int batchSize = 500; |         int batchSize = 500; | ||||||
|         for (int i = 0; i < list.size(); i += batchSize) { |         for (int i = 0; i < list.size(); i += batchSize) { | ||||||
|             int endIndex = Math.min(i + batchSize, list.size()); |             int endIndex = Math.min(i + batchSize, list.size()); | ||||||
|             List<QltQualityInspection> batch = list.subList(i, endIndex); |             List<QltQualityInspection> batch = list.subList(i, endIndex); | ||||||
|             List<Long> userIds = new ArrayList<>(); |  | ||||||
|             for (QltQualityInspection qualityInspection : batch) { |             for (QltQualityInspection qualityInspection : batch) { | ||||||
|                 Long correctorId = qualityInspection.getCorrectorId(); |                 Long correctorId = qualityInspection.getCorrectorId(); | ||||||
|                 String phonenumber = userService.queryById(correctorId).getPhonenumber(); |                 String phonenumber = userService.queryById(correctorId).getPhonenumber(); | ||||||
|                 if (phonenumber == null) { |                 if (phonenumber == null) { | ||||||
|                     continue; |                     continue; | ||||||
|                 } |                 } | ||||||
|  |                 if(phones.contains(phonenumber)){ | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |                 phones.add(phonenumber); | ||||||
|                 SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>()); |                 SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>()); | ||||||
|                 if (!smsResponse.isSuccess()) { |                 if (!smsResponse.isSuccess()) { | ||||||
|                     log.error("验证码短信发送异常 => {}", smsResponse); |                     log.error("验证码短信发送异常 => {}", smsResponse); | ||||||
|                 } |                 } | ||||||
|                 userIds.add(correctorId); |                 if(!userIds.contains(correctorId)){ | ||||||
|             } |                     userIds.add(correctorId); | ||||||
|             if(userIds.isEmpty()){ |                 } | ||||||
|                 continue; |  | ||||||
|             } |             } | ||||||
|  |             log.info("质量工单短信提醒批次发送完成,当前批次数量: {}", batch.size()); | ||||||
|  |         } | ||||||
|  |         if(!userIds.isEmpty()){ | ||||||
|             SseMessageDto sseMessageDto = new SseMessageDto(); |             SseMessageDto sseMessageDto = new SseMessageDto(); | ||||||
|             sseMessageDto.setMessage("您负责整改的质量工单已逾期,请尽快前往处理!"); |             sseMessageDto.setMessage("您负责整改的质量工单已逾期,请尽快前往处理!"); | ||||||
|             sseMessageDto.setUserIds(userIds); |             sseMessageDto.setUserIds(userIds); | ||||||
|             SseMessageUtils.publishMessage(sseMessageDto); |             SseMessageUtils.publishMessage(sseMessageDto); | ||||||
|             log.info("质量工单短信提醒批次发送完成,当前批次数量: {}", batch.size()); |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         log.info("执行定时任务:质量工单短信提醒完成,总处理数量: {}", list.size()); |         log.info("执行定时任务:质量工单短信提醒完成,总处理数量: {}", list.size()); | ||||||
| @ -93,34 +101,38 @@ public class InspectionJob { | |||||||
|  |  | ||||||
|         SmsBlend smsBlend = SmsFactory.getSmsBlend("config6"); |         SmsBlend smsBlend = SmsFactory.getSmsBlend("config6"); | ||||||
|  |  | ||||||
|  |         List<String> phones = new ArrayList<>(); | ||||||
|  |         List<Long> userIds = new ArrayList<>(); | ||||||
|         // 每500条记录作为一批进行处理 |         // 每500条记录作为一批进行处理 | ||||||
|         int batchSize = 500; |         int batchSize = 500; | ||||||
|         for (int i = 0; i < list.size(); i += batchSize) { |         for (int i = 0; i < list.size(); i += batchSize) { | ||||||
|             int endIndex = Math.min(i + batchSize, list.size()); |             int endIndex = Math.min(i + batchSize, list.size()); | ||||||
|             List<HseSafetyInspection> batch = list.subList(i, endIndex); |             List<HseSafetyInspection> batch = list.subList(i, endIndex); | ||||||
|  |  | ||||||
|             List<Long> userIds = new ArrayList<>(); |  | ||||||
|             for (HseSafetyInspection safetyInspection : batch) { |             for (HseSafetyInspection safetyInspection : batch) { | ||||||
|                 Long correctorId = safetyInspection.getCorrectorId(); |                 Long correctorId = safetyInspection.getCorrectorId(); | ||||||
|                 String phonenumber = userService.queryById(correctorId).getPhonenumber(); |                 String phonenumber = userService.queryById(correctorId).getPhonenumber(); | ||||||
|                 if (phonenumber == null) { |                 if (phonenumber == null) { | ||||||
|                     continue; |                     continue; | ||||||
|                 } |                 } | ||||||
|  |                 if(phones.contains(phonenumber)){ | ||||||
|  |                     continue; | ||||||
|  |                 } | ||||||
|  |                 phones.add(phonenumber); | ||||||
|                 SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>()); |                 SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>()); | ||||||
|                 if (!smsResponse.isSuccess()) { |                 if (!smsResponse.isSuccess()) { | ||||||
|                     log.error("验证码短信发送异常 => {}", smsResponse); |                     log.error("验证码短信发送异常 => {}", smsResponse); | ||||||
|                 } |                 } | ||||||
|                 userIds.add(correctorId); |                 userIds.add(correctorId); | ||||||
|             } |             } | ||||||
|  |             log.info("安全工单短信提醒批次发送完成,当前批次数量: {}", batch.size()); | ||||||
|  |         } | ||||||
|  |         if(!userIds.isEmpty()){ | ||||||
|             SseMessageDto sseMessageDto = new SseMessageDto(); |             SseMessageDto sseMessageDto = new SseMessageDto(); | ||||||
|             sseMessageDto.setMessage("您负责整改的安全工单已逾期,请尽快前往处理!"); |             sseMessageDto.setMessage("您负责整改的安全工单已逾期,请尽快前往处理!"); | ||||||
|             sseMessageDto.setUserIds(userIds); |             sseMessageDto.setUserIds(userIds); | ||||||
|             SseMessageUtils.publishMessage(sseMessageDto); |             SseMessageUtils.publishMessage(sseMessageDto); | ||||||
|  |  | ||||||
|             log.info("安全工单短信提醒批次发送完成,当前批次数量: {}", batch.size()); |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         log.info("执行定时任务:安全工单短信提醒完成,总处理数量: {}", list.size()); |         log.info("执行定时任务:安全工单短信提醒完成,总处理数量: {}", list.size()); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -94,4 +94,14 @@ public class MatMaterialsInventory extends BaseEntity { | |||||||
|      */ |      */ | ||||||
|     private String remark; |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 操作人id | ||||||
|  |      */ | ||||||
|  |     private Long operatorId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分包单位id | ||||||
|  |      */ | ||||||
|  |     private Long recipientId; | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -50,6 +50,11 @@ public class OutConstructionValue extends BaseEntity { | |||||||
|      */ |      */ | ||||||
|     private Long progressCategoryId; |     private Long progressCategoryId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分项工程名称 | ||||||
|  |      */ | ||||||
|  |     private String progressCategoryName; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 计划详情id |      * 计划详情id | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -25,4 +25,19 @@ public class OutConstructionAllValueVo implements Serializable { | |||||||
|      * 对甲产值 |      * 对甲产值 | ||||||
|      */ |      */ | ||||||
|     private BigDecimal ownerValue; |     private BigDecimal ownerValue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 人工填报数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal artificialNum; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 无人机识别数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal uavNum; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 确认数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal confirmNum; | ||||||
| } | } | ||||||
|  | |||||||
| @ -171,4 +171,19 @@ public class OutConstructionValueVo implements Serializable { | |||||||
|      * 工作类型 |      * 工作类型 | ||||||
|      */ |      */ | ||||||
|     private String workType; |     private String workType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计量方式(0无 1数量 2百分比) | ||||||
|  |      */ | ||||||
|  |     private String unitType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位 | ||||||
|  |      */ | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 完成数量 | ||||||
|  |      */ | ||||||
|  |     private Integer completeNum; | ||||||
| } | } | ||||||
|  | |||||||
| @ -110,7 +110,6 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction | |||||||
|     private LambdaQueryWrapper<OutConstructionValue> buildQueryWrapper(OutConstructionValueBo bo) { |     private LambdaQueryWrapper<OutConstructionValue> buildQueryWrapper(OutConstructionValueBo bo) { | ||||||
|         Map<String, Object> params = bo.getParams(); |         Map<String, Object> params = bo.getParams(); | ||||||
|         LambdaQueryWrapper<OutConstructionValue> lqw = Wrappers.lambdaQuery(); |         LambdaQueryWrapper<OutConstructionValue> lqw = Wrappers.lambdaQuery(); | ||||||
|         lqw.orderByDesc(OutConstructionValue::getId); |  | ||||||
|         Long projectId = bo.getProjectId(); |         Long projectId = bo.getProjectId(); | ||||||
|         List<Long> ids = new ArrayList<>(); |         List<Long> ids = new ArrayList<>(); | ||||||
|         if (projectId != null) { |         if (projectId != null) { | ||||||
| @ -150,6 +149,9 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction | |||||||
|                 lqw.in(OutConstructionValue::getProgressCategoryId, categoryIds); |                 lqw.in(OutConstructionValue::getProgressCategoryId, categoryIds); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |         lqw.orderByAsc(OutConstructionValue::getProgressCategoryName); | ||||||
|  |         lqw.orderByDesc(OutConstructionValue::getProgressCategoryId); | ||||||
|  |         lqw.orderByDesc(OutConstructionValue::getReportDate); | ||||||
|         return lqw; |         return lqw; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -275,6 +277,27 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction | |||||||
|             .reduce(BigDecimal.ZERO, BigDecimal::add) |             .reduce(BigDecimal.ZERO, BigDecimal::add) | ||||||
|             .setScale(4, RoundingMode.HALF_UP); |             .setScale(4, RoundingMode.HALF_UP); | ||||||
|         vo.setOwnerValue(ownerValue); |         vo.setOwnerValue(ownerValue); | ||||||
|  |         // 统计确认数量 | ||||||
|  |         BigDecimal confirmNum = list.stream() | ||||||
|  |             .map(OutConstructionValueVo::getConfirmNum) | ||||||
|  |             .filter(Objects::nonNull) | ||||||
|  |             .map(BigDecimal::valueOf) // 转换成 BigDecimal | ||||||
|  |             .reduce(BigDecimal.ZERO, BigDecimal::add); | ||||||
|  |         vo.setConfirmNum(confirmNum); | ||||||
|  |         // 统计人工填报数量 | ||||||
|  |         BigDecimal artificialNum = list.stream() | ||||||
|  |             .map(OutConstructionValueVo::getArtificialNum) | ||||||
|  |             .filter(Objects::nonNull) | ||||||
|  |             .map(BigDecimal::valueOf) // 转换成 BigDecimal | ||||||
|  |             .reduce(BigDecimal.ZERO, BigDecimal::add); | ||||||
|  |         vo.setArtificialNum(artificialNum); | ||||||
|  |         // 统计无人机识别数量 | ||||||
|  |         BigDecimal uavNum = list.stream() | ||||||
|  |             .map(OutConstructionValueVo::getUavNum) | ||||||
|  |             .filter(Objects::nonNull) | ||||||
|  |             .map(BigDecimal::valueOf) // 转换成 BigDecimal | ||||||
|  |             .reduce(BigDecimal.ZERO, BigDecimal::add); | ||||||
|  |         vo.setUavNum(uavNum); | ||||||
|         return vo; |         return vo; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -335,6 +358,8 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction | |||||||
|         PgsProgressCategoryVo pgsProgressCategoryVo = pgsProgressCategoryService.queryById(vo.getProgressCategoryId()); |         PgsProgressCategoryVo pgsProgressCategoryVo = pgsProgressCategoryService.queryById(vo.getProgressCategoryId()); | ||||||
|         vo.setProgressCategoryName(pgsProgressCategoryVo.getName()); |         vo.setProgressCategoryName(pgsProgressCategoryVo.getName()); | ||||||
|         vo.setWorkType(pgsProgressCategoryVo.getWorkType()); |         vo.setWorkType(pgsProgressCategoryVo.getWorkType()); | ||||||
|  |         vo.setUnitType(pgsProgressCategoryVo.getUnitType()); | ||||||
|  |         vo.setUnit(pgsProgressCategoryVo.getUnit()); | ||||||
|         PgsProgressCategoryVo pgsProgressCategoryVo1 = pgsProgressCategoryService.queryById(pgsProgressCategoryVo.getParentId()); |         PgsProgressCategoryVo pgsProgressCategoryVo1 = pgsProgressCategoryService.queryById(pgsProgressCategoryVo.getParentId()); | ||||||
|         vo.setCategoryId(pgsProgressCategoryVo1.getId()); |         vo.setCategoryId(pgsProgressCategoryVo1.getId()); | ||||||
|         vo.setCategoryName(pgsProgressCategoryVo1.getName()); |         vo.setCategoryName(pgsProgressCategoryVo1.getName()); | ||||||
| @ -346,10 +371,14 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction | |||||||
|         if (vo.getMatrixId() != null && vo.getMatrixId() != 0) { |         if (vo.getMatrixId() != null && vo.getMatrixId() != 0) { | ||||||
|             FacMatrix facMatrix = facMatrixService.getById(vo.getMatrixId()); |             FacMatrix facMatrix = facMatrixService.getById(vo.getMatrixId()); | ||||||
|             vo.setMatrixName(facMatrix.getMatrixName()); |             vo.setMatrixName(facMatrix.getMatrixName()); | ||||||
|  |             vo.setCategoryName(facMatrix.getMatrixName() + "/" + pgsProgressCategoryVo1.getName()); | ||||||
|         } |         } | ||||||
|         BusProjectVo busProjectVo1 = busProjectService.queryById(pgsProgressCategoryVo.getProjectId()); |         BusProjectVo busProjectVo1 = busProjectService.queryById(pgsProgressCategoryVo.getProjectId()); | ||||||
|         vo.setSubProjectId(busProjectVo1.getId()); |         vo.setSubProjectId(busProjectVo1.getId()); | ||||||
|         vo.setSubProjectName(busProjectVo1.getProjectName()); |         vo.setSubProjectName(busProjectVo1.getProjectName()); | ||||||
|  |  | ||||||
|  |         // 统计完成数量 | ||||||
|  |         vo.setCompleteNum(vo.getArtificialNum() + vo.getUavNum()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -971,6 +971,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla | |||||||
|                     value.setRangeId(rangeId); |                     value.setRangeId(rangeId); | ||||||
|                     value.setMatrixId(category.getMatrixId()); |                     value.setMatrixId(category.getMatrixId()); | ||||||
|                     value.setProgressCategoryId(progressCategoryId); |                     value.setProgressCategoryId(progressCategoryId); | ||||||
|  |                     value.setProgressCategoryName(category.getName()); | ||||||
|                     value.setDetailId(planDetail.getId()); |                     value.setDetailId(planDetail.getId()); | ||||||
|                     BigDecimal finishedNumber = planDetail.getFinishedNumber(); |                     BigDecimal finishedNumber = planDetail.getFinishedNumber(); | ||||||
|                     BigDecimal aiFill = planDetail.getAiFill(); |                     BigDecimal aiFill = planDetail.getAiFill(); | ||||||
| @ -1049,6 +1050,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla | |||||||
|                     value.setRangeId(range.getId()); |                     value.setRangeId(range.getId()); | ||||||
|                     value.setMatrixId(category.getMatrixId()); |                     value.setMatrixId(category.getMatrixId()); | ||||||
|                     value.setProgressCategoryId(progressCategoryId); |                     value.setProgressCategoryId(progressCategoryId); | ||||||
|  |                     value.setProgressCategoryName(category.getName()); | ||||||
|                     value.setDetailId(planDetail.getId()); |                     value.setDetailId(planDetail.getId()); | ||||||
|                     BigDecimal finishedNumber = planDetail.getFinishedNumber(); |                     BigDecimal finishedNumber = planDetail.getFinishedNumber(); | ||||||
|                     BigDecimal aiFill = planDetail.getAiFill(); |                     BigDecimal aiFill = planDetail.getAiFill(); | ||||||
|  | |||||||
| @ -0,0 +1,118 @@ | |||||||
|  | package org.dromara.project.controller; | ||||||
|  |  | ||||||
|  | import cn.dev33.satoken.annotation.SaIgnore; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import lombok.extern.slf4j.Slf4j; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.project.domain.BusAttendanceMachine; | ||||||
|  | import org.dromara.project.domain.dto.attendance.*; | ||||||
|  | import org.dromara.project.service.IBusAttendanceMachineService; | ||||||
|  | import org.dromara.project.service.IBusAttendanceService; | ||||||
|  | import org.springframework.mock.web.MockMultipartFile; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.web.multipart.MultipartFile; | ||||||
|  |  | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.time.LocalDateTime; | ||||||
|  | import java.time.format.DateTimeFormatter; | ||||||
|  | import java.util.Base64; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 考勤 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-08-05 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping() | ||||||
|  | @Slf4j | ||||||
|  | public class BusAttendanceDeviceController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IBusAttendanceService busAttendanceService; | ||||||
|  |  | ||||||
|  |     private final  IBusAttendanceMachineService busAttendanceMachineService; | ||||||
|  |  | ||||||
|  |     @PostMapping("/api/v1/record/face") | ||||||
|  |     @SaIgnore | ||||||
|  |     public R<Boolean> punchCardByFace(@RequestBody DeviceDto dto) { | ||||||
|  |         //打印接收数据 | ||||||
|  |         log.info("接收数据:{}", dto); | ||||||
|  |         if (dto.getLogs().isEmpty()) { | ||||||
|  |             return R.fail("没有数据"); | ||||||
|  |         } | ||||||
|  |         Log first = dto.getLogs().getFirst(); | ||||||
|  |  | ||||||
|  |         Long userId = Long.valueOf(first.getUser_id()); | ||||||
|  |  | ||||||
|  |         BusAttendanceMachine one = busAttendanceMachineService.lambdaQuery() | ||||||
|  |             .eq(BusAttendanceMachine::getSn, dto.getSn()) | ||||||
|  |             .last("limit 1") | ||||||
|  |             .one(); | ||||||
|  |         if (one == null || one.getProjectId() == null) { | ||||||
|  |             return R.fail("考勤机不存在或未关联项目"); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         String recogTime = first.getRecog_time(); | ||||||
|  |  | ||||||
|  |         LocalDateTime localDateTime = LocalDateTime.parse(recogTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); | ||||||
|  |  | ||||||
|  |         BusAttendancePunchCardByFaceReq req = new BusAttendancePunchCardByFaceReq(); | ||||||
|  |         DeviceLocation location = first.getLocation(); | ||||||
|  |         req.setLat(location.getLatitude()); | ||||||
|  |         req.setLng(location.getLongitude()); | ||||||
|  |         req.setProjectId(one.getProjectId()); | ||||||
|  |         req.setUserId(userId); | ||||||
|  |         req.setPunchTime(localDateTime); | ||||||
|  |         //打印req | ||||||
|  |         log.info("请求参数:{}", req); | ||||||
|  |         //base64转MultipartFile | ||||||
|  |         try { | ||||||
|  |             // 假设first.getImage()返回base64字符串,且你有一个文件名 | ||||||
|  |             MultipartFile file = convert(first.getPhoto(), "face.jpg"); | ||||||
|  |             log.info("开始打卡"); | ||||||
|  |             return R.ok(busAttendanceService.punchCardByFace(file, req)); | ||||||
|  |         } catch (IOException e) { | ||||||
|  |             return R.fail("文件转换失败"); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     public static MultipartFile convert(String base64String, String fileName) throws IOException { | ||||||
|  |         // 先进行URL解码(如果是URL编码过的数据) | ||||||
|  |         try { | ||||||
|  |             base64String = java.net.URLDecoder.decode(base64String, "UTF-8"); | ||||||
|  |         } catch (Exception e) { | ||||||
|  |             // 如果不是URL编码的数据,直接跳过 | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // 去除base64前缀(如data:image/png;base64,) | ||||||
|  |         if (base64String.contains(",")) { | ||||||
|  |             base64String = base64String.split(",")[1]; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // 解码base64字符串 | ||||||
|  |         byte[] decodedBytes = Base64.getDecoder().decode(base64String); | ||||||
|  |  | ||||||
|  |         // 创建MultipartFile对象 | ||||||
|  |         return new MockMultipartFile(fileName, fileName, "image/jpeg", decodedBytes); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -5,6 +5,7 @@ import org.springframework.web.multipart.MultipartFile; | |||||||
|  |  | ||||||
| import java.io.Serial; | import java.io.Serial; | ||||||
| import java.io.Serializable; | import java.io.Serializable; | ||||||
|  | import java.time.LocalDateTime; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * @author lilemy |  * @author lilemy | ||||||
| @ -41,4 +42,9 @@ public class BusAttendancePunchCardByFaceReq implements Serializable { | |||||||
|      */ |      */ | ||||||
|     private Long userId; |     private Long userId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 打卡时间 | ||||||
|  |      */ | ||||||
|  |     private LocalDateTime punchTime; | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,14 @@ | |||||||
|  | package org.dromara.project.domain.dto.attendance; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | import lombok.Data; | ||||||
|  | import org.apache.poi.ss.formula.functions.Count; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | @Data | ||||||
|  | public class DeviceDto { | ||||||
|  |     private String sn; | ||||||
|  |     private int Count; | ||||||
|  |     private List<Log> logs; | ||||||
|  | } | ||||||
| @ -0,0 +1,9 @@ | |||||||
|  | package org.dromara.project.domain.dto.attendance; | ||||||
|  |  | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | @Data | ||||||
|  | public class DeviceLocation { | ||||||
|  |     private String longitude; | ||||||
|  |     private String latitude; | ||||||
|  | } | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | package org.dromara.project.domain.dto.attendance; | ||||||
|  |  | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | @Data | ||||||
|  | public class Log { | ||||||
|  |     private String user_id; | ||||||
|  |     private String recog_type; | ||||||
|  |     private String recog_time; | ||||||
|  |     private String photo; | ||||||
|  |     private DeviceLocation location; | ||||||
|  | } | ||||||
| @ -1,5 +1,6 @@ | |||||||
| package org.dromara.project.domain.dto.projectteammember; | package org.dromara.project.domain.dto.projectteammember; | ||||||
|  |  | ||||||
|  | import jakarta.validation.constraints.NotNull; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
|  |  | ||||||
| import java.io.Serial; | import java.io.Serial; | ||||||
| @ -45,4 +46,9 @@ public class BusProjectTeamMemberCreateReq implements Serializable { | |||||||
|      */ |      */ | ||||||
|     private String remark; |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分包公司id | ||||||
|  |      */ | ||||||
|  |     private Long contractorId; | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -326,7 +326,11 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B | |||||||
|         } |         } | ||||||
|         synchronized (userId.toString().intern()) { |         synchronized (userId.toString().intern()) { | ||||||
|             // 记录当前打卡时间 |             // 记录当前打卡时间 | ||||||
|  |  | ||||||
|             LocalDateTime now = LocalDateTime.now(); |             LocalDateTime now = LocalDateTime.now(); | ||||||
|  |             if(req.getPunchTime() != null){ | ||||||
|  |                 now = req.getPunchTime(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|             //打卡范围 |             //打卡范围 | ||||||
|             if (!checkInRange(req)) { |             if (!checkInRange(req)) { | ||||||
| @ -617,6 +621,9 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B | |||||||
|     public Boolean checkInRange(BusAttendancePunchCardByFaceReq req) { |     public Boolean checkInRange(BusAttendancePunchCardByFaceReq req) { | ||||||
|         // 获取当前用户 |         // 获取当前用户 | ||||||
|         Long userId = LoginHelper.getUserId(); |         Long userId = LoginHelper.getUserId(); | ||||||
|  |         if (req.getUserId() != null) { | ||||||
|  |             userId = req.getUserId(); | ||||||
|  |         } | ||||||
|         Long projectId = req.getProjectId(); |         Long projectId = req.getProjectId(); | ||||||
|  |  | ||||||
|         SysUserVo sysUserVo = userService.queryById(userId); |         SysUserVo sysUserVo = userService.queryById(userId); | ||||||
|  | |||||||
| @ -176,11 +176,13 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM | |||||||
|         LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class) |         LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class) | ||||||
|             .eq(SubConstructionUser::getId, constructionUser.getId()) |             .eq(SubConstructionUser::getId, constructionUser.getId()) | ||||||
|             .set(SubConstructionUser::getProjectId, req.getProjectId()) |             .set(SubConstructionUser::getProjectId, req.getProjectId()) | ||||||
|  |             .set(req.getContractorId()!=null,SubConstructionUser::getContractorId, req.getContractorId()) | ||||||
|             .set(SubConstructionUser::getTeamId, projectTeamMember.getTeamId()) |             .set(SubConstructionUser::getTeamId, projectTeamMember.getTeamId()) | ||||||
|             .set(SubConstructionUser::getTeamName, projectTeam.getTeamName()) |             .set(SubConstructionUser::getTeamName, projectTeam.getTeamName()) | ||||||
|             .set(SubConstructionUser::getEntryDate, new Date()) |             .set(SubConstructionUser::getEntryDate, new Date()) | ||||||
|             .set(SubConstructionUser::getLeaveDate, null) |             .set(SubConstructionUser::getLeaveDate, null) | ||||||
|             .set(SubConstructionUser::getExitStatus, "0") |             .set(SubConstructionUser::getExitStatus, "0") | ||||||
|  |             .set(SubConstructionUser::getUserRole, "0") | ||||||
|             .set(StrUtil.isNotBlank(req.getTypeOfWork()),SubConstructionUser::getTypeOfWork,req.getTypeOfWork()) |             .set(StrUtil.isNotBlank(req.getTypeOfWork()),SubConstructionUser::getTypeOfWork,req.getTypeOfWork()) | ||||||
|             .set(constructionUser.getFirstDate() == null, SubConstructionUser::getFirstDate, LocalDate.now()); |             .set(constructionUser.getFirstDate() == null, SubConstructionUser::getFirstDate, LocalDate.now()); | ||||||
|         constructionUserService.update(constructionUserLuw); |         constructionUserService.update(constructionUserLuw); | ||||||
| @ -212,6 +214,10 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM | |||||||
|  |  | ||||||
|         roleService.cleanOnlineUser(Collections.singletonList(constructionUser.getSysUserId())); |         roleService.cleanOnlineUser(Collections.singletonList(constructionUser.getSysUserId())); | ||||||
|  |  | ||||||
|  |         if(req.getContractorId()!=null){ | ||||||
|  |             userService.updateFb(constructionUser.getSysUserId(),req.getContractorId(),false); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         return projectTeamMember.getId(); |         return projectTeamMember.getId(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -3,6 +3,8 @@ package org.dromara.quality.domain.vo.qualityinspection; | |||||||
| import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||||
| import lombok.Data; | import lombok.Data; | ||||||
| import lombok.NoArgsConstructor; | import lombok.NoArgsConstructor; | ||||||
|  | import org.dromara.common.translation.annotation.Translation; | ||||||
|  | import org.dromara.common.translation.constant.TransConstant; | ||||||
|  |  | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
|  |  | ||||||
| @ -23,6 +25,12 @@ public class QltQualityInspectionGis { | |||||||
|     /** |     /** | ||||||
|      * 巡检类型 |      * 巡检类型 | ||||||
|      */ |      */ | ||||||
|  |     private String inspectionType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 巡检类型名称 | ||||||
|  |      */ | ||||||
|  |     @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "inspectionType", other = "quality_inspection_check_type") | ||||||
|     private String inspectionTypeLabel; |     private String inspectionTypeLabel; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -27,7 +27,12 @@ public class QltQualityInspectionListGisVo implements Serializable { | |||||||
|     private Long count; |     private Long count; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 巡检情况 |      * 整改列表 | ||||||
|  |      */ | ||||||
|  |     private List<QltQualityInspectionGis> correctList; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 整改总数 | ||||||
|      */ |      */ | ||||||
|     private Long correctSituation; |     private Long correctSituation; | ||||||
|  |  | ||||||
|  | |||||||
| @ -36,10 +36,8 @@ import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionListG | |||||||
| import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo; | import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo; | ||||||
| import org.dromara.quality.mapper.QltQualityInspectionMapper; | import org.dromara.quality.mapper.QltQualityInspectionMapper; | ||||||
| import org.dromara.quality.service.IQltQualityInspectionService; | import org.dromara.quality.service.IQltQualityInspectionService; | ||||||
| import org.dromara.system.domain.vo.SysDictDataVo; |  | ||||||
| import org.dromara.system.domain.vo.SysOssVo; | import org.dromara.system.domain.vo.SysOssVo; | ||||||
| import org.dromara.system.service.ISysDictDataService; | import org.dromara.system.service.ISysDictDataService; | ||||||
| import org.dromara.system.service.ISysDictTypeService; |  | ||||||
| import org.dromara.system.service.ISysOssService; | import org.dromara.system.service.ISysOssService; | ||||||
| import org.dromara.system.service.ISysUserService; | import org.dromara.system.service.ISysUserService; | ||||||
| import org.dromara.websocket.ChatServerHandler; | import org.dromara.websocket.ChatServerHandler; | ||||||
| @ -83,9 +81,6 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl<QltQualityInspe | |||||||
|     @Resource |     @Resource | ||||||
|     private ISysDictDataService dictDataService; |     private ISysDictDataService dictDataService; | ||||||
|  |  | ||||||
|     @Resource |  | ||||||
|     private ISysDictTypeService dictTypeService; |  | ||||||
|  |  | ||||||
|     @Resource |     @Resource | ||||||
|     private ChatServerHandler chatServerHandler; |     private ChatServerHandler chatServerHandler; | ||||||
|  |  | ||||||
| @ -148,39 +143,33 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl<QltQualityInspe | |||||||
|         if (CollUtil.isEmpty(qualityInspectionList)) { |         if (CollUtil.isEmpty(qualityInspectionList)) { | ||||||
|             return gisVo; |             return gisVo; | ||||||
|         } |         } | ||||||
|         // 获取字典值 |         // 获取巡检情况 | ||||||
|         List<SysDictDataVo> dictDataVoList = dictTypeService.selectDictDataByType(QltQualityConstant.QUALITY_INSPECTION_CHECK_TYPE); |         List<QltQualityInspectionGis> list = qualityInspectionList.stream() | ||||||
|         Map<String, String> dictDataMap = dictDataVoList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel)); |  | ||||||
|         // 获取最新的检查工单 |  | ||||||
|         List<QltQualityInspection> topList = qualityInspectionList.stream() |  | ||||||
|             .sorted(Comparator.comparing(QltQualityInspection::getCreateTime).reversed()) |  | ||||||
|             .limit(Optional.ofNullable(req.getPageSize()).orElse(20)) |  | ||||||
|             .toList(); |  | ||||||
|         // 转换为 GIS 对象,并设置标签 |  | ||||||
|         List<QltQualityInspectionGis> gisList = topList.stream().map(qualityInspection -> { |  | ||||||
|             QltQualityInspectionGis gis = new QltQualityInspectionGis(); |  | ||||||
|             BeanUtils.copyProperties(qualityInspection, gis); |  | ||||||
|             String label = dictDataMap.get(qualityInspection.getInspectionType()); |  | ||||||
|             if (label != null) { |  | ||||||
|                 gis.setInspectionTypeLabel(label); |  | ||||||
|             } |  | ||||||
|             return gis; |  | ||||||
|         }).toList(); |  | ||||||
|         // 获取整改情况 |  | ||||||
|         long passCount = 0L; |  | ||||||
|         for (QltQualityInspection qualityInspection : qualityInspectionList) { |  | ||||||
|             if ("1".equals(qualityInspection.getIsReply())) { |  | ||||||
|                 if (!qualityInspection.getInspectionStatus().equals(QltQualityInspectionStatusEnum.INFORM.getValue())) { |  | ||||||
|                     passCount++; |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         gisVo.setList(gisList); |  | ||||||
|         gisVo.setCount((long) qualityInspectionList.stream() |  | ||||||
|             .filter(q -> "2".equals(q.getIsReply())) |             .filter(q -> "2".equals(q.getIsReply())) | ||||||
|             .toList() |             .toList().stream().map(q -> { | ||||||
|             .size()); |                 QltQualityInspectionGis gis = new QltQualityInspectionGis(); | ||||||
|         gisVo.setCorrectSituation(passCount); |                 BeanUtils.copyProperties(q, gis); | ||||||
|  |                 return gis; | ||||||
|  |             }).toList(); | ||||||
|  |         gisVo.setList(list.stream() | ||||||
|  |             .sorted(Comparator.comparing(QltQualityInspectionGis::getCreateTime).reversed()) | ||||||
|  |             .limit(Optional.ofNullable(req.getPageSize()).orElse(20)) | ||||||
|  |             .toList()); | ||||||
|  |         gisVo.setCount((long) list.size()); | ||||||
|  |         // 获取整改情况 | ||||||
|  |         List<QltQualityInspectionGis> correctList = qualityInspectionList.stream() | ||||||
|  |             .filter(q -> "1".equals(q.getIsReply())) | ||||||
|  |             .filter(q -> !q.getInspectionStatus().equals(QltQualityInspectionStatusEnum.INFORM.getValue())) | ||||||
|  |             .toList().stream().map(q -> { | ||||||
|  |                 QltQualityInspectionGis gis = new QltQualityInspectionGis(); | ||||||
|  |                 BeanUtils.copyProperties(q, gis); | ||||||
|  |                 return gis; | ||||||
|  |             }).toList(); | ||||||
|  |         gisVo.setCorrectSituation((long) correctList.size()); | ||||||
|  |         gisVo.setCorrectList(correctList.stream() | ||||||
|  |             .sorted(Comparator.comparing(QltQualityInspectionGis::getCreateTime).reversed()) | ||||||
|  |             .limit(Optional.ofNullable(req.getPageSize()).orElse(20)) | ||||||
|  |             .toList()); | ||||||
| //        gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / qualityInspectionList.size())); | //        gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / qualityInspectionList.size())); | ||||||
|         return gisVo; |         return gisVo; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ package org.dromara.safety.controller; | |||||||
| import cn.dev33.satoken.annotation.SaCheckPermission; | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
| import jakarta.annotation.Resource; | import jakarta.annotation.Resource; | ||||||
| import jakarta.servlet.http.HttpServletResponse; | import jakarta.servlet.http.HttpServletResponse; | ||||||
| import jakarta.validation.constraints.NotEmpty; |  | ||||||
| import jakarta.validation.constraints.NotNull; | import jakarta.validation.constraints.NotNull; | ||||||
| import org.dromara.common.core.domain.R; | import org.dromara.common.core.domain.R; | ||||||
| import org.dromara.common.excel.utils.ExcelUtil; | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
| @ -74,7 +73,7 @@ public class HseRecognizeRecordController extends BaseController { | |||||||
|     @SaCheckPermission("safety:recognizeRecord:remove") |     @SaCheckPermission("safety:recognizeRecord:remove") | ||||||
|     @Log(title = "识别记录", businessType = BusinessType.DELETE) |     @Log(title = "识别记录", businessType = BusinessType.DELETE) | ||||||
|     @DeleteMapping("/{id}") |     @DeleteMapping("/{id}") | ||||||
|     public R<Void> remove(@NotEmpty(message = "主键不能为空") |     public R<Void> remove(@NotNull(message = "主键不能为空") | ||||||
|                           @PathVariable Long id) { |                           @PathVariable Long id) { | ||||||
|         return toAjax(recognizeRecordService.deleteById(id)); |         return toAjax(recognizeRecordService.deleteById(id)); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -0,0 +1,43 @@ | |||||||
|  | package org.dromara.safety.domain.vo.safetyinspection; | ||||||
|  |  | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @author lilemy | ||||||
|  |  * @date 2025-10-17 09:26 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | public class HseSafetyInspectionGis implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 3098473090533804934L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 检查类型 | ||||||
|  |      */ | ||||||
|  |     private String checkType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 违章类型 | ||||||
|  |      */ | ||||||
|  |     private String violationType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 巡检结果 | ||||||
|  |      */ | ||||||
|  |     private String inspectionResult; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工单状态(1通知 2整改 3复查) | ||||||
|  |      */ | ||||||
|  |     private String status; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -27,11 +27,21 @@ public class HseSafetyInspectionListGisVo implements Serializable { | |||||||
|      */ |      */ | ||||||
|     private Long teamMeetingCount; |     private Long teamMeetingCount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 安全巡检列表 | ||||||
|  |      */ | ||||||
|  |     private List<HseSafetyInspectionGis> safetyInspectionList; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 安全巡检总数 |      * 安全巡检总数 | ||||||
|      */ |      */ | ||||||
|     private Long safetyInspectionCount; |     private Long safetyInspectionCount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 整改情况列表 | ||||||
|  |      */ | ||||||
|  |     private List<HseSafetyInspectionGis> correctSituationList; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * 整改情况总数 |      * 整改情况总数 | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -35,6 +35,7 @@ import org.dromara.safety.domain.HseSafetyInspection; | |||||||
| import org.dromara.safety.domain.HseTeamMeeting; | import org.dromara.safety.domain.HseTeamMeeting; | ||||||
| import org.dromara.safety.domain.dto.safetyinspection.*; | import org.dromara.safety.domain.dto.safetyinspection.*; | ||||||
| import org.dromara.safety.domain.enums.HseSafetyInspectionStatusEnum; | import org.dromara.safety.domain.enums.HseSafetyInspectionStatusEnum; | ||||||
|  | import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionGis; | ||||||
| import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionListGisVo; | import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionListGisVo; | ||||||
| import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionVo; | import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionVo; | ||||||
| import org.dromara.safety.domain.vo.teammeeting.HseTeamMeetingGis; | import org.dromara.safety.domain.vo.teammeeting.HseTeamMeetingGis; | ||||||
| @ -229,11 +230,36 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl<HseSafetyInspect | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |         List<HseSafetyInspection> passList = safetyInspectionList.stream() | ||||||
|  |             .filter(q -> "1".equals(q.getIsReply())) | ||||||
|  |             .filter(q -> !q.getStatus().equals(HseSafetyInspectionStatusEnum.INFORM.getValue())) | ||||||
|  |             .toList(); | ||||||
|  |         List<HseSafetyInspectionGis> pass = passList.stream().map(p -> { | ||||||
|  |             HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); | ||||||
|  |             gis.setId(p.getId()); | ||||||
|  |             gis.setCheckType(p.getCheckType()); | ||||||
|  |             gis.setViolationType(p.getViolationType()); | ||||||
|  |             gis.setInspectionResult(p.getInspectionResult()); | ||||||
|  |             gis.setStatus(p.getStatus()); | ||||||
|  |             return gis; | ||||||
|  |         }).toList(); | ||||||
|         gisVo.setTeamMeetingCount((long) teamMeetings.size()); |         gisVo.setTeamMeetingCount((long) teamMeetings.size()); | ||||||
|         gisVo.setSafetyInspectionCount((long) safetyInspectionList.stream() |         List<HseSafetyInspectionGis> inspections = safetyInspectionList.stream() | ||||||
|             .filter(q -> "2".equals(q.getIsReply())) |             .filter(q -> "2".equals(q.getIsReply())) | ||||||
|             .toList().size()); |             .toList() | ||||||
|  |             .stream().map(p -> { | ||||||
|  |                 HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); | ||||||
|  |                 gis.setId(p.getId()); | ||||||
|  |                 gis.setCheckType(p.getCheckType()); | ||||||
|  |                 gis.setViolationType(p.getViolationType()); | ||||||
|  |                 gis.setInspectionResult(p.getInspectionResult()); | ||||||
|  |                 gis.setStatus(p.getStatus()); | ||||||
|  |                 return gis; | ||||||
|  |             }).toList(); | ||||||
|  |         gisVo.setSafetyInspectionCount((long) inspections.size()); | ||||||
|  |         gisVo.setSafetyInspectionList(inspections); | ||||||
|         gisVo.setCorrectSituationCount(passCount); |         gisVo.setCorrectSituationCount(passCount); | ||||||
|  |         gisVo.setCorrectSituationList(pass); | ||||||
|         gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / safetyInspectionList.size())); |         gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / safetyInspectionList.size())); | ||||||
|         return gisVo; |         return gisVo; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -404,7 +404,7 @@ public class SysUserController extends BaseController { | |||||||
|     @PutMapping("/fb/{userId}/{contractorId}") |     @PutMapping("/fb/{userId}/{contractorId}") | ||||||
|     public R<Boolean> updateFb(@PathVariable("userId") Long userId, |     public R<Boolean> updateFb(@PathVariable("userId") Long userId, | ||||||
|                                @PathVariable("contractorId") Long contractorId) { |                                @PathVariable("contractorId") Long contractorId) { | ||||||
|         return R.ok(userService.updateFb(userId, contractorId)); |         return R.ok(userService.updateFb(userId, contractorId,true)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -275,11 +275,13 @@ public interface ISysUserService { | |||||||
|  |  | ||||||
|     List<SysUserVo> selectUserListByAppUserType(String appUserType,Long projectId,Long contractorId); |     List<SysUserVo> selectUserListByAppUserType(String appUserType,Long projectId,Long contractorId); | ||||||
|  |  | ||||||
|     Boolean updateFb(Long userId,Long contractorId); |     Boolean updateFb(Long userId,Long contractorId,Boolean isSub); | ||||||
|  |  | ||||||
|     List<SysUser> selectUserByRoleIdAndProjectId(Long roleId,Long projectId); |     List<SysUser> selectUserByRoleIdAndProjectId(Long roleId,Long projectId); | ||||||
|  |  | ||||||
|     List<SysUser> selectUserByRoleIdsAndProjectId(List<Long> roleIds,Long projectId); |     List<SysUser> selectUserByRoleIdsAndProjectId(List<Long> roleIds,Long projectId); | ||||||
|  |  | ||||||
|     String queryNameById(Long id); |     String queryNameById(Long id); | ||||||
|  |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1223,17 +1223,20 @@ public class SysUserServiceImpl implements ISysUserService, UserService { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public Boolean updateFb(Long userId,Long contractorId) { |     public Boolean updateFb(Long userId,Long contractorId,Boolean isSub) { | ||||||
|         SysUser sysUser = baseMapper.selectById(userId); |         SysUser sysUser = baseMapper.selectById(userId); | ||||||
|         sysUser.setContractorId(contractorId); |         sysUser.setContractorId(contractorId); | ||||||
|  |  | ||||||
|         SubConstructionUser constructionUser = constructionUserService.lambdaQuery() |         if(isSub){ | ||||||
|             .eq(SubConstructionUser::getSysUserId, userId) |             SubConstructionUser constructionUser = constructionUserService.lambdaQuery() | ||||||
|             .one(); |                 .eq(SubConstructionUser::getSysUserId, userId) | ||||||
|         if(constructionUser != null){ |                 .one(); | ||||||
|             constructionUser.setContractorId(contractorId); |             if(constructionUser != null){ | ||||||
|             constructionUserService.updateById(constructionUser); |                 constructionUser.setContractorId(contractorId); | ||||||
|  |                 constructionUserService.updateById(constructionUser); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return baseMapper.updateById(sysUser)>0; |         return baseMapper.updateById(sysUser)>0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -0,0 +1,142 @@ | |||||||
|  | package org.dromara.xzd.comprehensive.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 合同管理-合同变更清单对象 xzd_htgl_htbgqd | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_htgl_htbgqd") | ||||||
|  | public class XzdHtglHtbgqd extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 立项(1、承包合同信息,2、承包合同变更,3分包合同信息,4、分包合同变更,5、采购合同信息,6、采购合同变更,7、综合服务信息,8、综合服务变更) | ||||||
|  |      */ | ||||||
|  |     private Long type; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(路径/关联ID) | ||||||
|  |      */ | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 编码 | ||||||
|  |      */ | ||||||
|  |     private String code; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同名称(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String contractName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 报销单号 | ||||||
|  |      */ | ||||||
|  |     private String bidNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计算单位(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String calculateUnit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原数值 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal originalValue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数值 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeValue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原含税单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal originalTaxInclUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxInclUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal originalTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原税率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal originalTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原WBS | ||||||
|  |      */ | ||||||
|  |     private String originalWbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后WBS | ||||||
|  |      */ | ||||||
|  |     private String afterChangeWbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原CBS | ||||||
|  |      */ | ||||||
|  |     private String originalCbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后CBS | ||||||
|  |      */ | ||||||
|  |     private String afterChangeCbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本预算金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal costBudgetAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本预算来源 | ||||||
|  |      */ | ||||||
|  |     private String costBudgetSource; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 已结价税合计 | ||||||
|  |      */ | ||||||
|  |     private Long settledPriceTotal; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,144 @@ | |||||||
|  | package org.dromara.xzd.comprehensive.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 合同管理-合同变更清单业务对象 xzd_htgl_htbgqd | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdHtglHtbgqd.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdHtglHtbgqdBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 立项(1、承包合同信息,2、承包合同变更,3分包合同信息,4、分包合同变更,5、采购合同信息,6、采购合同变更,7、综合服务信息,8、综合服务变更) | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "立项(1、承包合同信息,2、承包合同变更,3分包合同信息,4、分包合同变更,5、采购合同信息,6、采购合同变更,7、综合服务信息,8、综合服务变更)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private Long type; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(路径/关联ID) | ||||||
|  |      */ | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 编码 | ||||||
|  |      */ | ||||||
|  |     private String code; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同名称(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "合同名称(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String contractName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 报销单号 | ||||||
|  |      */ | ||||||
|  |     private String bidNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计算单位(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "计算单位(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String calculateUnit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原数值 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal originalValue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数值 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeValue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原含税单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal originalTaxInclUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxInclUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal originalTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原税率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal originalTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原WBS | ||||||
|  |      */ | ||||||
|  |     private String originalWbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后WBS | ||||||
|  |      */ | ||||||
|  |     private String afterChangeWbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原CBS | ||||||
|  |      */ | ||||||
|  |     private String originalCbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后CBS | ||||||
|  |      */ | ||||||
|  |     private String afterChangeCbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本预算金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal costBudgetAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本预算来源 | ||||||
|  |      */ | ||||||
|  |     private String costBudgetSource; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 已结价税合计 | ||||||
|  |      */ | ||||||
|  |     private Long settledPriceTotal; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,175 @@ | |||||||
|  | package org.dromara.xzd.comprehensive.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 合同管理-合同变更清单视图对象 xzd_htgl_htbgqd | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdHtglHtbgqd.class) | ||||||
|  | public class XzdHtglHtbgqdVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 立项(1、承包合同信息,2、承包合同变更,3分包合同信息,4、分包合同变更,5、采购合同信息,6、采购合同变更,7、综合服务信息,8、综合服务变更) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "立项", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "1=、承包合同信息,2、承包合同变更,3分包合同信息,4、分包合同变更,5、采购合同信息,6、采购合同变更,7、综合服务信息,8、综合服务变更") | ||||||
|  |     private Long type; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(路径/关联ID) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "附件", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "路=径/关联ID") | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "编码") | ||||||
|  |     private String code; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同名称(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "合同名称", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String contractName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 报销单号 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "报销单号") | ||||||
|  |     private String bidNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计算单位(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "计算单位", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String calculateUnit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原数值 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "原数值") | ||||||
|  |     private BigDecimal originalValue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数值 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后数值") | ||||||
|  |     private BigDecimal afterChangeValue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原含税单价 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "原含税单价") | ||||||
|  |     private BigDecimal originalTaxInclUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后含税单价") | ||||||
|  |     private BigDecimal afterChangeTaxInclUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原含税金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "原含税金额") | ||||||
|  |     private BigDecimal originalTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后含税金额") | ||||||
|  |     private BigDecimal afterChangeTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原税率 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "原税率") | ||||||
|  |     private BigDecimal originalTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税率 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后税率") | ||||||
|  |     private BigDecimal afterChangeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原WBS | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "原WBS") | ||||||
|  |     private String originalWbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后WBS | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后WBS") | ||||||
|  |     private String afterChangeWbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 原CBS | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "原CBS") | ||||||
|  |     private String originalCbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后CBS | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后CBS") | ||||||
|  |     private String afterChangeCbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本预算金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "成本预算金额") | ||||||
|  |     private BigDecimal costBudgetAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本预算来源 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "成本预算来源") | ||||||
|  |     private String costBudgetSource; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注") | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 已结价税合计 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "已结价税合计") | ||||||
|  |     private Long settledPriceTotal; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.comprehensive.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd; | ||||||
|  | import org.dromara.xzd.comprehensive.domain.vo.XzdHtglHtbgqdVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 合同管理-合同变更清单Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdHtglHtbgqdMapper extends BaseMapperPlus<XzdHtglHtbgqd, XzdHtglHtbgqdVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | package org.dromara.xzd.comprehensive.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.comprehensive.domain.vo.XzdHtglHtbgqdVo; | ||||||
|  | import org.dromara.xzd.comprehensive.domain.bo.XzdHtglHtbgqdBo; | ||||||
|  | import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 合同管理-合同变更清单Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdHtglHtbgqdService extends IService<XzdHtglHtbgqd>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询合同管理-合同变更清单 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 合同管理-合同变更清单 | ||||||
|  |      */ | ||||||
|  |     XzdHtglHtbgqdVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询合同管理-合同变更清单列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 合同管理-合同变更清单分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdHtglHtbgqdVo> queryPageList(XzdHtglHtbgqdBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的合同管理-合同变更清单列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 合同管理-合同变更清单列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdHtglHtbgqdVo> queryList(XzdHtglHtbgqdBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增合同管理-合同变更清单 | ||||||
|  |      * | ||||||
|  |      * @param bo 合同管理-合同变更清单 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdHtglHtbgqdBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改合同管理-合同变更清单 | ||||||
|  |      * | ||||||
|  |      * @param bo 合同管理-合同变更清单 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdHtglHtbgqdBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除合同管理-合同变更清单信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  | } | ||||||
| @ -0,0 +1,151 @@ | |||||||
|  | package org.dromara.xzd.comprehensive.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.comprehensive.domain.bo.XzdHtglHtbgqdBo; | ||||||
|  | import org.dromara.xzd.comprehensive.domain.vo.XzdHtglHtbgqdVo; | ||||||
|  | import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd; | ||||||
|  | import org.dromara.xzd.comprehensive.mapper.XzdHtglHtbgqdMapper; | ||||||
|  | import org.dromara.xzd.comprehensive.service.IXzdHtglHtbgqdService; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Collection; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 合同管理-合同变更清单Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdHtglHtbgqdServiceImpl extends ServiceImpl<XzdHtglHtbgqdMapper, XzdHtglHtbgqd> implements IXzdHtglHtbgqdService { | ||||||
|  |  | ||||||
|  |     private final XzdHtglHtbgqdMapper baseMapper; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询合同管理-合同变更清单 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 合同管理-合同变更清单 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdHtglHtbgqdVo queryById(Long id){ | ||||||
|  |         return baseMapper.selectVoById(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询合同管理-合同变更清单列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 合同管理-合同变更清单分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdHtglHtbgqdVo> queryPageList(XzdHtglHtbgqdBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdHtglHtbgqd> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdHtglHtbgqdVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的合同管理-合同变更清单列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 合同管理-合同变更清单列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdHtglHtbgqdVo> queryList(XzdHtglHtbgqdBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdHtglHtbgqd> lqw = buildQueryWrapper(bo); | ||||||
|  |         return baseMapper.selectVoList(lqw); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdHtglHtbgqd> buildQueryWrapper(XzdHtglHtbgqdBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdHtglHtbgqd> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdHtglHtbgqd::getId); | ||||||
|  |         lqw.eq(bo.getType() != null, XzdHtglHtbgqd::getType, bo.getType()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), XzdHtglHtbgqd::getAttachment, bo.getAttachment()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getCode()), XzdHtglHtbgqd::getCode, bo.getCode()); | ||||||
|  |         lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdHtglHtbgqd::getContractName, bo.getContractName()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBidNo()), XzdHtglHtbgqd::getBidNo, bo.getBidNo()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getCalculateUnit()), XzdHtglHtbgqd::getCalculateUnit, bo.getCalculateUnit()); | ||||||
|  |         lqw.eq(bo.getOriginalValue() != null, XzdHtglHtbgqd::getOriginalValue, bo.getOriginalValue()); | ||||||
|  |         lqw.eq(bo.getAfterChangeValue() != null, XzdHtglHtbgqd::getAfterChangeValue, bo.getAfterChangeValue()); | ||||||
|  |         lqw.eq(bo.getOriginalTaxInclUnitPrice() != null, XzdHtglHtbgqd::getOriginalTaxInclUnitPrice, bo.getOriginalTaxInclUnitPrice()); | ||||||
|  |         lqw.eq(bo.getAfterChangeTaxInclUnitPrice() != null, XzdHtglHtbgqd::getAfterChangeTaxInclUnitPrice, bo.getAfterChangeTaxInclUnitPrice()); | ||||||
|  |         lqw.eq(bo.getOriginalTaxInclAmount() != null, XzdHtglHtbgqd::getOriginalTaxInclAmount, bo.getOriginalTaxInclAmount()); | ||||||
|  |         lqw.eq(bo.getAfterChangeTaxInclAmount() != null, XzdHtglHtbgqd::getAfterChangeTaxInclAmount, bo.getAfterChangeTaxInclAmount()); | ||||||
|  |         lqw.eq(bo.getOriginalTaxRate() != null, XzdHtglHtbgqd::getOriginalTaxRate, bo.getOriginalTaxRate()); | ||||||
|  |         lqw.eq(bo.getAfterChangeTaxRate() != null, XzdHtglHtbgqd::getAfterChangeTaxRate, bo.getAfterChangeTaxRate()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getOriginalWbs()), XzdHtglHtbgqd::getOriginalWbs, bo.getOriginalWbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getAfterChangeWbs()), XzdHtglHtbgqd::getAfterChangeWbs, bo.getAfterChangeWbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getOriginalCbs()), XzdHtglHtbgqd::getOriginalCbs, bo.getOriginalCbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getAfterChangeCbs()), XzdHtglHtbgqd::getAfterChangeCbs, bo.getAfterChangeCbs()); | ||||||
|  |         lqw.eq(bo.getCostBudgetAmount() != null, XzdHtglHtbgqd::getCostBudgetAmount, bo.getCostBudgetAmount()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getCostBudgetSource()), XzdHtglHtbgqd::getCostBudgetSource, bo.getCostBudgetSource()); | ||||||
|  |         lqw.eq(bo.getSettledPriceTotal() != null, XzdHtglHtbgqd::getSettledPriceTotal, bo.getSettledPriceTotal()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增合同管理-合同变更清单 | ||||||
|  |      * | ||||||
|  |      * @param bo 合同管理-合同变更清单 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean insertByBo(XzdHtglHtbgqdBo bo) { | ||||||
|  |         XzdHtglHtbgqd add = MapstructUtils.convert(bo, XzdHtglHtbgqd.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改合同管理-合同变更清单 | ||||||
|  |      * | ||||||
|  |      * @param bo 合同管理-合同变更清单 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean updateByBo(XzdHtglHtbgqdBo bo) { | ||||||
|  |         XzdHtglHtbgqd update = MapstructUtils.convert(bo, XzdHtglHtbgqd.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdHtglHtbgqd entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除合同管理-合同变更清单信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -20,10 +20,8 @@ import java.time.LocalDateTime; | |||||||
| @EqualsAndHashCode(callSuper = true) | @EqualsAndHashCode(callSuper = true) | ||||||
| @TableName("xzd_subcontract") | @TableName("xzd_subcontract") | ||||||
| public class XzdSubcontract extends BaseEntity { | public class XzdSubcontract extends BaseEntity { | ||||||
|  |  | ||||||
|     @Serial |     @Serial | ||||||
|     private static final long serialVersionUID = 1L; |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * |      * | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/costBudget/cbysJdcbfj") | ||||||
|  | public class XzdCbysJdcbfjController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IXzdCbysJdcbfjService xzdCbysJdcbfjService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-阶段成本分解列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfj:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<XzdCbysJdcbfjVo> list(XzdCbysJdcbfjBo bo, PageQuery pageQuery) { | ||||||
|  |         return xzdCbysJdcbfjService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出立项及成本-成本预算-阶段成本分解列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfj:export") | ||||||
|  |     @Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(XzdCbysJdcbfjBo bo, HttpServletResponse response) { | ||||||
|  |         List<XzdCbysJdcbfjVo> list = xzdCbysJdcbfjService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "立项及成本-成本预算-阶段成本分解", XzdCbysJdcbfjVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取立项及成本-成本预算-阶段成本分解详细信息 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfj:query") | ||||||
|  |     @GetMapping("/{id}") | ||||||
|  |     public R<XzdCbysJdcbfjVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable Long id) { | ||||||
|  |         return R.ok(xzdCbysJdcbfjService.queryById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-阶段成本分解 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfj:add") | ||||||
|  |     @Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysJdcbfjBo bo) { | ||||||
|  |         return toAjax(xzdCbysJdcbfjService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-阶段成本分解 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfj:edit") | ||||||
|  |     @Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysJdcbfjBo bo) { | ||||||
|  |         return toAjax(xzdCbysJdcbfjService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * | ||||||
|  |      * @param ids 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfj:remove") | ||||||
|  |     @Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{ids}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable Long[] ids) { | ||||||
|  |         return toAjax(xzdCbysJdcbfjService.deleteWithValidByIds(List.of(ids), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjFubiaoVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjFubiaoBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjFubiaoService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解附 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/costBudget/cbysJdcbfjFubiao") | ||||||
|  | public class XzdCbysJdcbfjFubiaoController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IXzdCbysJdcbfjFubiaoService xzdCbysJdcbfjFubiaoService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-阶段成本分解附列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfjFubiao:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<XzdCbysJdcbfjFubiaoVo> list(XzdCbysJdcbfjFubiaoBo bo, PageQuery pageQuery) { | ||||||
|  |         return xzdCbysJdcbfjFubiaoService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出立项及成本-成本预算-阶段成本分解附列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfjFubiao:export") | ||||||
|  |     @Log(title = "立项及成本-成本预算-阶段成本分解附", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(XzdCbysJdcbfjFubiaoBo bo, HttpServletResponse response) { | ||||||
|  |         List<XzdCbysJdcbfjFubiaoVo> list = xzdCbysJdcbfjFubiaoService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "立项及成本-成本预算-阶段成本分解附", XzdCbysJdcbfjFubiaoVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取立项及成本-成本预算-阶段成本分解附详细信息 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfjFubiao:query") | ||||||
|  |     @GetMapping("/{id}") | ||||||
|  |     public R<XzdCbysJdcbfjFubiaoVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable Long id) { | ||||||
|  |         return R.ok(xzdCbysJdcbfjFubiaoService.queryById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfjFubiao:add") | ||||||
|  |     @Log(title = "立项及成本-成本预算-阶段成本分解附", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysJdcbfjFubiaoBo bo) { | ||||||
|  |         return toAjax(xzdCbysJdcbfjFubiaoService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfjFubiao:edit") | ||||||
|  |     @Log(title = "立项及成本-成本预算-阶段成本分解附", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysJdcbfjFubiaoBo bo) { | ||||||
|  |         return toAjax(xzdCbysJdcbfjFubiaoService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * | ||||||
|  |      * @param ids 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysJdcbfjFubiao:remove") | ||||||
|  |     @Log(title = "立项及成本-成本预算-阶段成本分解附", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{ids}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable Long[] ids) { | ||||||
|  |         return toAjax(xzdCbysJdcbfjFubiaoService.deleteWithValidByIds(List.of(ids), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysSscbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysSscbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysSscbService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 税收项明细 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/costBudget/cbysSscb") | ||||||
|  | public class XzdCbysSscbController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IXzdCbysSscbService xzdCbysSscbService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询税收项明细列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysSscb:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<XzdCbysSscbVo> list(XzdCbysSscbBo bo, PageQuery pageQuery) { | ||||||
|  |         return xzdCbysSscbService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出税收项明细列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysSscb:export") | ||||||
|  |     @Log(title = "税收项明细", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(XzdCbysSscbBo bo, HttpServletResponse response) { | ||||||
|  |         List<XzdCbysSscbVo> list = xzdCbysSscbService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "税收项明细", XzdCbysSscbVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取税收项明细详细信息 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysSscb:query") | ||||||
|  |     @GetMapping("/{id}") | ||||||
|  |     public R<XzdCbysSscbVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable Long id) { | ||||||
|  |         return R.ok(xzdCbysSscbService.queryById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增税收项明细 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysSscb:add") | ||||||
|  |     @Log(title = "税收项明细", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysSscbBo bo) { | ||||||
|  |         return toAjax(xzdCbysSscbService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改税收项明细 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysSscb:edit") | ||||||
|  |     @Log(title = "税收项明细", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysSscbBo bo) { | ||||||
|  |         return toAjax(xzdCbysSscbService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除税收项明细 | ||||||
|  |      * | ||||||
|  |      * @param ids 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysSscb:remove") | ||||||
|  |     @Log(title = "税收项明细", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{ids}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable Long[] ids) { | ||||||
|  |         return toAjax(xzdCbysSscbService.deleteWithValidByIds(List.of(ids), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-完工成本填报 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/costBudget/cbysWgcbtb") | ||||||
|  | public class XzdCbysWgcbtbController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IXzdCbysWgcbtbService xzdCbysWgcbtbService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-完工成本填报列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtb:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<XzdCbysWgcbtbVo> list(XzdCbysWgcbtbBo bo, PageQuery pageQuery) { | ||||||
|  |         return xzdCbysWgcbtbService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出立项及成本-成本预算-完工成本填报列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtb:export") | ||||||
|  |     @Log(title = "立项及成本-成本预算-完工成本填报", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(XzdCbysWgcbtbBo bo, HttpServletResponse response) { | ||||||
|  |         List<XzdCbysWgcbtbVo> list = xzdCbysWgcbtbService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "立项及成本-成本预算-完工成本填报", XzdCbysWgcbtbVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取立项及成本-成本预算-完工成本填报详细信息 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtb:query") | ||||||
|  |     @GetMapping("/{id}") | ||||||
|  |     public R<XzdCbysWgcbtbVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable Long id) { | ||||||
|  |         return R.ok(xzdCbysWgcbtbService.queryById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-完工成本填报 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtb:add") | ||||||
|  |     @Log(title = "立项及成本-成本预算-完工成本填报", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysWgcbtbBo bo) { | ||||||
|  |         return toAjax(xzdCbysWgcbtbService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-完工成本填报 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtb:edit") | ||||||
|  |     @Log(title = "立项及成本-成本预算-完工成本填报", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysWgcbtbBo bo) { | ||||||
|  |         return toAjax(xzdCbysWgcbtbService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除立项及成本-成本预算-完工成本填报 | ||||||
|  |      * | ||||||
|  |      * @param ids 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtb:remove") | ||||||
|  |     @Log(title = "立项及成本-成本预算-完工成本填报", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{ids}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable Long[] ids) { | ||||||
|  |         return toAjax(xzdCbysWgcbtbService.deleteWithValidByIds(List.of(ids), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbFubiaoVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbFubiaoBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-附 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/costBudget/cbysWgcbtbFubiao") | ||||||
|  | public class XzdCbysWgcbtbFubiaoController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IXzdCbysWgcbtbFubiaoService xzdCbysWgcbtbFubiaoService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-附列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtbFubiao:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<XzdCbysWgcbtbFubiaoVo> list(XzdCbysWgcbtbFubiaoBo bo, PageQuery pageQuery) { | ||||||
|  |         return xzdCbysWgcbtbFubiaoService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出立项及成本-成本预算-附列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtbFubiao:export") | ||||||
|  |     @Log(title = "立项及成本-成本预算-附", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(XzdCbysWgcbtbFubiaoBo bo, HttpServletResponse response) { | ||||||
|  |         List<XzdCbysWgcbtbFubiaoVo> list = xzdCbysWgcbtbFubiaoService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "立项及成本-成本预算-附", XzdCbysWgcbtbFubiaoVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取立项及成本-成本预算-附详细信息 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtbFubiao:query") | ||||||
|  |     @GetMapping("/{id}") | ||||||
|  |     public R<XzdCbysWgcbtbFubiaoVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable Long id) { | ||||||
|  |         return R.ok(xzdCbysWgcbtbFubiaoService.queryById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-附 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtbFubiao:add") | ||||||
|  |     @Log(title = "立项及成本-成本预算-附", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysWgcbtbFubiaoBo bo) { | ||||||
|  |         return toAjax(xzdCbysWgcbtbFubiaoService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-附 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtbFubiao:edit") | ||||||
|  |     @Log(title = "立项及成本-成本预算-附", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysWgcbtbFubiaoBo bo) { | ||||||
|  |         return toAjax(xzdCbysWgcbtbFubiaoService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除立项及成本-成本预算-附 | ||||||
|  |      * | ||||||
|  |      * @param ids 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysWgcbtbFubiao:remove") | ||||||
|  |     @Log(title = "立项及成本-成本预算-附", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{ids}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable Long[] ids) { | ||||||
|  |         return toAjax(xzdCbysWgcbtbFubiaoService.deleteWithValidByIds(List.of(ids), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/costBudget/cbysZjhcb") | ||||||
|  | public class XzdCbysZjhcbController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IXzdCbysZjhcbService xzdCbysZjhcbService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-总体计划成本列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZjhcb:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<XzdCbysZjhcbVo> list(XzdCbysZjhcbBo bo, PageQuery pageQuery) { | ||||||
|  |         return xzdCbysZjhcbService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出立项及成本-成本预算-总体计划成本列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZjhcb:export") | ||||||
|  |     @Log(title = "立项及成本-成本预算-总体计划成本", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(XzdCbysZjhcbBo bo, HttpServletResponse response) { | ||||||
|  |         List<XzdCbysZjhcbVo> list = xzdCbysZjhcbService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "立项及成本-成本预算-总体计划成本", XzdCbysZjhcbVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取立项及成本-成本预算-总体计划成本详细信息 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZjhcb:query") | ||||||
|  |     @GetMapping("/{id}") | ||||||
|  |     public R<XzdCbysZjhcbVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable Long id) { | ||||||
|  |         return R.ok(xzdCbysZjhcbService.queryById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-总体计划成本 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZjhcb:add") | ||||||
|  |     @Log(title = "立项及成本-成本预算-总体计划成本", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysZjhcbBo bo) { | ||||||
|  |         return toAjax(xzdCbysZjhcbService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-总体计划成本 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZjhcb:edit") | ||||||
|  |     @Log(title = "立项及成本-成本预算-总体计划成本", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysZjhcbBo bo) { | ||||||
|  |         return toAjax(xzdCbysZjhcbService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除立项及成本-成本预算-总体计划成本 | ||||||
|  |      * | ||||||
|  |      * @param ids 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZjhcb:remove") | ||||||
|  |     @Log(title = "立项及成本-成本预算-总体计划成本", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{ids}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable Long[] ids) { | ||||||
|  |         return toAjax(xzdCbysZjhcbService.deleteWithValidByIds(List.of(ids), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZtjhcbBgjlVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZtjhcbBgjlBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZtjhcbBgjlService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-变更记录 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/costBudget/cbysZtjhcbBgjl") | ||||||
|  | public class XzdCbysZtjhcbBgjlController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IXzdCbysZtjhcbBgjlService xzdCbysZtjhcbBgjlService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-变更记录列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZtjhcbBgjl:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<XzdCbysZtjhcbBgjlVo> list(XzdCbysZtjhcbBgjlBo bo, PageQuery pageQuery) { | ||||||
|  |         return xzdCbysZtjhcbBgjlService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出立项及成本-成本预算-变更记录列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZtjhcbBgjl:export") | ||||||
|  |     @Log(title = "立项及成本-成本预算-变更记录", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(XzdCbysZtjhcbBgjlBo bo, HttpServletResponse response) { | ||||||
|  |         List<XzdCbysZtjhcbBgjlVo> list = xzdCbysZtjhcbBgjlService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "立项及成本-成本预算-变更记录", XzdCbysZtjhcbBgjlVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取立项及成本-成本预算-变更记录详细信息 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZtjhcbBgjl:query") | ||||||
|  |     @GetMapping("/{id}") | ||||||
|  |     public R<XzdCbysZtjhcbBgjlVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable Long id) { | ||||||
|  |         return R.ok(xzdCbysZtjhcbBgjlService.queryById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-变更记录 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZtjhcbBgjl:add") | ||||||
|  |     @Log(title = "立项及成本-成本预算-变更记录", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysZtjhcbBgjlBo bo) { | ||||||
|  |         return toAjax(xzdCbysZtjhcbBgjlService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-变更记录 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZtjhcbBgjl:edit") | ||||||
|  |     @Log(title = "立项及成本-成本预算-变更记录", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysZtjhcbBgjlBo bo) { | ||||||
|  |         return toAjax(xzdCbysZtjhcbBgjlService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除立项及成本-成本预算-变更记录 | ||||||
|  |      * | ||||||
|  |      * @param ids 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("costBudget:cbysZtjhcbBgjl:remove") | ||||||
|  |     @Log(title = "立项及成本-成本预算-变更记录", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{ids}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable Long[] ids) { | ||||||
|  |         return toAjax(xzdCbysZtjhcbBgjlService.deleteWithValidByIds(List.of(ids), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,108 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.time.LocalDate; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解对象 xzd_cbys_jdcbfj | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_cbys_jdcbfj") | ||||||
|  | public class XzdCbysJdcbfj extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     private Long projectId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类 | ||||||
|  |      */ | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总体计划成本(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private Long totalPlanCost; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     private Long projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开工日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate startDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 竣工日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate completionDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     private Long year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 币种 | ||||||
|  |      */ | ||||||
|  |     private String currency; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 汇率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal exchangeRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,122 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解附对象 xzd_cbys_jdcbfj_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_cbys_jdcbfj_fubiao") | ||||||
|  | public class XzdCbysJdcbfjFubiao extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主表id | ||||||
|  |      */ | ||||||
|  |     private Long mainTableId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码 | ||||||
|  |      */ | ||||||
|  |     private String budgetItemCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项名称 | ||||||
|  |      */ | ||||||
|  |     private String budgetItemName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * BOQ编码 | ||||||
|  |      */ | ||||||
|  |     private String boq; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码 | ||||||
|  |      */ | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码 | ||||||
|  |      */ | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位 | ||||||
|  |      */ | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal quantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal amount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,82 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 税收项明细对象 xzd_cbys_sscb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_cbys_sscb") | ||||||
|  | public class XzdCbysSscb extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联主单据的ID(外键,指向对应主表,如预算/付款单据表等) | ||||||
|  |      */ | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税收项(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxableAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 应纳税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxPayable; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 可抵税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxDeductible; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 应缴税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxDue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,112 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.time.LocalDate; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-完工成本填报对象 xzd_cbys_wgcbtb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_cbys_wgcbtb") | ||||||
|  | public class XzdCbysWgcbtb extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID,自增 | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类 | ||||||
|  |      */ | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     private Long projectId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     private Long projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开工日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate startDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 竣工日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate completionDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     private Integer year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 月份 | ||||||
|  |      */ | ||||||
|  |     private Integer month; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 统计周期 | ||||||
|  |      */ | ||||||
|  |     private String statCycle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 来源单据类型 | ||||||
|  |      */ | ||||||
|  |     private String sourceDocType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用按科目属性分页签编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     private Long enableAccountAttrTab; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,127 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-附对象 xzd_cbys_wgcbtb_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_cbys_wgcbtb_fubiao") | ||||||
|  | public class XzdCbysWgcbtbFubiao extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联单据主表的ID(外键,指向单据基础信息表等主表) | ||||||
|  |      */ | ||||||
|  |     private Long mainDocId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 类型(1、成本明细,2、) | ||||||
|  |      */ | ||||||
|  |     private Integer type; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码 | ||||||
|  |      */ | ||||||
|  |     private String budgetItemCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项标题 | ||||||
|  |      */ | ||||||
|  |     private String budgetItemTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * BOQ编码 | ||||||
|  |      */ | ||||||
|  |     private String boq; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码 | ||||||
|  |      */ | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码 | ||||||
|  |      */ | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位 | ||||||
|  |      */ | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计划数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal planQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计计划数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal cumulativePlanQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计划金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal planAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计计划金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal cumulativePlanAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 完工数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal completedQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计完工数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal cumulativeCompletedQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 完工金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal completedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计完工金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal cumulativeCompletedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,148 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.time.LocalDate; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本对象 xzd_cbys_zjhcb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_cbys_zjhcb") | ||||||
|  | public class XzdCbysZjhcb extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private Long projectId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总不含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal totalTaxExclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal totalTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal totalTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     private Long projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 执行项目经理 | ||||||
|  |      */ | ||||||
|  |     private Long execProjectManager; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 承包合同金额(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal contractAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税务成本 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxCost; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal profitRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal profitAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用成本预控模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     private Long enableCostPrecontrol; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本控制模式(如WBS+CBS) | ||||||
|  |      */ | ||||||
|  |     private String costControlMode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 外币含税类型 | ||||||
|  |      */ | ||||||
|  |     private String foreignCurrencyTaxType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 禁止标识 | ||||||
|  |      */ | ||||||
|  |     private String forbidFlag; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用按科目属性分页签编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     private Long enableAccountAttrTab; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用物料组编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     private Long enableMaterialGroup; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,182 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本附对象 xzd_cbys_zjhcb_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_cbys_zjhcb_fubiao") | ||||||
|  | public class XzdCbysZjhcbFubiao extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联主单据的ID(外键,指向对应主表,如预算/付款单据表等) | ||||||
|  |      */ | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码(budgetCode) | ||||||
|  |      */ | ||||||
|  |     private String budgetCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项名称(budgetName) | ||||||
|  |      */ | ||||||
|  |     private String budgetName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码(wbs) | ||||||
|  |      */ | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码(cbs) | ||||||
|  |      */ | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位(unit) | ||||||
|  |      */ | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数量(quantity) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal quantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价(unitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 含税单价(taxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率(taxRate,如13%表示为0.1300) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税额(taxAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 不含税金额(taxExcludedAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxExcludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 含税金额(taxIncludedAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxIncludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更数量(changeQuantity) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更单价(changeUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价(changeTaxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更税率(changeTaxRate) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更税额(changeTaxAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数量(afterChangeQuantity) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后单价(afterChangeUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价(afterChangeTaxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税率(afterChangeTaxRate) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税额(afterChangeTaxAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后不含税金额(afterChangeTaxExcludedAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxExcludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税金额(afterChangeTaxIncludedAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxIncludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注(remarks) | ||||||
|  |      */ | ||||||
|  |     private String remarks; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同模式(contractMode) | ||||||
|  |      */ | ||||||
|  |     private String contractMode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 中标预算收入(bidBudgetIncome) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal bidBudgetIncome; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润率(profitRate,如20%表示为20.00) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal profitRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(attachment,存储附件路径或关联ID) | ||||||
|  |      */ | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,103 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.time.LocalDate; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-变更记录对象 xzd_cbys_ztjhcb_bgjl | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("xzd_cbys_ztjhcb_bgjl") | ||||||
|  | public class XzdCbysZtjhcbBgjl extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 行号 | ||||||
|  |      */ | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(关联附件表可按需调整为外键) | ||||||
|  |      */ | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码 | ||||||
|  |      */ | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题 | ||||||
|  |      */ | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     private String projectName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更根源 | ||||||
|  |      */ | ||||||
|  |     private String changeSource; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更不含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxExclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 核准人 | ||||||
|  |      */ | ||||||
|  |     private String approver; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     private String projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,118 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解业务对象 xzd_cbys_jdcbfj | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdCbysJdcbfj.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdCbysJdcbfjBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "单据编码(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "单据标题(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     private Long projectId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类 | ||||||
|  |      */ | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总体计划成本(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "总体计划成本(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private Long totalPlanCost; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     private Long projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开工日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate startDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 竣工日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate completionDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     private Long year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 币种 | ||||||
|  |      */ | ||||||
|  |     private String currency; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 汇率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal exchangeRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 副表数据 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysJdcbfjFubiao>  xzdCbysJdcbfjFubiao; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,121 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解附业务对象 xzd_cbys_jdcbfj_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdCbysJdcbfjFubiao.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdCbysJdcbfjFubiaoBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主表id | ||||||
|  |      */ | ||||||
|  |     private Long mainTableId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码 | ||||||
|  |      */ | ||||||
|  |     private String budgetItemCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项名称 | ||||||
|  |      */ | ||||||
|  |     private String budgetItemName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * BOQ编码 | ||||||
|  |      */ | ||||||
|  |     private String boq; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码 | ||||||
|  |      */ | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码 | ||||||
|  |      */ | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位 | ||||||
|  |      */ | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal quantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal amount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,82 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 税收项明细业务对象 xzd_cbys_sscb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdCbysSscb.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdCbysSscbBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联主单据的ID(外键,指向对应主表,如预算/付款单据表等) | ||||||
|  |      */ | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税收项(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "税收项(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxableAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 应纳税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxPayable; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 可抵税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxDeductible; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 应缴税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxDue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,115 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; | ||||||
|  |  | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-完工成本填报业务对象 xzd_cbys_wgcbtb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdCbysWgcbtb.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdCbysWgcbtbBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID,自增 | ||||||
|  |      */ | ||||||
|  |         private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "单据标题(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类 | ||||||
|  |      */ | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     private Long projectId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     private Long projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开工日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate startDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 竣工日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate completionDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     private Integer year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 月份 | ||||||
|  |      */ | ||||||
|  |     private Integer month; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 统计周期 | ||||||
|  |      */ | ||||||
|  |     private String statCycle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 来源单据类型 | ||||||
|  |      */ | ||||||
|  |     private String sourceDocType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用按科目属性分页签编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     private Long enableAccountAttrTab; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |     private List<XzdCbysWgcbtbFubiao>  xzdCbysWgcbtbFubiao; | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,126 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-附业务对象 xzd_cbys_wgcbtb_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdCbysWgcbtbFubiao.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdCbysWgcbtbFubiaoBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联单据主表的ID(外键,指向单据基础信息表等主表) | ||||||
|  |      */ | ||||||
|  |     private Long mainDocId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 类型(1、成本明细,2、) | ||||||
|  |      */ | ||||||
|  |     private Integer type; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码 | ||||||
|  |      */ | ||||||
|  |     private String budgetItemCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项标题 | ||||||
|  |      */ | ||||||
|  |     private String budgetItemTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * BOQ编码 | ||||||
|  |      */ | ||||||
|  |     private String boq; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码 | ||||||
|  |      */ | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码 | ||||||
|  |      */ | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位 | ||||||
|  |      */ | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计划数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal planQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计计划数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal cumulativePlanQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计划金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal planAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计计划金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal cumulativePlanAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 完工数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal completedQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计完工数量 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal cumulativeCompletedQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 完工金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal completedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计完工金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal cumulativeCompletedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,167 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.*; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本业务对象 xzd_cbys_zjhcb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdCbysZjhcb.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdCbysZjhcbBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "单据编码(带*,必填)不能为空", groups = { EditGroup.class }) | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "单据标题(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "工程项目(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private Long projectId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "预算分类(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总不含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal totalTaxExclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal totalTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal totalTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     private Long projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 执行项目经理 | ||||||
|  |      */ | ||||||
|  |     private Long execProjectManager; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 承包合同金额(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "承包合同金额(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private BigDecimal contractAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税务成本 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxCost; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal profitRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal profitAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用成本预控模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     private Long enableCostPrecontrol; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本控制模式(如WBS+CBS) | ||||||
|  |      */ | ||||||
|  |     private String costControlMode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 外币含税类型 | ||||||
|  |      */ | ||||||
|  |     private String foreignCurrencyTaxType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 禁止标识 | ||||||
|  |      */ | ||||||
|  |     private String forbidFlag; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用按科目属性分页签编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     private Long enableAccountAttrTab; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用物料组编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     private Long enableMaterialGroup; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更记录 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysZtjhcbBgjl>  xzdCbysZtjhcbBgjl; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本明细 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysZjhcbFubiao> xzdCbysWgcbtbFubiao; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税收成本 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysSscb> xzdCbysSscb; | ||||||
|  | } | ||||||
| @ -0,0 +1,183 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本附业务对象 xzd_cbys_zjhcb_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdCbysZjhcbFubiao.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdCbysZjhcbFubiaoBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联主单据的ID(外键,指向对应主表,如预算/付款单据表等) | ||||||
|  |      */ | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码(budgetCode) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "预算项编码(budgetCode)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String budgetCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项名称(budgetName) | ||||||
|  |      */ | ||||||
|  |     @NotBlank(message = "预算项名称(budgetName)不能为空", groups = { AddGroup.class, EditGroup.class }) | ||||||
|  |     private String budgetName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码(wbs) | ||||||
|  |      */ | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码(cbs) | ||||||
|  |      */ | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位(unit) | ||||||
|  |      */ | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数量(quantity) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal quantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价(unitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 含税单价(taxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率(taxRate,如13%表示为0.1300) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税额(taxAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 不含税金额(taxExcludedAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxExcludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 含税金额(taxIncludedAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxIncludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更数量(changeQuantity) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更单价(changeUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价(changeTaxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更税率(changeTaxRate) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更税额(changeTaxAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数量(afterChangeQuantity) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后单价(afterChangeUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价(afterChangeTaxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税率(afterChangeTaxRate) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税额(afterChangeTaxAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后不含税金额(afterChangeTaxExcludedAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxExcludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税金额(afterChangeTaxIncludedAmount) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal afterChangeTaxIncludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注(remarks) | ||||||
|  |      */ | ||||||
|  |     private String remarks; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同模式(contractMode) | ||||||
|  |      */ | ||||||
|  |     private String contractMode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 中标预算收入(bidBudgetIncome) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal bidBudgetIncome; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润率(profitRate,如20%表示为20.00) | ||||||
|  |      */ | ||||||
|  |     private BigDecimal profitRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(attachment,存储附件路径或关联ID) | ||||||
|  |      */ | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,99 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.time.LocalDate; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-变更记录业务对象 xzd_cbys_ztjhcb_bgjl | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = XzdCbysZtjhcbBgjl.class, reverseConvertGenerate = false) | ||||||
|  | public class XzdCbysZtjhcbBgjlBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(关联附件表可按需调整为外键) | ||||||
|  |      */ | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码 | ||||||
|  |      */ | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题 | ||||||
|  |      */ | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     private String projectName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更根源 | ||||||
|  |      */ | ||||||
|  |     private String changeSource; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更不含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxExclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更含税金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal changeTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 核准人 | ||||||
|  |      */ | ||||||
|  |     private String approver; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     private String projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,147 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解附视图对象 xzd_cbys_jdcbfj_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdCbysJdcbfjFubiao.class) | ||||||
|  | public class XzdCbysJdcbfjFubiaoVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主表id | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主表id") | ||||||
|  |     private Long mainTableId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算项编码") | ||||||
|  |     private String budgetItemCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算项名称") | ||||||
|  |     private String budgetItemName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * BOQ编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "BOQ编码") | ||||||
|  |     private String boq; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "WBS编码") | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "CBS编码") | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单位") | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数量 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "数量") | ||||||
|  |     private BigDecimal quantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单价") | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "金额") | ||||||
|  |     private BigDecimal amount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更数量 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更数量") | ||||||
|  |     private BigDecimal changeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更金额") | ||||||
|  |     private BigDecimal changeAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数量 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后数量") | ||||||
|  |     private BigDecimal afterChangeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后单价 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后单价") | ||||||
|  |     private BigDecimal afterChangeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后金额") | ||||||
|  |     private BigDecimal afterChangeAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注") | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据引用") | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "文件ID") | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,142 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解视图对象 xzd_cbys_jdcbfj | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdCbysJdcbfj.class) | ||||||
|  | public class XzdCbysJdcbfjVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据编码", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据标题", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据日期") | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "工程项目") | ||||||
|  |     private Long projectId; | ||||||
|  |     private String projectName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算分类") | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总体计划成本(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "总体计划成本", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private Long totalPlanCost; | ||||||
|  |     private String totalPlanCostName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "项目责任人") | ||||||
|  |     private Long projectLeader; | ||||||
|  |     private String projectLeaderName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开工日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "开工日期") | ||||||
|  |     private LocalDate startDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 竣工日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "竣工日期") | ||||||
|  |     private LocalDate completionDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "年度") | ||||||
|  |     private Long year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 币种 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "币种") | ||||||
|  |     private String currency; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 汇率 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "汇率") | ||||||
|  |     private BigDecimal exchangeRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注") | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据引用") | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "文件ID") | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 副表数据 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysJdcbfjFubiao> xzdCbysJdcbfjFubiao; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,101 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 税收项明细视图对象 xzd_cbys_sscb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdCbysSscb.class) | ||||||
|  | public class XzdCbysSscbVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联主单据的ID(外键,指向对应主表,如预算/付款单据表等) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "关联主单据的ID", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "外=键,指向对应主表,如预算/付款单据表等") | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税收项(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "税收项", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计税金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "计税金额") | ||||||
|  |     private BigDecimal taxableAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "税率") | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 应纳税额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "应纳税额") | ||||||
|  |     private BigDecimal taxPayable; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 可抵税额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "可抵税额") | ||||||
|  |     private BigDecimal taxDeductible; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 应缴税额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "应缴税额") | ||||||
|  |     private BigDecimal taxDue; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注") | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据引用") | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "文件ID") | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,153 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-附视图对象 xzd_cbys_wgcbtb_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdCbysWgcbtbFubiao.class) | ||||||
|  | public class XzdCbysWgcbtbFubiaoVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联单据主表的ID(外键,指向单据基础信息表等主表) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "关联单据主表的ID", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "外=键,指向单据基础信息表等主表") | ||||||
|  |     private Long mainDocId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 类型(1、成本明细,2、) | ||||||
|  |      */ | ||||||
|  |     private Integer type; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算项编码") | ||||||
|  |     private String budgetItemCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项标题 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算项标题") | ||||||
|  |     private String budgetItemTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * BOQ编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "BOQ编码") | ||||||
|  |     private String boq; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "WBS编码") | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "CBS编码") | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单位") | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单价") | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计划数量 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "计划数量") | ||||||
|  |     private BigDecimal planQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计计划数量 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "累计计划数量") | ||||||
|  |     private BigDecimal cumulativePlanQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 计划金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "计划金额") | ||||||
|  |     private BigDecimal planAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计计划金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "累计计划金额") | ||||||
|  |     private BigDecimal cumulativePlanAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 完工数量 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "完工数量") | ||||||
|  |     private BigDecimal completedQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计完工数量 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "累计完工数量") | ||||||
|  |     private BigDecimal cumulativeCompletedQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 完工金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "完工金额") | ||||||
|  |     private BigDecimal completedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 累计完工金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "累计完工金额") | ||||||
|  |     private BigDecimal cumulativeCompletedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据引用") | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "文件ID") | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,157 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; | ||||||
|  |  | ||||||
|  | import org.dromara.common.translation.annotation.Translation; | ||||||
|  | import org.dromara.common.translation.constant.TransConstant; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-完工成本填报视图对象 xzd_cbys_wgcbtb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdCbysWgcbtb.class) | ||||||
|  | public class XzdCbysWgcbtbVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID,自增 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID,自增") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据编码", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据标题", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据日期") | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算分类") | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "工程项目") | ||||||
|  |     private Long projectId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "工程项目名称") | ||||||
|  |     private String projectName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "项目责任人") | ||||||
|  |     private Long projectLeader; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "项目责任人名称") | ||||||
|  |     @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "projectLeader") | ||||||
|  |     private String projectLeaderName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开工日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "开工日期") | ||||||
|  |     private LocalDate startDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 竣工日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "竣工日期") | ||||||
|  |     private LocalDate completionDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "年度") | ||||||
|  |     private Integer year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 月份 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "月份") | ||||||
|  |     private Integer month; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 统计周期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "统计周期") | ||||||
|  |     private String statCycle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 来源单据类型 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "来源单据类型") | ||||||
|  |     private String sourceDocType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注") | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用按科目属性分页签编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "启用按科目属性分页签编制模式", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "0==未启用,1=启用") | ||||||
|  |     private Long enableAccountAttrTab; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据引用") | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "文件ID") | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |     private List<XzdCbysWgcbtbFubiao> xzdCbysWgcbtbFubiao; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,247 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本附视图对象 xzd_cbys_zjhcb_fubiao | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdCbysZjhcbFubiao.class) | ||||||
|  | public class XzdCbysZjhcbFubiaoVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 关联主单据的ID(外键,指向对应主表,如预算/付款单据表等) | ||||||
|  |      */ | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项编码(budgetCode) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算项编码", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "b=udgetCode") | ||||||
|  |     private String budgetCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算项名称(budgetName) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算项名称", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "b=udgetName") | ||||||
|  |     private String budgetName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * WBS编码(wbs) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "WBS编码", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "w=bs") | ||||||
|  |     private String wbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * CBS编码(cbs) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "CBS编码", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "c=bs") | ||||||
|  |     private String cbs; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单位(unit) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单位", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "u=nit") | ||||||
|  |     private String unit; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数量(quantity) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "数量", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "q=uantity") | ||||||
|  |     private BigDecimal quantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单价(unitPrice) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单价", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "u=nitPrice") | ||||||
|  |     private BigDecimal unitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 含税单价(taxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "含税单价", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "t=axIncludedUnitPrice") | ||||||
|  |     private BigDecimal taxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率(taxRate,如13%表示为0.1300) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "税率", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "t=axRate,如13%表示为0.1300") | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税额(taxAmount) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "税额", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "t=axAmount") | ||||||
|  |     private BigDecimal taxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 不含税金额(taxExcludedAmount) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "不含税金额", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "t=axExcludedAmount") | ||||||
|  |     private BigDecimal taxExcludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 含税金额(taxIncludedAmount) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "含税金额", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "t=axIncludedAmount") | ||||||
|  |     private BigDecimal taxIncludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更数量(changeQuantity) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更数量", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "c=hangeQuantity") | ||||||
|  |     private BigDecimal changeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更单价(changeUnitPrice) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更单价", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "c=hangeUnitPrice") | ||||||
|  |     private BigDecimal changeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价(changeTaxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后含税单价", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "c=hangeTaxIncludedUnitPrice") | ||||||
|  |     private BigDecimal changeTaxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更税率(changeTaxRate) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更税率", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "c=hangeTaxRate") | ||||||
|  |     private BigDecimal changeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更税额(changeTaxAmount) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更税额", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "c=hangeTaxAmount") | ||||||
|  |     private BigDecimal changeTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后数量(afterChangeQuantity) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后数量", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "a=fterChangeQuantity") | ||||||
|  |     private BigDecimal afterChangeQuantity; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后单价(afterChangeUnitPrice) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后单价", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "a=fterChangeUnitPrice") | ||||||
|  |     private BigDecimal afterChangeUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税单价(afterChangeTaxIncludedUnitPrice) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后含税单价", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "a=fterChangeTaxIncludedUnitPrice") | ||||||
|  |     private BigDecimal afterChangeTaxIncludedUnitPrice; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税率(afterChangeTaxRate) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后税率", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "a=fterChangeTaxRate") | ||||||
|  |     private BigDecimal afterChangeTaxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后税额(afterChangeTaxAmount) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后税额", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "a=fterChangeTaxAmount") | ||||||
|  |     private BigDecimal afterChangeTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后不含税金额(afterChangeTaxExcludedAmount) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后不含税金额", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "a=fterChangeTaxExcludedAmount") | ||||||
|  |     private BigDecimal afterChangeTaxExcludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更后含税金额(afterChangeTaxIncludedAmount) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更后含税金额", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "a=fterChangeTaxIncludedAmount") | ||||||
|  |     private BigDecimal afterChangeTaxIncludedAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注(remarks) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "r=emarks") | ||||||
|  |     private String remarks; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同模式(contractMode) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "合同模式", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "c=ontractMode") | ||||||
|  |     private String contractMode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 中标预算收入(bidBudgetIncome) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "中标预算收入", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "b=idBudgetIncome") | ||||||
|  |     private BigDecimal bidBudgetIncome; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润率(profitRate,如20%表示为20.00) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "利润率", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "p=rofitRate,如20%表示为20.00") | ||||||
|  |     private BigDecimal profitRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(attachment,存储附件路径或关联ID) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "附件", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "a=ttachment,存储附件路径或关联ID") | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,205 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.*; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本视图对象 xzd_cbys_zjhcb | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdCbysZjhcb.class) | ||||||
|  | public class XzdCbysZjhcbVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据编码", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据标题", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据日期") | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "工程项目", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private Long projectId; | ||||||
|  |     private String projectName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 预算分类(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "预算分类", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private String budgetCategory; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总不含税金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "总不含税金额") | ||||||
|  |     private BigDecimal totalTaxExclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总税额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "总税额") | ||||||
|  |     private BigDecimal totalTaxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 总含税金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "总含税金额") | ||||||
|  |     private BigDecimal totalTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "项目责任人") | ||||||
|  |     private Long projectLeader; | ||||||
|  |     private String projectLeaderName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 执行项目经理 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "执行项目经理") | ||||||
|  |     private Long execProjectManager; | ||||||
|  |     private String execProjectManagerName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 承包合同金额(带*,必填) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "承包合同金额", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "带=*,必填") | ||||||
|  |     private BigDecimal contractAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税务成本 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "税务成本") | ||||||
|  |     private BigDecimal taxCost; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润率 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "利润率") | ||||||
|  |     private BigDecimal profitRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 利润金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "利润金额") | ||||||
|  |     private BigDecimal profitAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注") | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用成本预控模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "启用成本预控模式", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "0==未启用,1=启用") | ||||||
|  |     private Long enableCostPrecontrol; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本控制模式(如WBS+CBS) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "成本控制模式", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "如=WBS+CBS") | ||||||
|  |     private String costControlMode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 外币含税类型 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "外币含税类型") | ||||||
|  |     private String foreignCurrencyTaxType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 禁止标识 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "禁止标识") | ||||||
|  |     private String forbidFlag; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用按科目属性分页签编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "启用按科目属性分页签编制模式", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "0==未启用,1=启用") | ||||||
|  |     private Long enableAccountAttrTab; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 启用物料组编制模式(0=未启用,1=启用) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "启用物料组编制模式", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "0==未启用,1=启用") | ||||||
|  |     private Long enableMaterialGroup; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据引用") | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "文件ID") | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更记录 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysZtjhcbBgjl> xzdCbysZtjhcbBgjl; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 成本明细 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysZjhcbFubiao> xzdCbysWgcbtbFubiao; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税收成本 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysSscb> xzdCbysSscb; | ||||||
|  | } | ||||||
| @ -0,0 +1,121 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-变更记录视图对象 xzd_cbys_ztjhcb_bgjl | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = XzdCbysZtjhcbBgjl.class) | ||||||
|  | public class XzdCbysZtjhcbBgjlVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     private Long mainDocumentId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 附件(关联附件表可按需调整为外键) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "附件", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "关=联附件表可按需调整为外键") | ||||||
|  |     private String attachment; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据编码") | ||||||
|  |     private String docCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据标题 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据标题") | ||||||
|  |     private String docTitle; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据日期") | ||||||
|  |     private LocalDate docDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 工程项目 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "工程项目") | ||||||
|  |     private String projectName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更根源 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更根源") | ||||||
|  |     private String changeSource; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更不含税金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更不含税金额") | ||||||
|  |     private BigDecimal changeTaxExclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 变更含税金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "变更含税金额") | ||||||
|  |     private BigDecimal changeTaxInclAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 核准人 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "核准人") | ||||||
|  |     private String approver; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目责任人 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "项目责任人") | ||||||
|  |     private String projectLeader; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注") | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 单据引用 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "单据引用") | ||||||
|  |     private String documentReference; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "文件ID") | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjFubiaoVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解附Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdCbysJdcbfjFubiaoMapper extends BaseMapperPlus<XzdCbysJdcbfjFubiao, XzdCbysJdcbfjFubiaoVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdCbysJdcbfjMapper extends BaseMapperPlus<XzdCbysJdcbfj, XzdCbysJdcbfjVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysSscbVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 税收项明细Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdCbysSscbMapper extends BaseMapperPlus<XzdCbysSscb, XzdCbysSscbVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbFubiaoVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-附Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdCbysWgcbtbFubiaoMapper extends BaseMapperPlus<XzdCbysWgcbtbFubiao, XzdCbysWgcbtbFubiaoVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-完工成本填报Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdCbysWgcbtbMapper extends BaseMapperPlus<XzdCbysWgcbtb, XzdCbysWgcbtbVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbFubiaoVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本附Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdCbysZjhcbFubiaoMapper extends BaseMapperPlus<XzdCbysZjhcbFubiao, XzdCbysZjhcbFubiaoVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdCbysZjhcbMapper extends BaseMapperPlus<XzdCbysZjhcb, XzdCbysZjhcbVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZtjhcbBgjlVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-变更记录Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface XzdCbysZtjhcbBgjlMapper extends BaseMapperPlus<XzdCbysZtjhcbBgjl, XzdCbysZtjhcbBgjlVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjFubiaoVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjFubiaoBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解附Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdCbysJdcbfjFubiaoService extends IService<XzdCbysJdcbfjFubiao>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      */ | ||||||
|  |     XzdCbysJdcbfjFubiaoVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-阶段成本分解附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解附分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdCbysJdcbfjFubiaoVo> queryPageList(XzdCbysJdcbfjFubiaoBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-阶段成本分解附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解附列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysJdcbfjFubiaoVo> queryList(XzdCbysJdcbfjFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdCbysJdcbfjFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdCbysJdcbfjFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-阶段成本分解附信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdCbysJdcbfjService extends IService<XzdCbysJdcbfj>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解 | ||||||
|  |      */ | ||||||
|  |     XzdCbysJdcbfjVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-阶段成本分解列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdCbysJdcbfjVo> queryPageList(XzdCbysJdcbfjBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-阶段成本分解列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysJdcbfjVo> queryList(XzdCbysJdcbfjBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdCbysJdcbfjBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdCbysJdcbfjBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-阶段成本分解信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysSscbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysSscbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 税收项明细Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdCbysSscbService extends IService<XzdCbysSscb>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询税收项明细 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 税收项明细 | ||||||
|  |      */ | ||||||
|  |     XzdCbysSscbVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询税收项明细列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 税收项明细分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdCbysSscbVo> queryPageList(XzdCbysSscbBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的税收项明细列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 税收项明细列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysSscbVo> queryList(XzdCbysSscbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增税收项明细 | ||||||
|  |      * | ||||||
|  |      * @param bo 税收项明细 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdCbysSscbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改税收项明细 | ||||||
|  |      * | ||||||
|  |      * @param bo 税收项明细 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdCbysSscbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除税收项明细信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbFubiaoVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbFubiaoBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-附Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdCbysWgcbtbFubiaoService extends IService<XzdCbysWgcbtbFubiao>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-附 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-附 | ||||||
|  |      */ | ||||||
|  |     XzdCbysWgcbtbFubiaoVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-附分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdCbysWgcbtbFubiaoVo> queryPageList(XzdCbysWgcbtbFubiaoBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-附列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysWgcbtbFubiaoVo> queryList(XzdCbysWgcbtbFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-附 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdCbysWgcbtbFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-附 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdCbysWgcbtbFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-附信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-完工成本填报Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdCbysWgcbtbService extends IService<XzdCbysWgcbtb>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-完工成本填报 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-完工成本填报 | ||||||
|  |      */ | ||||||
|  |     XzdCbysWgcbtbVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-完工成本填报列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-完工成本填报分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdCbysWgcbtbVo> queryPageList(XzdCbysWgcbtbBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-完工成本填报列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-完工成本填报列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysWgcbtbVo> queryList(XzdCbysWgcbtbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-完工成本填报 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-完工成本填报 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdCbysWgcbtbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-完工成本填报 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-完工成本填报 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdCbysWgcbtbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-完工成本填报信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbFubiaoVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbFubiaoBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本附Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdCbysZjhcbFubiaoService extends IService<XzdCbysZjhcbFubiao>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本附 | ||||||
|  |      */ | ||||||
|  |     XzdCbysZjhcbFubiaoVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-总体计划成本附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本附分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdCbysZjhcbFubiaoVo> queryPageList(XzdCbysZjhcbFubiaoBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-总体计划成本附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本附列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysZjhcbFubiaoVo> queryList(XzdCbysZjhcbFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdCbysZjhcbFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdCbysZjhcbFubiaoBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-总体计划成本附信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  | } | ||||||
| @ -0,0 +1,72 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdCbysZjhcbService extends IService<XzdCbysZjhcb>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-总体计划成本 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本 | ||||||
|  |      */ | ||||||
|  |     XzdCbysZjhcbVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-总体计划成本列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdCbysZjhcbVo> queryPageList(XzdCbysZjhcbBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-总体计划成本列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysZjhcbVo> queryList(XzdCbysZjhcbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-总体计划成本 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-总体计划成本 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdCbysZjhcbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-总体计划成本 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-总体计划成本 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdCbysZjhcbBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-总体计划成本信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  |  | ||||||
|  |     String queryNameById(Long id); | ||||||
|  | } | ||||||
| @ -0,0 +1,70 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZtjhcbBgjlVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZtjhcbBgjlBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.IService; | ||||||
|  | import java.util.Collection; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-变更记录Service接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface IXzdCbysZtjhcbBgjlService extends IService<XzdCbysZtjhcbBgjl>{ | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-变更记录 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-变更记录 | ||||||
|  |      */ | ||||||
|  |     XzdCbysZtjhcbBgjlVo queryById(Long id); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-变更记录列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-变更记录分页列表 | ||||||
|  |      */ | ||||||
|  |     TableDataInfo<XzdCbysZtjhcbBgjlVo> queryPageList(XzdCbysZtjhcbBgjlBo bo, PageQuery pageQuery); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-变更记录列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-变更记录列表 | ||||||
|  |      */ | ||||||
|  |     List<XzdCbysZtjhcbBgjlVo> queryList(XzdCbysZtjhcbBgjlBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-变更记录 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-变更记录 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     Boolean insertByBo(XzdCbysZtjhcbBgjlBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-变更记录 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-变更记录 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     Boolean updateByBo(XzdCbysZtjhcbBgjlBo bo); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-变更记录信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); | ||||||
|  | } | ||||||
| @ -0,0 +1,147 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjFubiaoBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjFubiaoVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysJdcbfjFubiaoMapper; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjFubiaoService; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Collection; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解附Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdCbysJdcbfjFubiaoServiceImpl extends ServiceImpl<XzdCbysJdcbfjFubiaoMapper, XzdCbysJdcbfjFubiao> implements IXzdCbysJdcbfjFubiaoService { | ||||||
|  |  | ||||||
|  |     private final XzdCbysJdcbfjFubiaoMapper baseMapper; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdCbysJdcbfjFubiaoVo queryById(Long id){ | ||||||
|  |         return baseMapper.selectVoById(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-阶段成本分解附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解附分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdCbysJdcbfjFubiaoVo> queryPageList(XzdCbysJdcbfjFubiaoBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysJdcbfjFubiao> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdCbysJdcbfjFubiaoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-阶段成本分解附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解附列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdCbysJdcbfjFubiaoVo> queryList(XzdCbysJdcbfjFubiaoBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysJdcbfjFubiao> lqw = buildQueryWrapper(bo); | ||||||
|  |         return baseMapper.selectVoList(lqw); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdCbysJdcbfjFubiao> buildQueryWrapper(XzdCbysJdcbfjFubiaoBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdCbysJdcbfjFubiao> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdCbysJdcbfjFubiao::getId); | ||||||
|  |         lqw.eq(bo.getMainTableId() != null, XzdCbysJdcbfjFubiao::getMainTableId, bo.getMainTableId()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBudgetItemCode()), XzdCbysJdcbfjFubiao::getBudgetItemCode, bo.getBudgetItemCode()); | ||||||
|  |         lqw.like(StringUtils.isNotBlank(bo.getBudgetItemName()), XzdCbysJdcbfjFubiao::getBudgetItemName, bo.getBudgetItemName()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBoq()), XzdCbysJdcbfjFubiao::getBoq, bo.getBoq()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getWbs()), XzdCbysJdcbfjFubiao::getWbs, bo.getWbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getCbs()), XzdCbysJdcbfjFubiao::getCbs, bo.getCbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getUnit()), XzdCbysJdcbfjFubiao::getUnit, bo.getUnit()); | ||||||
|  |         lqw.eq(bo.getQuantity() != null, XzdCbysJdcbfjFubiao::getQuantity, bo.getQuantity()); | ||||||
|  |         lqw.eq(bo.getUnitPrice() != null, XzdCbysJdcbfjFubiao::getUnitPrice, bo.getUnitPrice()); | ||||||
|  |         lqw.eq(bo.getAmount() != null, XzdCbysJdcbfjFubiao::getAmount, bo.getAmount()); | ||||||
|  |         lqw.eq(bo.getChangeQuantity() != null, XzdCbysJdcbfjFubiao::getChangeQuantity, bo.getChangeQuantity()); | ||||||
|  |         lqw.eq(bo.getChangeAmount() != null, XzdCbysJdcbfjFubiao::getChangeAmount, bo.getChangeAmount()); | ||||||
|  |         lqw.eq(bo.getAfterChangeQuantity() != null, XzdCbysJdcbfjFubiao::getAfterChangeQuantity, bo.getAfterChangeQuantity()); | ||||||
|  |         lqw.eq(bo.getAfterChangeUnitPrice() != null, XzdCbysJdcbfjFubiao::getAfterChangeUnitPrice, bo.getAfterChangeUnitPrice()); | ||||||
|  |         lqw.eq(bo.getAfterChangeAmount() != null, XzdCbysJdcbfjFubiao::getAfterChangeAmount, bo.getAfterChangeAmount()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysJdcbfjFubiao::getDocumentReference, bo.getDocumentReference()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysJdcbfjFubiao::getFileId, bo.getFileId()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean insertByBo(XzdCbysJdcbfjFubiaoBo bo) { | ||||||
|  |         XzdCbysJdcbfjFubiao add = MapstructUtils.convert(bo, XzdCbysJdcbfjFubiao.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-阶段成本分解附 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean updateByBo(XzdCbysJdcbfjFubiaoBo bo) { | ||||||
|  |         XzdCbysJdcbfjFubiao update = MapstructUtils.convert(bo, XzdCbysJdcbfjFubiao.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdCbysJdcbfjFubiao entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-阶段成本分解附信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,240 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.exception.ServiceException; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.dromara.common.utils.BatchNumberGenerator; | ||||||
|  | import org.dromara.system.service.ISysUserService; | ||||||
|  | import org.dromara.system.service.impl.SysOssServiceImpl; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.*; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjFubiaoService; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService; | ||||||
|  | import org.dromara.xzd.service.impl.XzdProjectServiceImpl; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysJdcbfjMapper; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjService; | ||||||
|  |  | ||||||
|  | import java.util.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-阶段成本分解Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdCbysJdcbfjServiceImpl extends ServiceImpl<XzdCbysJdcbfjMapper, XzdCbysJdcbfj> implements IXzdCbysJdcbfjService { | ||||||
|  |  | ||||||
|  |     private final XzdCbysJdcbfjMapper baseMapper; | ||||||
|  |     @Autowired | ||||||
|  |     private IXzdCbysJdcbfjFubiaoService  xzdCbysJdcbfjFubiaoService; | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private SysOssServiceImpl sysOssService; | ||||||
|  |     @Autowired | ||||||
|  |     private XzdProjectServiceImpl xzdProjectService; | ||||||
|  |     @Autowired | ||||||
|  |     private ISysUserService sysUserService; | ||||||
|  |     @Autowired | ||||||
|  |     private IXzdCbysZjhcbService xzdCbysZjhcbService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdCbysJdcbfjVo queryById(Long id){ | ||||||
|  |         XzdCbysJdcbfjVo vo = baseMapper.selectVoById(id); | ||||||
|  |         getName(vo); | ||||||
|  |         getHttk(vo); | ||||||
|  |         return vo; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-阶段成本分解列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdCbysJdcbfjVo> queryPageList(XzdCbysJdcbfjBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysJdcbfj> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdCbysJdcbfjVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         result.getRecords().forEach(this::getName); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-阶段成本分解列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-阶段成本分解列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdCbysJdcbfjVo> queryList(XzdCbysJdcbfjBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysJdcbfj> lqw = buildQueryWrapper(bo); | ||||||
|  |         List<XzdCbysJdcbfjVo> vos = baseMapper.selectVoList(lqw); | ||||||
|  |         vos.forEach(this::getName); | ||||||
|  |         return vos; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdCbysJdcbfj> buildQueryWrapper(XzdCbysJdcbfjBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdCbysJdcbfj> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdCbysJdcbfj::getId); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysJdcbfj::getDocCode, bo.getDocCode()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysJdcbfj::getDocTitle, bo.getDocTitle()); | ||||||
|  |         lqw.eq(bo.getDocDate() != null, XzdCbysJdcbfj::getDocDate, bo.getDocDate()); | ||||||
|  |         lqw.eq(bo.getProjectId() != null, XzdCbysJdcbfj::getProjectId, bo.getProjectId()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBudgetCategory()), XzdCbysJdcbfj::getBudgetCategory, bo.getBudgetCategory()); | ||||||
|  |         lqw.eq(bo.getTotalPlanCost() != null, XzdCbysJdcbfj::getTotalPlanCost, bo.getTotalPlanCost()); | ||||||
|  |         lqw.eq(bo.getProjectLeader() != null, XzdCbysJdcbfj::getProjectLeader, bo.getProjectLeader()); | ||||||
|  |         lqw.eq(bo.getStartDate() != null, XzdCbysJdcbfj::getStartDate, bo.getStartDate()); | ||||||
|  |         lqw.eq(bo.getCompletionDate() != null, XzdCbysJdcbfj::getCompletionDate, bo.getCompletionDate()); | ||||||
|  |         lqw.eq(bo.getYear() != null, XzdCbysJdcbfj::getYear, bo.getYear()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getCurrency()), XzdCbysJdcbfj::getCurrency, bo.getCurrency()); | ||||||
|  |         lqw.eq(bo.getExchangeRate() != null, XzdCbysJdcbfj::getExchangeRate, bo.getExchangeRate()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysJdcbfj::getDocumentReference, bo.getDocumentReference()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysJdcbfj::getFileId, bo.getFileId()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean insertByBo(XzdCbysJdcbfjBo bo) { | ||||||
|  |         XzdCbysJdcbfj add = MapstructUtils.convert(bo, XzdCbysJdcbfj.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         String banBen = BatchNumberGenerator.generateBatchNumber("LXCBJDCBFJ-"); | ||||||
|  |         add.setDocCode(banBen); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         if (bo.getXzdCbysJdcbfjFubiao() != null && !bo.getXzdCbysJdcbfjFubiao().isEmpty()) { | ||||||
|  |             bo.getXzdCbysJdcbfjFubiao().forEach(item -> { | ||||||
|  |                 String code = BatchNumberGenerator.generateBatchNumber("LXCBYSBM-"); | ||||||
|  |                 item.setBudgetItemCode(code); | ||||||
|  |                 item.setMainTableId(add.getId()); | ||||||
|  |             }); | ||||||
|  |             xzdCbysJdcbfjFubiaoService.saveBatch(bo.getXzdCbysJdcbfjFubiao()); | ||||||
|  |         } | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-阶段成本分解 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean updateByBo(XzdCbysJdcbfjBo bo) { | ||||||
|  |         XzdCbysJdcbfj update = MapstructUtils.convert(bo, XzdCbysJdcbfj.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |         xzdCbysJdcbfjFubiaoService.remove(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().eq(XzdCbysJdcbfjFubiao::getMainTableId, bo.getId())); | ||||||
|  |         if (bo.getXzdCbysJdcbfjFubiao() != null && !bo.getXzdCbysJdcbfjFubiao().isEmpty()) { | ||||||
|  |             bo.getXzdCbysJdcbfjFubiao().forEach(item -> { | ||||||
|  |                 String code = BatchNumberGenerator.generateBatchNumber("LXCBYSBM-"); | ||||||
|  |                 item.setBudgetItemCode(code); | ||||||
|  |                 item.setMainTableId(bo.getId()); | ||||||
|  |             }); | ||||||
|  |             xzdCbysJdcbfjFubiaoService.saveBatch(bo.getXzdCbysJdcbfjFubiao()); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdCbysJdcbfj entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-阶段成本分解信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         List<Long> deleteIds = new ArrayList<>(); | ||||||
|  |         for (Long id : ids) { | ||||||
|  |             XzdCbysJdcbfjVo vo = baseMapper.selectVoById(id); | ||||||
|  |             if (vo != null){ | ||||||
|  |                 //删除附件 | ||||||
|  |                 if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ | ||||||
|  |                     List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); | ||||||
|  |                     deleteIds.addAll(list); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (!deleteIds.isEmpty()) { | ||||||
|  |             sysOssService.deleteWithValidByIds(deleteIds, false); | ||||||
|  |         } | ||||||
|  |         xzdCbysJdcbfjFubiaoService.remove(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().in(XzdCbysJdcbfjFubiao::getMainTableId,ids)); | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取部分字段名称 | ||||||
|  |      * @param item | ||||||
|  |      */ | ||||||
|  |     private void getName(XzdCbysJdcbfjVo item) { | ||||||
|  |         //项目名称 | ||||||
|  |         if (item.getProjectId() != null){ | ||||||
|  |             String projectName = xzdProjectService.queryNameById(item.getProjectId()); | ||||||
|  |             if (projectName != null){ | ||||||
|  |                 item.setProjectName(projectName); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (item.getProjectLeader() != null){ | ||||||
|  |             String name = sysUserService.queryNameById(item.getProjectLeader()); | ||||||
|  |             if (name != null){ | ||||||
|  |                 item.setProjectLeaderName(name); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (item.getTotalPlanCost() != null){ | ||||||
|  |             String name = xzdCbysZjhcbService.queryNameById(item.getTotalPlanCost()); | ||||||
|  |             if (name != null){ | ||||||
|  |                 item.setTotalPlanCostName(name); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取扣款与奖励项 | ||||||
|  |      * @param vo | ||||||
|  |      */ | ||||||
|  |     private void getHttk(XzdCbysJdcbfjVo vo) { | ||||||
|  |         List<XzdCbysJdcbfjFubiao> xzdCbysZtjhcbBgjls = xzdCbysJdcbfjFubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().eq(XzdCbysJdcbfjFubiao::getMainTableId, vo.getId())); | ||||||
|  |         vo.setXzdCbysJdcbfjFubiao(xzdCbysZtjhcbBgjls); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,139 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysSscbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysSscbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysSscbMapper; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysSscbService; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Collection; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 税收项明细Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdCbysSscbServiceImpl extends ServiceImpl<XzdCbysSscbMapper, XzdCbysSscb> implements IXzdCbysSscbService { | ||||||
|  |  | ||||||
|  |     private final XzdCbysSscbMapper baseMapper; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询税收项明细 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 税收项明细 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdCbysSscbVo queryById(Long id){ | ||||||
|  |         return baseMapper.selectVoById(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询税收项明细列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 税收项明细分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdCbysSscbVo> queryPageList(XzdCbysSscbBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysSscb> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdCbysSscbVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的税收项明细列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 税收项明细列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdCbysSscbVo> queryList(XzdCbysSscbBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysSscb> lqw = buildQueryWrapper(bo); | ||||||
|  |         return baseMapper.selectVoList(lqw); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdCbysSscb> buildQueryWrapper(XzdCbysSscbBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdCbysSscb> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdCbysSscb::getId); | ||||||
|  |         lqw.eq(bo.getMainDocumentId() != null, XzdCbysSscb::getMainDocumentId, bo.getMainDocumentId()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getTaxItem()), XzdCbysSscb::getTaxItem, bo.getTaxItem()); | ||||||
|  |         lqw.eq(bo.getTaxableAmount() != null, XzdCbysSscb::getTaxableAmount, bo.getTaxableAmount()); | ||||||
|  |         lqw.eq(bo.getTaxRate() != null, XzdCbysSscb::getTaxRate, bo.getTaxRate()); | ||||||
|  |         lqw.eq(bo.getTaxPayable() != null, XzdCbysSscb::getTaxPayable, bo.getTaxPayable()); | ||||||
|  |         lqw.eq(bo.getTaxDeductible() != null, XzdCbysSscb::getTaxDeductible, bo.getTaxDeductible()); | ||||||
|  |         lqw.eq(bo.getTaxDue() != null, XzdCbysSscb::getTaxDue, bo.getTaxDue()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysSscb::getDocumentReference, bo.getDocumentReference()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysSscb::getFileId, bo.getFileId()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增税收项明细 | ||||||
|  |      * | ||||||
|  |      * @param bo 税收项明细 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean insertByBo(XzdCbysSscbBo bo) { | ||||||
|  |         XzdCbysSscb add = MapstructUtils.convert(bo, XzdCbysSscb.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改税收项明细 | ||||||
|  |      * | ||||||
|  |      * @param bo 税收项明细 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean updateByBo(XzdCbysSscbBo bo) { | ||||||
|  |         XzdCbysSscb update = MapstructUtils.convert(bo, XzdCbysSscb.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdCbysSscb entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除税收项明细信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,148 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbFubiaoBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbFubiaoVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysWgcbtbFubiaoMapper; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Collection; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-附Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdCbysWgcbtbFubiaoServiceImpl extends ServiceImpl<XzdCbysWgcbtbFubiaoMapper, XzdCbysWgcbtbFubiao> implements IXzdCbysWgcbtbFubiaoService { | ||||||
|  |  | ||||||
|  |     private final XzdCbysWgcbtbFubiaoMapper baseMapper; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-附 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-附 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdCbysWgcbtbFubiaoVo queryById(Long id){ | ||||||
|  |         return baseMapper.selectVoById(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-附分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdCbysWgcbtbFubiaoVo> queryPageList(XzdCbysWgcbtbFubiaoBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysWgcbtbFubiao> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdCbysWgcbtbFubiaoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-附列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdCbysWgcbtbFubiaoVo> queryList(XzdCbysWgcbtbFubiaoBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysWgcbtbFubiao> lqw = buildQueryWrapper(bo); | ||||||
|  |         return baseMapper.selectVoList(lqw); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdCbysWgcbtbFubiao> buildQueryWrapper(XzdCbysWgcbtbFubiaoBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdCbysWgcbtbFubiao> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdCbysWgcbtbFubiao::getId); | ||||||
|  |         lqw.eq(bo.getMainDocId() != null, XzdCbysWgcbtbFubiao::getMainDocId, bo.getMainDocId()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBudgetItemCode()), XzdCbysWgcbtbFubiao::getBudgetItemCode, bo.getBudgetItemCode()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBudgetItemTitle()), XzdCbysWgcbtbFubiao::getBudgetItemTitle, bo.getBudgetItemTitle()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBoq()), XzdCbysWgcbtbFubiao::getBoq, bo.getBoq()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getWbs()), XzdCbysWgcbtbFubiao::getWbs, bo.getWbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getCbs()), XzdCbysWgcbtbFubiao::getCbs, bo.getCbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getUnit()), XzdCbysWgcbtbFubiao::getUnit, bo.getUnit()); | ||||||
|  |         lqw.eq(bo.getUnitPrice() != null, XzdCbysWgcbtbFubiao::getUnitPrice, bo.getUnitPrice()); | ||||||
|  |         lqw.eq(bo.getPlanQuantity() != null, XzdCbysWgcbtbFubiao::getPlanQuantity, bo.getPlanQuantity()); | ||||||
|  |         lqw.eq(bo.getCumulativePlanQuantity() != null, XzdCbysWgcbtbFubiao::getCumulativePlanQuantity, bo.getCumulativePlanQuantity()); | ||||||
|  |         lqw.eq(bo.getPlanAmount() != null, XzdCbysWgcbtbFubiao::getPlanAmount, bo.getPlanAmount()); | ||||||
|  |         lqw.eq(bo.getCumulativePlanAmount() != null, XzdCbysWgcbtbFubiao::getCumulativePlanAmount, bo.getCumulativePlanAmount()); | ||||||
|  |         lqw.eq(bo.getCompletedQuantity() != null, XzdCbysWgcbtbFubiao::getCompletedQuantity, bo.getCompletedQuantity()); | ||||||
|  |         lqw.eq(bo.getCumulativeCompletedQuantity() != null, XzdCbysWgcbtbFubiao::getCumulativeCompletedQuantity, bo.getCumulativeCompletedQuantity()); | ||||||
|  |         lqw.eq(bo.getCompletedAmount() != null, XzdCbysWgcbtbFubiao::getCompletedAmount, bo.getCompletedAmount()); | ||||||
|  |         lqw.eq(bo.getCumulativeCompletedAmount() != null, XzdCbysWgcbtbFubiao::getCumulativeCompletedAmount, bo.getCumulativeCompletedAmount()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysWgcbtbFubiao::getDocumentReference, bo.getDocumentReference()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysWgcbtbFubiao::getFileId, bo.getFileId()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-附 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean insertByBo(XzdCbysWgcbtbFubiaoBo bo) { | ||||||
|  |         XzdCbysWgcbtbFubiao add = MapstructUtils.convert(bo, XzdCbysWgcbtbFubiao.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-附 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean updateByBo(XzdCbysWgcbtbFubiaoBo bo) { | ||||||
|  |         XzdCbysWgcbtbFubiao update = MapstructUtils.convert(bo, XzdCbysWgcbtbFubiao.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdCbysWgcbtbFubiao entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-附信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,213 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.exception.ServiceException; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.dromara.common.utils.BatchNumberGenerator; | ||||||
|  | import org.dromara.system.service.impl.SysOssServiceImpl; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService; | ||||||
|  | import org.dromara.xzd.domain.XzdContractDetails; | ||||||
|  | import org.dromara.xzd.domain.dto.QuerCorrespondentDto; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceVo; | ||||||
|  | import org.dromara.xzd.service.IXzdProjectService; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysWgcbtbMapper; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbService; | ||||||
|  |  | ||||||
|  | import java.util.*; | ||||||
|  | import java.util.stream.Collectors; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-完工成本填报Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdCbysWgcbtbServiceImpl extends ServiceImpl<XzdCbysWgcbtbMapper, XzdCbysWgcbtb> implements IXzdCbysWgcbtbService { | ||||||
|  |  | ||||||
|  |     private final XzdCbysWgcbtbMapper baseMapper; | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private IXzdCbysWgcbtbFubiaoService fubiaoService; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     private final IXzdProjectService xzdProjectService; | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private SysOssServiceImpl sysOssService; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-完工成本填报 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-完工成本填报 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdCbysWgcbtbVo queryById(Long id){ | ||||||
|  |         XzdCbysWgcbtbVo xzdCbysWgcbtbVo = baseMapper.selectVoById(id); | ||||||
|  |         List<XzdCbysWgcbtbVo> vo = List.of(xzdCbysWgcbtbVo); | ||||||
|  |         saveValu(vo); | ||||||
|  |         return vo.getFirst(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-完工成本填报列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-完工成本填报分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdCbysWgcbtbVo> queryPageList(XzdCbysWgcbtbBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysWgcbtb> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdCbysWgcbtbVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         saveValu(result.getRecords()); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void saveValu(List<XzdCbysWgcbtbVo> records) { | ||||||
|  |         for (XzdCbysWgcbtbVo item : records) { | ||||||
|  |             //项目名称 | ||||||
|  |             if (item.getProjectId() != null){ | ||||||
|  |                 String projectName = xzdProjectService.queryNameById(item.getProjectId()); | ||||||
|  |                 if (projectName != null){ | ||||||
|  |                     item.setProjectName(projectName); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-完工成本填报列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-完工成本填报列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdCbysWgcbtbVo> queryList(XzdCbysWgcbtbBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysWgcbtb> lqw = buildQueryWrapper(bo); | ||||||
|  |         return baseMapper.selectVoList(lqw); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdCbysWgcbtb> buildQueryWrapper(XzdCbysWgcbtbBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdCbysWgcbtb> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdCbysWgcbtb::getId); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysWgcbtb::getDocCode, bo.getDocCode()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysWgcbtb::getDocTitle, bo.getDocTitle()); | ||||||
|  |         lqw.eq(bo.getDocDate() != null, XzdCbysWgcbtb::getDocDate, bo.getDocDate()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBudgetCategory()), XzdCbysWgcbtb::getBudgetCategory, bo.getBudgetCategory()); | ||||||
|  |         lqw.eq(bo.getProjectId() != null, XzdCbysWgcbtb::getProjectId, bo.getProjectId()); | ||||||
|  |         lqw.eq(bo.getProjectLeader() != null, XzdCbysWgcbtb::getProjectLeader, bo.getProjectLeader()); | ||||||
|  |         lqw.eq(bo.getStartDate() != null, XzdCbysWgcbtb::getStartDate, bo.getStartDate()); | ||||||
|  |         lqw.eq(bo.getCompletionDate() != null, XzdCbysWgcbtb::getCompletionDate, bo.getCompletionDate()); | ||||||
|  |         lqw.eq(bo.getYear() != null, XzdCbysWgcbtb::getYear, bo.getYear()); | ||||||
|  |         lqw.eq(bo.getMonth() != null, XzdCbysWgcbtb::getMonth, bo.getMonth()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getStatCycle()), XzdCbysWgcbtb::getStatCycle, bo.getStatCycle()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getSourceDocType()), XzdCbysWgcbtb::getSourceDocType, bo.getSourceDocType()); | ||||||
|  |         lqw.eq(bo.getEnableAccountAttrTab() != null, XzdCbysWgcbtb::getEnableAccountAttrTab, bo.getEnableAccountAttrTab()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysWgcbtb::getDocumentReference, bo.getDocumentReference()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysWgcbtb::getFileId, bo.getFileId()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-完工成本填报 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-完工成本填报 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean insertByBo(XzdCbysWgcbtbBo bo) { | ||||||
|  |         XzdCbysWgcbtb add = MapstructUtils.convert(bo, XzdCbysWgcbtb.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         String banBen = BatchNumberGenerator.generateBatchNumber("CBTB"); | ||||||
|  |         add.setDocCode(banBen); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         if (bo.getXzdCbysWgcbtbFubiao() == null || bo.getXzdCbysWgcbtbFubiao().isEmpty()) { | ||||||
|  |             throw new ServiceException("成本明细不能为空"); | ||||||
|  |         } | ||||||
|  |         bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocId(add.getId());}); | ||||||
|  |         fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao()); | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-完工成本填报 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-完工成本填报 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean updateByBo(XzdCbysWgcbtbBo bo) { | ||||||
|  |         XzdCbysWgcbtb update = MapstructUtils.convert(bo, XzdCbysWgcbtb.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |  | ||||||
|  |         if (bo.getXzdCbysWgcbtbFubiao() == null || bo.getXzdCbysWgcbtbFubiao().isEmpty()) { | ||||||
|  |             throw new ServiceException("成本明细不能为空"); | ||||||
|  |         } | ||||||
|  |         HashMap<String, Object> hashMap = new HashMap<>(); | ||||||
|  |         hashMap.put("main_doc_id", update.getId()); | ||||||
|  |         fubiaoService.getBaseMapper().deleteByMap(hashMap); | ||||||
|  |         bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocId(update.getId());}); | ||||||
|  |         fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao()); | ||||||
|  |  | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdCbysWgcbtb entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-完工成本填报信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         for (Long id : ids) { | ||||||
|  |             XzdCbysWgcbtbVo vo = baseMapper.selectVoById(id); | ||||||
|  |             //                删除附件 | ||||||
|  |             if (!StringUtils.isEmpty(vo.getFileId())){ | ||||||
|  |                 List<Long> collect = Arrays.stream(vo.getFileId().split(",")).map(item -> { | ||||||
|  |                     return Long.parseLong(item); | ||||||
|  |                 }).collect(Collectors.toList()); | ||||||
|  |                 sysOssService.deleteWithValidByIds(collect, false); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         fubiaoService.getBaseMapper().delete(new LambdaQueryWrapper<XzdCbysWgcbtbFubiao>().in(XzdCbysWgcbtbFubiao::getMainDocId, ids)); | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,159 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbFubiaoBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbFubiaoVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZjhcbFubiaoMapper; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbFubiaoService; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Collection; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本附Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdCbysZjhcbFubiaoServiceImpl extends ServiceImpl<XzdCbysZjhcbFubiaoMapper, XzdCbysZjhcbFubiao> implements IXzdCbysZjhcbFubiaoService { | ||||||
|  |  | ||||||
|  |     private final XzdCbysZjhcbFubiaoMapper baseMapper; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本附 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdCbysZjhcbFubiaoVo queryById(Long id){ | ||||||
|  |         return baseMapper.selectVoById(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-总体计划成本附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本附分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdCbysZjhcbFubiaoVo> queryPageList(XzdCbysZjhcbFubiaoBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysZjhcbFubiao> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdCbysZjhcbFubiaoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-总体计划成本附列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本附列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdCbysZjhcbFubiaoVo> queryList(XzdCbysZjhcbFubiaoBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysZjhcbFubiao> lqw = buildQueryWrapper(bo); | ||||||
|  |         return baseMapper.selectVoList(lqw); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdCbysZjhcbFubiao> buildQueryWrapper(XzdCbysZjhcbFubiaoBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdCbysZjhcbFubiao> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdCbysZjhcbFubiao::getId); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBudgetCode()), XzdCbysZjhcbFubiao::getBudgetCode, bo.getBudgetCode()); | ||||||
|  |         lqw.like(StringUtils.isNotBlank(bo.getBudgetName()), XzdCbysZjhcbFubiao::getBudgetName, bo.getBudgetName()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getWbs()), XzdCbysZjhcbFubiao::getWbs, bo.getWbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getCbs()), XzdCbysZjhcbFubiao::getCbs, bo.getCbs()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getUnit()), XzdCbysZjhcbFubiao::getUnit, bo.getUnit()); | ||||||
|  |         lqw.eq(bo.getQuantity() != null, XzdCbysZjhcbFubiao::getQuantity, bo.getQuantity()); | ||||||
|  |         lqw.eq(bo.getUnitPrice() != null, XzdCbysZjhcbFubiao::getUnitPrice, bo.getUnitPrice()); | ||||||
|  |         lqw.eq(bo.getTaxIncludedUnitPrice() != null, XzdCbysZjhcbFubiao::getTaxIncludedUnitPrice, bo.getTaxIncludedUnitPrice()); | ||||||
|  |         lqw.eq(bo.getTaxRate() != null, XzdCbysZjhcbFubiao::getTaxRate, bo.getTaxRate()); | ||||||
|  |         lqw.eq(bo.getTaxAmount() != null, XzdCbysZjhcbFubiao::getTaxAmount, bo.getTaxAmount()); | ||||||
|  |         lqw.eq(bo.getTaxExcludedAmount() != null, XzdCbysZjhcbFubiao::getTaxExcludedAmount, bo.getTaxExcludedAmount()); | ||||||
|  |         lqw.eq(bo.getTaxIncludedAmount() != null, XzdCbysZjhcbFubiao::getTaxIncludedAmount, bo.getTaxIncludedAmount()); | ||||||
|  |         lqw.eq(bo.getChangeQuantity() != null, XzdCbysZjhcbFubiao::getChangeQuantity, bo.getChangeQuantity()); | ||||||
|  |         lqw.eq(bo.getChangeUnitPrice() != null, XzdCbysZjhcbFubiao::getChangeUnitPrice, bo.getChangeUnitPrice()); | ||||||
|  |         lqw.eq(bo.getChangeTaxIncludedUnitPrice() != null, XzdCbysZjhcbFubiao::getChangeTaxIncludedUnitPrice, bo.getChangeTaxIncludedUnitPrice()); | ||||||
|  |         lqw.eq(bo.getChangeTaxRate() != null, XzdCbysZjhcbFubiao::getChangeTaxRate, bo.getChangeTaxRate()); | ||||||
|  |         lqw.eq(bo.getChangeTaxAmount() != null, XzdCbysZjhcbFubiao::getChangeTaxAmount, bo.getChangeTaxAmount()); | ||||||
|  |         lqw.eq(bo.getAfterChangeQuantity() != null, XzdCbysZjhcbFubiao::getAfterChangeQuantity, bo.getAfterChangeQuantity()); | ||||||
|  |         lqw.eq(bo.getAfterChangeUnitPrice() != null, XzdCbysZjhcbFubiao::getAfterChangeUnitPrice, bo.getAfterChangeUnitPrice()); | ||||||
|  |         lqw.eq(bo.getAfterChangeTaxIncludedUnitPrice() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxIncludedUnitPrice, bo.getAfterChangeTaxIncludedUnitPrice()); | ||||||
|  |         lqw.eq(bo.getAfterChangeTaxRate() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxRate, bo.getAfterChangeTaxRate()); | ||||||
|  |         lqw.eq(bo.getAfterChangeTaxAmount() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxAmount, bo.getAfterChangeTaxAmount()); | ||||||
|  |         lqw.eq(bo.getAfterChangeTaxExcludedAmount() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxExcludedAmount, bo.getAfterChangeTaxExcludedAmount()); | ||||||
|  |         lqw.eq(bo.getAfterChangeTaxIncludedAmount() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxIncludedAmount, bo.getAfterChangeTaxIncludedAmount()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), XzdCbysZjhcbFubiao::getRemarks, bo.getRemarks()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getContractMode()), XzdCbysZjhcbFubiao::getContractMode, bo.getContractMode()); | ||||||
|  |         lqw.eq(bo.getBidBudgetIncome() != null, XzdCbysZjhcbFubiao::getBidBudgetIncome, bo.getBidBudgetIncome()); | ||||||
|  |         lqw.eq(bo.getProfitRate() != null, XzdCbysZjhcbFubiao::getProfitRate, bo.getProfitRate()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), XzdCbysZjhcbFubiao::getAttachment, bo.getAttachment()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean insertByBo(XzdCbysZjhcbFubiaoBo bo) { | ||||||
|  |         XzdCbysZjhcbFubiao add = MapstructUtils.convert(bo, XzdCbysZjhcbFubiao.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-总体计划成本附 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean updateByBo(XzdCbysZjhcbFubiaoBo bo) { | ||||||
|  |         XzdCbysZjhcbFubiao update = MapstructUtils.convert(bo, XzdCbysZjhcbFubiao.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdCbysZjhcbFubiao entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-总体计划成本附信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,279 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.exception.ServiceException; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.dromara.common.utils.BatchNumberGenerator; | ||||||
|  | import org.dromara.system.service.ISysUserService; | ||||||
|  | import org.dromara.system.service.impl.SysOssServiceImpl; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.*; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.*; | ||||||
|  | import org.dromara.xzd.service.impl.XzdProjectServiceImpl; | ||||||
|  | import org.dromara.xzd.settlement.domain.XzdJsDeductionItems; | ||||||
|  | import org.dromara.xzd.settlement.domain.vo.XzdJsCgJungonVo; | ||||||
|  | import org.springframework.beans.factory.annotation.Autowired; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZjhcbMapper; | ||||||
|  | import org.springframework.transaction.annotation.Transactional; | ||||||
|  |  | ||||||
|  | import java.util.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-总体计划成本Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdCbysZjhcbServiceImpl extends ServiceImpl<XzdCbysZjhcbMapper, XzdCbysZjhcb> implements IXzdCbysZjhcbService { | ||||||
|  |  | ||||||
|  |     private final XzdCbysZjhcbMapper baseMapper; | ||||||
|  |  | ||||||
|  |     @Autowired | ||||||
|  |     private IXzdCbysZtjhcbBgjlService  xzdCbysZtjhcbBgjlService; | ||||||
|  |     @Autowired | ||||||
|  |     private IXzdCbysSscbService xzdCbysSscbService; | ||||||
|  |     @Autowired | ||||||
|  |     private IXzdCbysZjhcbFubiaoService fubiaoService; | ||||||
|  |     @Autowired | ||||||
|  |     private SysOssServiceImpl sysOssService; | ||||||
|  |     @Autowired | ||||||
|  |     private XzdProjectServiceImpl xzdProjectService; | ||||||
|  |     @Autowired | ||||||
|  |     private ISysUserService sysUserService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-总体计划成本 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdCbysZjhcbVo queryById(Long id){ | ||||||
|  |         XzdCbysZjhcbVo vo = baseMapper.selectVoById(id); | ||||||
|  |         getName(vo); | ||||||
|  |         getHttk(vo); | ||||||
|  |         return vo; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-总体计划成本列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdCbysZjhcbVo> queryPageList(XzdCbysZjhcbBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysZjhcb> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdCbysZjhcbVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         result.getRecords().forEach(this::getName); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-总体计划成本列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-总体计划成本列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdCbysZjhcbVo> queryList(XzdCbysZjhcbBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysZjhcb> lqw = buildQueryWrapper(bo); | ||||||
|  |         List<XzdCbysZjhcbVo> vos = baseMapper.selectVoList(lqw); | ||||||
|  |         vos.forEach(this::getName); | ||||||
|  |         return vos; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdCbysZjhcb> buildQueryWrapper(XzdCbysZjhcbBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdCbysZjhcb> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdCbysZjhcb::getId); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysZjhcb::getDocCode, bo.getDocCode()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysZjhcb::getDocTitle, bo.getDocTitle()); | ||||||
|  |         lqw.eq(bo.getDocDate() != null, XzdCbysZjhcb::getDocDate, bo.getDocDate()); | ||||||
|  |         lqw.eq(bo.getProjectId() != null, XzdCbysZjhcb::getProjectId, bo.getProjectId()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getBudgetCategory()), XzdCbysZjhcb::getBudgetCategory, bo.getBudgetCategory()); | ||||||
|  |         lqw.eq(bo.getTotalTaxExclAmount() != null, XzdCbysZjhcb::getTotalTaxExclAmount, bo.getTotalTaxExclAmount()); | ||||||
|  |         lqw.eq(bo.getTotalTaxAmount() != null, XzdCbysZjhcb::getTotalTaxAmount, bo.getTotalTaxAmount()); | ||||||
|  |         lqw.eq(bo.getTotalTaxInclAmount() != null, XzdCbysZjhcb::getTotalTaxInclAmount, bo.getTotalTaxInclAmount()); | ||||||
|  |         lqw.eq(bo.getProjectLeader() != null, XzdCbysZjhcb::getProjectLeader, bo.getProjectLeader()); | ||||||
|  |         lqw.eq(bo.getExecProjectManager() != null, XzdCbysZjhcb::getExecProjectManager, bo.getExecProjectManager()); | ||||||
|  |         lqw.eq(bo.getContractAmount() != null, XzdCbysZjhcb::getContractAmount, bo.getContractAmount()); | ||||||
|  |         lqw.eq(bo.getTaxCost() != null, XzdCbysZjhcb::getTaxCost, bo.getTaxCost()); | ||||||
|  |         lqw.eq(bo.getProfitRate() != null, XzdCbysZjhcb::getProfitRate, bo.getProfitRate()); | ||||||
|  |         lqw.eq(bo.getProfitAmount() != null, XzdCbysZjhcb::getProfitAmount, bo.getProfitAmount()); | ||||||
|  |         lqw.eq(bo.getEnableCostPrecontrol() != null, XzdCbysZjhcb::getEnableCostPrecontrol, bo.getEnableCostPrecontrol()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getCostControlMode()), XzdCbysZjhcb::getCostControlMode, bo.getCostControlMode()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getForeignCurrencyTaxType()), XzdCbysZjhcb::getForeignCurrencyTaxType, bo.getForeignCurrencyTaxType()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getForbidFlag()), XzdCbysZjhcb::getForbidFlag, bo.getForbidFlag()); | ||||||
|  |         lqw.eq(bo.getEnableAccountAttrTab() != null, XzdCbysZjhcb::getEnableAccountAttrTab, bo.getEnableAccountAttrTab()); | ||||||
|  |         lqw.eq(bo.getEnableMaterialGroup() != null, XzdCbysZjhcb::getEnableMaterialGroup, bo.getEnableMaterialGroup()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysZjhcb::getDocumentReference, bo.getDocumentReference()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysZjhcb::getFileId, bo.getFileId()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-总体计划成本 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-总体计划成本 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     @Transactional(rollbackFor = Exception.class) | ||||||
|  |     public Boolean insertByBo(XzdCbysZjhcbBo bo) { | ||||||
|  |         XzdCbysZjhcb add = MapstructUtils.convert(bo, XzdCbysZjhcb.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         String banBen = BatchNumberGenerator.generateBatchNumber("LXCBZTJHCB-"); | ||||||
|  |         add.setDocCode(banBen); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         if (bo.getXzdCbysSscb() == null || bo.getXzdCbysSscb().isEmpty()) { | ||||||
|  |             throw new ServiceException("税收成本不能为空"); | ||||||
|  |         } | ||||||
|  |         if (bo.getXzdCbysZtjhcbBgjl() == null || bo.getXzdCbysZtjhcbBgjl().isEmpty()) { | ||||||
|  |             throw new ServiceException("变更记录不能为空"); | ||||||
|  |         } | ||||||
|  |         if (bo.getXzdCbysWgcbtbFubiao() == null || bo.getXzdCbysWgcbtbFubiao().isEmpty()) { | ||||||
|  |             throw new ServiceException("成本明细不能为空"); | ||||||
|  |         } | ||||||
|  |         bo.getXzdCbysSscb().forEach(item -> {item.setMainDocumentId(add.getId());}); | ||||||
|  |         xzdCbysSscbService.saveBatch(bo.getXzdCbysSscb()); | ||||||
|  |         bo.getXzdCbysZtjhcbBgjl().forEach(item -> {item.setMainDocumentId(add.getId());}); | ||||||
|  |         xzdCbysZtjhcbBgjlService.saveBatch(bo.getXzdCbysZtjhcbBgjl()); | ||||||
|  |         bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocumentId(add.getId());}); | ||||||
|  |         fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao()); | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-总体计划成本 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-总体计划成本 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     @Transactional(rollbackFor = Exception.class) | ||||||
|  |     public Boolean updateByBo(XzdCbysZjhcbBo bo) { | ||||||
|  |         XzdCbysZjhcb update = MapstructUtils.convert(bo, XzdCbysZjhcb.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |         if (bo.getXzdCbysSscb() == null || bo.getXzdCbysSscb().isEmpty()) { | ||||||
|  |             throw new ServiceException("税收成本不能为空"); | ||||||
|  |         } | ||||||
|  |         if (bo.getXzdCbysZtjhcbBgjl() == null || bo.getXzdCbysZtjhcbBgjl().isEmpty()) { | ||||||
|  |             throw new ServiceException("变更记录不能为空"); | ||||||
|  |         } | ||||||
|  |         if (bo.getXzdCbysWgcbtbFubiao() == null || bo.getXzdCbysWgcbtbFubiao().isEmpty()) { | ||||||
|  |             throw new ServiceException("成本明细不能为空"); | ||||||
|  |         } | ||||||
|  |         xzdCbysZtjhcbBgjlService.remove(new LambdaQueryWrapper<XzdCbysZtjhcbBgjl>().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, bo.getId())); | ||||||
|  |         xzdCbysSscbService.remove(new LambdaQueryWrapper<XzdCbysSscb>().eq(XzdCbysSscb::getMainDocumentId, bo.getId())); | ||||||
|  |         fubiaoService.remove(new LambdaQueryWrapper<XzdCbysZjhcbFubiao>().eq(XzdCbysZjhcbFubiao::getMainDocumentId, bo.getId())); | ||||||
|  |         bo.getXzdCbysSscb().forEach(item -> {item.setMainDocumentId(bo.getId());}); | ||||||
|  |         xzdCbysSscbService.saveBatch(bo.getXzdCbysSscb()); | ||||||
|  |         bo.getXzdCbysZtjhcbBgjl().forEach(item -> {item.setMainDocumentId(bo.getId());}); | ||||||
|  |         xzdCbysZtjhcbBgjlService.saveBatch(bo.getXzdCbysZtjhcbBgjl()); | ||||||
|  |         bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocumentId(bo.getId());}); | ||||||
|  |         fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao()); | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdCbysZjhcb entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-总体计划成本信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     @Transactional(rollbackFor = Exception.class) | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         List<Long> deleteIds = new ArrayList<>(); | ||||||
|  |         for (Long id : ids) { | ||||||
|  |             XzdCbysZjhcbVo vo = baseMapper.selectVoById(id); | ||||||
|  |             if (vo != null){ | ||||||
|  |                 //删除附件 | ||||||
|  |                 if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ | ||||||
|  |                     List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); | ||||||
|  |                     deleteIds.addAll(list); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (!deleteIds.isEmpty()) { | ||||||
|  |             sysOssService.deleteWithValidByIds(deleteIds, false); | ||||||
|  |         } | ||||||
|  |         xzdCbysZtjhcbBgjlService.remove(new LambdaQueryWrapper<XzdCbysZtjhcbBgjl>().in(XzdCbysZtjhcbBgjl::getMainDocumentId, ids)); | ||||||
|  |         xzdCbysSscbService.remove(new LambdaQueryWrapper<XzdCbysSscb>().in(XzdCbysSscb::getMainDocumentId, ids)); | ||||||
|  |         fubiaoService.remove(new LambdaQueryWrapper<XzdCbysZjhcbFubiao>().in(XzdCbysZjhcbFubiao::getMainDocumentId, ids)); | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Override | ||||||
|  |     public String queryNameById(Long id) { | ||||||
|  |         return baseMapper.selectVoById(id).getDocTitle(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取部分字段名称 | ||||||
|  |      * @param item | ||||||
|  |      */ | ||||||
|  |     private void getName(XzdCbysZjhcbVo item) { | ||||||
|  |         //项目名称 | ||||||
|  |         if (item.getProjectId() != null){ | ||||||
|  |             String projectName = xzdProjectService.queryNameById(item.getProjectId()); | ||||||
|  |             if (projectName != null){ | ||||||
|  |                 item.setProjectName(projectName); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (item.getProjectLeader() != null){ | ||||||
|  |             String name = sysUserService.queryNameById(item.getProjectLeader()); | ||||||
|  |             if (name != null){ | ||||||
|  |                 item.setProjectLeaderName(name); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (item.getExecProjectManager() != null){ | ||||||
|  |             String name = sysUserService.queryNameById(item.getExecProjectManager()); | ||||||
|  |             if (name != null){ | ||||||
|  |                 item.setExecProjectManagerName(name); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取扣款与奖励项 | ||||||
|  |      * @param vo | ||||||
|  |      */ | ||||||
|  |     private void getHttk(XzdCbysZjhcbVo vo) { | ||||||
|  |         List<XzdCbysZtjhcbBgjl> xzdCbysZtjhcbBgjls = xzdCbysZtjhcbBgjlService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysZtjhcbBgjl>().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, vo.getId())); | ||||||
|  |         vo.setXzdCbysZtjhcbBgjl(xzdCbysZtjhcbBgjls); | ||||||
|  |         List<XzdCbysSscb> xzdCbysSscbs = xzdCbysSscbService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysSscb>().eq(XzdCbysSscb::getMainDocumentId, vo.getId())); | ||||||
|  |         vo.setXzdCbysSscb(xzdCbysSscbs); | ||||||
|  |         List<XzdCbysZjhcbFubiao> xzdCbysWgcbtbFubiaos = fubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysZjhcbFubiao>().eq(XzdCbysZjhcbFubiao::getMainDocumentId, vo.getId())); | ||||||
|  |         vo.setXzdCbysWgcbtbFubiao(xzdCbysWgcbtbFubiaos); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,141 @@ | |||||||
|  | package org.dromara.xzd.costProjectApproval.costBudget.service.impl; | ||||||
|  |  | ||||||
|  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||||
|  | import org.dromara.common.core.utils.MapstructUtils; | ||||||
|  | import org.dromara.common.core.utils.StringUtils; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||||
|  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import org.springframework.stereotype.Service; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZtjhcbBgjlBo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZtjhcbBgjlVo; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZtjhcbBgjlMapper; | ||||||
|  | import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZtjhcbBgjlService; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Collection; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 立项及成本-成本预算-变更记录Service业务层处理 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @Service | ||||||
|  | public class XzdCbysZtjhcbBgjlServiceImpl extends ServiceImpl<XzdCbysZtjhcbBgjlMapper, XzdCbysZtjhcbBgjl> implements IXzdCbysZtjhcbBgjlService { | ||||||
|  |  | ||||||
|  |     private final XzdCbysZtjhcbBgjlMapper baseMapper; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询立项及成本-成本预算-变更记录 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      * @return 立项及成本-成本预算-变更记录 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public XzdCbysZtjhcbBgjlVo queryById(Long id){ | ||||||
|  |         return baseMapper.selectVoById(id); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 分页查询立项及成本-成本预算-变更记录列表 | ||||||
|  |      * | ||||||
|  |      * @param bo        查询条件 | ||||||
|  |      * @param pageQuery 分页参数 | ||||||
|  |      * @return 立项及成本-成本预算-变更记录分页列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public TableDataInfo<XzdCbysZtjhcbBgjlVo> queryPageList(XzdCbysZtjhcbBgjlBo bo, PageQuery pageQuery) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysZtjhcbBgjl> lqw = buildQueryWrapper(bo); | ||||||
|  |         Page<XzdCbysZtjhcbBgjlVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||||
|  |         return TableDataInfo.build(result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询符合条件的立项及成本-成本预算-变更记录列表 | ||||||
|  |      * | ||||||
|  |      * @param bo 查询条件 | ||||||
|  |      * @return 立项及成本-成本预算-变更记录列表 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public List<XzdCbysZtjhcbBgjlVo> queryList(XzdCbysZtjhcbBgjlBo bo) { | ||||||
|  |         LambdaQueryWrapper<XzdCbysZtjhcbBgjl> lqw = buildQueryWrapper(bo); | ||||||
|  |         return baseMapper.selectVoList(lqw); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private LambdaQueryWrapper<XzdCbysZtjhcbBgjl> buildQueryWrapper(XzdCbysZtjhcbBgjlBo bo) { | ||||||
|  |         Map<String, Object> params = bo.getParams(); | ||||||
|  |         LambdaQueryWrapper<XzdCbysZtjhcbBgjl> lqw = Wrappers.lambdaQuery(); | ||||||
|  |         lqw.orderByDesc(XzdCbysZtjhcbBgjl::getId); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysZtjhcbBgjl::getDocCode, bo.getDocCode()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysZtjhcbBgjl::getDocTitle, bo.getDocTitle()); | ||||||
|  |         lqw.eq(bo.getDocDate() != null, XzdCbysZtjhcbBgjl::getDocDate, bo.getDocDate()); | ||||||
|  |         lqw.like(StringUtils.isNotBlank(bo.getProjectName()), XzdCbysZtjhcbBgjl::getProjectName, bo.getProjectName()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getChangeSource()), XzdCbysZtjhcbBgjl::getChangeSource, bo.getChangeSource()); | ||||||
|  |         lqw.eq(bo.getChangeTaxExclAmount() != null, XzdCbysZtjhcbBgjl::getChangeTaxExclAmount, bo.getChangeTaxExclAmount()); | ||||||
|  |         lqw.eq(bo.getChangeTaxInclAmount() != null, XzdCbysZtjhcbBgjl::getChangeTaxInclAmount, bo.getChangeTaxInclAmount()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getApprover()), XzdCbysZtjhcbBgjl::getApprover, bo.getApprover()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getProjectLeader()), XzdCbysZtjhcbBgjl::getProjectLeader, bo.getProjectLeader()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysZtjhcbBgjl::getDocumentReference, bo.getDocumentReference()); | ||||||
|  |         lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysZtjhcbBgjl::getFileId, bo.getFileId()); | ||||||
|  |         return lqw; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增立项及成本-成本预算-变更记录 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-变更记录 | ||||||
|  |      * @return 是否新增成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean insertByBo(XzdCbysZtjhcbBgjlBo bo) { | ||||||
|  |         XzdCbysZtjhcbBgjl add = MapstructUtils.convert(bo, XzdCbysZtjhcbBgjl.class); | ||||||
|  |         validEntityBeforeSave(add); | ||||||
|  |         boolean flag = baseMapper.insert(add) > 0; | ||||||
|  |         if (flag) { | ||||||
|  |             bo.setId(add.getId()); | ||||||
|  |         } | ||||||
|  |         return flag; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改立项及成本-成本预算-变更记录 | ||||||
|  |      * | ||||||
|  |      * @param bo 立项及成本-成本预算-变更记录 | ||||||
|  |      * @return 是否修改成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean updateByBo(XzdCbysZtjhcbBgjlBo bo) { | ||||||
|  |         XzdCbysZtjhcbBgjl update = MapstructUtils.convert(bo, XzdCbysZtjhcbBgjl.class); | ||||||
|  |         validEntityBeforeSave(update); | ||||||
|  |         return baseMapper.updateById(update) > 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 保存前的数据校验 | ||||||
|  |      */ | ||||||
|  |     private void validEntityBeforeSave(XzdCbysZtjhcbBgjl entity){ | ||||||
|  |         //TODO 做一些数据校验,如唯一约束 | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验并批量删除立项及成本-成本预算-变更记录信息 | ||||||
|  |      * | ||||||
|  |      * @param ids     待删除的主键集合 | ||||||
|  |      * @param isValid 是否进行有效性校验 | ||||||
|  |      * @return 是否删除成功 | ||||||
|  |      */ | ||||||
|  |     @Override | ||||||
|  |     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { | ||||||
|  |         if(isValid){ | ||||||
|  |             //TODO 做一些业务上的校验,判断是否需要校验 | ||||||
|  |         } | ||||||
|  |         return baseMapper.deleteByIds(ids) > 0; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceVo; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo.AppreciationInvoiceBo; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.IAppreciationInvoiceService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 增值税发票 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/zengzhishui/invoice") | ||||||
|  | public class AppreciationInvoiceController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final IAppreciationInvoiceService appreciationInvoiceService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询增值税发票列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:invoice:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<AppreciationInvoiceVo> list(AppreciationInvoiceBo bo, PageQuery pageQuery) { | ||||||
|  |         return appreciationInvoiceService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出增值税发票列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:invoice:export") | ||||||
|  |     @Log(title = "增值税发票", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(AppreciationInvoiceBo bo, HttpServletResponse response) { | ||||||
|  |         List<AppreciationInvoiceVo> list = appreciationInvoiceService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "增值税发票", AppreciationInvoiceVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取增值税发票详细信息 | ||||||
|  |      * | ||||||
|  |      * @param id 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:invoice:query") | ||||||
|  |     @GetMapping("/{id}") | ||||||
|  |     public R<AppreciationInvoiceVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable Long id) { | ||||||
|  |         return R.ok(appreciationInvoiceService.queryById(id)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增增值税发票 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:invoice:add") | ||||||
|  |     @Log(title = "增值税发票", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody AppreciationInvoiceBo bo) { | ||||||
|  |         return toAjax(appreciationInvoiceService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改增值税发票 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:invoice:edit") | ||||||
|  |     @Log(title = "增值税发票", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody AppreciationInvoiceBo bo) { | ||||||
|  |         return toAjax(appreciationInvoiceService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除增值税发票 | ||||||
|  |      * | ||||||
|  |      * @param ids 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:invoice:remove") | ||||||
|  |     @Log(title = "增值税发票", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{ids}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable Long[] ids) { | ||||||
|  |         return toAjax(appreciationInvoiceService.deleteWithValidByIds(List.of(ids), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,105 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.controller; | ||||||
|  |  | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
|  | import jakarta.servlet.http.HttpServletResponse; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import cn.dev33.satoken.annotation.SaCheckPermission; | ||||||
|  | import org.springframework.web.bind.annotation.*; | ||||||
|  | import org.springframework.validation.annotation.Validated; | ||||||
|  | import org.dromara.common.idempotent.annotation.RepeatSubmit; | ||||||
|  | import org.dromara.common.log.annotation.Log; | ||||||
|  | import org.dromara.common.web.core.BaseController; | ||||||
|  | import org.dromara.common.mybatis.core.page.PageQuery; | ||||||
|  | import org.dromara.common.core.domain.R; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import org.dromara.common.log.enums.BusinessType; | ||||||
|  | import org.dromara.common.excel.utils.ExcelUtil; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.TaxInfoVo; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo.TaxInfoBo; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.ITaxInfoService; | ||||||
|  | import org.dromara.common.mybatis.core.page.TableDataInfo; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 征税项目 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Validated | ||||||
|  | @RequiredArgsConstructor | ||||||
|  | @RestController | ||||||
|  | @RequestMapping("/zengzhishui/info") | ||||||
|  | public class TaxInfoController extends BaseController { | ||||||
|  |  | ||||||
|  |     private final ITaxInfoService taxInfoService; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 查询征税项目列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:info:list") | ||||||
|  |     @GetMapping("/list") | ||||||
|  |     public TableDataInfo<TaxInfoVo> list(TaxInfoBo bo, PageQuery pageQuery) { | ||||||
|  |         return taxInfoService.queryPageList(bo, pageQuery); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 导出征税项目列表 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:info:export") | ||||||
|  |     @Log(title = "征税项目", businessType = BusinessType.EXPORT) | ||||||
|  |     @PostMapping("/export") | ||||||
|  |     public void export(TaxInfoBo bo, HttpServletResponse response) { | ||||||
|  |         List<TaxInfoVo> list = taxInfoService.queryList(bo); | ||||||
|  |         ExcelUtil.exportExcel(list, "征税项目", TaxInfoVo.class, response); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 获取征税项目详细信息 | ||||||
|  |      * | ||||||
|  |      * @param levyCode 主键 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:info:query") | ||||||
|  |     @GetMapping("/{levyCode}") | ||||||
|  |     public R<TaxInfoVo> getInfo(@NotNull(message = "主键不能为空") | ||||||
|  |                                      @PathVariable String levyCode) { | ||||||
|  |         return R.ok(taxInfoService.queryById(levyCode)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 新增征税项目 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:info:add") | ||||||
|  |     @Log(title = "征税项目", businessType = BusinessType.INSERT) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PostMapping() | ||||||
|  |     public R<Void> add(@Validated(AddGroup.class) @RequestBody TaxInfoBo bo) { | ||||||
|  |         return toAjax(taxInfoService.insertByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 修改征税项目 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:info:edit") | ||||||
|  |     @Log(title = "征税项目", businessType = BusinessType.UPDATE) | ||||||
|  |     @RepeatSubmit() | ||||||
|  |     @PutMapping() | ||||||
|  |     public R<Void> edit(@Validated(EditGroup.class) @RequestBody TaxInfoBo bo) { | ||||||
|  |         return toAjax(taxInfoService.updateByBo(bo)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 删除征税项目 | ||||||
|  |      * | ||||||
|  |      * @param levyCodes 主键串 | ||||||
|  |      */ | ||||||
|  |     @SaCheckPermission("zengzhishui:info:remove") | ||||||
|  |     @Log(title = "征税项目", businessType = BusinessType.DELETE) | ||||||
|  |     @DeleteMapping("/{levyCodes}") | ||||||
|  |     public R<Void> remove(@NotEmpty(message = "主键不能为空") | ||||||
|  |                           @PathVariable String[] levyCodes) { | ||||||
|  |         return toAjax(taxInfoService.deleteWithValidByIds(List.of(levyCodes), true)); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,210 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.Date; | ||||||
|  | import com.fasterxml.jackson.annotation.JsonFormat; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 增值税发票对象 appreciation_invoice | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @TableName("appreciation_invoice") | ||||||
|  | public class AppreciationInvoice extends BaseEntity { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @TableId(value = "id") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票类型 | ||||||
|  |      */ | ||||||
|  |     private String invoiceType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目 | ||||||
|  |      */ | ||||||
|  |     private Long project; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同号 承包合同 | ||||||
|  |      */ | ||||||
|  |     private Long contractNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 录入日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate entryDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     private Long year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 会计期 | ||||||
|  |      */ | ||||||
|  |     private Long accountingPeriod; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 销项类型 | ||||||
|  |      */ | ||||||
|  |     private String taxType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征税项目 | ||||||
|  |      */ | ||||||
|  |     private Long taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 所属组织 | ||||||
|  |      */ | ||||||
|  |     private Long organization; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 经办人 | ||||||
|  |      */ | ||||||
|  |     private Long handler; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票用途 | ||||||
|  |      */ | ||||||
|  |     private String invoicePurpose; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票代码 | ||||||
|  |      */ | ||||||
|  |     private String invoiceCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票号码 | ||||||
|  |      */ | ||||||
|  |     private String invoiceNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开票日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate invoiceDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 公司税号 | ||||||
|  |      */ | ||||||
|  |     private String companyTaxNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 公司名称 | ||||||
|  |      */ | ||||||
|  |     private String companyName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal amount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 价税合计 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal totalAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方税号 | ||||||
|  |      */ | ||||||
|  |     private String buyerTaxNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方名称 | ||||||
|  |      */ | ||||||
|  |     private Long buyerName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方纳税人名称 | ||||||
|  |      */ | ||||||
|  |     private String buyerTaxpayerName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 跨区涉税报告 | ||||||
|  |      */ | ||||||
|  |     private String crossTaxReport; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 3%征收率减按2%征收标识(0为否,1为是) | ||||||
|  |      */ | ||||||
|  |     private Long percentageCharges; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 减征额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal deductionAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 拆分标志 | ||||||
|  |      */ | ||||||
|  |     private String splitFlag; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验码 | ||||||
|  |      */ | ||||||
|  |     private String checkCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 机器编码 | ||||||
|  |      */ | ||||||
|  |     private String machineCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注信息1 | ||||||
|  |      */ | ||||||
|  |     private String remark1; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注信息2 | ||||||
|  |      */ | ||||||
|  |     private String remark2; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数电票号码 | ||||||
|  |      */ | ||||||
|  |     private String electronicInvoiceNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 审核状态 | ||||||
|  |      */ | ||||||
|  |     private String auditStatus; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,44 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain; | ||||||
|  |  | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import com.baomidou.mybatisplus.annotation.*; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 征税项目对象 tax_info | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @TableName("tax_info") | ||||||
|  | public class TaxInfo  { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征收编码 | ||||||
|  |      */ | ||||||
|  |     private String levyCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征收方式 | ||||||
|  |      */ | ||||||
|  |     private String levyMethod; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征税项目 | ||||||
|  |      */ | ||||||
|  |     private String taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     private String taxRate; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,209 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.Date; | ||||||
|  | import com.fasterxml.jackson.annotation.JsonFormat; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 增值税发票业务对象 appreciation_invoice | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @EqualsAndHashCode(callSuper = true) | ||||||
|  | @AutoMapper(target = AppreciationInvoice.class, reverseConvertGenerate = false) | ||||||
|  | public class AppreciationInvoiceBo extends BaseEntity { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票类型 | ||||||
|  |      */ | ||||||
|  |     private String invoiceType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目 | ||||||
|  |      */ | ||||||
|  |     private Long project; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同号 承包合同 | ||||||
|  |      */ | ||||||
|  |     private Long contractNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 录入日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate entryDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     private Long year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 会计期 | ||||||
|  |      */ | ||||||
|  |     private Long accountingPeriod; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 销项类型 | ||||||
|  |      */ | ||||||
|  |     private String taxType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征税项目 | ||||||
|  |      */ | ||||||
|  |     private Long taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 所属组织 | ||||||
|  |      */ | ||||||
|  |     private Long organization; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 经办人 | ||||||
|  |      */ | ||||||
|  |     private Long handler; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票用途 | ||||||
|  |      */ | ||||||
|  |     private String invoicePurpose; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票代码 | ||||||
|  |      */ | ||||||
|  |     private String invoiceCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票号码 | ||||||
|  |      */ | ||||||
|  |     private String invoiceNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开票日期 | ||||||
|  |      */ | ||||||
|  |     private LocalDate invoiceDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 公司税号 | ||||||
|  |      */ | ||||||
|  |     private String companyTaxNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 公司名称 | ||||||
|  |      */ | ||||||
|  |     private String companyName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 金额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal amount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 价税合计 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal totalAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方税号 | ||||||
|  |      */ | ||||||
|  |     private String buyerTaxNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方名称 | ||||||
|  |      */ | ||||||
|  |     private Long buyerName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方纳税人名称 | ||||||
|  |      */ | ||||||
|  |     private String buyerTaxpayerName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 跨区涉税报告 | ||||||
|  |      */ | ||||||
|  |     private String crossTaxReport; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 3%征收率减按2%征收标识(0为否,1为是) | ||||||
|  |      */ | ||||||
|  |     private Long percentageCharges; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 减征额 | ||||||
|  |      */ | ||||||
|  |     private BigDecimal deductionAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 拆分标志 | ||||||
|  |      */ | ||||||
|  |     private String splitFlag; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验码 | ||||||
|  |      */ | ||||||
|  |     private String checkCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 机器编码 | ||||||
|  |      */ | ||||||
|  |     private String machineCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注信息1 | ||||||
|  |      */ | ||||||
|  |     private String remark1; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注信息2 | ||||||
|  |      */ | ||||||
|  |     private String remark2; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数电票号码 | ||||||
|  |      */ | ||||||
|  |     private String electronicInvoiceNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 审核状态 | ||||||
|  |      */ | ||||||
|  |     private String auditStatus; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,43 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo; | ||||||
|  | import org.dromara.common.mybatis.core.domain.BaseEntity; | ||||||
|  | import org.dromara.common.core.validate.AddGroup; | ||||||
|  | import org.dromara.common.core.validate.EditGroup; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  | import lombok.EqualsAndHashCode; | ||||||
|  | import jakarta.validation.constraints.*; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 征税项目业务对象 tax_info | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @AutoMapper(target = TaxInfo.class, reverseConvertGenerate = false) | ||||||
|  | public class TaxInfoBo  { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征收编码 | ||||||
|  |      */ | ||||||
|  |     private String levyCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征收方式 | ||||||
|  |      */ | ||||||
|  |     private String levyMethod; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征税项目 | ||||||
|  |      */ | ||||||
|  |     private String taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     private String taxRate; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,295 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo; | ||||||
|  |  | ||||||
|  | import java.math.BigDecimal; | ||||||
|  | import java.time.LocalDate; | ||||||
|  | import java.util.Date; | ||||||
|  | import com.fasterxml.jackson.annotation.JsonFormat; | ||||||
|  | import org.dromara.common.translation.annotation.Translation; | ||||||
|  | import org.dromara.common.translation.constant.TransConstant; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 增值税发票视图对象 appreciation_invoice | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = AppreciationInvoice.class) | ||||||
|  | public class AppreciationInvoiceVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 主键ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "主键ID") | ||||||
|  |     private Long id; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票类型 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "发票类型") | ||||||
|  |     private String invoiceType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "项目") | ||||||
|  |     private Long project; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 项目名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "项目名称") | ||||||
|  |     private String projectName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同号 承包合同 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "合同号 承包合同") | ||||||
|  |     private Long contractNo; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 合同号 承包合同编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "合同号 承包合同编码") | ||||||
|  |     private String contractNoName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 录入日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "录入日期") | ||||||
|  |     private LocalDate entryDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 年度 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "年度") | ||||||
|  |     private Long year; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 会计期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "会计期") | ||||||
|  |     private Long accountingPeriod; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 销项类型 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "销项类型") | ||||||
|  |     private String taxType; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征税项目 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "征税项目") | ||||||
|  |     private Long taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征税项目名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "征税项目名称") | ||||||
|  |     private String taxItemName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 所属组织 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "所属组织") | ||||||
|  |     private Long organization; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 所属组织名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "所属组织名称") | ||||||
|  |     @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "organization") | ||||||
|  |     private String organizationName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 经办人 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "经办人") | ||||||
|  |     private Long handler; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 经办人名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "经办人名称") | ||||||
|  |     @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "handler") | ||||||
|  |     private String handlerNme; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票用途 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "发票用途") | ||||||
|  |     private String invoicePurpose; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票代码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "发票代码") | ||||||
|  |     private String invoiceCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 发票号码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "发票号码") | ||||||
|  |     private String invoiceNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 开票日期 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "开票日期") | ||||||
|  |     private LocalDate invoiceDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 公司税号 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "公司税号") | ||||||
|  |     private String companyTaxNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 公司名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "公司名称") | ||||||
|  |     private String companyName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 金额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "金额") | ||||||
|  |     private BigDecimal amount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "税额") | ||||||
|  |     private BigDecimal taxAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "税率") | ||||||
|  |     private BigDecimal taxRate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 价税合计 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "价税合计") | ||||||
|  |     private BigDecimal totalAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方税号 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "购方税号") | ||||||
|  |     private String buyerTaxNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方名称(客户id) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "购方名称 id") | ||||||
|  |     private Long buyerName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "购方名称") | ||||||
|  |     private String buyerNameS; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 购方纳税人名称 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "购方纳税人名称") | ||||||
|  |     private String buyerTaxpayerName; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 跨区涉税报告 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "跨区涉税报告") | ||||||
|  |     private String crossTaxReport; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 3%征收率减按2%征收标识(0为否,1为是) | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "3%征收率减按2%征收标识", converter = ExcelDictConvert.class) | ||||||
|  |     @ExcelDictFormat(readConverterExp = "0=为否,1为是") | ||||||
|  |     private Long percentageCharges; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 减征额 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "减征额") | ||||||
|  |     private BigDecimal deductionAmount; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 拆分标志 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "拆分标志") | ||||||
|  |     private String splitFlag; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 校验码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "校验码") | ||||||
|  |     private String checkCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 机器编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "机器编码") | ||||||
|  |     private String machineCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注信息1 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注信息1") | ||||||
|  |     private String remark1; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注信息2 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注信息2") | ||||||
|  |     private String remark2; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 数电票号码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "数电票号码") | ||||||
|  |     private String electronicInvoiceNo; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 文件ID | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "文件ID") | ||||||
|  |     private String fileId; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 备注 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "备注") | ||||||
|  |     private String remark; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 审核状态 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "审核状态") | ||||||
|  |     private String auditStatus; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,56 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo; | ||||||
|  | import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; | ||||||
|  | import com.alibaba.excel.annotation.ExcelProperty; | ||||||
|  | import org.dromara.common.excel.annotation.ExcelDictFormat; | ||||||
|  | import org.dromara.common.excel.convert.ExcelDictConvert; | ||||||
|  | import io.github.linpeilie.annotations.AutoMapper; | ||||||
|  | import lombok.Data; | ||||||
|  |  | ||||||
|  | import java.io.Serial; | ||||||
|  | import java.io.Serializable; | ||||||
|  | import java.util.Date; | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 征税项目视图对象 tax_info | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | @Data | ||||||
|  | @ExcelIgnoreUnannotated | ||||||
|  | @AutoMapper(target = TaxInfo.class) | ||||||
|  | public class TaxInfoVo implements Serializable { | ||||||
|  |  | ||||||
|  |     @Serial | ||||||
|  |     private static final long serialVersionUID = 1L; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征收编码 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "征收编码") | ||||||
|  |     private String levyCode; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征收方式 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "征收方式") | ||||||
|  |     private String levyMethod; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 征税项目 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "征税项目") | ||||||
|  |     private String taxItem; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 税率 | ||||||
|  |      */ | ||||||
|  |     @ExcelProperty(value = "税率") | ||||||
|  |     private String taxRate; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -0,0 +1,15 @@ | |||||||
|  | package org.dromara.xzd.fapiaotaizhang.zengzhishui.mapper; | ||||||
|  |  | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice; | ||||||
|  | import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceVo; | ||||||
|  | import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 增值税发票Mapper接口 | ||||||
|  |  * | ||||||
|  |  * @author Lion Li | ||||||
|  |  * @date 2025-10-17 | ||||||
|  |  */ | ||||||
|  | public interface AppreciationInvoiceMapper extends BaseMapperPlus<AppreciationInvoice, AppreciationInvoiceVo> { | ||||||
|  |  | ||||||
|  | } | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user