From 1acc676b0f28495868aba89f78a44254ca593f7f Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 17 Oct 2025 10:15:11 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 2 +- .../org/dromara/job/design/DesignFileJob.java | 12 ++++--- .../dromara/job/inspection/InspectionJob.java | 34 +++++++++++++------ 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml index c9346ea9..ee6ff61d 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml @@ -175,7 +175,7 @@ sms: # 配置源类型用于标定配置来源(interface,yaml) config-type: yaml # 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制 - restricted: true + restricted: false # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 minute-max: 1 # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/design/DesignFileJob.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/design/DesignFileJob.java index cc017494..7810fe93 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/design/DesignFileJob.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/design/DesignFileJob.java @@ -19,9 +19,7 @@ import org.dromara.system.service.ISysRoleService; import org.dromara.system.service.ISysUserService; import org.springframework.stereotype.Component; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; @Slf4j @Component @@ -59,6 +57,7 @@ public class DesignFileJob { .eq(DesSmsRecord::getAgain, "1") .le(DesSmsRecord::getCreateTime, threeDaysAgo) // Date类型直接比较 ); + HashSet phoneNumbers = new HashSet<>(); for (DesSmsRecord record : records) { DesVolumeFile desVolumeFile = designFileService.getById(record.getVolumeFileId()); DesVolumeCatalog desVolumeCatalog = volumeCatalogService.getById(desVolumeFile.getVolumeCatalogId()); @@ -85,10 +84,13 @@ public class DesignFileJob { List list1 = list.stream().map(DesVolumeFileViewer::getUserId).toList(); //找出没有查看的人 发送短信 List 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 list1 = records.stream().map(DesSmsRecord::getId).toList(); desSmsRecordService.lambdaUpdate().in(DesSmsRecord::getId, list1) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/inspection/InspectionJob.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/inspection/InspectionJob.java index cbedf9c1..028ee81b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/inspection/InspectionJob.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/inspection/InspectionJob.java @@ -51,32 +51,40 @@ public class InspectionJob { SmsBlend smsBlend = SmsFactory.getSmsBlend("config4"); + List phones = new ArrayList<>(); + List userIds = new ArrayList<>(); // 每500条记录作为一批进行处理 int batchSize = 500; for (int i = 0; i < list.size(); i += batchSize) { int endIndex = Math.min(i + batchSize, list.size()); List batch = list.subList(i, endIndex); - List userIds = new ArrayList<>(); + for (QltQualityInspection qualityInspection : batch) { Long correctorId = qualityInspection.getCorrectorId(); String phonenumber = userService.queryById(correctorId).getPhonenumber(); if (phonenumber == null) { continue; } + if(phones.contains(phonenumber)){ + continue; + } + phones.add(phonenumber); SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap()); if (!smsResponse.isSuccess()) { log.error("验证码短信发送异常 => {}", smsResponse); } - userIds.add(correctorId); - } - if(userIds.isEmpty()){ - continue; + if(!userIds.contains(correctorId)){ + userIds.add(correctorId); + } + } + log.info("质量工单短信提醒批次发送完成,当前批次数量: {}", batch.size()); + } + if(!userIds.isEmpty()){ SseMessageDto sseMessageDto = new SseMessageDto(); sseMessageDto.setMessage("您负责整改的质量工单已逾期,请尽快前往处理!"); sseMessageDto.setUserIds(userIds); SseMessageUtils.publishMessage(sseMessageDto); - log.info("质量工单短信提醒批次发送完成,当前批次数量: {}", batch.size()); } log.info("执行定时任务:质量工单短信提醒完成,总处理数量: {}", list.size()); @@ -93,34 +101,38 @@ public class InspectionJob { SmsBlend smsBlend = SmsFactory.getSmsBlend("config6"); + List phones = new ArrayList<>(); + List userIds = new ArrayList<>(); // 每500条记录作为一批进行处理 int batchSize = 500; for (int i = 0; i < list.size(); i += batchSize) { int endIndex = Math.min(i + batchSize, list.size()); List batch = list.subList(i, endIndex); - List userIds = new ArrayList<>(); for (HseSafetyInspection safetyInspection : batch) { Long correctorId = safetyInspection.getCorrectorId(); String phonenumber = userService.queryById(correctorId).getPhonenumber(); if (phonenumber == null) { continue; } + if(phones.contains(phonenumber)){ + continue; + } + phones.add(phonenumber); SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap()); if (!smsResponse.isSuccess()) { log.error("验证码短信发送异常 => {}", smsResponse); } userIds.add(correctorId); } - + log.info("安全工单短信提醒批次发送完成,当前批次数量: {}", batch.size()); + } + if(!userIds.isEmpty()){ SseMessageDto sseMessageDto = new SseMessageDto(); sseMessageDto.setMessage("您负责整改的安全工单已逾期,请尽快前往处理!"); sseMessageDto.setUserIds(userIds); SseMessageUtils.publishMessage(sseMessageDto); - - log.info("安全工单短信提醒批次发送完成,当前批次数量: {}", batch.size()); } - log.info("执行定时任务:安全工单短信提醒完成,总处理数量: {}", list.size()); } } From bfc3ea60fdb3dae1d2586d45e593b58e10c588be Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Fri, 17 Oct 2025 10:34:03 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E7=AB=8B=E9=A1=B9=E4=B8=8E=E6=88=90?= =?UTF-8?q?=E6=9C=AC-=E6=88=90=E6=9C=AC=E9=A2=84=E7=AE=97-=E5=AE=8C?= =?UTF-8?q?=E5=B7=A5=E6=88=90=E6=9C=AC=E5=A1=AB=E6=8A=A5=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/XzdCbysWgcbtbController.java | 105 +++++++++++++ .../XzdCbysWgcbtbFubiaoController.java | 105 +++++++++++++ .../costBudget/domain/XzdCbysWgcbtb.java | 112 +++++++++++++ .../domain/XzdCbysWgcbtbFubiao.java | 122 +++++++++++++++ .../costBudget/domain/bo/XzdCbysWgcbtbBo.java | 114 ++++++++++++++ .../domain/bo/XzdCbysWgcbtbFubiaoBo.java | 121 ++++++++++++++ .../domain/vo/XzdCbysWgcbtbFubiaoVo.java | 148 ++++++++++++++++++ .../costBudget/domain/vo/XzdCbysWgcbtbVo.java | 138 ++++++++++++++++ .../mapper/XzdCbysWgcbtbFubiaoMapper.java | 15 ++ .../mapper/XzdCbysWgcbtbMapper.java | 15 ++ .../service/IXzdCbysWgcbtbFubiaoService.java | 70 +++++++++ .../service/IXzdCbysWgcbtbService.java | 70 +++++++++ .../impl/XzdCbysWgcbtbFubiaoServiceImpl.java | 148 ++++++++++++++++++ .../impl/XzdCbysWgcbtbServiceImpl.java | 145 +++++++++++++++++ .../controller/XzdSfkCaigouFkController.java | 2 +- .../XzdSfkZonhefuwuFkController.java | 2 +- .../costBudget/XzdCbysWgcbtbFubiaoMapper.xml | 7 + .../costBudget/XzdCbysWgcbtbMapper.xml | 7 + 18 files changed, 1444 insertions(+), 2 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysWgcbtbController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysWgcbtbFubiaoController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtb.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtbFubiao.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysWgcbtbFubiaoMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysWgcbtbMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysWgcbtbFubiaoService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysWgcbtbService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbFubiaoServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysWgcbtbFubiaoMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysWgcbtbMapper.xml diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysWgcbtbController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysWgcbtbController.java new file mode 100644 index 00000000..084338cf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysWgcbtbController.java @@ -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 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 list = xzdCbysWgcbtbService.queryList(bo); + ExcelUtil.exportExcel(list, "立项及成本-成本预算-完工成本填报", XzdCbysWgcbtbVo.class, response); + } + + /** + * 获取立项及成本-成本预算-完工成本填报详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("costBudget:cbysWgcbtb:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdCbysWgcbtbService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysWgcbtbFubiaoController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysWgcbtbFubiaoController.java new file mode 100644 index 00000000..7161993e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysWgcbtbFubiaoController.java @@ -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 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 list = xzdCbysWgcbtbFubiaoService.queryList(bo); + ExcelUtil.exportExcel(list, "立项及成本-成本预算-附", XzdCbysWgcbtbFubiaoVo.class, response); + } + + /** + * 获取立项及成本-成本预算-附详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("costBudget:cbysWgcbtbFubiao:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdCbysWgcbtbFubiaoService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtb.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtb.java new file mode 100644 index 00000000..fd4ea41e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtb.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtbFubiao.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtbFubiao.java new file mode 100644 index 00000000..377b2d94 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtbFubiao.java @@ -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_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; + + /** + * 预算项编码 + */ + 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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java new file mode 100644 index 00000000..2e884b5e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java @@ -0,0 +1,114 @@ +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 java.time.LocalDate; + +/** + * 立项及成本-成本预算-完工成本填报业务对象 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,自增 + */ + @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 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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java new file mode 100644 index 00000000..3a8a55f8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java @@ -0,0 +1,121 @@ +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; + + /** + * 预算项编码 + */ + 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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java new file mode 100644 index 00000000..dbb2fad9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java @@ -0,0 +1,148 @@ +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; + + /** + * 预算项编码 + */ + @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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java new file mode 100644 index 00000000..4a898ac8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java @@ -0,0 +1,138 @@ +package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; + +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 java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; + + + +/** + * 立项及成本-成本预算-完工成本填报视图对象 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 Long projectLeader; + + /** + * 开工日期 + */ + @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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysWgcbtbFubiaoMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysWgcbtbFubiaoMapper.java new file mode 100644 index 00000000..6fb8c46b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysWgcbtbFubiaoMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysWgcbtbMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysWgcbtbMapper.java new file mode 100644 index 00000000..bba074a6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysWgcbtbMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysWgcbtbFubiaoService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysWgcbtbFubiaoService.java new file mode 100644 index 00000000..dddee337 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysWgcbtbFubiaoService.java @@ -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{ + + /** + * 查询立项及成本-成本预算-附 + * + * @param id 主键 + * @return 立项及成本-成本预算-附 + */ + XzdCbysWgcbtbFubiaoVo queryById(Long id); + + /** + * 分页查询立项及成本-成本预算-附列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-附分页列表 + */ + TableDataInfo queryPageList(XzdCbysWgcbtbFubiaoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的立项及成本-成本预算-附列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-附列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysWgcbtbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysWgcbtbService.java new file mode 100644 index 00000000..45c968f2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysWgcbtbService.java @@ -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{ + + /** + * 查询立项及成本-成本预算-完工成本填报 + * + * @param id 主键 + * @return 立项及成本-成本预算-完工成本填报 + */ + XzdCbysWgcbtbVo queryById(Long id); + + /** + * 分页查询立项及成本-成本预算-完工成本填报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-完工成本填报分页列表 + */ + TableDataInfo queryPageList(XzdCbysWgcbtbBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的立项及成本-成本预算-完工成本填报列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-完工成本填报列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbFubiaoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbFubiaoServiceImpl.java new file mode 100644 index 00000000..aa8b49d1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbFubiaoServiceImpl.java @@ -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 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 queryPageList(XzdCbysWgcbtbFubiaoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的立项及成本-成本预算-附列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-附列表 + */ + @Override + public List queryList(XzdCbysWgcbtbFubiaoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdCbysWgcbtbFubiaoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java new file mode 100644 index 00000000..550e830e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java @@ -0,0 +1,145 @@ +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.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.List; +import java.util.Map; +import java.util.Collection; + +/** + * 立项及成本-成本预算-完工成本填报Service业务层处理 + * + * @author Lion Li + * @date 2025-10-17 + */ +@RequiredArgsConstructor +@Service +public class XzdCbysWgcbtbServiceImpl extends ServiceImpl implements IXzdCbysWgcbtbService { + + private final XzdCbysWgcbtbMapper baseMapper; + + /** + * 查询立项及成本-成本预算-完工成本填报 + * + * @param id 主键 + * @return 立项及成本-成本预算-完工成本填报 + */ + @Override + public XzdCbysWgcbtbVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询立项及成本-成本预算-完工成本填报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-完工成本填报分页列表 + */ + @Override + public TableDataInfo queryPageList(XzdCbysWgcbtbBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的立项及成本-成本预算-完工成本填报列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-完工成本填报列表 + */ + @Override + public List queryList(XzdCbysWgcbtbBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdCbysWgcbtbBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改立项及成本-成本预算-完工成本填报 + * + * @param bo 立项及成本-成本预算-完工成本填报 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XzdCbysWgcbtbBo bo) { + XzdCbysWgcbtb update = MapstructUtils.convert(bo, XzdCbysWgcbtb.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(XzdCbysWgcbtb entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除立项及成本-成本预算-完工成本填报信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/paymentsReceipts/controller/XzdSfkCaigouFkController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/paymentsReceipts/controller/XzdSfkCaigouFkController.java index 95d5d5b6..73d6eaf6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/paymentsReceipts/controller/XzdSfkCaigouFkController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/paymentsReceipts/controller/XzdSfkCaigouFkController.java @@ -61,7 +61,7 @@ public class XzdSfkCaigouFkController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("paymentsReceipts:sfkCaigouFk:query") +// @SaCheckPermission("paymentsReceipts:sfkCaigouFk:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/paymentsReceipts/controller/XzdSfkZonhefuwuFkController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/paymentsReceipts/controller/XzdSfkZonhefuwuFkController.java index a5eabb80..ad00cc34 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/paymentsReceipts/controller/XzdSfkZonhefuwuFkController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/paymentsReceipts/controller/XzdSfkZonhefuwuFkController.java @@ -61,7 +61,7 @@ public class XzdSfkZonhefuwuFkController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("paymentsReceipts:sfkZonhefuwuFk:query") +// @SaCheckPermission("paymentsReceipts:sfkZonhefuwuFk:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysWgcbtbFubiaoMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysWgcbtbFubiaoMapper.xml new file mode 100644 index 00000000..304f6929 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysWgcbtbFubiaoMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysWgcbtbMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysWgcbtbMapper.xml new file mode 100644 index 00000000..b8f73a1d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysWgcbtbMapper.xml @@ -0,0 +1,7 @@ + + + + + From b7a52de2d265c04b110893ebf1f3c94a6e440796 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Fri, 17 Oct 2025 10:53:00 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E7=AB=8B=E9=A1=B9=E4=B8=8E=E6=88=90?= =?UTF-8?q?=E6=9C=AC-=E6=88=90=E6=9C=AC=E9=A2=84=E7=AE=97-=E5=AE=8C?= =?UTF-8?q?=E5=B7=A5=E6=88=90=E6=9C=AC=E5=A1=AB=E6=8A=A5=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../costBudget/domain/XzdCbysWgcbtbFubiao.java | 5 +++++ .../costBudget/domain/bo/XzdCbysWgcbtbBo.java | 3 +++ .../costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java | 5 +++++ .../costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java | 5 +++++ .../costBudget/domain/vo/XzdCbysWgcbtbVo.java | 5 ++++- .../service/impl/XzdCbysWgcbtbServiceImpl.java | 11 +++++++++++ 6 files changed, 33 insertions(+), 1 deletion(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtbFubiao.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtbFubiao.java index 377b2d94..5e5f1ae2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtbFubiao.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysWgcbtbFubiao.java @@ -33,6 +33,11 @@ public class XzdCbysWgcbtbFubiao extends BaseEntity { */ private Long mainDocId; + /** + * 类型(1、成本明细,2、) + */ + private Integer type; + /** * 预算项编码 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java index 2e884b5e..dd54aa6f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java @@ -8,8 +8,10 @@ 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 @@ -110,5 +112,6 @@ public class XzdCbysWgcbtbBo extends BaseEntity { */ private String fileId; + private List xzdCbysWgcbtbFubiao; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java index 3a8a55f8..e551c515 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbFubiaoBo.java @@ -32,6 +32,11 @@ public class XzdCbysWgcbtbFubiaoBo extends BaseEntity { */ private Long mainDocId; + /** + * 类型(1、成本明细,2、) + */ + private Integer type; + /** * 预算项编码 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java index dbb2fad9..84c6c725 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbFubiaoVo.java @@ -42,6 +42,11 @@ public class XzdCbysWgcbtbFubiaoVo implements Serializable { @ExcelDictFormat(readConverterExp = "外=键,指向单据基础信息表等主表") private Long mainDocId; + /** + * 类型(1、成本明细,2、) + */ + private Integer type; + /** * 预算项编码 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java index 4a898ac8..972aac8f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java @@ -7,12 +7,13 @@ 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; /** @@ -134,5 +135,7 @@ public class XzdCbysWgcbtbVo implements Serializable { @ExcelProperty(value = "文件ID") private String fileId; + private List xzdCbysWgcbtbFubiao; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java index 550e830e..bd9538cc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java @@ -1,6 +1,7 @@ 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; @@ -9,6 +10,8 @@ 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.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService; +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; @@ -32,6 +35,9 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl {item.setMainDocId(add.getId());}); + fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao()); return flag; } From c72275859f9d50f71ec710f10f3a1e51370dffbc Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Fri, 17 Oct 2025 11:51:09 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E3=80=81=E4=BA=A7?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-prod.yml | 2 +- .../ProjectBigScreenController.java | 93 ++----------------- .../domain/vo/OutConstructionAllValueVo.java | 15 +++ .../out/domain/vo/OutConstructionValueVo.java | 5 + .../impl/OutConstructionValueServiceImpl.java | 22 +++++ .../QltQualityInspectionGis.java | 8 ++ .../QltQualityInspectionListGisVo.java | 7 +- .../impl/QltQualityInspectionServiceImpl.java | 63 ++++++------- .../HseRecognizeRecordController.java | 3 +- .../HseSafetyInspectionGis.java | 53 +++++++++++ .../HseSafetyInspectionListGisVo.java | 10 ++ .../impl/HseSafetyInspectionServiceImpl.java | 22 ++++- 12 files changed, 173 insertions(+), 130 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetyinspection/HseSafetyInspectionGis.java diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml index 40d0586e..064567a6 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml @@ -326,7 +326,7 @@ ys7: app-key: 3acf9f1a43dc4209841e0893003db0a2 app-secret: 09e29c70ae1161fbc3ce2030fc09ba2e job: - capture-enabled: true # 控制是否启用萤石抓拍任务 + capture-enabled: false # 控制是否启用萤石抓拍任务 device-sync-enabled: true # 控制是否同步萤石设备 # 斯巴达算法 sparta: diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java index c6f51585..e31a2a30 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java @@ -186,14 +186,6 @@ public class ProjectBigScreenController extends BaseController { @GetMapping("/news/{projectId}") public R> getProjectNews(@NotNull(message = "主键不能为空") @PathVariable Long projectId) { -// List 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)); } @@ -204,23 +196,6 @@ public class ProjectBigScreenController extends BaseController { @GetMapping("/safetyInspection/{projectId}") public R> getProjectSafetyInspection(@NotNull(message = "主键不能为空") @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 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)); } @@ -231,51 +206,6 @@ public class ProjectBigScreenController extends BaseController { @GetMapping("/people/{projectId}") public R getProjectPeople(@NotNull(message = "主键不能为空") @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 projectUserList = projectBigScreenMapper.getProjectUserList(projectId); -// List teamList = projectBigScreenMapper.getTeamList(projectId); -// -// List 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> 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 userList = userMap.get(team.getId()); -// if (CollUtil.isNotEmpty(userList)) { -// List 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)); } @@ -296,18 +226,7 @@ public class ProjectBigScreenController extends BaseController { @GetMapping("/generalize/{projectId}") public R getProjectGeneralize(@NotNull(message = "主键不能为空") @PathVariable Long projectId) { -// BusProject project = projectService.getById(projectId); -// if (project != null) { -// Long goId = project.getGoId(); -// if (goId != null) { -// List sysProjectIntroduces = projectBigScreenMapper.selectByProjectId(goId); -// if (CollUtil.isNotEmpty(sysProjectIntroduces)) { -// return R.ok(sysProjectIntroduces.getFirst().getRichText()); -// } -// } -// } return R.ok(projectBigScreenService.getProjectGeneralize(projectId)); -// return R.ok(); } /** @@ -347,11 +266,11 @@ public class ProjectBigScreenController extends BaseController { if (count > 0) { throw new ServiceException("已存在同名萤石摄像头", HttpStatus.CONFLICT); } - // todo 更新云端名称 -/* Boolean result = ys7Manager.updateDeviceName(one.getDeviceSerial(), deviceName); + // 更新云端名称 + Boolean result = ys7Manager.updateDeviceName(one.getDeviceSerial(), deviceName); if (!result) { throw new ServiceException("更新云端萤石摄像头名称异常", HttpStatus.ERROR); - }*/ + } } return toAjax(othYs7DeviceService.updateById(ys7Device)); } @@ -409,7 +328,7 @@ public class ProjectBigScreenController extends BaseController { @SaCheckPermission("project:big:screen") @PostMapping("/updatePosition") public R 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") @GetMapping("/setWrjHc") - public void setWrjHc(){ + public void setWrjHc() { projectBigScreenService.setWrjHc(); } @@ -446,7 +365,7 @@ public class ProjectBigScreenController extends BaseController { */ // @SaCheckPermission("project:big:screen") @GetMapping("/getInfoData") - public R>> getInfoData(TanchuangInfoReq req){ + public R>> getInfoData(TanchuangInfoReq req) { return R.ok(projectBigScreenService.getInfoData(req)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueVo.java index 99e375f9..21b73cf2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueVo.java @@ -25,4 +25,19 @@ public class OutConstructionAllValueVo implements Serializable { * 对甲产值 */ private BigDecimal ownerValue; + + /** + * 人工填报数量 + */ + private BigDecimal artificialNum; + + /** + * 无人机识别数量 + */ + private BigDecimal uavNum; + + /** + * 确认数量 + */ + private BigDecimal confirmNum; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java index 2116e848..9f52a4bc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java @@ -171,4 +171,9 @@ public class OutConstructionValueVo implements Serializable { * 工作类型 */ private String workType; + + /** + * 计量方式(0无 1数量 2百分比) + */ + private String unitType; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java index e51c2ece..87e5e8b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java @@ -275,6 +275,27 @@ public class OutConstructionValueServiceImpl extends ServiceImpl correctList; + + /** + * 整改总数 */ private Long correctSituation; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityInspectionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityInspectionServiceImpl.java index 0942f58e..50d8ec4f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityInspectionServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityInspectionServiceImpl.java @@ -36,10 +36,8 @@ import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionListG import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo; import org.dromara.quality.mapper.QltQualityInspectionMapper; import org.dromara.quality.service.IQltQualityInspectionService; -import org.dromara.system.domain.vo.SysDictDataVo; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysDictDataService; -import org.dromara.system.service.ISysDictTypeService; import org.dromara.system.service.ISysOssService; import org.dromara.system.service.ISysUserService; import org.dromara.websocket.ChatServerHandler; @@ -83,9 +81,6 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl dictDataVoList = dictTypeService.selectDictDataByType(QltQualityConstant.QUALITY_INSPECTION_CHECK_TYPE); - Map dictDataMap = dictDataVoList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel)); - // 获取最新的检查工单 - List topList = qualityInspectionList.stream() - .sorted(Comparator.comparing(QltQualityInspection::getCreateTime).reversed()) - .limit(Optional.ofNullable(req.getPageSize()).orElse(20)) - .toList(); - // 转换为 GIS 对象,并设置标签 - List 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() + // 获取巡检情况 + List list = qualityInspectionList.stream() .filter(q -> "2".equals(q.getIsReply())) - .toList() - .size()); - gisVo.setCorrectSituation(passCount); + .toList().stream().map(q -> { + QltQualityInspectionGis gis = new QltQualityInspectionGis(); + 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 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())); return gisVo; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRecognizeRecordController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRecognizeRecordController.java index 3daaadf7..10325a9e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRecognizeRecordController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRecognizeRecordController.java @@ -3,7 +3,6 @@ package org.dromara.safety.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; import org.dromara.common.excel.utils.ExcelUtil; @@ -74,7 +73,7 @@ public class HseRecognizeRecordController extends BaseController { @SaCheckPermission("safety:recognizeRecord:remove") @Log(title = "识别记录", businessType = BusinessType.DELETE) @DeleteMapping("/{id}") - public R remove(@NotEmpty(message = "主键不能为空") + public R remove(@NotNull(message = "主键不能为空") @PathVariable Long id) { return toAjax(recognizeRecordService.deleteById(id)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetyinspection/HseSafetyInspectionGis.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetyinspection/HseSafetyInspectionGis.java new file mode 100644 index 00000000..9c0fff89 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetyinspection/HseSafetyInspectionGis.java @@ -0,0 +1,53 @@ +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; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 检查类型 + */ + private String checkType; + + /** + * 检查项目 + */ + private String checkProject; + + /** + * 违章类型 + */ + private String violationType; + + /** + * 巡检结果 + */ + private String inspectionResult; + + /** + * 工单状态(1通知 2整改 3复查) + */ + private String status; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetyinspection/HseSafetyInspectionListGisVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetyinspection/HseSafetyInspectionListGisVo.java index 415e1407..157f4ace 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetyinspection/HseSafetyInspectionListGisVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetyinspection/HseSafetyInspectionListGisVo.java @@ -27,11 +27,21 @@ public class HseSafetyInspectionListGisVo implements Serializable { */ private Long teamMeetingCount; + /** + * 安全巡检列表 + */ + private List safetyInspectionList; + /** * 安全巡检总数 */ private Long safetyInspectionCount; + /** + * 整改情况列表 + */ + private List correctSituationList; + /** * 整改情况总数 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java index 49a563d6..f53ad932 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java @@ -35,6 +35,7 @@ import org.dromara.safety.domain.HseSafetyInspection; import org.dromara.safety.domain.HseTeamMeeting; import org.dromara.safety.domain.dto.safetyinspection.*; 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.HseSafetyInspectionVo; import org.dromara.safety.domain.vo.teammeeting.HseTeamMeetingGis; @@ -229,11 +230,28 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl passList = safetyInspectionList.stream() + .filter(q -> "1".equals(q.getIsReply())) + .filter(q -> !q.getStatus().equals(HseSafetyInspectionStatusEnum.INFORM.getValue())) + .toList(); + List pass = passList.stream().map(s -> { + HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); + BeanUtils.copyProperties(s, gis); + return gis; + }).toList(); gisVo.setTeamMeetingCount((long) teamMeetings.size()); - gisVo.setSafetyInspectionCount((long) safetyInspectionList.stream() + List inspections = safetyInspectionList.stream() .filter(q -> "2".equals(q.getIsReply())) - .toList().size()); + .toList() + .stream().map(p -> { + HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); + BeanUtils.copyProperties(p, gis); + return gis; + }).toList(); + gisVo.setSafetyInspectionCount((long) inspections.size()); + gisVo.setSafetyInspectionList(inspections); gisVo.setCorrectSituationCount(passCount); + gisVo.setCorrectSituationList(pass); gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / safetyInspectionList.size())); return gisVo; } From 6bcddf50dade91ab35f63ea5d3fe5e32eb42e53f Mon Sep 17 00:00:00 2001 From: lg Date: Fri, 17 Oct 2025 11:54:00 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E8=B5=84=E9=87=91=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/XzdSubcontract.java | 2 - .../costBudget/domain/bo/XzdCbysWgcbtbBo.java | 4 +- .../costBudget/domain/vo/XzdCbysWgcbtbVo.java | 16 + .../impl/XzdCbysWgcbtbServiceImpl.java | 65 +++- .../AppreciationInvoiceController.java | 105 ++++++ .../controller/TaxInfoController.java | 105 ++++++ .../domain/AppreciationInvoice.java | 210 +++++++++++ .../zengzhishui/domain/TaxInfo.java | 44 +++ .../domain/bo/AppreciationInvoiceBo.java | 209 +++++++++++ .../zengzhishui/domain/bo/TaxInfoBo.java | 43 +++ .../domain/vo/AppreciationInvoiceVo.java | 295 +++++++++++++++ .../zengzhishui/domain/vo/TaxInfoVo.java | 56 +++ .../mapper/AppreciationInvoiceMapper.java | 15 + .../zengzhishui/mapper/TaxInfoMapper.java | 15 + .../service/IAppreciationInvoiceService.java | 70 ++++ .../zengzhishui/service/ITaxInfoService.java | 70 ++++ .../impl/AppreciationInvoiceServiceImpl.java | 237 ++++++++++++ .../service/impl/TaxInfoServiceImpl.java | 132 +++++++ .../SettlementOfSubcontractingCompletion.java | 2 +- ...ettlementOfSubcontractingCompletionBo.java | 4 +- ...ettlementOfSubcontractingCompletionVo.java | 8 +- ...OfSubcontractingCompletionServiceImpl.java | 16 +- .../CbsTreeStructureController.java | 106 ++++++ .../zijinjihua/domain/CbsTreeStructure.java | 50 +++ .../domain/bo/CbsTreeStructureBo.java | 50 +++ .../domain/vo/CbsTreeStructureVo.java | 62 ++++ .../mapper/CbsTreeStructureMapper.java | 16 + .../service/ICbsTreeStructureService.java | 62 ++++ .../impl/CbsTreeStructureServiceImpl.java | 118 ++++++ ...ancialRevenuePlanAlterationController.java | 106 ++++++ .../FinancialRevenuePlanAlteration.java | 103 ++++++ .../bo/FinancialRevenuePlanAlterationBo.java | 119 +++++++ .../vo/FinancialRevenuePlanAlterationVo.java | 170 +++++++++ .../FinancialRevenuePlanAlterationMapper.java | 15 + ...FinancialRevenuePlanAlterationService.java | 70 ++++ ...ncialRevenuePlanAlterationServiceImpl.java | 326 +++++++++++++++++ ...ncialRevenueExpenditurePlanController.java | 108 ++++++ .../domain/DetailOfEarnings.java | 116 ++++++ .../FinancialRevenueExpenditurePlan.java | 163 +++++++++ .../domain/StatementOfExpenditures.java | 127 +++++++ .../domain/bo/DetailOfEarningsBo.java | 118 ++++++ .../bo/FinancialRevenueExpenditurePlanBo.java | 178 ++++++++++ .../domain/bo/StatementOfExpendituresBo.java | 128 +++++++ .../domain/vo/DetailOfEarningsVo.java | 163 +++++++++ .../vo/FinancialRevenueExpenditurePlanVo.java | 254 +++++++++++++ .../domain/vo/StatementOfExpendituresVo.java | 171 +++++++++ .../mapper/DetailOfEarningsMapper.java | 15 + ...FinancialRevenueExpenditurePlanMapper.java | 15 + .../mapper/StatementOfExpendituresMapper.java | 15 + .../service/IDetailOfEarningsService.java | 70 ++++ ...inancialRevenueExpenditurePlanService.java | 70 ++++ .../IStatementOfExpendituresService.java | 70 ++++ .../impl/DetailOfEarningsServiceImpl.java | 145 ++++++++ ...cialRevenueExpenditurePlanServiceImpl.java | 336 ++++++++++++++++++ .../StatementOfExpendituresServiceImpl.java | 147 ++++++++ 55 files changed, 5483 insertions(+), 22 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/controller/AppreciationInvoiceController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/controller/TaxInfoController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/AppreciationInvoice.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/TaxInfo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/AppreciationInvoiceBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/TaxInfoBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/AppreciationInvoiceVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/TaxInfoVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/mapper/AppreciationInvoiceMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/mapper/TaxInfoMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/IAppreciationInvoiceService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/ITaxInfoService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/AppreciationInvoiceServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/TaxInfoServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/controller/CbsTreeStructureController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/CbsTreeStructure.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/bo/CbsTreeStructureBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/vo/CbsTreeStructureVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/mapper/CbsTreeStructureMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/service/ICbsTreeStructureService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/service/impl/CbsTreeStructureServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/controller/FinancialRevenuePlanAlterationController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/FinancialRevenuePlanAlteration.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/bo/FinancialRevenuePlanAlterationBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/vo/FinancialRevenuePlanAlterationVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/mapper/FinancialRevenuePlanAlterationMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/service/IFinancialRevenuePlanAlterationService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/service/impl/FinancialRevenuePlanAlterationServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/controller/FinancialRevenueExpenditurePlanController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/DetailOfEarnings.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/FinancialRevenueExpenditurePlan.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/StatementOfExpenditures.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/DetailOfEarningsBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/FinancialRevenueExpenditurePlanBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/StatementOfExpendituresBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/DetailOfEarningsVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/FinancialRevenueExpenditurePlanVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/StatementOfExpendituresVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/DetailOfEarningsMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/FinancialRevenueExpenditurePlanMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/StatementOfExpendituresMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IDetailOfEarningsService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IFinancialRevenueExpenditurePlanService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IStatementOfExpendituresService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/DetailOfEarningsServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/FinancialRevenueExpenditurePlanServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/StatementOfExpendituresServiceImpl.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/domain/XzdSubcontract.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/domain/XzdSubcontract.java index f68db242..f6c364c1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/domain/XzdSubcontract.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/domain/XzdSubcontract.java @@ -20,10 +20,8 @@ import java.time.LocalDateTime; @EqualsAndHashCode(callSuper = true) @TableName("xzd_subcontract") public class XzdSubcontract extends BaseEntity { - @Serial private static final long serialVersionUID = 1L; - /** * */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java index dd54aa6f..c263ebda 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysWgcbtbBo.java @@ -27,13 +27,11 @@ public class XzdCbysWgcbtbBo extends BaseEntity { /** * 主键ID,自增 */ - @NotNull(message = "主键ID,自增不能为空", groups = { EditGroup.class }) - private Long id; + private Long id; /** * 单据编码(带*,必填) */ - @NotBlank(message = "单据编码(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class }) private String docCode; /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java index 972aac8f..d6d4a059 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysWgcbtbVo.java @@ -1,5 +1,7 @@ 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; @@ -68,12 +70,26 @@ public class XzdCbysWgcbtbVo implements Serializable { @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; + /** * 开工日期 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java index bd9538cc..ec90d3c7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java @@ -1,6 +1,7 @@ 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; @@ -10,7 +11,15 @@ 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; @@ -19,9 +28,8 @@ 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.List; -import java.util.Map; -import java.util.Collection; +import java.util.*; +import java.util.stream.Collectors; /** * 立项及成本-成本预算-完工成本填报Service业务层处理 @@ -38,6 +46,13 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl vo = List.of(xzdCbysWgcbtbVo); + saveValu(vo); + return vo.getFirst(); } /** @@ -60,9 +78,25 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl queryPageList(XzdCbysWgcbtbBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + saveValu(result.getRecords()); return TableDataInfo.build(result); } + private void saveValu(List records) { + for (XzdCbysWgcbtbVo item : records) { + //项目名称 + if (item.getProjectId() != null){ + String projectName = xzdProjectService.queryNameById(item.getProjectId()); + if (projectName != null){ + item.setProjectName(projectName); + } + } + + + } + + } + /** * 查询符合条件的立项及成本-成本预算-完工成本填报列表 * @@ -107,6 +141,8 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -129,6 +165,16 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl 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; } @@ -151,6 +197,17 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl collect = Arrays.stream(vo.getFileId().split(",")).map(item -> { + return Long.parseLong(item); + }).collect(Collectors.toList()); + sysOssService.deleteWithValidByIds(collect, false); + } + } + fubiaoService.getBaseMapper().delete(new LambdaQueryWrapper().in(XzdCbysWgcbtbFubiao::getMainDocId, ids)); return baseMapper.deleteByIds(ids) > 0; } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/controller/AppreciationInvoiceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/controller/AppreciationInvoiceController.java new file mode 100644 index 00000000..c9d1b9c1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/controller/AppreciationInvoiceController.java @@ -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 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 list = appreciationInvoiceService.queryList(bo); + ExcelUtil.exportExcel(list, "增值税发票", AppreciationInvoiceVo.class, response); + } + + /** + * 获取增值税发票详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("zengzhishui:invoice:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(appreciationInvoiceService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/controller/TaxInfoController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/controller/TaxInfoController.java new file mode 100644 index 00000000..6f86b9f2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/controller/TaxInfoController.java @@ -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 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 list = taxInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "征税项目", TaxInfoVo.class, response); + } + + /** + * 获取征税项目详细信息 + * + * @param levyCode 主键 + */ + @SaCheckPermission("zengzhishui:info:query") + @GetMapping("/{levyCode}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] levyCodes) { + return toAjax(taxInfoService.deleteWithValidByIds(List.of(levyCodes), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/AppreciationInvoice.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/AppreciationInvoice.java new file mode 100644 index 00000000..46703fed --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/AppreciationInvoice.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/TaxInfo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/TaxInfo.java new file mode 100644 index 00000000..c96e2227 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/TaxInfo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/AppreciationInvoiceBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/AppreciationInvoiceBo.java new file mode 100644 index 00000000..c900ba7e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/AppreciationInvoiceBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/TaxInfoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/TaxInfoBo.java new file mode 100644 index 00000000..3e55dc6a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/bo/TaxInfoBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/AppreciationInvoiceVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/AppreciationInvoiceVo.java new file mode 100644 index 00000000..ecfae9bc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/AppreciationInvoiceVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/TaxInfoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/TaxInfoVo.java new file mode 100644 index 00000000..618da1b0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/domain/vo/TaxInfoVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/mapper/AppreciationInvoiceMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/mapper/AppreciationInvoiceMapper.java new file mode 100644 index 00000000..99eb1a36 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/mapper/AppreciationInvoiceMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/mapper/TaxInfoMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/mapper/TaxInfoMapper.java new file mode 100644 index 00000000..fb1adf9b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/mapper/TaxInfoMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xzd.fapiaotaizhang.zengzhishui.mapper; + +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.TaxInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 征税项目Mapper接口 + * + * @author Lion Li + * @date 2025-10-17 + */ +public interface TaxInfoMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/IAppreciationInvoiceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/IAppreciationInvoiceService.java new file mode 100644 index 00000000..0936cab8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/IAppreciationInvoiceService.java @@ -0,0 +1,70 @@ +package org.dromara.xzd.fapiaotaizhang.zengzhishui.service; + +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceVo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo.AppreciationInvoiceBo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice; +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 IAppreciationInvoiceService extends IService{ + + /** + * 查询增值税发票 + * + * @param id 主键 + * @return 增值税发票 + */ + AppreciationInvoiceVo queryById(Long id); + + /** + * 分页查询增值税发票列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 增值税发票分页列表 + */ + TableDataInfo queryPageList(AppreciationInvoiceBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的增值税发票列表 + * + * @param bo 查询条件 + * @return 增值税发票列表 + */ + List queryList(AppreciationInvoiceBo bo); + + /** + * 新增增值税发票 + * + * @param bo 增值税发票 + * @return 是否新增成功 + */ + Boolean insertByBo(AppreciationInvoiceBo bo); + + /** + * 修改增值税发票 + * + * @param bo 增值税发票 + * @return 是否修改成功 + */ + Boolean updateByBo(AppreciationInvoiceBo bo); + + /** + * 校验并批量删除增值税发票信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/ITaxInfoService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/ITaxInfoService.java new file mode 100644 index 00000000..aef1cca9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/ITaxInfoService.java @@ -0,0 +1,70 @@ +package org.dromara.xzd.fapiaotaizhang.zengzhishui.service; + +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.TaxInfoVo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo.TaxInfoBo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo; +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 ITaxInfoService extends IService{ + + /** + * 查询征税项目 + * + * @param levyCode 主键 + * @return 征税项目 + */ + TaxInfoVo queryById(String levyCode); + + /** + * 分页查询征税项目列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 征税项目分页列表 + */ + TableDataInfo queryPageList(TaxInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的征税项目列表 + * + * @param bo 查询条件 + * @return 征税项目列表 + */ + List queryList(TaxInfoBo bo); + + /** + * 新增征税项目 + * + * @param bo 征税项目 + * @return 是否新增成功 + */ + Boolean insertByBo(TaxInfoBo bo); + + /** + * 修改征税项目 + * + * @param bo 征税项目 + * @return 是否修改成功 + */ + Boolean updateByBo(TaxInfoBo bo); + + /** + * 校验并批量删除征税项目信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/AppreciationInvoiceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/AppreciationInvoiceServiceImpl.java new file mode 100644 index 00000000..989816b5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/AppreciationInvoiceServiceImpl.java @@ -0,0 +1,237 @@ +package org.dromara.xzd.fapiaotaizhang.zengzhishui.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.domain.R; +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.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdSubcontractVo; +import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.vo.XzdSubcontractTerminationVo; +import org.dromara.xzd.domain.*; +import org.dromara.xzd.domain.dto.QuerCorrespondentDto; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.TaxInfoVo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.ITaxInfoService; +import org.dromara.xzd.service.IXzdContractDetailsService; +import org.dromara.xzd.service.IXzdCorrespondentList; +import org.dromara.xzd.service.IXzdProjectService; +import org.dromara.xzd.service.impl.XzdProjectServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo.AppreciationInvoiceBo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceVo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.mapper.AppreciationInvoiceMapper; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.IAppreciationInvoiceService; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 增值税发票Service业务层处理 + * + * @author Lion Li + * @date 2025-10-17 + */ +@RequiredArgsConstructor +@Service +public class AppreciationInvoiceServiceImpl extends ServiceImpl implements IAppreciationInvoiceService { + + private final AppreciationInvoiceMapper baseMapper; + + + private final IXzdProjectService xzdProjectService; + + private final IXzdContractDetailsService xzdContractDetailsService; + private final ITaxInfoService iTaxInfoService; + + @Autowired + private IXzdCorrespondentList iXzdCorrespondentList; + + @Autowired + private SysOssServiceImpl sysOssService; + + /** + * 查询增值税发票 + * + * @param id 主键 + * @return 增值税发票 + */ + @Override + public AppreciationInvoiceVo queryById(Long id){ + AppreciationInvoiceVo appreciationInvoiceVo = baseMapper.selectVoById(id); + List vo = List.of(appreciationInvoiceVo); + saveValue(vo); + + return vo.getFirst(); + } + + /** + * 分页查询增值税发票列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 增值税发票分页列表 + */ + @Override + public TableDataInfo queryPageList(AppreciationInvoiceBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + saveValue(result.getRecords()); + return TableDataInfo.build(result); + } + + private void saveValue(List records) { + for (AppreciationInvoiceVo item : records) { + //项目名称 + if (item.getProject() != null){ + String projectName = xzdProjectService.queryNameById(item.getProject()); + if (projectName != null){ + item.setProjectName(projectName); + } + } + // 合同 + XzdContractDetails contractDetailsServiceById = xzdContractDetailsService.getById(item.getContractNo()); + if(contractDetailsServiceById != null){ + item.setContractNoName(contractDetailsServiceById.getContractName()); + } +// 征税项目 + TaxInfo taxInfoVo = iTaxInfoService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(TaxInfo::getLevyCode, item.getTaxItem())); + if (taxInfoVo != null){ + item.setTaxItemName(taxInfoVo.getTaxItem()); + } + //购方名称(客户信息列表) + R byid = iXzdCorrespondentList.getCustomerByid(item.getBuyerName()); + if (byid!=null){ + if (byid.getData().getXzdCustomerinformation() != null){ + item.setBuyerNameS(byid.getData().getXzdCustomerinformation().getUnitName()); + } + } + + } + + + } + + /** + * 查询符合条件的增值税发票列表 + * + * @param bo 查询条件 + * @return 增值税发票列表 + */ + @Override + public List queryList(AppreciationInvoiceBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(AppreciationInvoiceBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(AppreciationInvoice::getId); + lqw.eq(StringUtils.isNotBlank(bo.getInvoiceType()), AppreciationInvoice::getInvoiceType, bo.getInvoiceType()); + lqw.eq(bo.getProject() != null, AppreciationInvoice::getProject, bo.getProject()); + lqw.eq(bo.getContractNo() != null, AppreciationInvoice::getContractNo, bo.getContractNo()); + lqw.eq(bo.getEntryDate() != null, AppreciationInvoice::getEntryDate, bo.getEntryDate()); + lqw.eq(bo.getYear() != null, AppreciationInvoice::getYear, bo.getYear()); + lqw.eq(bo.getAccountingPeriod() != null, AppreciationInvoice::getAccountingPeriod, bo.getAccountingPeriod()); + lqw.eq(StringUtils.isNotBlank(bo.getTaxType()), AppreciationInvoice::getTaxType, bo.getTaxType()); + lqw.eq(bo.getTaxItem() != null, AppreciationInvoice::getTaxItem, bo.getTaxItem()); + lqw.eq(bo.getOrganization() != null, AppreciationInvoice::getOrganization, bo.getOrganization()); + lqw.eq(bo.getHandler() != null, AppreciationInvoice::getHandler, bo.getHandler()); + lqw.eq(StringUtils.isNotBlank(bo.getInvoicePurpose()), AppreciationInvoice::getInvoicePurpose, bo.getInvoicePurpose()); + lqw.eq(StringUtils.isNotBlank(bo.getInvoiceCode()), AppreciationInvoice::getInvoiceCode, bo.getInvoiceCode()); + lqw.eq(StringUtils.isNotBlank(bo.getInvoiceNo()), AppreciationInvoice::getInvoiceNo, bo.getInvoiceNo()); + lqw.eq(bo.getInvoiceDate() != null, AppreciationInvoice::getInvoiceDate, bo.getInvoiceDate()); + lqw.eq(StringUtils.isNotBlank(bo.getCompanyTaxNo()), AppreciationInvoice::getCompanyTaxNo, bo.getCompanyTaxNo()); + lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), AppreciationInvoice::getCompanyName, bo.getCompanyName()); + lqw.eq(bo.getAmount() != null, AppreciationInvoice::getAmount, bo.getAmount()); + lqw.eq(bo.getTaxAmount() != null, AppreciationInvoice::getTaxAmount, bo.getTaxAmount()); + lqw.eq(bo.getTaxRate() != null, AppreciationInvoice::getTaxRate, bo.getTaxRate()); + lqw.eq(bo.getTotalAmount() != null, AppreciationInvoice::getTotalAmount, bo.getTotalAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getBuyerTaxNo()), AppreciationInvoice::getBuyerTaxNo, bo.getBuyerTaxNo()); + lqw.like(bo.getBuyerName() != null, AppreciationInvoice::getBuyerName, bo.getBuyerName()); + lqw.like(StringUtils.isNotBlank(bo.getBuyerTaxpayerName()), AppreciationInvoice::getBuyerTaxpayerName, bo.getBuyerTaxpayerName()); + lqw.eq(StringUtils.isNotBlank(bo.getCrossTaxReport()), AppreciationInvoice::getCrossTaxReport, bo.getCrossTaxReport()); + lqw.eq(bo.getPercentageCharges() != null, AppreciationInvoice::getPercentageCharges, bo.getPercentageCharges()); + lqw.eq(bo.getDeductionAmount() != null, AppreciationInvoice::getDeductionAmount, bo.getDeductionAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getSplitFlag()), AppreciationInvoice::getSplitFlag, bo.getSplitFlag()); + lqw.eq(StringUtils.isNotBlank(bo.getCheckCode()), AppreciationInvoice::getCheckCode, bo.getCheckCode()); + lqw.eq(StringUtils.isNotBlank(bo.getMachineCode()), AppreciationInvoice::getMachineCode, bo.getMachineCode()); + lqw.eq(StringUtils.isNotBlank(bo.getRemark1()), AppreciationInvoice::getRemark1, bo.getRemark1()); + lqw.eq(StringUtils.isNotBlank(bo.getRemark2()), AppreciationInvoice::getRemark2, bo.getRemark2()); + lqw.eq(StringUtils.isNotBlank(bo.getElectronicInvoiceNo()), AppreciationInvoice::getElectronicInvoiceNo, bo.getElectronicInvoiceNo()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), AppreciationInvoice::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), AppreciationInvoice::getAuditStatus, bo.getAuditStatus()); + return lqw; + } + + /** + * 新增增值税发票 + * + * @param bo 增值税发票 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(AppreciationInvoiceBo bo) { + AppreciationInvoice add = MapstructUtils.convert(bo, AppreciationInvoice.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改增值税发票 + * + * @param bo 增值税发票 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(AppreciationInvoiceBo bo) { + AppreciationInvoice update = MapstructUtils.convert(bo, AppreciationInvoice.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(AppreciationInvoice entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除增值税发票信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + + } + + for (Long id : ids) { + AppreciationInvoiceVo vo = baseMapper.selectVoById(id); + // 删除附件 + if (!StringUtils.isEmpty(vo.getFileId())){ + List collect = Arrays.stream(vo.getFileId().split(",")).map(item -> { + return Long.parseLong(item); + }).collect(Collectors.toList()); + sysOssService.deleteWithValidByIds(collect, false); + } + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/TaxInfoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/TaxInfoServiceImpl.java new file mode 100644 index 00000000..1c28140b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/fapiaotaizhang/zengzhishui/service/impl/TaxInfoServiceImpl.java @@ -0,0 +1,132 @@ +package org.dromara.xzd.fapiaotaizhang.zengzhishui.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.fapiaotaizhang.zengzhishui.domain.bo.TaxInfoBo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.TaxInfoVo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.mapper.TaxInfoMapper; +import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.ITaxInfoService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 征税项目Service业务层处理 + * + * @author Lion Li + * @date 2025-10-17 + */ +@RequiredArgsConstructor +@Service +public class TaxInfoServiceImpl extends ServiceImpl implements ITaxInfoService { + + private final TaxInfoMapper baseMapper; + + /** + * 查询征税项目 + * + * @param levyCode 主键 + * @return 征税项目 + */ + @Override + public TaxInfoVo queryById(String levyCode){ + return baseMapper.selectVoById(levyCode); + } + + /** + * 分页查询征税项目列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 征税项目分页列表 + */ + @Override + public TableDataInfo queryPageList(TaxInfoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的征税项目列表 + * + * @param bo 查询条件 + * @return 征税项目列表 + */ + @Override + public List queryList(TaxInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(TaxInfoBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getLevyCode()), TaxInfo::getLevyCode, bo.getLevyCode()); + lqw.eq(StringUtils.isNotBlank(bo.getLevyMethod()), TaxInfo::getLevyMethod, bo.getLevyMethod()); + lqw.eq(StringUtils.isNotBlank(bo.getTaxItem()), TaxInfo::getTaxItem, bo.getTaxItem()); + lqw.eq(StringUtils.isNotBlank(bo.getTaxRate()), TaxInfo::getTaxRate, bo.getTaxRate()); + return lqw; + } + + /** + * 新增征税项目 + * + * @param bo 征税项目 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(TaxInfoBo bo) { + TaxInfo add = MapstructUtils.convert(bo, TaxInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setLevyCode(add.getLevyCode()); + } + return flag; + } + + /** + * 修改征税项目 + * + * @param bo 征税项目 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(TaxInfoBo bo) { + TaxInfo update = MapstructUtils.convert(bo, TaxInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(TaxInfo entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除征税项目信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/SettlementOfSubcontractingCompletion.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/SettlementOfSubcontractingCompletion.java index c212904b..412d872b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/SettlementOfSubcontractingCompletion.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/SettlementOfSubcontractingCompletion.java @@ -67,7 +67,7 @@ public class SettlementOfSubcontractingCompletion extends BaseEntity { /** * 工程项目 */ - private String engineeringProject; + private Long engineeringProject; /** * 经营模式 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/bo/SettlementOfSubcontractingCompletionBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/bo/SettlementOfSubcontractingCompletionBo.java index d4e13f9c..71f5ce9f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/bo/SettlementOfSubcontractingCompletionBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/bo/SettlementOfSubcontractingCompletionBo.java @@ -25,13 +25,11 @@ public class SettlementOfSubcontractingCompletionBo extends BaseEntity { /** * 主键ID */ - @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) private Long id; /** * 单据编号 */ - @NotBlank(message = "单据编号不能为空", groups = { AddGroup.class, EditGroup.class }) private String documentCode; /** @@ -69,7 +67,7 @@ public class SettlementOfSubcontractingCompletionBo extends BaseEntity { /** * 工程项目 */ - private String engineeringProject; + private Long engineeringProject; /** * 经营模式 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/vo/SettlementOfSubcontractingCompletionVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/vo/SettlementOfSubcontractingCompletionVo.java index 834f9460..fa2f84b5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/vo/SettlementOfSubcontractingCompletionVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/domain/vo/SettlementOfSubcontractingCompletionVo.java @@ -82,7 +82,13 @@ public class SettlementOfSubcontractingCompletionVo implements Serializable { * 工程项目 */ @ExcelProperty(value = "工程项目") - private String engineeringProject; + private Long engineeringProject; + + /** + * 工程项目名称 + */ + @ExcelProperty(value = "工程项目名称") + private String engineeringProjectName; /** * 经营模式 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/service/impl/SettlementOfSubcontractingCompletionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/service/impl/SettlementOfSubcontractingCompletionServiceImpl.java index 13388e97..ab3879f7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/service/impl/SettlementOfSubcontractingCompletionServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/fenbaohetongjungong/service/impl/SettlementOfSubcontractingCompletionServiceImpl.java @@ -103,13 +103,13 @@ public class SettlementOfSubcontractingCompletionServiceImpl extends ServiceImpl private void setValue(List records) { for (SettlementOfSubcontractingCompletionVo item : records) { -// //项目名称 -// if (item.getProject() != null){ -// String projectName = xzdProjectService.queryNameById(item.getProject()); -// if (projectName != null){ -// item.setProjectName(projectName); -// } -// } + //项目名称 + if (item.getEngineeringProject() != null){ + String projectName = xzdProjectService.queryNameById(item.getEngineeringProject()); + if (projectName != null){ + item.setEngineeringProjectName(projectName); + } + } //甲方单位(客户信息列表) R byid = iXzdCorrespondentList.getCustomerByid(item.getPartyAUnit()); if (byid!=null){ @@ -194,7 +194,7 @@ public class SettlementOfSubcontractingCompletionServiceImpl extends ServiceImpl lqw.like(StringUtils.isNotBlank(bo.getContractName()), SettlementOfSubcontractingCompletion::getContractName, bo.getContractName()); lqw.eq(bo.getApprovedTotalPrice() != null, SettlementOfSubcontractingCompletion::getApprovedTotalPrice, bo.getApprovedTotalPrice()); lqw.eq(bo.getApprovedDate() != null, SettlementOfSubcontractingCompletion::getApprovedDate, bo.getApprovedDate()); - lqw.eq(StringUtils.isNotBlank(bo.getEngineeringProject()), SettlementOfSubcontractingCompletion::getEngineeringProject, bo.getEngineeringProject()); + lqw.eq(bo.getEngineeringProject() != null, SettlementOfSubcontractingCompletion::getEngineeringProject, bo.getEngineeringProject()); lqw.eq(StringUtils.isNotBlank(bo.getBusinessModel()), SettlementOfSubcontractingCompletion::getBusinessModel, bo.getBusinessModel()); lqw.eq(bo.getPartyAUnit() != null, SettlementOfSubcontractingCompletion::getPartyAUnit, bo.getPartyAUnit()); lqw.eq(bo.getPartyBUnit() != null, SettlementOfSubcontractingCompletion::getPartyBUnit, bo.getPartyBUnit()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/controller/CbsTreeStructureController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/controller/CbsTreeStructureController.java new file mode 100644 index 00000000..8f72201e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/controller/CbsTreeStructureController.java @@ -0,0 +1,106 @@ +package org.dromara.xzd.zijinjihua.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.dromara.xzd.zijinjihua.domain.bo.CbsTreeStructureBo; +import org.dromara.xzd.zijinjihua.domain.vo.CbsTreeStructureVo; +import org.dromara.xzd.zijinjihua.service.ICbsTreeStructureService; +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; + + +/** + * cbs树形结构 + * + * @author Lion Li + * @date 2025-10-16 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/treeStructure") +public class CbsTreeStructureController extends BaseController { + + private final ICbsTreeStructureService cbsTreeStructureService; + + /** + * 查询cbs树形结构列表 + */ + @SaCheckPermission("system:treeStructure:list") + @GetMapping("/list") + public R> list(CbsTreeStructureBo bo) { + List list = cbsTreeStructureService.queryList(bo); + return R.ok(list); + } + + /** + * 导出cbs树形结构列表 + */ + @SaCheckPermission("system:treeStructure:export") + @Log(title = "cbs树形结构", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CbsTreeStructureBo bo, HttpServletResponse response) { + List list = cbsTreeStructureService.queryList(bo); + ExcelUtil.exportExcel(list, "cbs树形结构", CbsTreeStructureVo.class, response); + } + + /** + * 获取cbs树形结构详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:treeStructure:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(cbsTreeStructureService.queryById(id)); + } + + /** + * 新增cbs树形结构 + */ + @SaCheckPermission("system:treeStructure:add") + @Log(title = "cbs树形结构", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CbsTreeStructureBo bo) { + return toAjax(cbsTreeStructureService.insertByBo(bo)); + } + + /** + * 修改cbs树形结构 + */ + @SaCheckPermission("system:treeStructure:edit") + @Log(title = "cbs树形结构", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CbsTreeStructureBo bo) { + return toAjax(cbsTreeStructureService.updateByBo(bo)); + } + + /** + * 删除cbs树形结构 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:treeStructure:remove") + @Log(title = "cbs树形结构", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(cbsTreeStructureService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/CbsTreeStructure.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/CbsTreeStructure.java new file mode 100644 index 00000000..8860dd83 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/CbsTreeStructure.java @@ -0,0 +1,50 @@ +package org.dromara.xzd.zijinjihua.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * cbs树形结构对象 cbs_tree_structure + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@TableName("cbs_tree_structure") +public class CbsTreeStructure { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 节点ID,无默认值,业务层自行赋值 + */ + @TableId(value = "id") + private Long id; + + /** + * 父节点ID,为空表示根节点 + */ + private Long parentId; + + /** + * 节点名称 + */ + private String name; + + /** + * 节点排序,用于同级节点的显示顺序 + */ + private Long sortOrder; + + /** + * 节点描述 + */ + private String description; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/bo/CbsTreeStructureBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/bo/CbsTreeStructureBo.java new file mode 100644 index 00000000..288c7ddb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/bo/CbsTreeStructureBo.java @@ -0,0 +1,50 @@ +package org.dromara.xzd.zijinjihua.domain.bo; + +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.zijinjihua.domain.CbsTreeStructure; + +/** + * cbs树形结构业务对象 cbs_tree_structure + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@AutoMapper(target = CbsTreeStructure.class, reverseConvertGenerate = false) +public class CbsTreeStructureBo { + + /** + * 节点ID,无默认值,业务层自行赋值 + */ + @NotNull(message = "节点ID,无默认值,业务层自行赋值不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 父节点ID,为空表示根节点 + */ + private Long parentId; + + /** + * 节点名称 + */ + @NotBlank(message = "节点名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String name; + + /** + * 节点排序,用于同级节点的显示顺序 + */ + private Long sortOrder; + + /** + * 节点描述 + */ + private String description; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/vo/CbsTreeStructureVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/vo/CbsTreeStructureVo.java new file mode 100644 index 00000000..0a516a41 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/domain/vo/CbsTreeStructureVo.java @@ -0,0 +1,62 @@ +package org.dromara.xzd.zijinjihua.domain.vo; + +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.zijinjihua.domain.CbsTreeStructure; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * cbs树形结构视图对象 cbs_tree_structure + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CbsTreeStructure.class) +public class CbsTreeStructureVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 节点ID,无默认值,业务层自行赋值 + */ + @ExcelProperty(value = "节点ID,无默认值,业务层自行赋值") + private Long id; + + /** + * 父节点ID,为空表示根节点 + */ + @ExcelProperty(value = "父节点ID,为空表示根节点") + private Long parentId; + + /** + * 节点名称 + */ + @ExcelProperty(value = "节点名称") + private String name; + + /** + * 节点排序,用于同级节点的显示顺序 + */ + @ExcelProperty(value = "节点排序,用于同级节点的显示顺序") + private Long sortOrder; + + /** + * 节点描述 + */ + @ExcelProperty(value = "节点描述") + private String description; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/mapper/CbsTreeStructureMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/mapper/CbsTreeStructureMapper.java new file mode 100644 index 00000000..464e08a0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/mapper/CbsTreeStructureMapper.java @@ -0,0 +1,16 @@ +package org.dromara.xzd.zijinjihua.mapper; + + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.xzd.zijinjihua.domain.CbsTreeStructure; +import org.dromara.xzd.zijinjihua.domain.vo.CbsTreeStructureVo; + +/** + * cbs树形结构Mapper接口 + * + * @author Lion Li + * @date 2025-10-16 + */ +public interface CbsTreeStructureMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/service/ICbsTreeStructureService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/service/ICbsTreeStructureService.java new file mode 100644 index 00000000..b0d7e06d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/service/ICbsTreeStructureService.java @@ -0,0 +1,62 @@ +package org.dromara.xzd.zijinjihua.service; + + + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.xzd.zijinjihua.domain.CbsTreeStructure; +import org.dromara.xzd.zijinjihua.domain.bo.CbsTreeStructureBo; +import org.dromara.xzd.zijinjihua.domain.vo.CbsTreeStructureVo; + +import java.util.Collection; +import java.util.List; + +/** + * cbs树形结构Service接口 + * + * @author Lion Li + * @date 2025-10-16 + */ +public interface ICbsTreeStructureService extends IService{ + + /** + * 查询cbs树形结构 + * + * @param id 主键 + * @return cbs树形结构 + */ + CbsTreeStructureVo queryById(Long id); + + + /** + * 查询符合条件的cbs树形结构列表 + * + * @param bo 查询条件 + * @return cbs树形结构列表 + */ + List queryList(CbsTreeStructureBo bo); + + /** + * 新增cbs树形结构 + * + * @param bo cbs树形结构 + * @return 是否新增成功 + */ + Boolean insertByBo(CbsTreeStructureBo bo); + + /** + * 修改cbs树形结构 + * + * @param bo cbs树形结构 + * @return 是否修改成功 + */ + Boolean updateByBo(CbsTreeStructureBo bo); + + /** + * 校验并批量删除cbs树形结构信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/service/impl/CbsTreeStructureServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/service/impl/CbsTreeStructureServiceImpl.java new file mode 100644 index 00000000..77bcf6f0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/service/impl/CbsTreeStructureServiceImpl.java @@ -0,0 +1,118 @@ +package org.dromara.xzd.zijinjihua.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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.xzd.zijinjihua.domain.CbsTreeStructure; +import org.dromara.xzd.zijinjihua.domain.bo.CbsTreeStructureBo; +import org.dromara.xzd.zijinjihua.domain.vo.CbsTreeStructureVo; +import org.dromara.xzd.zijinjihua.mapper.CbsTreeStructureMapper; +import org.dromara.xzd.zijinjihua.service.ICbsTreeStructureService; +import org.springframework.stereotype.Service; + + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * cbs树形结构Service业务层处理 + * + * @author Lion Li + * @date 2025-10-16 + */ +@RequiredArgsConstructor +@Service +public class CbsTreeStructureServiceImpl extends ServiceImpl implements ICbsTreeStructureService { + + private final CbsTreeStructureMapper baseMapper; + + /** + * 查询cbs树形结构 + * + * @param id 主键 + * @return cbs树形结构 + */ + @Override + public CbsTreeStructureVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + + /** + * 查询符合条件的cbs树形结构列表 + * + * @param bo 查询条件 + * @return cbs树形结构列表 + */ + @Override + public List queryList(CbsTreeStructureBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(CbsTreeStructureBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(CbsTreeStructure::getId); + lqw.eq(bo.getParentId() != null, CbsTreeStructure::getParentId, bo.getParentId()); + lqw.like(StringUtils.isNotBlank(bo.getName()), CbsTreeStructure::getName, bo.getName()); + lqw.eq(bo.getSortOrder() != null, CbsTreeStructure::getSortOrder, bo.getSortOrder()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), CbsTreeStructure::getDescription, bo.getDescription()); + return lqw; + } + + /** + * 新增cbs树形结构 + * + * @param bo cbs树形结构 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CbsTreeStructureBo bo) { + CbsTreeStructure add = MapstructUtils.convert(bo, CbsTreeStructure.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改cbs树形结构 + * + * @param bo cbs树形结构 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CbsTreeStructureBo bo) { + CbsTreeStructure update = MapstructUtils.convert(bo, CbsTreeStructure.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CbsTreeStructure entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除cbs树形结构信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/controller/FinancialRevenuePlanAlterationController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/controller/FinancialRevenuePlanAlterationController.java new file mode 100644 index 00000000..d3207ceb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/controller/FinancialRevenuePlanAlterationController.java @@ -0,0 +1,106 @@ +package org.dromara.xzd.zijinjihua.yueduzijinbiangeng.controller; + +import java.util.List; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; + +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.zijinjihua.yueduzijinbiangeng.domain.vo.FinancialRevenuePlanAlterationVo; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.bo.FinancialRevenuePlanAlterationBo; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.service.IFinancialRevenuePlanAlterationService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 月度资金计划变更 + * + * @author Lion Li + * @date 2025-10-16 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/yueduzijinbiangeng/revenuePlanAlteration") +public class FinancialRevenuePlanAlterationController extends BaseController { + + private final IFinancialRevenuePlanAlterationService financialRevenuePlanAlterationService; + + /** + * 查询月度资金计划变更列表 + */ + @SaCheckPermission("yueduzijinbiangeng:revenuePlanAlteration:list") + @GetMapping("/list") + public TableDataInfo list(FinancialRevenuePlanAlterationBo bo, PageQuery pageQuery) { + return financialRevenuePlanAlterationService.queryPageList(bo, pageQuery); + } + + /** + * 导出月度资金计划变更列表 + */ + @SaCheckPermission("yueduzijinbiangeng:revenuePlanAlteration:export") + @Log(title = "月度资金计划变更", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(FinancialRevenuePlanAlterationBo bo, HttpServletResponse response) { + List list = financialRevenuePlanAlterationService.queryList(bo); + ExcelUtil.exportExcel(list, "月度资金计划变更", FinancialRevenuePlanAlterationVo.class, response); + } + + /** + * 获取月度资金计划变更详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("yueduzijinbiangeng:revenuePlanAlteration:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(financialRevenuePlanAlterationService.queryById(id)); + } + + /** + * 新增月度资金计划变更 + */ + @SaCheckPermission("yueduzijinbiangeng:revenuePlanAlteration:add") + @Log(title = "月度资金计划变更", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody FinancialRevenuePlanAlterationBo bo) { + return toAjax(financialRevenuePlanAlterationService.insertByBo(bo)); + } + + /** + * 修改月度资金计划变更 + */ + @SaCheckPermission("yueduzijinbiangeng:revenuePlanAlteration:edit") + @Log(title = "月度资金计划变更", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody FinancialRevenuePlanAlterationBo bo) { + return toAjax(financialRevenuePlanAlterationService.updateByBo(bo)); + } + + /** + * 删除月度资金计划变更 + * + * @param ids 主键串 + */ + @SaCheckPermission("yueduzijinbiangeng:revenuePlanAlteration:remove") + @Log(title = "月度资金计划变更", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(financialRevenuePlanAlterationService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/FinancialRevenuePlanAlteration.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/FinancialRevenuePlanAlteration.java new file mode 100644 index 00000000..70ba941d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/FinancialRevenuePlanAlteration.java @@ -0,0 +1,103 @@ +package org.dromara.xzd.zijinjihua.yueduzijinbiangeng.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; + +/** + * 月度资金计划变更对象 financial_revenue_plan_alteration + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("financial_revenue_plan_alteration") +public class FinancialRevenuePlanAlteration extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 单据编码 + */ + private String documentCode; + + /** + * 单据名称 + */ + private String documentName; + + /** + * 项目 + */ + private Long project; + + /** + * 计划类型 + */ + private String planType; + + /** + * 工作周期 + */ + private String workCycle; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + + /** + * 支出总额 + */ + private BigDecimal expenseTotal; + + /** + * 收入总额 + */ + private BigDecimal incomeTotal; + + /** + * 是否临时计划 正常计划,临时计划 + */ + private String isTemporaryPlan; + + /** + * 备注 + */ + private String remarks; + + /** + * 文件ID + */ + private String fileId; + + /** + * 备注 + */ + private String remark; + + /** + * 审核状态 + */ + private String auditStatus; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/bo/FinancialRevenuePlanAlterationBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/bo/FinancialRevenuePlanAlterationBo.java new file mode 100644 index 00000000..9a6b46f6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/bo/FinancialRevenuePlanAlterationBo.java @@ -0,0 +1,119 @@ +package org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.bo; + +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.FinancialRevenuePlanAlteration; +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.zijinjihua.yueduzijinjihua.domain.bo.DetailOfEarningsBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.StatementOfExpendituresBo; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * 月度资金计划变更业务对象 financial_revenue_plan_alteration + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = FinancialRevenuePlanAlteration.class, reverseConvertGenerate = false) +public class FinancialRevenuePlanAlterationBo extends BaseEntity { + + /** + * + */ + private Long id; + + /** + * 单据编码 + */ + private String documentCode; + + /** + * 单据名称 + */ + private String documentName; + + /** + * 项目 + */ + @NotNull(message = "项目不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long project; + + /** + * 计划类型 + */ + private String planType; + + /** + * 工作周期 + */ + private String workCycle; + + /** + * 开始日期 + */ + @NotNull(message = "开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate startDate; + + /** + * 结束日期 + */ + @NotNull(message = "结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate endDate; + + /** + * 支出总额 + */ + private BigDecimal expenseTotal; + + /** + * 收入总额 + */ + private BigDecimal incomeTotal; + + /** + * 是否临时计划 正常计划,临时计划 + */ + @NotBlank(message = "是否临时计划 正常计划,临时计划不能为空", groups = { AddGroup.class, EditGroup.class }) + private String isTemporaryPlan; + + /** + * 备注 + */ + private String remarks; + + /** + * 文件ID + */ + private String fileId; + + /** + * 备注 + */ + private String remark; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 收入明细 + */ + private List detailOfEarnings; + + /** + * 支出明细 + */ + private List statementOfExpenditures; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/vo/FinancialRevenuePlanAlterationVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/vo/FinancialRevenuePlanAlterationVo.java new file mode 100644 index 00000000..9d4d5f75 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/domain/vo/FinancialRevenuePlanAlterationVo.java @@ -0,0 +1,170 @@ +package org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.vo; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.FinancialRevenuePlanAlteration; +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.zijinjihua.yueduzijinjihua.domain.vo.DetailOfEarningsVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.StatementOfExpendituresVo; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + + +/** + * 月度资金计划变更视图对象 financial_revenue_plan_alteration + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = FinancialRevenuePlanAlteration.class) +public class FinancialRevenuePlanAlterationVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 单据编码 + */ + @ExcelProperty(value = "单据编码") + private String documentCode; + + /** + * 单据名称 + */ + @ExcelProperty(value = "单据名称") + private String documentName; + + /** + * 项目 + */ + @ExcelProperty(value = "项目") + private Long project; + + /** + * 项目名称 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 计划类型 + */ + @ExcelProperty(value = "计划类型") + private String planType; + + /** + * 工作周期 + */ + @ExcelProperty(value = "工作周期") + private String workCycle; + + /** + * 开始日期 + */ + @ExcelProperty(value = "开始日期") + private LocalDate startDate; + + /** + * 结束日期 + */ + @ExcelProperty(value = "结束日期") + private LocalDate endDate; + + /** + * 支出总额 + */ + @ExcelProperty(value = "支出总额") + private BigDecimal expenseTotal; + + /** + * 收入总额 + */ + @ExcelProperty(value = "收入总额") + private BigDecimal incomeTotal; + + /** + * 是否临时计划 正常计划,临时计划 + */ + @ExcelProperty(value = "是否临时计划 正常计划,临时计划") + private String isTemporaryPlan; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remarks; + + /** + * 文件ID + */ + @ExcelProperty(value = "文件ID") + private String fileId; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 创建部门 + */ + @TableField(fill = FieldFill.INSERT) + private Long createDept; + + + @ExcelProperty(value = "创建部门名称") + @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "createDept") + private String createDeptName; + + /** + * 创建者 + */ + @ExcelProperty(value = "创建者") + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + @ExcelProperty(value = "创建者名称") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + private String createByName; + + + /** + * 收入明细 + */ + private List detailOfEarnings; + + /** + * 支出明细 + */ + private List statementOfExpenditures; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/mapper/FinancialRevenuePlanAlterationMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/mapper/FinancialRevenuePlanAlterationMapper.java new file mode 100644 index 00000000..dd17011a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/mapper/FinancialRevenuePlanAlterationMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xzd.zijinjihua.yueduzijinbiangeng.mapper; + +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.FinancialRevenuePlanAlteration; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.vo.FinancialRevenuePlanAlterationVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 月度资金计划变更Mapper接口 + * + * @author Lion Li + * @date 2025-10-16 + */ +public interface FinancialRevenuePlanAlterationMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/service/IFinancialRevenuePlanAlterationService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/service/IFinancialRevenuePlanAlterationService.java new file mode 100644 index 00000000..27cff876 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/service/IFinancialRevenuePlanAlterationService.java @@ -0,0 +1,70 @@ +package org.dromara.xzd.zijinjihua.yueduzijinbiangeng.service; + +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.vo.FinancialRevenuePlanAlterationVo; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.bo.FinancialRevenuePlanAlterationBo; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.FinancialRevenuePlanAlteration; +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-16 + */ +public interface IFinancialRevenuePlanAlterationService extends IService{ + + /** + * 查询月度资金计划变更 + * + * @param id 主键 + * @return 月度资金计划变更 + */ + FinancialRevenuePlanAlterationVo queryById(Long id); + + /** + * 分页查询月度资金计划变更列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 月度资金计划变更分页列表 + */ + TableDataInfo queryPageList(FinancialRevenuePlanAlterationBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的月度资金计划变更列表 + * + * @param bo 查询条件 + * @return 月度资金计划变更列表 + */ + List queryList(FinancialRevenuePlanAlterationBo bo); + + /** + * 新增月度资金计划变更 + * + * @param bo 月度资金计划变更 + * @return 是否新增成功 + */ + Boolean insertByBo(FinancialRevenuePlanAlterationBo bo); + + /** + * 修改月度资金计划变更 + * + * @param bo 月度资金计划变更 + * @return 是否修改成功 + */ + Boolean updateByBo(FinancialRevenuePlanAlterationBo bo); + + /** + * 校验并批量删除月度资金计划变更信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/service/impl/FinancialRevenuePlanAlterationServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/service/impl/FinancialRevenuePlanAlterationServiceImpl.java new file mode 100644 index 00000000..bc12334c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinbiangeng/service/impl/FinancialRevenuePlanAlterationServiceImpl.java @@ -0,0 +1,326 @@ +package org.dromara.xzd.zijinjihua.yueduzijinbiangeng.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.domain.R; +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.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.domain.XzdContractDetails; +import org.dromara.xzd.domain.dto.QuerCorrespondentDto; +import org.dromara.xzd.service.IXzdContractDetailsService; +import org.dromara.xzd.service.IXzdCorrespondentList; +import org.dromara.xzd.service.impl.XzdProjectServiceImpl; +import org.dromara.xzd.service.impl.XzdSupplierInfoServiceImpl; +import org.dromara.xzd.utilS.AreaUtil; +import org.dromara.xzd.zijinjihua.service.ICbsTreeStructureService; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.DetailOfEarnings; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.FinancialRevenueExpenditurePlan; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.StatementOfExpenditures; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.DetailOfEarningsBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.StatementOfExpendituresBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.DetailOfEarningsVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.FinancialRevenueExpenditurePlanVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.StatementOfExpendituresVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IDetailOfEarningsService; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IStatementOfExpendituresService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.bo.FinancialRevenuePlanAlterationBo; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.vo.FinancialRevenuePlanAlterationVo; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.domain.FinancialRevenuePlanAlteration; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.mapper.FinancialRevenuePlanAlterationMapper; +import org.dromara.xzd.zijinjihua.yueduzijinbiangeng.service.IFinancialRevenuePlanAlterationService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 月度资金计划变更Service业务层处理 + * + * @author Lion Li + * @date 2025-10-16 + */ +@RequiredArgsConstructor +@Service +public class FinancialRevenuePlanAlterationServiceImpl extends ServiceImpl implements IFinancialRevenuePlanAlterationService { + + private final FinancialRevenuePlanAlterationMapper baseMapper; + private final AreaUtil areaUtil; + + + private final IDetailOfEarningsService iDetailOfEarningsService; + + + private final ICbsTreeStructureService iCbsTreeStructureService; + + private final IStatementOfExpendituresService iStatementOfExpendituresService; + + + private final IXzdContractDetailsService xzdContractDetailsService; + + @Autowired + private XzdProjectServiceImpl xzdProjectService; + + @Autowired + private IXzdCorrespondentList iXzdCorrespondentList; + + + @Autowired + private XzdSupplierInfoServiceImpl xzdSupplierInfoService; + + @Autowired + private SysOssServiceImpl sysOssService; + + /** + * 查询月度资金计划变更 + * + * @param id 主键 + * @return 月度资金计划变更 + */ + @Override + public FinancialRevenuePlanAlterationVo queryById(Long id){ + FinancialRevenuePlanAlterationVo financialRevenuePlanAlterationVo = baseMapper.selectVoById(id); + List vo = List.of(financialRevenuePlanAlterationVo); + savaValue(vo,true); + return vo.getFirst(); + } + + /** + * 分页查询月度资金计划变更列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 月度资金计划变更分页列表 + */ + @Override + public TableDataInfo queryPageList(FinancialRevenuePlanAlterationBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + savaValue(result.getRecords(),false); + return TableDataInfo.build(result); + } + + private void savaValue(List records, boolean type) { + for (FinancialRevenuePlanAlterationVo item : records) { + //项目名称 + if (item.getProject() != null){ + String projectName = xzdProjectService.queryNameById(item.getProject()); + if (projectName != null){ + item.setProjectName(projectName); + } + } + HashMap hashMap = new HashMap<>(); + hashMap.put("financial_revenue_id",item.getId()); +// 收入 + List detail = iDetailOfEarningsService.getBaseMapper().selectByMap(hashMap); + if (detail != null && detail.size() > 0){ + List convert = MapstructUtils.convert(detail, DetailOfEarningsVo.class); + if (type){ + convert.forEach(temp ->{ + //甲方单位(客户信息列表) + R byid = iXzdCorrespondentList.getCustomerByid(temp.getPartyAUnit()); + if (byid!=null){ + if (byid.getData().getXzdCustomerinformation() != null){ + temp.setPartyAUnitName(byid.getData().getXzdCustomerinformation().getUnitName()); + } + } +// cbs + Long cbs = temp.getCbs(); + if (cbs != null){ + String name = iCbsTreeStructureService.queryById(cbs).getName(); + temp.setCbsName(name); + } + +// 合同 + XzdContractDetails contractDetailsServiceById = xzdContractDetailsService.getById(temp.getContractCode()); + if(contractDetailsServiceById != null){ + temp.setContractCodeName(contractDetailsServiceById.getContractCode()); + } + }); + } + item.setDetailOfEarnings(convert); + } +// 支出 + List statementOfExpenditures = iStatementOfExpendituresService.getBaseMapper().selectByMap(hashMap); + if (statementOfExpenditures != null && statementOfExpenditures.size() > 0){ + List convert = MapstructUtils.convert(statementOfExpenditures, StatementOfExpendituresVo.class); + if (type){ + convert.forEach(temp ->{ + //供应商 supplier + String unitName = xzdSupplierInfoService.queryNameById(temp.getSupplier()); + if (StringUtils.isNotBlank(unitName)){ + temp.setSupplierName(unitName); + } + Long cbs = temp.getCbs(); + if (cbs != null){ + String name = iCbsTreeStructureService.queryById(cbs).getName(); + temp.setCbsName(name); + } +// 合同 + XzdContractDetails contractDetailsServiceById = xzdContractDetailsService.getById(temp.getContractCode()); + if(contractDetailsServiceById != null){ + temp.setContractCodeName(contractDetailsServiceById.getContractCode()); + } + + }); + } + item.setStatementOfExpenditures(convert); + } + } + } + + /** + * 查询符合条件的月度资金计划变更列表 + * + * @param bo 查询条件 + * @return 月度资金计划变更列表 + */ + @Override + public List queryList(FinancialRevenuePlanAlterationBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(FinancialRevenuePlanAlterationBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(FinancialRevenuePlanAlteration::getId); + lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), FinancialRevenuePlanAlteration::getDocumentCode, bo.getDocumentCode()); + lqw.like(StringUtils.isNotBlank(bo.getDocumentName()), FinancialRevenuePlanAlteration::getDocumentName, bo.getDocumentName()); + lqw.eq(bo.getProject() != null, FinancialRevenuePlanAlteration::getProject, bo.getProject()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanType()), FinancialRevenuePlanAlteration::getPlanType, bo.getPlanType()); + lqw.eq(StringUtils.isNotBlank(bo.getWorkCycle()), FinancialRevenuePlanAlteration::getWorkCycle, bo.getWorkCycle()); + lqw.eq(bo.getStartDate() != null, FinancialRevenuePlanAlteration::getStartDate, bo.getStartDate()); + lqw.eq(bo.getEndDate() != null, FinancialRevenuePlanAlteration::getEndDate, bo.getEndDate()); + lqw.eq(bo.getExpenseTotal() != null, FinancialRevenuePlanAlteration::getExpenseTotal, bo.getExpenseTotal()); + lqw.eq(bo.getIncomeTotal() != null, FinancialRevenuePlanAlteration::getIncomeTotal, bo.getIncomeTotal()); + lqw.eq(StringUtils.isNotBlank(bo.getIsTemporaryPlan()), FinancialRevenuePlanAlteration::getIsTemporaryPlan, bo.getIsTemporaryPlan()); + lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), FinancialRevenuePlanAlteration::getRemarks, bo.getRemarks()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), FinancialRevenuePlanAlteration::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), FinancialRevenuePlanAlteration::getAuditStatus, bo.getAuditStatus()); + return lqw; + } + + /** + * 新增月度资金计划变更 + * + * @param bo 月度资金计划变更 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(FinancialRevenuePlanAlterationBo bo) { + FinancialRevenuePlanAlteration add = MapstructUtils.convert(bo, FinancialRevenuePlanAlteration.class); + validEntityBeforeSave(add); + Long l = baseMapper.selectCount(new LambdaQueryWrapper().gt(FinancialRevenuePlanAlteration::getCreateTime, LocalDate.now())); + String s = areaUtil.generateDateBasedNumber(); + add.setDocumentCode( s+"-"+(l+1)); + boolean flag = baseMapper.insert(add) > 0; + + + // 收入明细 + List detailOfEarnings = bo.getDetailOfEarnings(); + if (detailOfEarnings != null && detailOfEarnings.size() > 0) { + detailOfEarnings.forEach(item -> { + item.setFinancialRevenueId(add.getId() ); + }); + iDetailOfEarningsService.saveBatch(MapstructUtils.convert(detailOfEarnings, DetailOfEarnings.class)); + } + +// 支出明细 + List statementOfExpenditures = bo.getStatementOfExpenditures(); + statementOfExpenditures.forEach(item -> { + item.setFinancialRevenueId(add.getId()); + }); + iStatementOfExpendituresService.saveBatch(MapstructUtils.convert(statementOfExpenditures, StatementOfExpenditures.class)); + + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改月度资金计划变更 + * + * @param bo 月度资金计划变更 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(FinancialRevenuePlanAlterationBo bo) { + FinancialRevenuePlanAlteration update = MapstructUtils.convert(bo, FinancialRevenuePlanAlteration.class); + validEntityBeforeSave(update); + + List detailOfEarnings = bo.getDetailOfEarnings(); + HashMap hashMap = new HashMap<>(); + hashMap.put("financial_revenue_id",bo.getId()); +// 收入 + iDetailOfEarningsService.getBaseMapper().deleteByMap(hashMap); + if (detailOfEarnings != null && detailOfEarnings.size() > 0) { + detailOfEarnings.forEach(item ->{ + item.setFinancialRevenueId(bo.getId()); + }); + iDetailOfEarningsService.saveBatch(MapstructUtils.convert(detailOfEarnings, DetailOfEarnings.class)); + } +// 支出 + iStatementOfExpendituresService.getBaseMapper().deleteByMap(hashMap); + List statementOfExpenditures = bo.getStatementOfExpenditures(); + if (statementOfExpenditures != null && statementOfExpenditures.size() > 0) { + statementOfExpenditures.forEach(item ->{ + item.setFinancialRevenueId(bo.getId()); + }); + iStatementOfExpendituresService.saveBatch(MapstructUtils.convert(statementOfExpenditures, StatementOfExpenditures.class)); + } + + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(FinancialRevenuePlanAlteration entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除月度资金计划变更信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + for (Long id : ids) { + FinancialRevenuePlanAlterationVo vo = baseMapper.selectVoById(id); + // 删除附件 + if (!StringUtils.isEmpty(vo.getFileId())){ + List collect = Arrays.stream(vo.getFileId().split(",")).map(item -> { + return Long.parseLong(item); + }).collect(Collectors.toList()); + sysOssService.deleteWithValidByIds(collect, false); + } + } +// 删除支出,收入 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(DetailOfEarnings::getFinancialRevenueId, ids); + iDetailOfEarningsService.getBaseMapper().delete(lambdaQueryWrapper); + + LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); + lambdaQueryWrapper1.in(StatementOfExpenditures::getFinancialRevenueId, ids); + iStatementOfExpendituresService.getBaseMapper().delete(lambdaQueryWrapper1); + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/controller/FinancialRevenueExpenditurePlanController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/controller/FinancialRevenueExpenditurePlanController.java new file mode 100644 index 00000000..fa8d1051 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/controller/FinancialRevenueExpenditurePlanController.java @@ -0,0 +1,108 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.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.dromara.xzd.zijinjihua.yueduzijinjihua.service.IDetailOfEarningsService; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IStatementOfExpendituresService; +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.zijinjihua.yueduzijinjihua.domain.vo.FinancialRevenueExpenditurePlanVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.FinancialRevenueExpenditurePlanBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IFinancialRevenueExpenditurePlanService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 月度资金计划 + * + * @author Lion Li + * @date 2025-10-15 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/yueduzijinjihua/revenueExpenditurePlan") +public class FinancialRevenueExpenditurePlanController extends BaseController { + + private final IFinancialRevenueExpenditurePlanService financialRevenueExpenditurePlanService; + + + /** + * 查询月度资金计划列表 + */ + @SaCheckPermission("yueduzijinjihua:revenueExpenditurePlan:list") + @GetMapping("/list") + public TableDataInfo list(FinancialRevenueExpenditurePlanBo bo, PageQuery pageQuery) { + return financialRevenueExpenditurePlanService.queryPageList(bo, pageQuery); + } + + /** + * 导出月度资金计划列表 + */ + @SaCheckPermission("yueduzijinjihua:revenueExpenditurePlan:export") + @Log(title = "月度资金计划", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(FinancialRevenueExpenditurePlanBo bo, HttpServletResponse response) { + List list = financialRevenueExpenditurePlanService.queryList(bo); + ExcelUtil.exportExcel(list, "月度资金计划", FinancialRevenueExpenditurePlanVo.class, response); + } + + /** + * 获取月度资金计划详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("yueduzijinjihua:revenueExpenditurePlan:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(financialRevenueExpenditurePlanService.queryById(id)); + } + + /** + * 新增月度资金计划 + */ + @SaCheckPermission("yueduzijinjihua:revenueExpenditurePlan:add") + @Log(title = "月度资金计划", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody FinancialRevenueExpenditurePlanBo bo) { + return toAjax(financialRevenueExpenditurePlanService.insertByBo(bo)); + } + + /** + * 修改月度资金计划 + */ + @SaCheckPermission("yueduzijinjihua:revenueExpenditurePlan:edit") + @Log(title = "月度资金计划", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody FinancialRevenueExpenditurePlanBo bo) { + return toAjax(financialRevenueExpenditurePlanService.updateByBo(bo)); + } + + /** + * 删除月度资金计划 + * + * @param ids 主键串 + */ + @SaCheckPermission("yueduzijinjihua:revenueExpenditurePlan:remove") + @Log(title = "月度资金计划", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(financialRevenueExpenditurePlanService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/DetailOfEarnings.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/DetailOfEarnings.java new file mode 100644 index 00000000..fa5201fa --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/DetailOfEarnings.java @@ -0,0 +1,116 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.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; + +/** + * 资金计划-收入明细对象 detail_of_earnings + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@TableName("detail_of_earnings") +public class DetailOfEarnings { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 月度资金id + */ + private Long financialRevenueId; + + /** + * 预算项 + */ + private String budgetItem; + + /** + * 收入金额 + */ + private BigDecimal incomeAmount; + + /** + * 是否开票 + */ + private String isInvoice; + /** + * + * 变更原因 + */ + private String reasonsForChange; + + /** + * 变更后金额 + */ + private BigDecimal changedAmount; + + /** + * CBS + */ + private Long cbs; + + /** + * CBS金额 + */ + private BigDecimal cbsAmount; + + /** + * CBS余额 + */ + private BigDecimal cbsBalance; + + /** + * 甲方单位 客户 + */ + private Long partyAUnit; + + /** + * 合同编码 + */ + private Long contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 合同金额 + */ + private BigDecimal contractAmount; + + /** + * 累计审定产值金额 + */ + private BigDecimal cumulativeApprovedOutputValue; + + /** + * 累计收款金额 + */ + private BigDecimal cumulativeReceiptAmount; + + /** + * 截止本期结算比例(结算/合同) + */ + private BigDecimal settlementRatio; + + /** + * 截止本期收款比例(收款/结算) + */ + private BigDecimal receiptRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/FinancialRevenueExpenditurePlan.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/FinancialRevenueExpenditurePlan.java new file mode 100644 index 00000000..82f79c81 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/FinancialRevenueExpenditurePlan.java @@ -0,0 +1,163 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.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; + +/** + * 月度资金计划对象 financial_revenue_expenditure_plan + * + * @author Lion Li + * @date 2025-10-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("financial_revenue_expenditure_plan") +public class FinancialRevenueExpenditurePlan extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 单据编码 + */ + private String documentCode; + + /** + * 单据名称 + */ + private String documentName; + + /** + * 项目 + */ + private Long project; + + /** + * 计划类型 + */ + private String planType; + + /** + * 工作周期 + */ + private String workCycle; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + + /** + * 支出总额 + */ + private BigDecimal expenseTotal; + + /** + * 收入总额 + */ + private BigDecimal incomeTotal; + + /** + * 是否临时计划 + */ + private String isTemporaryPlan; + + /** + * 单据日期(上月) + */ + private LocalDate documentDateLastMonth; + + /** + * 备注 + */ + private String remarks; + + /** + * 项目可用余额 + */ + private BigDecimal projectAvailableBalance; + + /** + * 累计收款金额 + */ + private BigDecimal cumulativeReceiptAmount; + + /** + * 累计支付金额 + */ + private BigDecimal cumulativePaymentAmount; + + /** + * 报销支出金额 + */ + private BigDecimal reimbursementAmount; + + /** + * 合同支付金额 + */ + private BigDecimal contractPaymentAmount; + + /** + * 剩余资金金额 + */ + private BigDecimal remainingFunds; + + /** + * 实时刷新(0:不刷新,1:刷新) + */ + private Integer realTimeRefresh; + + /** + * 月度支出余额 + */ + private BigDecimal monthlyExpenditureBalance; + + /** + * 月度累计支出 + */ + private BigDecimal monthlyCumulativeExpenditure; + + /** + * 年度支出余额 + */ + private BigDecimal annualExpenditureBalance; + + /** + * 年度累计支出 + */ + private BigDecimal annualCumulativeExpenditure; + + /** + * 文件ID + */ + private String fileId; + + /** + * 备注 + */ + private String remark; + + /** + * 审核状态 + */ + private String auditStatus; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/StatementOfExpenditures.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/StatementOfExpenditures.java new file mode 100644 index 00000000..40bfc8a5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/StatementOfExpenditures.java @@ -0,0 +1,127 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.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; + +/** + * 资金计划-支出明细对象 statement_of_expenditures + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@TableName("statement_of_expenditures") +public class StatementOfExpenditures { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 月度资金id + */ + private Long financialRevenueId; + + /** + * 预算项 + */ + private String budgetItem; + + /** + * + * 变更原因 + */ + private String reasonsForChange; + + /** + * 支出类型 + */ + private String expenseType; + + /** + * 支出金额 + */ + private BigDecimal expenseAmount; + + /** + * 变更后金额 + */ + private BigDecimal changedAmount; + + /** + * CBS + */ + private Long cbs; + + /** + * CBS金额 + */ + private BigDecimal cbsAmount; + + /** + * CBS余额 + */ + private BigDecimal cbsBalance; + + /** + * 供应商 + */ + private Long supplier; + + /** + * 合同编码 + */ + private Long contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 合同金额 + */ + private BigDecimal contractAmount; + + /** + * 累计进度结算金额 + */ + private BigDecimal cumulativeProgressSettlement; + + /** + * 累计支付金额 + */ + private BigDecimal cumulativePaymentAmount; + + /** + * 累计收票金额 + */ + private BigDecimal cumulativeInvoiceAmount; + + /** + * 截止至本期应付款金额 + */ + private BigDecimal currentPeriodPayableAmount; + + /** + * 累计支付占合同比例 + */ + private BigDecimal paymentContractRatio; + + /** + * 截止至本期进度支付占截止至本期应付款金额的比例 + */ + private BigDecimal progressPaymentToCurrentPayableRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/DetailOfEarningsBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/DetailOfEarningsBo.java new file mode 100644 index 00000000..fc239d44 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/DetailOfEarningsBo.java @@ -0,0 +1,118 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.DetailOfEarnings; +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; + +/** + * 资金计划-收入明细业务对象 detail_of_earnings + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@AutoMapper(target = DetailOfEarnings.class, reverseConvertGenerate = false) +public class DetailOfEarningsBo { + + /** + * + */ + private Long id; + + /** + * 月度资金id + */ + private Long financialRevenueId; + + /** + * 预算项 + */ + @NotBlank(message = "预算项不能为空", groups = { AddGroup.class, EditGroup.class }) + private String budgetItem; + + /** + * 收入金额 + */ + @NotNull(message = "收入金额不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal incomeAmount; + + /** + * 是否开票 + */ + @NotBlank(message = "是否开票不能为空", groups = { AddGroup.class, EditGroup.class }) + private String isInvoice; + + /** + * 变更后金额 + */ + private BigDecimal changedAmount; + + /** + * CBS + */ + private Long cbs; + + /** + * + * 变更原因 + */ + private String reasonsForChange; + + /** + * CBS金额 + */ + private BigDecimal cbsAmount; + + /** + * CBS余额 + */ + private BigDecimal cbsBalance; + + /** + * 甲方单位 客户 + */ + private Long partyAUnit; + + /** + * 合同编码 + */ + private Long contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 合同金额 + */ + private BigDecimal contractAmount; + + /** + * 累计审定产值金额 + */ + private BigDecimal cumulativeApprovedOutputValue; + + /** + * 累计收款金额 + */ + private BigDecimal cumulativeReceiptAmount; + + /** + * 截止本期结算比例(结算/合同) + */ + private BigDecimal settlementRatio; + + /** + * 截止本期收款比例(收款/结算) + */ + private BigDecimal receiptRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/FinancialRevenueExpenditurePlanBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/FinancialRevenueExpenditurePlanBo.java new file mode 100644 index 00000000..bf7247a1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/FinancialRevenueExpenditurePlanBo.java @@ -0,0 +1,178 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.FinancialRevenueExpenditurePlan; +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.zijinjihua.yueduzijinjihua.domain.vo.DetailOfEarningsVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.StatementOfExpendituresVo; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; + +/** + * 月度资金计划业务对象 financial_revenue_expenditure_plan + * + * @author Lion Li + * @date 2025-10-15 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = FinancialRevenueExpenditurePlan.class, reverseConvertGenerate = false) +public class FinancialRevenueExpenditurePlanBo extends BaseEntity { + + /** + * + */ + private Long id; + + /** + * 单据编码 + */ + private String documentCode; + + /** + * 单据名称 + */ + private String documentName; + + /** + * 项目 + */ + @NotNull(message = "项目不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long project; + + /** + * 计划类型 + */ + private String planType; + + /** + * 工作周期 + */ + private String workCycle; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + + /** + * 支出总额 + */ + private BigDecimal expenseTotal; + + /** + * 收入总额 + */ + private BigDecimal incomeTotal; + + /** + * 是否临时计划 + */ + @NotBlank(message = "是否临时计划不能为空", groups = { AddGroup.class, EditGroup.class }) + private String isTemporaryPlan; + + /** + * 单据日期(上月) + */ + private LocalDate documentDateLastMonth; + + /** + * 备注 + */ + private String remarks; + + /** + * 项目可用余额 + */ + private BigDecimal projectAvailableBalance; + + /** + * 累计收款金额 + */ + private BigDecimal cumulativeReceiptAmount; + + /** + * 累计支付金额 + */ + private BigDecimal cumulativePaymentAmount; + + /** + * 报销支出金额 + */ + private BigDecimal reimbursementAmount; + + /** + * 合同支付金额 + */ + private BigDecimal contractPaymentAmount; + + /** + * 剩余资金金额 + */ + private BigDecimal remainingFunds; + + /** + * 实时刷新(0:不刷新,1:刷新) + */ + private Integer realTimeRefresh; + + /** + * 月度支出余额 + */ + private BigDecimal monthlyExpenditureBalance; + + /** + * 月度累计支出 + */ + private BigDecimal monthlyCumulativeExpenditure; + + /** + * 年度支出余额 + */ + private BigDecimal annualExpenditureBalance; + + /** + * 年度累计支出 + */ + private BigDecimal annualCumulativeExpenditure; + + /** + * 文件ID + */ + private String fileId; + + /** + * 备注 + */ + private String remark; + + /** + * 审核状态 + */ + private String auditStatus; + + + /** + * 收入明细 + */ + private List detailOfEarnings; + + /** + * 支出明细 + */ + private List statementOfExpenditures; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/StatementOfExpendituresBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/StatementOfExpendituresBo.java new file mode 100644 index 00000000..162a58bc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/bo/StatementOfExpendituresBo.java @@ -0,0 +1,128 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.StatementOfExpenditures; +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; + +/** + * 资金计划-支出明细业务对象 statement_of_expenditures + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@AutoMapper(target = StatementOfExpenditures.class, reverseConvertGenerate = false) +public class StatementOfExpendituresBo { + + /** + * + */ + @NotNull(message = "不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 月度资金id + */ + private Long financialRevenueId; + + /** + * 预算项 + */ + @NotBlank(message = "预算项不能为空", groups = { AddGroup.class, EditGroup.class }) + private String budgetItem; + + /** + * 支出类型 + */ + private String expenseType; + + /** + * + * 变更原因 + */ + private String reasonsForChange; + + /** + * 支出金额 + */ + private BigDecimal expenseAmount; + + /** + * 变更后金额 + */ + private BigDecimal changedAmount; + + /** + * CBS + */ + private Long cbs; + + /** + * CBS金额 + */ + private BigDecimal cbsAmount; + + /** + * CBS余额 + */ + private BigDecimal cbsBalance; + + /** + * 供应商 + */ + @NotNull(message = "供应商不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long supplier; + + /** + * 合同编码 + */ + private Long contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 合同金额 + */ + private BigDecimal contractAmount; + + /** + * 累计进度结算金额 + */ + private BigDecimal cumulativeProgressSettlement; + + /** + * 累计支付金额 + */ + private BigDecimal cumulativePaymentAmount; + + /** + * 累计收票金额 + */ + private BigDecimal cumulativeInvoiceAmount; + + /** + * 截止至本期应付款金额 + */ + private BigDecimal currentPeriodPayableAmount; + + /** + * 累计支付占合同比例 + */ + private BigDecimal paymentContractRatio; + + /** + * 截止至本期进度支付占截止至本期应付款金额的比例 + */ + private BigDecimal progressPaymentToCurrentPayableRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/DetailOfEarningsVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/DetailOfEarningsVo.java new file mode 100644 index 00000000..fe69b3eb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/DetailOfEarningsVo.java @@ -0,0 +1,163 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo; + +import java.math.BigDecimal; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.DetailOfEarnings; +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; + + + +/** + * 资金计划-收入明细视图对象 detail_of_earnings + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DetailOfEarnings.class) +public class DetailOfEarningsVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 月度资金id + */ + @ExcelProperty(value = "月度资金id") + private Long financialRevenueId; + + /** + * 预算项 + */ + @ExcelProperty(value = "预算项") + private String budgetItem; + + /** + * + * 变更原因 + */ + private String reasonsForChange; + + /** + * 收入金额 + */ + @ExcelProperty(value = "收入金额") + private BigDecimal incomeAmount; + + /** + * 是否开票 + */ + @ExcelProperty(value = "是否开票") + private String isInvoice; + + /** + * 变更后金额 + */ + @ExcelProperty(value = "变更后金额") + private BigDecimal changedAmount; + + /** + * CBS + */ + @ExcelProperty(value = "CBS") + private Long cbs; + + /** + * CBS名称 + */ + @ExcelProperty(value = "CBS名称") + private String cbsName; + + + /** + * CBS金额 + */ + @ExcelProperty(value = "CBS金额") + private BigDecimal cbsAmount; + + /** + * CBS余额 + */ + @ExcelProperty(value = "CBS余额") + private BigDecimal cbsBalance; + + /** + * 甲方单位 客户 + */ + @ExcelProperty(value = "甲方单位 客户") + private Long partyAUnit; + + /** + * 甲方单位名称 客户 + */ + @ExcelProperty(value = "甲方单位名称 客户") + private String partyAUnitName; + + /** + * 合同编码 + */ + @ExcelProperty(value = "合同编码 ") + private Long contractCode; + + + /** + * 合同编码 名称 + */ + @ExcelProperty(value = "合同编码名称 ") + private String contractCodeName; + + /** + * 合同名称 + */ + @ExcelProperty(value = "合同名称") + private String contractName; + + /** + * 合同金额 + */ + @ExcelProperty(value = "合同金额") + private BigDecimal contractAmount; + + /** + * 累计审定产值金额 + */ + @ExcelProperty(value = "累计审定产值金额") + private BigDecimal cumulativeApprovedOutputValue; + + /** + * 累计收款金额 + */ + @ExcelProperty(value = "累计收款金额") + private BigDecimal cumulativeReceiptAmount; + + /** + * 截止本期结算比例(结算/合同) + */ + @ExcelProperty(value = "截止本期结算比例", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "结=算/合同") + private BigDecimal settlementRatio; + + /** + * 截止本期收款比例(收款/结算) + */ + @ExcelProperty(value = "截止本期收款比例", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "收=款/结算") + private BigDecimal receiptRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/FinancialRevenueExpenditurePlanVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/FinancialRevenueExpenditurePlanVo.java new file mode 100644 index 00000000..0d88bd60 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/FinancialRevenueExpenditurePlanVo.java @@ -0,0 +1,254 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.FinancialRevenueExpenditurePlan; +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.zijinjihua.yueduzijinjihua.domain.bo.DetailOfEarningsBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.StatementOfExpendituresBo; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + + +/** + * 月度资金计划视图对象 financial_revenue_expenditure_plan + * + * @author Lion Li + * @date 2025-10-15 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = FinancialRevenueExpenditurePlan.class) +public class FinancialRevenueExpenditurePlanVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 单据编码 + */ + @ExcelProperty(value = "单据编码") + private String documentCode; + + /** + * 单据名称 + */ + @ExcelProperty(value = "单据名称") + private String documentName; + + /** + * 项目 + */ + @ExcelProperty(value = "项目") + private Long project; + + + /** + * 项目名称 + */ + @ExcelProperty(value = "项目名称") + private String projectName; + + /** + * 计划类型 + */ + @ExcelProperty(value = "计划类型") + private String planType; + + /** + * 工作周期 + */ + @ExcelProperty(value = "工作周期") + private String workCycle; + + /** + * 开始日期 + */ + @ExcelProperty(value = "开始日期") + private LocalDate startDate; + + /** + * 结束日期 + */ + @ExcelProperty(value = "结束日期") + private LocalDate endDate; + + /** + * 支出总额 + */ + @ExcelProperty(value = "支出总额") + private BigDecimal expenseTotal; + + /** + * 收入总额 + */ + @ExcelProperty(value = "收入总额") + private BigDecimal incomeTotal; + + /** + * 是否临时计划 + */ + @ExcelProperty(value = "是否临时计划") + private String isTemporaryPlan; + + /** + * 单据日期(上月) + */ + @ExcelProperty(value = "单据日期(上月)") + private LocalDate documentDateLastMonth; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remarks; + + /** + * 项目可用余额 + */ + @ExcelProperty(value = "项目可用余额") + private BigDecimal projectAvailableBalance; + + /** + * 累计收款金额 + */ + @ExcelProperty(value = "累计收款金额") + private BigDecimal cumulativeReceiptAmount; + + /** + * 累计支付金额 + */ + @ExcelProperty(value = "累计支付金额") + private BigDecimal cumulativePaymentAmount; + + /** + * 报销支出金额 + */ + @ExcelProperty(value = "报销支出金额") + private BigDecimal reimbursementAmount; + + /** + * 合同支付金额 + */ + @ExcelProperty(value = "合同支付金额") + private BigDecimal contractPaymentAmount; + + /** + * 剩余资金金额 + */ + @ExcelProperty(value = "剩余资金金额") + private BigDecimal remainingFunds; + + /** + * 实时刷新(0:不刷新,1:刷新) + */ + @ExcelProperty(value = "实时刷新", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=:不刷新,1:刷新") + private Integer realTimeRefresh; + + /** + * 月度支出余额 + */ + @ExcelProperty(value = "月度支出余额") + private BigDecimal monthlyExpenditureBalance; + + /** + * 月度累计支出 + */ + @ExcelProperty(value = "月度累计支出") + private BigDecimal monthlyCumulativeExpenditure; + + /** + * 年度支出余额 + */ + @ExcelProperty(value = "年度支出余额") + private BigDecimal annualExpenditureBalance; + + /** + * 年度累计支出 + */ + @ExcelProperty(value = "年度累计支出") + private BigDecimal annualCumulativeExpenditure; + + /** + * 文件ID + */ + @ExcelProperty(value = "文件ID") + private String fileId; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 创建部门 + */ + @TableField(fill = FieldFill.INSERT) + private Long createDept; + + + @ExcelProperty(value = "创建部门名称") + @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "createDept") + private String createDeptName; + + /** + * 创建者 + */ + @ExcelProperty(value = "创建者") + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + @ExcelProperty(value = "创建者名称") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + private String createByName; + + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + + /** + * 收入明细 + */ + private List detailOfEarnings; + + /** + * 支出明细 + */ + private List statementOfExpenditures; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/StatementOfExpendituresVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/StatementOfExpendituresVo.java new file mode 100644 index 00000000..c35c4f90 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/domain/vo/StatementOfExpendituresVo.java @@ -0,0 +1,171 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo; + +import java.math.BigDecimal; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.StatementOfExpenditures; +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; + + + +/** + * 资金计划-支出明细视图对象 statement_of_expenditures + * + * @author Lion Li + * @date 2025-10-16 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = StatementOfExpenditures.class) +public class StatementOfExpendituresVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 月度资金id + */ + @ExcelProperty(value = "月度资金id") + private Long financialRevenueId; + + /** + * 预算项 + */ + @ExcelProperty(value = "预算项") + private String budgetItem; + + /** + * 支出类型 + */ + @ExcelProperty(value = "支出类型") + private String expenseType; + + /** + * 支出金额 + */ + @ExcelProperty(value = "支出金额") + private BigDecimal expenseAmount; + + /** + * 变更后金额 + */ + @ExcelProperty(value = "变更后金额") + private BigDecimal changedAmount; + + /** + * CBS + */ + @ExcelProperty(value = "CBS") + private Long cbs; + + /** + * CBS名称 + */ + @ExcelProperty(value = "CBS名称") + private String cbsName; + + /** + * CBS金额 + */ + @ExcelProperty(value = "CBS金额") + private BigDecimal cbsAmount; + + /** + * CBS余额 + */ + @ExcelProperty(value = "CBS余额") + private BigDecimal cbsBalance; + + /** + * 供应商 + */ + @ExcelProperty(value = "供应商") + private Long supplier; + + /** + * 供应商名称 + */ + @ExcelProperty(value = "供应商名称") + private String supplierName; + + /** + * 合同编码 + */ + @ExcelProperty(value = "合同编码") + private Long contractCode; + + /** + * 合同编码名称 + */ + @ExcelProperty(value = "合同编码名称") + private String contractCodeName; + + /** + * 合同名称 + */ + @ExcelProperty(value = "合同名称") + private String contractName; + + /** + * 合同金额 + */ + @ExcelProperty(value = "合同金额") + private BigDecimal contractAmount; + + /** + * + * 变更原因 + */ + private String reasonsForChange; + + /** + * 累计进度结算金额 + */ + @ExcelProperty(value = "累计进度结算金额") + private BigDecimal cumulativeProgressSettlement; + + /** + * 累计支付金额 + */ + @ExcelProperty(value = "累计支付金额") + private BigDecimal cumulativePaymentAmount; + + /** + * 累计收票金额 + */ + @ExcelProperty(value = "累计收票金额") + private BigDecimal cumulativeInvoiceAmount; + + /** + * 截止至本期应付款金额 + */ + @ExcelProperty(value = "截止至本期应付款金额") + private BigDecimal currentPeriodPayableAmount; + + /** + * 累计支付占合同比例 + */ + @ExcelProperty(value = "累计支付占合同比例") + private BigDecimal paymentContractRatio; + + /** + * 截止至本期进度支付占截止至本期应付款金额的比例 + */ + @ExcelProperty(value = "截止至本期进度支付占截止至本期应付款金额的比例") + private BigDecimal progressPaymentToCurrentPayableRatio; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/DetailOfEarningsMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/DetailOfEarningsMapper.java new file mode 100644 index 00000000..db95028e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/DetailOfEarningsMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.mapper; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.DetailOfEarnings; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.DetailOfEarningsVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 资金计划-收入明细Mapper接口 + * + * @author Lion Li + * @date 2025-10-16 + */ +public interface DetailOfEarningsMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/FinancialRevenueExpenditurePlanMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/FinancialRevenueExpenditurePlanMapper.java new file mode 100644 index 00000000..c0e691b2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/FinancialRevenueExpenditurePlanMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.mapper; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.FinancialRevenueExpenditurePlan; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.FinancialRevenueExpenditurePlanVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 月度资金计划Mapper接口 + * + * @author Lion Li + * @date 2025-10-15 + */ +public interface FinancialRevenueExpenditurePlanMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/StatementOfExpendituresMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/StatementOfExpendituresMapper.java new file mode 100644 index 00000000..7c04ec4c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/mapper/StatementOfExpendituresMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.mapper; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.StatementOfExpenditures; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.StatementOfExpendituresVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 资金计划-支出明细Mapper接口 + * + * @author Lion Li + * @date 2025-10-16 + */ +public interface StatementOfExpendituresMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IDetailOfEarningsService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IDetailOfEarningsService.java new file mode 100644 index 00000000..12a59c0f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IDetailOfEarningsService.java @@ -0,0 +1,70 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.service; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.DetailOfEarningsVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.DetailOfEarningsBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.DetailOfEarnings; +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-16 + */ +public interface IDetailOfEarningsService extends IService{ + + /** + * 查询资金计划-收入明细 + * + * @param id 主键 + * @return 资金计划-收入明细 + */ + DetailOfEarningsVo queryById(Long id); + + /** + * 分页查询资金计划-收入明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 资金计划-收入明细分页列表 + */ + TableDataInfo queryPageList(DetailOfEarningsBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的资金计划-收入明细列表 + * + * @param bo 查询条件 + * @return 资金计划-收入明细列表 + */ + List queryList(DetailOfEarningsBo bo); + + /** + * 新增资金计划-收入明细 + * + * @param bo 资金计划-收入明细 + * @return 是否新增成功 + */ + Boolean insertByBo(DetailOfEarningsBo bo); + + /** + * 修改资金计划-收入明细 + * + * @param bo 资金计划-收入明细 + * @return 是否修改成功 + */ + Boolean updateByBo(DetailOfEarningsBo bo); + + /** + * 校验并批量删除资金计划-收入明细信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IFinancialRevenueExpenditurePlanService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IFinancialRevenueExpenditurePlanService.java new file mode 100644 index 00000000..8cb5ffaf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IFinancialRevenueExpenditurePlanService.java @@ -0,0 +1,70 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.service; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.FinancialRevenueExpenditurePlanVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.FinancialRevenueExpenditurePlanBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.FinancialRevenueExpenditurePlan; +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-15 + */ +public interface IFinancialRevenueExpenditurePlanService extends IService{ + + /** + * 查询月度资金计划 + * + * @param id 主键 + * @return 月度资金计划 + */ + FinancialRevenueExpenditurePlanVo queryById(Long id); + + /** + * 分页查询月度资金计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 月度资金计划分页列表 + */ + TableDataInfo queryPageList(FinancialRevenueExpenditurePlanBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的月度资金计划列表 + * + * @param bo 查询条件 + * @return 月度资金计划列表 + */ + List queryList(FinancialRevenueExpenditurePlanBo bo); + + /** + * 新增月度资金计划 + * + * @param bo 月度资金计划 + * @return 是否新增成功 + */ + Boolean insertByBo(FinancialRevenueExpenditurePlanBo bo); + + /** + * 修改月度资金计划 + * + * @param bo 月度资金计划 + * @return 是否修改成功 + */ + Boolean updateByBo(FinancialRevenueExpenditurePlanBo bo); + + /** + * 校验并批量删除月度资金计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IStatementOfExpendituresService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IStatementOfExpendituresService.java new file mode 100644 index 00000000..4c65b907 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/IStatementOfExpendituresService.java @@ -0,0 +1,70 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.service; + +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.StatementOfExpendituresVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.StatementOfExpendituresBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.StatementOfExpenditures; +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-16 + */ +public interface IStatementOfExpendituresService extends IService{ + + /** + * 查询资金计划-支出明细 + * + * @param id 主键 + * @return 资金计划-支出明细 + */ + StatementOfExpendituresVo queryById(Long id); + + /** + * 分页查询资金计划-支出明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 资金计划-支出明细分页列表 + */ + TableDataInfo queryPageList(StatementOfExpendituresBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的资金计划-支出明细列表 + * + * @param bo 查询条件 + * @return 资金计划-支出明细列表 + */ + List queryList(StatementOfExpendituresBo bo); + + /** + * 新增资金计划-支出明细 + * + * @param bo 资金计划-支出明细 + * @return 是否新增成功 + */ + Boolean insertByBo(StatementOfExpendituresBo bo); + + /** + * 修改资金计划-支出明细 + * + * @param bo 资金计划-支出明细 + * @return 是否修改成功 + */ + Boolean updateByBo(StatementOfExpendituresBo bo); + + /** + * 校验并批量删除资金计划-支出明细信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/DetailOfEarningsServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/DetailOfEarningsServiceImpl.java new file mode 100644 index 00000000..a7e17b53 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/DetailOfEarningsServiceImpl.java @@ -0,0 +1,145 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.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.zijinjihua.yueduzijinjihua.domain.bo.DetailOfEarningsBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.DetailOfEarningsVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.DetailOfEarnings; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.mapper.DetailOfEarningsMapper; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IDetailOfEarningsService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 资金计划-收入明细Service业务层处理 + * + * @author Lion Li + * @date 2025-10-16 + */ +@RequiredArgsConstructor +@Service +public class DetailOfEarningsServiceImpl extends ServiceImpl implements IDetailOfEarningsService { + + private final DetailOfEarningsMapper baseMapper; + + /** + * 查询资金计划-收入明细 + * + * @param id 主键 + * @return 资金计划-收入明细 + */ + @Override + public DetailOfEarningsVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询资金计划-收入明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 资金计划-收入明细分页列表 + */ + @Override + public TableDataInfo queryPageList(DetailOfEarningsBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的资金计划-收入明细列表 + * + * @param bo 查询条件 + * @return 资金计划-收入明细列表 + */ + @Override + public List queryList(DetailOfEarningsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DetailOfEarningsBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(DetailOfEarnings::getId); + lqw.eq(bo.getFinancialRevenueId() != null, DetailOfEarnings::getFinancialRevenueId, bo.getFinancialRevenueId()); + lqw.eq(StringUtils.isNotBlank(bo.getBudgetItem()), DetailOfEarnings::getBudgetItem, bo.getBudgetItem()); + lqw.eq(bo.getIncomeAmount() != null, DetailOfEarnings::getIncomeAmount, bo.getIncomeAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getIsInvoice()), DetailOfEarnings::getIsInvoice, bo.getIsInvoice()); + lqw.eq(bo.getChangedAmount() != null, DetailOfEarnings::getChangedAmount, bo.getChangedAmount()); + lqw.eq(bo.getCbs() != null, DetailOfEarnings::getCbs, bo.getCbs()); + lqw.eq(bo.getCbsAmount() != null, DetailOfEarnings::getCbsAmount, bo.getCbsAmount()); + lqw.eq(bo.getCbsBalance() != null, DetailOfEarnings::getCbsBalance, bo.getCbsBalance()); + lqw.eq(bo.getPartyAUnit() != null, DetailOfEarnings::getPartyAUnit, bo.getPartyAUnit()); + lqw.eq(bo.getContractCode() != null, DetailOfEarnings::getContractCode, bo.getContractCode()); + lqw.like(StringUtils.isNotBlank(bo.getContractName()), DetailOfEarnings::getContractName, bo.getContractName()); + lqw.eq(bo.getContractAmount() != null, DetailOfEarnings::getContractAmount, bo.getContractAmount()); + lqw.eq(bo.getCumulativeApprovedOutputValue() != null, DetailOfEarnings::getCumulativeApprovedOutputValue, bo.getCumulativeApprovedOutputValue()); + lqw.eq(bo.getCumulativeReceiptAmount() != null, DetailOfEarnings::getCumulativeReceiptAmount, bo.getCumulativeReceiptAmount()); + lqw.eq(bo.getSettlementRatio() != null, DetailOfEarnings::getSettlementRatio, bo.getSettlementRatio()); + lqw.eq(bo.getReceiptRatio() != null, DetailOfEarnings::getReceiptRatio, bo.getReceiptRatio()); + return lqw; + } + + /** + * 新增资金计划-收入明细 + * + * @param bo 资金计划-收入明细 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DetailOfEarningsBo bo) { + DetailOfEarnings add = MapstructUtils.convert(bo, DetailOfEarnings.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改资金计划-收入明细 + * + * @param bo 资金计划-收入明细 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DetailOfEarningsBo bo) { + DetailOfEarnings update = MapstructUtils.convert(bo, DetailOfEarnings.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DetailOfEarnings entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除资金计划-收入明细信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/FinancialRevenueExpenditurePlanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/FinancialRevenueExpenditurePlanServiceImpl.java new file mode 100644 index 00000000..79565b72 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/FinancialRevenueExpenditurePlanServiceImpl.java @@ -0,0 +1,336 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.domain.R; +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.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.vo.XzdPurchaseContractSuspendVo; +import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.XzdSubcontract; +import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdSubcontractVo; +import org.dromara.xzd.domain.*; +import org.dromara.xzd.domain.dto.QuerCorrespondentDto; +import org.dromara.xzd.service.IXzdContractDetailsService; +import org.dromara.xzd.service.IXzdCorrespondentList; +import org.dromara.xzd.service.impl.XzdProjectServiceImpl; +import org.dromara.xzd.service.impl.XzdSupplierInfoServiceImpl; +import org.dromara.xzd.utilS.AreaUtil; +import org.dromara.xzd.zijinjihua.service.ICbsTreeStructureService; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.DetailOfEarnings; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.StatementOfExpenditures; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.DetailOfEarningsBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.StatementOfExpendituresBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.DetailOfEarningsVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.StatementOfExpendituresVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IDetailOfEarningsService; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IStatementOfExpendituresService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.bo.FinancialRevenueExpenditurePlanBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.FinancialRevenueExpenditurePlanVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.FinancialRevenueExpenditurePlan; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.mapper.FinancialRevenueExpenditurePlanMapper; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IFinancialRevenueExpenditurePlanService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 月度资金计划Service业务层处理 + * + * @author Lion Li + * @date 2025-10-15 + */ +@RequiredArgsConstructor +@Service +public class FinancialRevenueExpenditurePlanServiceImpl extends ServiceImpl implements IFinancialRevenueExpenditurePlanService { + + private final FinancialRevenueExpenditurePlanMapper baseMapper; + private final AreaUtil areaUtil; + + + private final IDetailOfEarningsService iDetailOfEarningsService; + + + private final IStatementOfExpendituresService iStatementOfExpendituresService; + + + private final IXzdContractDetailsService xzdContractDetailsService; + private final ICbsTreeStructureService iCbsTreeStructureService; + + @Autowired + private XzdProjectServiceImpl xzdProjectService; + + @Autowired + private IXzdCorrespondentList iXzdCorrespondentList; + + + @Autowired + private XzdSupplierInfoServiceImpl xzdSupplierInfoService; + + @Autowired + private SysOssServiceImpl sysOssService; + + + + /** + * 查询月度资金计划 + * + * @param id 主键 + * @return 月度资金计划 + */ + @Override + public FinancialRevenueExpenditurePlanVo queryById(Long id){ + FinancialRevenueExpenditurePlanVo financialRevenueExpenditurePlanVo = baseMapper.selectVoById(id); + List vo = List.of(financialRevenueExpenditurePlanVo); + savaValue(vo,true); + return vo.getFirst(); + } + + /** + * 分页查询月度资金计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 月度资金计划分页列表 + */ + @Override + public TableDataInfo queryPageList(FinancialRevenueExpenditurePlanBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + savaValue(result.getRecords(),false); + return TableDataInfo.build(result); + } + + private void savaValue(List records,Boolean type) { + for (FinancialRevenueExpenditurePlanVo item : records) { + //项目名称 + if (item.getProject() != null){ + String projectName = xzdProjectService.queryNameById(item.getProject()); + if (projectName != null){ + item.setProjectName(projectName); + } + } + HashMap hashMap = new HashMap<>(); + hashMap.put("financial_revenue_id",item.getId()); +// 收入 + List detail = iDetailOfEarningsService.getBaseMapper().selectByMap(hashMap); + if (detail != null && detail.size() > 0){ + List convert = MapstructUtils.convert(detail, DetailOfEarningsVo.class); + if (type){ + convert.forEach(temp ->{ + //甲方单位(客户信息列表) + R byid = iXzdCorrespondentList.getCustomerByid(temp.getPartyAUnit()); + if (byid!=null){ + if (byid.getData().getXzdCustomerinformation() != null){ + temp.setPartyAUnitName(byid.getData().getXzdCustomerinformation().getUnitName()); + } + } +// cbs + Long cbs = temp.getCbs(); + if (cbs != null){ + String name = iCbsTreeStructureService.queryById(cbs).getName(); + temp.setCbsName(name); + } + +// 合同 + XzdContractDetails contractDetailsServiceById = xzdContractDetailsService.getById(temp.getContractCode()); + if(contractDetailsServiceById != null){ + temp.setContractCodeName(contractDetailsServiceById.getContractCode()); + } + }); + } + item.setDetailOfEarnings(convert); + } +// 支出 + List statementOfExpenditures = iStatementOfExpendituresService.getBaseMapper().selectByMap(hashMap); + if (statementOfExpenditures != null && statementOfExpenditures.size() > 0){ + List convert = MapstructUtils.convert(statementOfExpenditures, StatementOfExpendituresVo.class); + if (type){ + convert.forEach(temp ->{ + //供应商 supplier + String unitName = xzdSupplierInfoService.queryNameById(temp.getSupplier()); + if (StringUtils.isNotBlank(unitName)){ + temp.setSupplierName(unitName); + } + Long cbs = temp.getCbs(); + if (cbs != null){ + String name = iCbsTreeStructureService.queryById(cbs).getName(); + temp.setCbsName(name); + } +// 合同 + XzdContractDetails contractDetailsServiceById = xzdContractDetailsService.getById(temp.getContractCode()); + if(contractDetailsServiceById != null){ + temp.setContractCodeName(contractDetailsServiceById.getContractCode()); + } + + }); + } + item.setStatementOfExpenditures(convert); + } + } + + } + + /** + * 查询符合条件的月度资金计划列表 + * + * @param bo 查询条件 + * @return 月度资金计划列表 + */ + @Override + public List queryList(FinancialRevenueExpenditurePlanBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(FinancialRevenueExpenditurePlanBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(FinancialRevenueExpenditurePlan::getId); + lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), FinancialRevenueExpenditurePlan::getDocumentCode, bo.getDocumentCode()); + lqw.like(StringUtils.isNotBlank(bo.getDocumentName()), FinancialRevenueExpenditurePlan::getDocumentName, bo.getDocumentName()); + lqw.eq(bo.getProject() != null, FinancialRevenueExpenditurePlan::getProject, bo.getProject()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanType()), FinancialRevenueExpenditurePlan::getPlanType, bo.getPlanType()); + lqw.eq(bo.getWorkCycle() != null, FinancialRevenueExpenditurePlan::getWorkCycle, bo.getWorkCycle()); + lqw.eq(bo.getStartDate() != null, FinancialRevenueExpenditurePlan::getStartDate, bo.getStartDate()); + lqw.eq(bo.getEndDate() != null, FinancialRevenueExpenditurePlan::getEndDate, bo.getEndDate()); + lqw.eq(bo.getExpenseTotal() != null, FinancialRevenueExpenditurePlan::getExpenseTotal, bo.getExpenseTotal()); + lqw.eq(bo.getIncomeTotal() != null, FinancialRevenueExpenditurePlan::getIncomeTotal, bo.getIncomeTotal()); + lqw.eq(StringUtils.isNotBlank(bo.getIsTemporaryPlan()), FinancialRevenueExpenditurePlan::getIsTemporaryPlan, bo.getIsTemporaryPlan()); + lqw.eq(bo.getDocumentDateLastMonth() != null, FinancialRevenueExpenditurePlan::getDocumentDateLastMonth, bo.getDocumentDateLastMonth()); + lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), FinancialRevenueExpenditurePlan::getRemarks, bo.getRemarks()); + lqw.eq(bo.getProjectAvailableBalance() != null, FinancialRevenueExpenditurePlan::getProjectAvailableBalance, bo.getProjectAvailableBalance()); + lqw.eq(bo.getCumulativeReceiptAmount() != null, FinancialRevenueExpenditurePlan::getCumulativeReceiptAmount, bo.getCumulativeReceiptAmount()); + lqw.eq(bo.getCumulativePaymentAmount() != null, FinancialRevenueExpenditurePlan::getCumulativePaymentAmount, bo.getCumulativePaymentAmount()); + lqw.eq(bo.getReimbursementAmount() != null, FinancialRevenueExpenditurePlan::getReimbursementAmount, bo.getReimbursementAmount()); + lqw.eq(bo.getContractPaymentAmount() != null, FinancialRevenueExpenditurePlan::getContractPaymentAmount, bo.getContractPaymentAmount()); + lqw.eq(bo.getRemainingFunds() != null, FinancialRevenueExpenditurePlan::getRemainingFunds, bo.getRemainingFunds()); + lqw.eq(bo.getRealTimeRefresh() != null, FinancialRevenueExpenditurePlan::getRealTimeRefresh, bo.getRealTimeRefresh()); + lqw.eq(bo.getMonthlyExpenditureBalance() != null, FinancialRevenueExpenditurePlan::getMonthlyExpenditureBalance, bo.getMonthlyExpenditureBalance()); + lqw.eq(bo.getMonthlyCumulativeExpenditure() != null, FinancialRevenueExpenditurePlan::getMonthlyCumulativeExpenditure, bo.getMonthlyCumulativeExpenditure()); + lqw.eq(bo.getAnnualExpenditureBalance() != null, FinancialRevenueExpenditurePlan::getAnnualExpenditureBalance, bo.getAnnualExpenditureBalance()); + lqw.eq(bo.getAnnualCumulativeExpenditure() != null, FinancialRevenueExpenditurePlan::getAnnualCumulativeExpenditure, bo.getAnnualCumulativeExpenditure()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), FinancialRevenueExpenditurePlan::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), FinancialRevenueExpenditurePlan::getAuditStatus, bo.getAuditStatus()); + return lqw; + } + + /** + * 新增月度资金计划 + * + * @param bo 月度资金计划 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(FinancialRevenueExpenditurePlanBo bo) { + FinancialRevenueExpenditurePlan add = MapstructUtils.convert(bo, FinancialRevenueExpenditurePlan.class); + validEntityBeforeSave(add); + Long l = baseMapper.selectCount(new LambdaQueryWrapper().gt(FinancialRevenueExpenditurePlan::getCreateTime, LocalDate.now())); + String s = areaUtil.generateDateBasedNumber(); + add.setDocumentCode(s+"-"+(l+1)); + boolean flag = baseMapper.insert(add) > 0; + +// 收入明细 + List detailOfEarnings = bo.getDetailOfEarnings(); + if (detailOfEarnings != null && detailOfEarnings.size() > 0) { + detailOfEarnings.forEach(item -> { + item.setFinancialRevenueId(add.getId() ); + }); + iDetailOfEarningsService.saveBatch(MapstructUtils.convert(detailOfEarnings, DetailOfEarnings.class)); + } + +// 支出明细 + List statementOfExpenditures = bo.getStatementOfExpenditures(); + statementOfExpenditures.forEach(item -> { + item.setFinancialRevenueId(add.getId()); + }); + iStatementOfExpendituresService.saveBatch(MapstructUtils.convert(statementOfExpenditures, StatementOfExpenditures.class)); + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改月度资金计划 + * + * @param bo 月度资金计划 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(FinancialRevenueExpenditurePlanBo bo) { + FinancialRevenueExpenditurePlan update = MapstructUtils.convert(bo, FinancialRevenueExpenditurePlan.class); + List detailOfEarnings = bo.getDetailOfEarnings(); + HashMap hashMap = new HashMap<>(); + hashMap.put("financial_revenue_id",bo.getId()); +// 收入 + iDetailOfEarningsService.getBaseMapper().deleteByMap(hashMap); + if (detailOfEarnings != null && detailOfEarnings.size() > 0) { + detailOfEarnings.forEach(item ->{ + item.setFinancialRevenueId(bo.getId()); + }); + iDetailOfEarningsService.saveBatch(MapstructUtils.convert(detailOfEarnings, DetailOfEarnings.class)); + } +// 支出 + iStatementOfExpendituresService.getBaseMapper().deleteByMap(hashMap); + List statementOfExpenditures = bo.getStatementOfExpenditures(); + if (statementOfExpenditures != null && statementOfExpenditures.size() > 0) { + statementOfExpenditures.forEach(item ->{ + item.setFinancialRevenueId(bo.getId()); + }); + iStatementOfExpendituresService.saveBatch(MapstructUtils.convert(statementOfExpenditures, StatementOfExpenditures.class)); + } + + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(FinancialRevenueExpenditurePlan entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除月度资金计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + + } + for (Long id : ids) { + FinancialRevenueExpenditurePlanVo vo = baseMapper.selectVoById(id); + // 删除附件 + if (!StringUtils.isEmpty(vo.getFileId())){ + List collect = Arrays.stream(vo.getFileId().split(",")).map(item -> { + return Long.parseLong(item); + }).collect(Collectors.toList()); + sysOssService.deleteWithValidByIds(collect, false); + } + } +// 删除支出,收入 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(DetailOfEarnings::getFinancialRevenueId, ids); + iDetailOfEarningsService.getBaseMapper().delete(lambdaQueryWrapper); + + LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>(); + lambdaQueryWrapper1.in(StatementOfExpenditures::getFinancialRevenueId, ids); + iStatementOfExpendituresService.getBaseMapper().delete(lambdaQueryWrapper1); + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/StatementOfExpendituresServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/StatementOfExpendituresServiceImpl.java new file mode 100644 index 00000000..a7750f15 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/zijinjihua/yueduzijinjihua/service/impl/StatementOfExpendituresServiceImpl.java @@ -0,0 +1,147 @@ +package org.dromara.xzd.zijinjihua.yueduzijinjihua.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.zijinjihua.yueduzijinjihua.domain.bo.StatementOfExpendituresBo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.vo.StatementOfExpendituresVo; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.domain.StatementOfExpenditures; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.mapper.StatementOfExpendituresMapper; +import org.dromara.xzd.zijinjihua.yueduzijinjihua.service.IStatementOfExpendituresService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 资金计划-支出明细Service业务层处理 + * + * @author Lion Li + * @date 2025-10-16 + */ +@RequiredArgsConstructor +@Service +public class StatementOfExpendituresServiceImpl extends ServiceImpl implements IStatementOfExpendituresService { + + private final StatementOfExpendituresMapper baseMapper; + + /** + * 查询资金计划-支出明细 + * + * @param id 主键 + * @return 资金计划-支出明细 + */ + @Override + public StatementOfExpendituresVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询资金计划-支出明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 资金计划-支出明细分页列表 + */ + @Override + public TableDataInfo queryPageList(StatementOfExpendituresBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的资金计划-支出明细列表 + * + * @param bo 查询条件 + * @return 资金计划-支出明细列表 + */ + @Override + public List queryList(StatementOfExpendituresBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(StatementOfExpendituresBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(StatementOfExpenditures::getId); + lqw.eq(bo.getFinancialRevenueId() != null, StatementOfExpenditures::getFinancialRevenueId, bo.getFinancialRevenueId()); + lqw.eq(StringUtils.isNotBlank(bo.getBudgetItem()), StatementOfExpenditures::getBudgetItem, bo.getBudgetItem()); + lqw.eq(StringUtils.isNotBlank(bo.getExpenseType()), StatementOfExpenditures::getExpenseType, bo.getExpenseType()); + lqw.eq(bo.getExpenseAmount() != null, StatementOfExpenditures::getExpenseAmount, bo.getExpenseAmount()); + lqw.eq(bo.getChangedAmount() != null, StatementOfExpenditures::getChangedAmount, bo.getChangedAmount()); + lqw.eq(bo.getCbs() != null, StatementOfExpenditures::getCbs, bo.getCbs()); + lqw.eq(bo.getCbsAmount() != null, StatementOfExpenditures::getCbsAmount, bo.getCbsAmount()); + lqw.eq(bo.getCbsBalance() != null, StatementOfExpenditures::getCbsBalance, bo.getCbsBalance()); + lqw.eq(bo.getSupplier() != null, StatementOfExpenditures::getSupplier, bo.getSupplier()); + lqw.eq(bo.getContractCode() != null, StatementOfExpenditures::getContractCode, bo.getContractCode()); + lqw.like(StringUtils.isNotBlank(bo.getContractName()), StatementOfExpenditures::getContractName, bo.getContractName()); + lqw.eq(bo.getContractAmount() != null, StatementOfExpenditures::getContractAmount, bo.getContractAmount()); + lqw.eq(bo.getCumulativeProgressSettlement() != null, StatementOfExpenditures::getCumulativeProgressSettlement, bo.getCumulativeProgressSettlement()); + lqw.eq(bo.getCumulativePaymentAmount() != null, StatementOfExpenditures::getCumulativePaymentAmount, bo.getCumulativePaymentAmount()); + lqw.eq(bo.getCumulativeInvoiceAmount() != null, StatementOfExpenditures::getCumulativeInvoiceAmount, bo.getCumulativeInvoiceAmount()); + lqw.eq(bo.getCurrentPeriodPayableAmount() != null, StatementOfExpenditures::getCurrentPeriodPayableAmount, bo.getCurrentPeriodPayableAmount()); + lqw.eq(bo.getPaymentContractRatio() != null, StatementOfExpenditures::getPaymentContractRatio, bo.getPaymentContractRatio()); + lqw.eq(bo.getProgressPaymentToCurrentPayableRatio() != null, StatementOfExpenditures::getProgressPaymentToCurrentPayableRatio, bo.getProgressPaymentToCurrentPayableRatio()); + return lqw; + } + + /** + * 新增资金计划-支出明细 + * + * @param bo 资金计划-支出明细 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(StatementOfExpendituresBo bo) { + StatementOfExpenditures add = MapstructUtils.convert(bo, StatementOfExpenditures.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改资金计划-支出明细 + * + * @param bo 资金计划-支出明细 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(StatementOfExpendituresBo bo) { + StatementOfExpenditures update = MapstructUtils.convert(bo, StatementOfExpenditures.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(StatementOfExpenditures entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除资金计划-支出明细信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} From a32384444070fb827257e45a6efb3189f665d3ce Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Fri, 17 Oct 2025 14:15:35 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E7=AB=8B=E9=A1=B9=E4=B8=8E=E6=88=90?= =?UTF-8?q?=E6=9C=AC-=E6=88=90=E6=9C=AC=E9=A2=84=E7=AE=97-=E6=80=BB?= =?UTF-8?q?=E4=BD=93=E8=AE=A1=E5=88=92=E6=88=90=E6=9C=AC=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/XzdCbysSscbController.java | 105 +++++++ .../controller/XzdCbysZjhcbController.java | 105 +++++++ .../XzdCbysZtjhcbBgjlController.java | 105 +++++++ .../costBudget/domain/XzdCbysSscb.java | 82 ++++++ .../costBudget/domain/XzdCbysZjhcb.java | 148 ++++++++++ .../costBudget/domain/XzdCbysZtjhcbBgjl.java | 103 +++++++ .../costBudget/domain/bo/XzdCbysSscbBo.java | 82 ++++++ .../costBudget/domain/bo/XzdCbysZjhcbBo.java | 170 +++++++++++ .../domain/bo/XzdCbysZtjhcbBgjlBo.java | 99 +++++++ .../costBudget/domain/vo/XzdCbysSscbVo.java | 101 +++++++ .../costBudget/domain/vo/XzdCbysZjhcbVo.java | 208 +++++++++++++ .../domain/vo/XzdCbysZtjhcbBgjlVo.java | 121 ++++++++ .../costBudget/mapper/XzdCbysSscbMapper.java | 15 + .../costBudget/mapper/XzdCbysZjhcbMapper.java | 15 + .../mapper/XzdCbysZtjhcbBgjlMapper.java | 15 + .../service/IXzdCbysSscbService.java | 70 +++++ .../service/IXzdCbysZjhcbService.java | 70 +++++ .../service/IXzdCbysZtjhcbBgjlService.java | 70 +++++ .../service/impl/XzdCbysSscbServiceImpl.java | 139 +++++++++ .../service/impl/XzdCbysZjhcbServiceImpl.java | 277 ++++++++++++++++++ .../impl/XzdCbysZtjhcbBgjlServiceImpl.java | 141 +++++++++ .../costBudget/XzdCbysSscbMapper.xml | 7 + .../costBudget/XzdCbysZjhcbMapper.xml | 7 + .../costBudget/XzdCbysZtjhcbBgjlMapper.xml | 7 + 24 files changed, 2262 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysSscbController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZjhcbController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZtjhcbBgjlController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysSscb.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcb.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZtjhcbBgjl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysSscbBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZtjhcbBgjlBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysSscbVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZtjhcbBgjlVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysSscbMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZtjhcbBgjlMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysSscbService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZtjhcbBgjlService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysSscbServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZtjhcbBgjlServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysSscbMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZjhcbMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZtjhcbBgjlMapper.xml diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysSscbController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysSscbController.java new file mode 100644 index 00000000..94804632 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysSscbController.java @@ -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 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 list = xzdCbysSscbService.queryList(bo); + ExcelUtil.exportExcel(list, "税收项明细", XzdCbysSscbVo.class, response); + } + + /** + * 获取税收项明细详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("costBudget:cbysSscb:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdCbysSscbService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZjhcbController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZjhcbController.java new file mode 100644 index 00000000..97725212 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZjhcbController.java @@ -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 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 list = xzdCbysZjhcbService.queryList(bo); + ExcelUtil.exportExcel(list, "立项及成本-成本预算-总体计划成本", XzdCbysZjhcbVo.class, response); + } + + /** + * 获取立项及成本-成本预算-总体计划成本详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("costBudget:cbysZjhcb:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdCbysZjhcbService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZtjhcbBgjlController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZtjhcbBgjlController.java new file mode 100644 index 00000000..f5ef3c1c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZtjhcbBgjlController.java @@ -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 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 list = xzdCbysZtjhcbBgjlService.queryList(bo); + ExcelUtil.exportExcel(list, "立项及成本-成本预算-变更记录", XzdCbysZtjhcbBgjlVo.class, response); + } + + /** + * 获取立项及成本-成本预算-变更记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("costBudget:cbysZtjhcbBgjl:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdCbysZtjhcbBgjlService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysSscb.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysSscb.java new file mode 100644 index 00000000..da797e6c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysSscb.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcb.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcb.java new file mode 100644 index 00000000..e17a720d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcb.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZtjhcbBgjl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZtjhcbBgjl.java new file mode 100644 index 00000000..53fcfb04 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZtjhcbBgjl.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysSscbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysSscbBo.java new file mode 100644 index 00000000..2398922b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysSscbBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java new file mode 100644 index 00000000..ca962571 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java @@ -0,0 +1,170 @@ +package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; + +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb; +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.XzdCbysZtjhcbBgjl; + +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; + + /** + * 成本明细 + */ + List xzdCbysWgcbtbFubiao; + + /** + * 税收成本 + */ + List xzdCbysSscb; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZtjhcbBgjlBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZtjhcbBgjlBo.java new file mode 100644 index 00000000..56f6a85d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZtjhcbBgjlBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysSscbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysSscbVo.java new file mode 100644 index 00000000..f7615c5b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysSscbVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbVo.java new file mode 100644 index 00000000..3fb3898f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbVo.java @@ -0,0 +1,208 @@ +package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; + +import java.math.BigDecimal; + +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb; +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.XzdCbysZtjhcbBgjl; + +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; + + /** + * 成本明细 + */ + List xzdCbysWgcbtbFubiao; + + /** + * 税收成本 + */ + List xzdCbysSscb; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZtjhcbBgjlVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZtjhcbBgjlVo.java new file mode 100644 index 00000000..ad259510 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZtjhcbBgjlVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysSscbMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysSscbMapper.java new file mode 100644 index 00000000..16c30727 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysSscbMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbMapper.java new file mode 100644 index 00000000..242fbaa1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZtjhcbBgjlMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZtjhcbBgjlMapper.java new file mode 100644 index 00000000..54a44611 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZtjhcbBgjlMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysSscbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysSscbService.java new file mode 100644 index 00000000..269edf2d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysSscbService.java @@ -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{ + + /** + * 查询税收项明细 + * + * @param id 主键 + * @return 税收项明细 + */ + XzdCbysSscbVo queryById(Long id); + + /** + * 分页查询税收项明细列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 税收项明细分页列表 + */ + TableDataInfo queryPageList(XzdCbysSscbBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的税收项明细列表 + * + * @param bo 查询条件 + * @return 税收项明细列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbService.java new file mode 100644 index 00000000..73cd3110 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbService.java @@ -0,0 +1,70 @@ +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{ + + /** + * 查询立项及成本-成本预算-总体计划成本 + * + * @param id 主键 + * @return 立项及成本-成本预算-总体计划成本 + */ + XzdCbysZjhcbVo queryById(Long id); + + /** + * 分页查询立项及成本-成本预算-总体计划成本列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-总体计划成本分页列表 + */ + TableDataInfo queryPageList(XzdCbysZjhcbBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的立项及成本-成本预算-总体计划成本列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-总体计划成本列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZtjhcbBgjlService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZtjhcbBgjlService.java new file mode 100644 index 00000000..a405cb5c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZtjhcbBgjlService.java @@ -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{ + + /** + * 查询立项及成本-成本预算-变更记录 + * + * @param id 主键 + * @return 立项及成本-成本预算-变更记录 + */ + XzdCbysZtjhcbBgjlVo queryById(Long id); + + /** + * 分页查询立项及成本-成本预算-变更记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-变更记录分页列表 + */ + TableDataInfo queryPageList(XzdCbysZtjhcbBgjlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的立项及成本-成本预算-变更记录列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-变更记录列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysSscbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysSscbServiceImpl.java new file mode 100644 index 00000000..5f456c61 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysSscbServiceImpl.java @@ -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 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 queryPageList(XzdCbysSscbBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的税收项明细列表 + * + * @param bo 查询条件 + * @return 税收项明细列表 + */ + @Override + public List queryList(XzdCbysSscbBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdCbysSscbBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbServiceImpl.java new file mode 100644 index 00000000..8ca9019e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbServiceImpl.java @@ -0,0 +1,277 @@ +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.system.service.ISysUserService; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; +import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysSscbService; +import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService; +import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZtjhcbBgjlService; +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.domain.XzdCbysZjhcb; +import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZjhcbMapper; +import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 立项及成本-成本预算-总体计划成本Service业务层处理 + * + * @author Lion Li + * @date 2025-10-17 + */ +@RequiredArgsConstructor +@Service +public class XzdCbysZjhcbServiceImpl extends ServiceImpl implements IXzdCbysZjhcbService { + + private final XzdCbysZjhcbMapper baseMapper; + + @Autowired + private IXzdCbysZtjhcbBgjlService xzdCbysZtjhcbBgjlService; + @Autowired + private IXzdCbysSscbService xzdCbysSscbService; + @Autowired + private IXzdCbysWgcbtbFubiaoService 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 queryPageList(XzdCbysZjhcbBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(this::getName); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的立项及成本-成本预算-总体计划成本列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-总体计划成本列表 + */ + @Override + public List queryList(XzdCbysZjhcbBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List vos = baseMapper.selectVoList(lqw); + vos.forEach(this::getName); + return vos; + } + + private LambdaQueryWrapper buildQueryWrapper(XzdCbysZjhcbBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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); + 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.setMainDocId(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().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, bo.getId())); + xzdCbysSscbService.remove(new LambdaQueryWrapper().eq(XzdCbysSscb::getMainDocumentId, bo.getId())); + fubiaoService.remove(new LambdaQueryWrapper().eq(XzdCbysWgcbtbFubiao::getMainDocId, 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.setMainDocId(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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + XzdCbysZjhcbVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + xzdCbysZtjhcbBgjlService.remove(new LambdaQueryWrapper().in(XzdCbysZtjhcbBgjl::getMainDocumentId, ids)); + xzdCbysSscbService.remove(new LambdaQueryWrapper().in(XzdCbysSscb::getMainDocumentId, ids)); + fubiaoService.remove(new LambdaQueryWrapper().in(XzdCbysWgcbtbFubiao::getMainDocId, ids)); + return baseMapper.deleteByIds(ids) > 0; + } + + + /** + * 获取部分字段名称 + * @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 xzdCbysZtjhcbBgjls = xzdCbysZtjhcbBgjlService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, vo.getId())); + vo.setXzdCbysZtjhcbBgjl(xzdCbysZtjhcbBgjls); + List xzdCbysSscbs = xzdCbysSscbService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdCbysSscb::getMainDocumentId, vo.getId())); + vo.setXzdCbysSscb(xzdCbysSscbs); + List xzdCbysWgcbtbFubiaos = fubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdCbysWgcbtbFubiao::getMainDocId, vo.getId())); + vo.setXzdCbysWgcbtbFubiao(xzdCbysWgcbtbFubiaos); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZtjhcbBgjlServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZtjhcbBgjlServiceImpl.java new file mode 100644 index 00000000..fda23d32 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZtjhcbBgjlServiceImpl.java @@ -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 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 queryPageList(XzdCbysZtjhcbBgjlBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的立项及成本-成本预算-变更记录列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-变更记录列表 + */ + @Override + public List queryList(XzdCbysZtjhcbBgjlBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdCbysZtjhcbBgjlBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysSscbMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysSscbMapper.xml new file mode 100644 index 00000000..f4ea1cf2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysSscbMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZjhcbMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZjhcbMapper.xml new file mode 100644 index 00000000..b63efd12 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZjhcbMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZtjhcbBgjlMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZtjhcbBgjlMapper.xml new file mode 100644 index 00000000..a3f1f49d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZtjhcbBgjlMapper.xml @@ -0,0 +1,7 @@ + + + + + From ebddc5c51ff07ea3567d7db6e32b2fcaab90eb20 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 17 Oct 2025 15:37:24 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=88=86=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusProjectTeamMemberCreateReq.java | 6 ++++++ .../impl/BusProjectTeamMemberServiceImpl.java | 6 ++++++ .../controller/system/SysUserController.java | 2 +- .../dromara/system/service/ISysUserService.java | 4 +++- .../system/service/impl/SysUserServiceImpl.java | 17 ++++++++++------- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteammember/BusProjectTeamMemberCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteammember/BusProjectTeamMemberCreateReq.java index 854dce1b..432f6310 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteammember/BusProjectTeamMemberCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteammember/BusProjectTeamMemberCreateReq.java @@ -1,5 +1,6 @@ package org.dromara.project.domain.dto.projectteammember; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.io.Serial; @@ -45,4 +46,9 @@ public class BusProjectTeamMemberCreateReq implements Serializable { */ private String remark; + /** + * 分包公司id + */ + private Long contractorId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java index fda6ac2b..006c815f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamMemberServiceImpl.java @@ -176,11 +176,13 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class) .eq(SubConstructionUser::getId, constructionUser.getId()) .set(SubConstructionUser::getProjectId, req.getProjectId()) + .set(req.getContractorId()!=null,SubConstructionUser::getContractorId, req.getContractorId()) .set(SubConstructionUser::getTeamId, projectTeamMember.getTeamId()) .set(SubConstructionUser::getTeamName, projectTeam.getTeamName()) .set(SubConstructionUser::getEntryDate, new Date()) .set(SubConstructionUser::getLeaveDate, null) .set(SubConstructionUser::getExitStatus, "0") + .set(SubConstructionUser::getUserRole, "0") .set(StrUtil.isNotBlank(req.getTypeOfWork()),SubConstructionUser::getTypeOfWork,req.getTypeOfWork()) .set(constructionUser.getFirstDate() == null, SubConstructionUser::getFirstDate, LocalDate.now()); constructionUserService.update(constructionUserLuw); @@ -212,6 +214,10 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl updateFb(@PathVariable("userId") Long userId, @PathVariable("contractorId") Long contractorId) { - return R.ok(userService.updateFb(userId, contractorId)); + return R.ok(userService.updateFb(userId, contractorId,true)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index e8635461..52f17c6e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -275,11 +275,13 @@ public interface ISysUserService { List selectUserListByAppUserType(String appUserType,Long projectId,Long contractorId); - Boolean updateFb(Long userId,Long contractorId); + Boolean updateFb(Long userId,Long contractorId,Boolean isSub); List selectUserByRoleIdAndProjectId(Long roleId,Long projectId); List selectUserByRoleIdsAndProjectId(List roleIds,Long projectId); String queryNameById(Long id); + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index dfe19444..f0dd2c99 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -1223,17 +1223,20 @@ public class SysUserServiceImpl implements ISysUserService, UserService { } @Override - public Boolean updateFb(Long userId,Long contractorId) { + public Boolean updateFb(Long userId,Long contractorId,Boolean isSub) { SysUser sysUser = baseMapper.selectById(userId); sysUser.setContractorId(contractorId); - SubConstructionUser constructionUser = constructionUserService.lambdaQuery() - .eq(SubConstructionUser::getSysUserId, userId) - .one(); - if(constructionUser != null){ - constructionUser.setContractorId(contractorId); - constructionUserService.updateById(constructionUser); + if(isSub){ + SubConstructionUser constructionUser = constructionUserService.lambdaQuery() + .eq(SubConstructionUser::getSysUserId, userId) + .one(); + if(constructionUser != null){ + constructionUser.setContractorId(contractorId); + constructionUserService.updateById(constructionUser); + } } + return baseMapper.updateById(sysUser)>0; } From 965a0cc90e40fc31d27f0ed7d019dc8dd1f6f177 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 17 Oct 2025 15:39:59 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E6=9D=90=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../materials/domain/MatMaterialsInventory.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterialsInventory.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterialsInventory.java index 29a2fa15..3ca18c4b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterialsInventory.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/materials/domain/MatMaterialsInventory.java @@ -94,4 +94,14 @@ public class MatMaterialsInventory extends BaseEntity { */ private String remark; + /** + * 操作人id + */ + private Long operatorId; + + /** + * 分包单位id + */ + private Long recipientId; + } From ec54b4ff529b0bda0549781b645b208f9f4fc4f3 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Fri, 17 Oct 2025 15:42:05 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E3=80=81=E4=BA=A7?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/out/domain/OutConstructionValue.java | 5 +++++ .../out/domain/vo/OutConstructionValueVo.java | 10 ++++++++++ .../impl/OutConstructionValueServiceImpl.java | 9 ++++++++- .../impl/PgsProgressPlanDetailServiceImpl.java | 2 ++ .../safetyinspection/HseSafetyInspectionGis.java | 10 ---------- .../impl/HseSafetyInspectionServiceImpl.java | 14 +++++++++++--- 6 files changed, 36 insertions(+), 14 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValue.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValue.java index 64ce212d..6ec3d0e5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValue.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/OutConstructionValue.java @@ -50,6 +50,11 @@ public class OutConstructionValue extends BaseEntity { */ private Long progressCategoryId; + /** + * 分项工程名称 + */ + private String progressCategoryName; + /** * 计划详情id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java index 9f52a4bc..578ab876 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java @@ -176,4 +176,14 @@ public class OutConstructionValueVo implements Serializable { * 计量方式(0无 1数量 2百分比) */ private String unitType; + + /** + * 单位 + */ + private String unit; + + /** + * 完成数量 + */ + private Integer completeNum; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java index 87e5e8b8..1345fc84 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java @@ -110,7 +110,6 @@ public class OutConstructionValueServiceImpl extends ServiceImpl buildQueryWrapper(OutConstructionValueBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.orderByDesc(OutConstructionValue::getId); Long projectId = bo.getProjectId(); List ids = new ArrayList<>(); if (projectId != null) { @@ -150,6 +149,9 @@ public class OutConstructionValueServiceImpl extends ServiceImpl "1".equals(q.getIsReply())) .filter(q -> !q.getStatus().equals(HseSafetyInspectionStatusEnum.INFORM.getValue())) .toList(); - List pass = passList.stream().map(s -> { + List pass = passList.stream().map(p -> { HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); - BeanUtils.copyProperties(s, gis); + 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()); @@ -245,7 +249,11 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl { HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); - BeanUtils.copyProperties(p, gis); + 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()); From c318d0b10b6bf4ca54309823b894fe19e701226c Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Fri, 17 Oct 2025 17:42:40 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E5=90=88=E5=90=8C=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=8F=98=E6=9B=B4=E6=B8=85=E5=8D=95=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../comprehensive/domain/XzdHtglHtbgqd.java | 142 ++++++++++++++ .../domain/bo/XzdHtglHtbgqdBo.java | 144 ++++++++++++++ .../domain/vo/XzdHtglHtbgqdVo.java | 175 ++++++++++++++++++ .../mapper/XzdHtglHtbgqdMapper.java | 15 ++ .../service/IXzdHtglHtbgqdService.java | 70 +++++++ .../impl/XzdHtglHtbgqdServiceImpl.java | 151 +++++++++++++++ .../xzd/comprehensive/XzdHtglHtbgqdMapper.xml | 7 + 7 files changed, 704 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/XzdHtglHtbgqd.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/bo/XzdHtglHtbgqdBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/vo/XzdHtglHtbgqdVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/mapper/XzdHtglHtbgqdMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/service/IXzdHtglHtbgqdService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/service/impl/XzdHtglHtbgqdServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/comprehensive/XzdHtglHtbgqdMapper.xml diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/XzdHtglHtbgqd.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/XzdHtglHtbgqd.java new file mode 100644 index 00000000..d72fb2e9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/XzdHtglHtbgqd.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/bo/XzdHtglHtbgqdBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/bo/XzdHtglHtbgqdBo.java new file mode 100644 index 00000000..48209fde --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/bo/XzdHtglHtbgqdBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/vo/XzdHtglHtbgqdVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/vo/XzdHtglHtbgqdVo.java new file mode 100644 index 00000000..81b16e46 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/domain/vo/XzdHtglHtbgqdVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/mapper/XzdHtglHtbgqdMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/mapper/XzdHtglHtbgqdMapper.java new file mode 100644 index 00000000..91231805 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/mapper/XzdHtglHtbgqdMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/service/IXzdHtglHtbgqdService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/service/IXzdHtglHtbgqdService.java new file mode 100644 index 00000000..faf80e6b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/service/IXzdHtglHtbgqdService.java @@ -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{ + + /** + * 查询合同管理-合同变更清单 + * + * @param id 主键 + * @return 合同管理-合同变更清单 + */ + XzdHtglHtbgqdVo queryById(Long id); + + /** + * 分页查询合同管理-合同变更清单列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同管理-合同变更清单分页列表 + */ + TableDataInfo queryPageList(XzdHtglHtbgqdBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的合同管理-合同变更清单列表 + * + * @param bo 查询条件 + * @return 合同管理-合同变更清单列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/service/impl/XzdHtglHtbgqdServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/service/impl/XzdHtglHtbgqdServiceImpl.java new file mode 100644 index 00000000..60fce849 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/comprehensive/service/impl/XzdHtglHtbgqdServiceImpl.java @@ -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 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 queryPageList(XzdHtglHtbgqdBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的合同管理-合同变更清单列表 + * + * @param bo 查询条件 + * @return 合同管理-合同变更清单列表 + */ + @Override + public List queryList(XzdHtglHtbgqdBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdHtglHtbgqdBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/comprehensive/XzdHtglHtbgqdMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/comprehensive/XzdHtglHtbgqdMapper.xml new file mode 100644 index 00000000..f0d3af70 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/comprehensive/XzdHtglHtbgqdMapper.xml @@ -0,0 +1,7 @@ + + + + + From 2b4517760fe82a33db2b027a8f319c55f0f56745 Mon Sep 17 00:00:00 2001 From: dfdg <2710245601@qq.com> Date: Fri, 17 Oct 2025 20:10:36 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E7=AB=8B=E9=A1=B9=E5=8F=8A=E6=88=90?= =?UTF-8?q?=E6=9C=AC-=E6=88=90=E6=9C=AC=E9=A2=84=E7=AE=97-=E9=98=B6?= =?UTF-8?q?=E6=AE=B5=E6=88=90=E6=9C=AC=E5=88=86=E8=A7=A3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/XzdCbysJdcbfjController.java | 105 ++++++++ .../XzdCbysJdcbfjFubiaoController.java | 105 ++++++++ .../costBudget/domain/XzdCbysJdcbfj.java | 108 ++++++++ .../domain/XzdCbysJdcbfjFubiao.java | 122 +++++++++ .../costBudget/domain/XzdCbysZjhcbFubiao.java | 182 +++++++++++++ .../costBudget/domain/bo/XzdCbysJdcbfjBo.java | 118 +++++++++ .../domain/bo/XzdCbysJdcbfjFubiaoBo.java | 121 +++++++++ .../costBudget/domain/bo/XzdCbysZjhcbBo.java | 7 +- .../domain/bo/XzdCbysZjhcbFubiaoBo.java | 183 +++++++++++++ .../domain/vo/XzdCbysJdcbfjFubiaoVo.java | 147 +++++++++++ .../costBudget/domain/vo/XzdCbysJdcbfjVo.java | 142 ++++++++++ .../domain/vo/XzdCbysZjhcbFubiaoVo.java | 247 ++++++++++++++++++ .../costBudget/domain/vo/XzdCbysZjhcbVo.java | 7 +- .../mapper/XzdCbysJdcbfjFubiaoMapper.java | 15 ++ .../mapper/XzdCbysJdcbfjMapper.java | 15 ++ .../mapper/XzdCbysZjhcbFubiaoMapper.java | 15 ++ .../service/IXzdCbysJdcbfjFubiaoService.java | 70 +++++ .../service/IXzdCbysJdcbfjService.java | 70 +++++ .../service/IXzdCbysZjhcbFubiaoService.java | 70 +++++ .../service/IXzdCbysZjhcbService.java | 2 + .../impl/XzdCbysJdcbfjFubiaoServiceImpl.java | 147 +++++++++++ .../impl/XzdCbysJdcbfjServiceImpl.java | 240 +++++++++++++++++ .../impl/XzdCbysZjhcbFubiaoServiceImpl.java | 159 +++++++++++ .../service/impl/XzdCbysZjhcbServiceImpl.java | 30 ++- .../costBudget/XzdCbysJdcbfjFubiaoMapper.xml | 7 + .../costBudget/XzdCbysJdcbfjMapper.xml | 7 + .../costBudget/XzdCbysZjhcbFubiaoMapper.xml | 7 + 27 files changed, 2424 insertions(+), 24 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysJdcbfjController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysJdcbfjFubiaoController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysJdcbfj.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysJdcbfjFubiao.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcbFubiao.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysJdcbfjBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysJdcbfjFubiaoBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbFubiaoBo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysJdcbfjFubiaoVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysJdcbfjVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbFubiaoVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysJdcbfjFubiaoMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysJdcbfjMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbFubiaoMapper.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysJdcbfjFubiaoService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysJdcbfjService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbFubiaoService.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysJdcbfjFubiaoServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysJdcbfjServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbFubiaoServiceImpl.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysJdcbfjFubiaoMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysJdcbfjMapper.xml create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZjhcbFubiaoMapper.xml diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysJdcbfjController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysJdcbfjController.java new file mode 100644 index 00000000..171254b7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysJdcbfjController.java @@ -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 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 list = xzdCbysJdcbfjService.queryList(bo); + ExcelUtil.exportExcel(list, "立项及成本-成本预算-阶段成本分解", XzdCbysJdcbfjVo.class, response); + } + + /** + * 获取立项及成本-成本预算-阶段成本分解详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("costBudget:cbysJdcbfj:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdCbysJdcbfjService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysJdcbfjFubiaoController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysJdcbfjFubiaoController.java new file mode 100644 index 00000000..8df1e502 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysJdcbfjFubiaoController.java @@ -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 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 list = xzdCbysJdcbfjFubiaoService.queryList(bo); + ExcelUtil.exportExcel(list, "立项及成本-成本预算-阶段成本分解附", XzdCbysJdcbfjFubiaoVo.class, response); + } + + /** + * 获取立项及成本-成本预算-阶段成本分解附详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("costBudget:cbysJdcbfjFubiao:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdCbysJdcbfjFubiaoService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysJdcbfj.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysJdcbfj.java new file mode 100644 index 00000000..4c479f22 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysJdcbfj.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysJdcbfjFubiao.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysJdcbfjFubiao.java new file mode 100644 index 00000000..48944327 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysJdcbfjFubiao.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcbFubiao.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcbFubiao.java new file mode 100644 index 00000000..83eecf07 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcbFubiao.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysJdcbfjBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysJdcbfjBo.java new file mode 100644 index 00000000..ec0909d9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysJdcbfjBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysJdcbfjFubiaoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysJdcbfjFubiaoBo.java new file mode 100644 index 00000000..b577ef9c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysJdcbfjFubiaoBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java index ca962571..4c588a53 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java @@ -1,8 +1,6 @@ package org.dromara.xzd.costProjectApproval.costBudget.domain.bo; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb; +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; @@ -10,7 +8,6 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; import java.math.BigDecimal; import java.time.LocalDate; @@ -161,7 +158,7 @@ public class XzdCbysZjhcbBo extends BaseEntity { /** * 成本明细 */ - List xzdCbysWgcbtbFubiao; + List xzdCbysWgcbtbFubiao; /** * 税收成本 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbFubiaoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbFubiaoBo.java new file mode 100644 index 00000000..4d137522 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbFubiaoBo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysJdcbfjFubiaoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysJdcbfjFubiaoVo.java new file mode 100644 index 00000000..2ee3e11d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysJdcbfjFubiaoVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysJdcbfjVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysJdcbfjVo.java new file mode 100644 index 00000000..792b6842 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysJdcbfjVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbFubiaoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbFubiaoVo.java new file mode 100644 index 00000000..69017f9d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbFubiaoVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbVo.java index 3fb3898f..26edc6d8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbVo.java @@ -2,16 +2,13 @@ package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; import java.math.BigDecimal; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb; +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 org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; import java.io.Serial; import java.io.Serializable; @@ -199,7 +196,7 @@ public class XzdCbysZjhcbVo implements Serializable { /** * 成本明细 */ - List xzdCbysWgcbtbFubiao; + List xzdCbysWgcbtbFubiao; /** * 税收成本 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysJdcbfjFubiaoMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysJdcbfjFubiaoMapper.java new file mode 100644 index 00000000..53289c47 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysJdcbfjFubiaoMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysJdcbfjMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysJdcbfjMapper.java new file mode 100644 index 00000000..32a1597d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysJdcbfjMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbFubiaoMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbFubiaoMapper.java new file mode 100644 index 00000000..ce953468 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbFubiaoMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysJdcbfjFubiaoService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysJdcbfjFubiaoService.java new file mode 100644 index 00000000..3299fb98 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysJdcbfjFubiaoService.java @@ -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{ + + /** + * 查询立项及成本-成本预算-阶段成本分解附 + * + * @param id 主键 + * @return 立项及成本-成本预算-阶段成本分解附 + */ + XzdCbysJdcbfjFubiaoVo queryById(Long id); + + /** + * 分页查询立项及成本-成本预算-阶段成本分解附列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-阶段成本分解附分页列表 + */ + TableDataInfo queryPageList(XzdCbysJdcbfjFubiaoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的立项及成本-成本预算-阶段成本分解附列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-阶段成本分解附列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysJdcbfjService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysJdcbfjService.java new file mode 100644 index 00000000..8b06ca96 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysJdcbfjService.java @@ -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{ + + /** + * 查询立项及成本-成本预算-阶段成本分解 + * + * @param id 主键 + * @return 立项及成本-成本预算-阶段成本分解 + */ + XzdCbysJdcbfjVo queryById(Long id); + + /** + * 分页查询立项及成本-成本预算-阶段成本分解列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-阶段成本分解分页列表 + */ + TableDataInfo queryPageList(XzdCbysJdcbfjBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的立项及成本-成本预算-阶段成本分解列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-阶段成本分解列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbFubiaoService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbFubiaoService.java new file mode 100644 index 00000000..62fe42b4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbFubiaoService.java @@ -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{ + + /** + * 查询立项及成本-成本预算-总体计划成本附 + * + * @param id 主键 + * @return 立项及成本-成本预算-总体计划成本附 + */ + XzdCbysZjhcbFubiaoVo queryById(Long id); + + /** + * 分页查询立项及成本-成本预算-总体计划成本附列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-总体计划成本附分页列表 + */ + TableDataInfo queryPageList(XzdCbysZjhcbFubiaoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的立项及成本-成本预算-总体计划成本附列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-总体计划成本附列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbService.java index 73cd3110..268af346 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbService.java @@ -67,4 +67,6 @@ public interface IXzdCbysZjhcbService extends IService{ * @return 是否删除成功 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + String queryNameById(Long id); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysJdcbfjFubiaoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysJdcbfjFubiaoServiceImpl.java new file mode 100644 index 00000000..d20be1d3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysJdcbfjFubiaoServiceImpl.java @@ -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 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 queryPageList(XzdCbysJdcbfjFubiaoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的立项及成本-成本预算-阶段成本分解附列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-阶段成本分解附列表 + */ + @Override + public List queryList(XzdCbysJdcbfjFubiaoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdCbysJdcbfjFubiaoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysJdcbfjServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysJdcbfjServiceImpl.java new file mode 100644 index 00000000..45c79ebb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysJdcbfjServiceImpl.java @@ -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 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 queryPageList(XzdCbysJdcbfjBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(this::getName); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的立项及成本-成本预算-阶段成本分解列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-阶段成本分解列表 + */ + @Override + public List queryList(XzdCbysJdcbfjBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List vos = baseMapper.selectVoList(lqw); + vos.forEach(this::getName); + return vos; + } + + private LambdaQueryWrapper buildQueryWrapper(XzdCbysJdcbfjBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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().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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + XzdCbysJdcbfjVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + xzdCbysJdcbfjFubiaoService.remove(new LambdaQueryWrapper().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 xzdCbysZtjhcbBgjls = xzdCbysJdcbfjFubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdCbysJdcbfjFubiao::getMainTableId, vo.getId())); + vo.setXzdCbysJdcbfjFubiao(xzdCbysZtjhcbBgjls); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbFubiaoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbFubiaoServiceImpl.java new file mode 100644 index 00000000..2f9b3792 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbFubiaoServiceImpl.java @@ -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 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 queryPageList(XzdCbysZjhcbFubiaoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的立项及成本-成本预算-总体计划成本附列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-总体计划成本附列表 + */ + @Override + public List queryList(XzdCbysZjhcbFubiaoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdCbysZjhcbFubiaoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbServiceImpl.java index 8ca9019e..8662f7eb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbServiceImpl.java @@ -10,14 +10,11 @@ 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.XzdCbysSscb; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; -import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; -import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysSscbService; -import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService; -import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZtjhcbBgjlService; +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; @@ -25,9 +22,7 @@ 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.domain.XzdCbysZjhcb; import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZjhcbMapper; -import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService; import org.springframework.transaction.annotation.Transactional; import java.util.*; @@ -49,7 +44,7 @@ public class XzdCbysZjhcbServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -157,7 +154,7 @@ public class XzdCbysZjhcbServiceImpl extends ServiceImpl {item.setMainDocumentId(add.getId());}); xzdCbysZtjhcbBgjlService.saveBatch(bo.getXzdCbysZtjhcbBgjl()); - bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocId(add.getId());}); + bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocumentId(add.getId());}); fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao()); return flag; } @@ -184,12 +181,12 @@ public class XzdCbysZjhcbServiceImpl extends ServiceImpl().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, bo.getId())); xzdCbysSscbService.remove(new LambdaQueryWrapper().eq(XzdCbysSscb::getMainDocumentId, bo.getId())); - fubiaoService.remove(new LambdaQueryWrapper().eq(XzdCbysWgcbtbFubiao::getMainDocId, bo.getId())); + fubiaoService.remove(new LambdaQueryWrapper().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.setMainDocId(bo.getId());}); + bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocumentId(bo.getId());}); fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao()); return baseMapper.updateById(update) > 0; } @@ -230,10 +227,15 @@ public class XzdCbysZjhcbServiceImpl extends ServiceImpl().in(XzdCbysZtjhcbBgjl::getMainDocumentId, ids)); xzdCbysSscbService.remove(new LambdaQueryWrapper().in(XzdCbysSscb::getMainDocumentId, ids)); - fubiaoService.remove(new LambdaQueryWrapper().in(XzdCbysWgcbtbFubiao::getMainDocId, ids)); + fubiaoService.remove(new LambdaQueryWrapper().in(XzdCbysZjhcbFubiao::getMainDocumentId, ids)); return baseMapper.deleteByIds(ids) > 0; } + @Override + public String queryNameById(Long id) { + return baseMapper.selectVoById(id).getDocTitle(); + } + /** * 获取部分字段名称 @@ -271,7 +273,7 @@ public class XzdCbysZjhcbServiceImpl extends ServiceImpl xzdCbysSscbs = xzdCbysSscbService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdCbysSscb::getMainDocumentId, vo.getId())); vo.setXzdCbysSscb(xzdCbysSscbs); - List xzdCbysWgcbtbFubiaos = fubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdCbysWgcbtbFubiao::getMainDocId, vo.getId())); + List xzdCbysWgcbtbFubiaos = fubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdCbysZjhcbFubiao::getMainDocumentId, vo.getId())); vo.setXzdCbysWgcbtbFubiao(xzdCbysWgcbtbFubiaos); } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysJdcbfjFubiaoMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysJdcbfjFubiaoMapper.xml new file mode 100644 index 00000000..bb2c9a07 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysJdcbfjFubiaoMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysJdcbfjMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysJdcbfjMapper.xml new file mode 100644 index 00000000..07845cb0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysJdcbfjMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZjhcbFubiaoMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZjhcbFubiaoMapper.xml new file mode 100644 index 00000000..304f1ebc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/costProjectApproval/costBudget/XzdCbysZjhcbFubiaoMapper.xml @@ -0,0 +1,7 @@ + + + + + From 31aa56d34bad82c208ecbadf0eb81e8a19ce1363 Mon Sep 17 00:00:00 2001 From: zt Date: Fri, 17 Oct 2025 21:15:44 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=89=93=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BusAttendanceDeviceController.java | 118 ++++++++++++++++++ .../BusAttendancePunchCardByFaceReq.java | 6 + .../domain/dto/attendance/DeviceDto.java | 14 +++ .../domain/dto/attendance/DeviceLocation.java | 9 ++ .../project/domain/dto/attendance/Log.java | 12 ++ .../impl/BusAttendanceServiceImpl.java | 7 ++ 6 files changed, 166 insertions(+) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceDeviceController.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/DeviceDto.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/DeviceLocation.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/Log.java diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceDeviceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceDeviceController.java new file mode 100644 index 00000000..3e30f9ad --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusAttendanceDeviceController.java @@ -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 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); + } + + + + + + + + + + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/BusAttendancePunchCardByFaceReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/BusAttendancePunchCardByFaceReq.java index 16870af1..de4e976e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/BusAttendancePunchCardByFaceReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/BusAttendancePunchCardByFaceReq.java @@ -5,6 +5,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.Serial; import java.io.Serializable; +import java.time.LocalDateTime; /** * @author lilemy @@ -41,4 +42,9 @@ public class BusAttendancePunchCardByFaceReq implements Serializable { */ private Long userId; + /** + * 打卡时间 + */ + private LocalDateTime punchTime; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/DeviceDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/DeviceDto.java new file mode 100644 index 00000000..0c64ec88 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/DeviceDto.java @@ -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 logs; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/DeviceLocation.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/DeviceLocation.java new file mode 100644 index 00000000..bb4ce4de --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/DeviceLocation.java @@ -0,0 +1,9 @@ +package org.dromara.project.domain.dto.attendance; + +import lombok.Data; + +@Data +public class DeviceLocation { + private String longitude; + private String latitude; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/Log.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/Log.java new file mode 100644 index 00000000..56005e66 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/Log.java @@ -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; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java index 7a39868f..9df87d92 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java @@ -326,7 +326,11 @@ public class BusAttendanceServiceImpl extends ServiceImpl