diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/XzdSubcontractChange.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/XzdSubcontractChange.java index 912ee735..277895ff 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/XzdSubcontractChange.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/XzdSubcontractChange.java @@ -67,7 +67,7 @@ public class XzdSubcontractChange extends BaseEntity { /** * 项目 */ - private String project; + private String projectName; /** * 经营模式 @@ -77,17 +77,17 @@ public class XzdSubcontractChange extends BaseEntity { /** * 组织 */ - private String organization; + private String organizationName; /** * 甲方单位 */ - private String partyAUnit; + private String partyAUnitName; /** * 乙方单位 */ - private String partyBUnit; + private String partyBUnitName; /** * 原合同造价 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/bo/XzdSubcontractChangeBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/bo/XzdSubcontractChangeBo.java index c60ffd21..085eef25 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/bo/XzdSubcontractChangeBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/bo/XzdSubcontractChangeBo.java @@ -30,13 +30,11 @@ public class XzdSubcontractChangeBo extends BaseEntity { /** * */ - @NotNull(message = "不能为空", groups = { EditGroup.class }) private Long id; /** * 单据编码 */ - @NotBlank(message = "单据编码不能为空", groups = { AddGroup.class, EditGroup.class }) private String documentCode; /** @@ -72,7 +70,7 @@ public class XzdSubcontractChangeBo extends BaseEntity { /** * 项目 */ - private String project; + private String projectName; /** * 经营模式 @@ -82,17 +80,17 @@ public class XzdSubcontractChangeBo extends BaseEntity { /** * 组织 */ - private String organization; + private String organizationName; /** * 甲方单位 */ - private String partyAUnit; + private String partyAUnitName; /** * 乙方单位 */ - private String partyBUnit; + private String partyBUnitName; /** * 原合同造价 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/vo/XzdSubcontractChangeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/vo/XzdSubcontractChangeVo.java index 02de849e..55ec86b6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/vo/XzdSubcontractChangeVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/domain/vo/XzdSubcontractChangeVo.java @@ -93,7 +93,7 @@ public class XzdSubcontractChangeVo implements Serializable { * 项目 */ @ExcelProperty(value = "项目") - private String project; + private String projectName; /** * 经营模式 @@ -105,19 +105,19 @@ public class XzdSubcontractChangeVo implements Serializable { * 组织 */ @ExcelProperty(value = "组织") - private String organization; + private String organizationName; /** * 甲方单位 */ @ExcelProperty(value = "甲方单位") - private String partyAUnit; + private String partyAUnitName; /** * 乙方单位 */ @ExcelProperty(value = "乙方单位") - private String partyBUnit; + private String partyBUnitName; /** * 原合同造价 @@ -191,18 +191,39 @@ public class XzdSubcontractChangeVo implements Serializable { @ExcelProperty(value = "变更后项目经理") private Long postChangeProjectManager; + /** + * 变更后项目经理名称 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "postChangeProjectManager") + @ExcelProperty(value = "变更后项目经理名称") + private String postChangeProjectManagerName; + /** * 变更后项目责任人 */ @ExcelProperty(value = "变更后项目责任人") private Long postChangeProjectOwner; + /** + * 变更后项目责任人名成 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "postChangeProjectOwner") + @ExcelProperty(value = "变更后项目责任人") + private String postChangeProjectOwnerName; + /** * 变更后现场经理 */ @ExcelProperty(value = "变更后现场经理") private Long postChangeSiteManager; + /** + * 变更后现场经理 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "postChangeSiteManager") + @ExcelProperty(value = "变更后现场经理") + private Long postChangeSiteManagerName; + /** * 变更后合同备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/service/impl/XzdSubcontractChangeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/service/impl/XzdSubcontractChangeServiceImpl.java index 2b5c83fb..883e6cc6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/service/impl/XzdSubcontractChangeServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongbiangg/service/impl/XzdSubcontractChangeServiceImpl.java @@ -160,11 +160,7 @@ public class XzdSubcontractChangeServiceImpl extends ServiceImpl byid2 = iXzdCorrespondentList.getCustomerByid(item.getTicketReceivingUnit()); - if (byid2!=null){ - if (byid2.getData().getXzdCustomerinformation() != null){ - item.setTicketReceivingUnitName(byid2.getData().getXzdCustomerinformation().getUnitName()); - } + //收票单位名称(供应商名称) + String unitName2 = xzdSupplierInfoService.queryNameById(item.getTicketReceivingUnit()); + if (unitName2 != null){ + item.setTicketReceivingUnitName(unitName2); } - //签约组织(供应商) - String unitName2 = xzdSupplierInfoService.queryNameById(item.getSigningOrganization()); - if (unitName2!= null){ - item.setSigningOrganizationName(unitName2); - } - //合同文本-预收款项 + +// //合同文本-预收款项 LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(XzdContractAdvanceInfo::getContractDetailsId, item.getId()); List advanceInfos = xzdContractAdvanceInfoService.list(lambdaQueryWrapper); @@ -234,7 +227,7 @@ public class XzdSubcontractServiceImpl extends ServiceImpl res = List.of(vo); + saveValue(res); + return res.getFirst(); + } + + private void saveValue(List res) { + for (XzdSubcontractTerminationVo vo : res) { + XzdSubcontractVo xzdSubcontractVo = iXzdSubcontractService.queryById(vo.getContractNumber()); + if (xzdSubcontractVo != null) { + vo.setContractNumberName(xzdSubcontractVo.getContractCode()); + } + + } + } /** @@ -68,6 +83,7 @@ public class XzdSubcontractTerminationServiceImpl extends ServiceImpl queryPageList(XzdSubcontractTerminationBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + saveValue(result.getRecords()); return TableDataInfo.build(result); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZjhcbAlterationController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZjhcbAlterationController.java new file mode 100644 index 00000000..9927d295 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/controller/XzdCbysZjhcbAlterationController.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.XzdCbysZjhcbAlterationVo; +import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbAlterationBo; +import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbAlterationService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 立项及成本-成本预算-总体计划成本变更 + * + * @author Lion Li + * @date 2025-10-17 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/costBudget/cbysZjhcbAlteration") +public class XzdCbysZjhcbAlterationController extends BaseController { + + private final IXzdCbysZjhcbAlterationService xzdCbysZjhcbAlterationService; + + /** + * 查询立项及成本-成本预算-总体计划成本变更列表 + */ + @SaCheckPermission("costBudget:cbysZjhcbAlteration:list") + @GetMapping("/list") + public TableDataInfo list(XzdCbysZjhcbAlterationBo bo, PageQuery pageQuery) { + return xzdCbysZjhcbAlterationService.queryPageList(bo, pageQuery); + } + + /** + * 导出立项及成本-成本预算-总体计划成本变更列表 + */ + @SaCheckPermission("costBudget:cbysZjhcbAlteration:export") + @Log(title = "立项及成本-成本预算-总体计划成本变更", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(XzdCbysZjhcbAlterationBo bo, HttpServletResponse response) { + List list = xzdCbysZjhcbAlterationService.queryList(bo); + ExcelUtil.exportExcel(list, "立项及成本-成本预算-总体计划成本变更", XzdCbysZjhcbAlterationVo.class, response); + } + + /** + * 获取立项及成本-成本预算-总体计划成本变更详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("costBudget:cbysZjhcbAlteration:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xzdCbysZjhcbAlterationService.queryById(id)); + } + + /** + * 新增立项及成本-成本预算-总体计划成本变更 + */ + @SaCheckPermission("costBudget:cbysZjhcbAlteration:add") + @Log(title = "立项及成本-成本预算-总体计划成本变更", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody XzdCbysZjhcbAlterationBo bo) { + return toAjax(xzdCbysZjhcbAlterationService.insertByBo(bo)); + } + + /** + * 修改立项及成本-成本预算-总体计划成本变更 + */ + @SaCheckPermission("costBudget:cbysZjhcbAlteration:edit") + @Log(title = "立项及成本-成本预算-总体计划成本变更", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody XzdCbysZjhcbAlterationBo bo) { + return toAjax(xzdCbysZjhcbAlterationService.updateByBo(bo)); + } + + /** + * 删除立项及成本-成本预算-总体计划成本变更 + * + * @param ids 主键串 + */ + @SaCheckPermission("costBudget:cbysZjhcbAlteration:remove") + @Log(title = "立项及成本-成本预算-总体计划成本变更", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdCbysZjhcbAlterationService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcbAlteration.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcbAlteration.java new file mode 100644 index 00000000..16d26e7e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/XzdCbysZjhcbAlteration.java @@ -0,0 +1,153 @@ +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_alteration + * + * @author Lion Li + * @date 2025-10-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("xzd_cbys_zjhcb_alteration") +public class XzdCbysZjhcbAlteration 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 alterationReason; + + /** + * 备注 + */ + 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/bo/XzdCbysZjhcbAlterationBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbAlterationBo.java new file mode 100644 index 00000000..082cca98 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbAlterationBo.java @@ -0,0 +1,175 @@ +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.XzdCbysZjhcbAlteration; +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_alteration + * + * @author Lion Li + * @date 2025-10-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = XzdCbysZjhcbAlteration.class, reverseConvertGenerate = false) +public class XzdCbysZjhcbAlterationBo extends BaseEntity { + + /** + * 主键ID + */ + private Long id; + + /** + * 单据编码(带*,必填) + */ + 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 alterationReason; + + /** + * 备注 + */ + 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/XzdCbysZjhcbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/bo/XzdCbysZjhcbBo.java index 4c588a53..bf9172c4 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 @@ -27,13 +27,11 @@ public class XzdCbysZjhcbBo extends BaseEntity { /** * 主键ID */ - @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) private Long id; /** * 单据编码(带*,必填) */ - @NotBlank(message = "单据编码(带*,必填)不能为空", groups = { EditGroup.class }) private String docCode; /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbAlterationVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbAlterationVo.java new file mode 100644 index 00000000..6409dd9f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/domain/vo/XzdCbysZjhcbAlterationVo.java @@ -0,0 +1,235 @@ +package org.dromara.xzd.costProjectApproval.costBudget.domain.vo; + +import java.math.BigDecimal; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbAlteration; +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.List; + + +/** + * 立项及成本-成本预算-总体计划成本变更视图对象 xzd_cbys_zjhcb_alteration + * + * @author Lion Li + * @date 2025-10-17 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = XzdCbysZjhcbAlteration.class) +public class XzdCbysZjhcbAlterationVo 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; + + /** + * 项目责任人名称 + */ + @ExcelProperty(value = "项目责任人名称") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "projectLeader") + private String projectLeaderName; + + + /** + * 执行项目经理 + */ + @ExcelProperty(value = "执行项目经理") + private Long execProjectManager; + + /** + * 执行项目经理名称 + */ + @ExcelProperty(value = "执行项目经理名称") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "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 alterationReason; + + /** + * 备注 + */ + @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/mapper/XzdCbysZjhcbAlterationMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbAlterationMapper.java new file mode 100644 index 00000000..8dd780d5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/mapper/XzdCbysZjhcbAlterationMapper.java @@ -0,0 +1,15 @@ +package org.dromara.xzd.costProjectApproval.costBudget.mapper; + +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbAlteration; +import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbAlterationVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 立项及成本-成本预算-总体计划成本变更Mapper接口 + * + * @author Lion Li + * @date 2025-10-17 + */ +public interface XzdCbysZjhcbAlterationMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbAlterationService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbAlterationService.java new file mode 100644 index 00000000..e9c74347 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/IXzdCbysZjhcbAlterationService.java @@ -0,0 +1,70 @@ +package org.dromara.xzd.costProjectApproval.costBudget.service; + +import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbAlterationVo; +import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbAlterationBo; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbAlteration; +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 IXzdCbysZjhcbAlterationService extends IService{ + + /** + * 查询立项及成本-成本预算-总体计划成本变更 + * + * @param id 主键 + * @return 立项及成本-成本预算-总体计划成本变更 + */ + XzdCbysZjhcbAlterationVo queryById(Long id); + + /** + * 分页查询立项及成本-成本预算-总体计划成本变更列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-总体计划成本变更分页列表 + */ + TableDataInfo queryPageList(XzdCbysZjhcbAlterationBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的立项及成本-成本预算-总体计划成本变更列表 + * + * @param bo 查询条件 + * @return 立项及成本-成本预算-总体计划成本变更列表 + */ + List queryList(XzdCbysZjhcbAlterationBo bo); + + /** + * 新增立项及成本-成本预算-总体计划成本变更 + * + * @param bo 立项及成本-成本预算-总体计划成本变更 + * @return 是否新增成功 + */ + Boolean insertByBo(XzdCbysZjhcbAlterationBo bo); + + /** + * 修改立项及成本-成本预算-总体计划成本变更 + * + * @param bo 立项及成本-成本预算-总体计划成本变更 + * @return 是否修改成功 + */ + Boolean updateByBo(XzdCbysZjhcbAlterationBo 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/XzdCbysWgcbtbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysWgcbtbServiceImpl.java index ec90d3c7..ea5c3ea6 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 @@ -91,6 +91,10 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl hashMap = new HashMap<>(); + hashMap.put("main_doc_id", item.getId()); + List list = fubiaoService.getBaseMapper().selectByMap(hashMap); + item.setXzdCbysWgcbtbFubiao(list); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbAlterationServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbAlterationServiceImpl.java new file mode 100644 index 00000000..7077856b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/costProjectApproval/costBudget/service/impl/XzdCbysZjhcbAlterationServiceImpl.java @@ -0,0 +1,258 @@ +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.XzdCbysSscb; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl; +import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo; +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.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbAlterationBo; +import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbAlterationVo; +import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbAlteration; +import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZjhcbAlterationMapper; +import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbAlterationService; + +import java.util.*; + +/** + * 立项及成本-成本预算-总体计划成本变更Service业务层处理 + * + * @author Lion Li + * @date 2025-10-17 + */ +@RequiredArgsConstructor +@Service +public class XzdCbysZjhcbAlterationServiceImpl extends ServiceImpl implements IXzdCbysZjhcbAlterationService { + + private final XzdCbysZjhcbAlterationMapper 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 XzdCbysZjhcbAlterationVo queryById(Long id){ + XzdCbysZjhcbAlterationVo vo = baseMapper.selectVoById(id); + getName(vo); + getHttk(vo); + return vo; + } + + /** + * 分页查询立项及成本-成本预算-总体计划成本变更列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 立项及成本-成本预算-总体计划成本变更分页列表 + */ + @Override + public TableDataInfo queryPageList(XzdCbysZjhcbAlterationBo 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(XzdCbysZjhcbAlterationBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + /** + * 获取部分字段名称 + * @param item + */ + private void getName(XzdCbysZjhcbAlterationVo item) { + //项目名称 + if (item.getProjectId() != null){ + String projectName = xzdProjectService.queryNameById(item.getProjectId()); + if (projectName != null){ + item.setProjectName(projectName); + } + } + } + +// 回填数据 + private void getHttk(XzdCbysZjhcbAlterationVo 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); + } + private LambdaQueryWrapper buildQueryWrapper(XzdCbysZjhcbAlterationBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(XzdCbysZjhcbAlteration::getId); + lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysZjhcbAlteration::getDocCode, bo.getDocCode()); + lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysZjhcbAlteration::getDocTitle, bo.getDocTitle()); + lqw.eq(bo.getDocDate() != null, XzdCbysZjhcbAlteration::getDocDate, bo.getDocDate()); + lqw.eq(bo.getProjectId() != null, XzdCbysZjhcbAlteration::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getBudgetCategory()), XzdCbysZjhcbAlteration::getBudgetCategory, bo.getBudgetCategory()); + lqw.eq(bo.getTotalTaxExclAmount() != null, XzdCbysZjhcbAlteration::getTotalTaxExclAmount, bo.getTotalTaxExclAmount()); + lqw.eq(bo.getTotalTaxAmount() != null, XzdCbysZjhcbAlteration::getTotalTaxAmount, bo.getTotalTaxAmount()); + lqw.eq(bo.getTotalTaxInclAmount() != null, XzdCbysZjhcbAlteration::getTotalTaxInclAmount, bo.getTotalTaxInclAmount()); + lqw.eq(bo.getProjectLeader() != null, XzdCbysZjhcbAlteration::getProjectLeader, bo.getProjectLeader()); + lqw.eq(bo.getExecProjectManager() != null, XzdCbysZjhcbAlteration::getExecProjectManager, bo.getExecProjectManager()); + lqw.eq(bo.getContractAmount() != null, XzdCbysZjhcbAlteration::getContractAmount, bo.getContractAmount()); + lqw.eq(bo.getTaxCost() != null, XzdCbysZjhcbAlteration::getTaxCost, bo.getTaxCost()); + lqw.eq(bo.getProfitRate() != null, XzdCbysZjhcbAlteration::getProfitRate, bo.getProfitRate()); + lqw.eq(bo.getProfitAmount() != null, XzdCbysZjhcbAlteration::getProfitAmount, bo.getProfitAmount()); + lqw.eq(StringUtils.isNotBlank(bo.getAlterationReason()), XzdCbysZjhcbAlteration::getAlterationReason, bo.getAlterationReason()); + lqw.eq(bo.getEnableCostPrecontrol() != null, XzdCbysZjhcbAlteration::getEnableCostPrecontrol, bo.getEnableCostPrecontrol()); + lqw.eq(StringUtils.isNotBlank(bo.getCostControlMode()), XzdCbysZjhcbAlteration::getCostControlMode, bo.getCostControlMode()); + lqw.eq(StringUtils.isNotBlank(bo.getForeignCurrencyTaxType()), XzdCbysZjhcbAlteration::getForeignCurrencyTaxType, bo.getForeignCurrencyTaxType()); + lqw.eq(StringUtils.isNotBlank(bo.getForbidFlag()), XzdCbysZjhcbAlteration::getForbidFlag, bo.getForbidFlag()); + lqw.eq(bo.getEnableAccountAttrTab() != null, XzdCbysZjhcbAlteration::getEnableAccountAttrTab, bo.getEnableAccountAttrTab()); + lqw.eq(bo.getEnableMaterialGroup() != null, XzdCbysZjhcbAlteration::getEnableMaterialGroup, bo.getEnableMaterialGroup()); + lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysZjhcbAlteration::getDocumentReference, bo.getDocumentReference()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysZjhcbAlteration::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增立项及成本-成本预算-总体计划成本变更 + * + * @param bo 立项及成本-成本预算-总体计划成本变更 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(XzdCbysZjhcbAlterationBo bo) { + XzdCbysZjhcbAlteration add = MapstructUtils.convert(bo, XzdCbysZjhcbAlteration.class); + validEntityBeforeSave(add); + String banBen = BatchNumberGenerator.generateBatchNumber("CBBG-"); + add.setDocCode(banBen); + boolean flag = baseMapper.insert(add) > 0; + 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()); + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改立项及成本-成本预算-总体计划成本变更 + * + * @param bo 立项及成本-成本预算-总体计划成本变更 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(XzdCbysZjhcbAlterationBo bo) { + XzdCbysZjhcbAlteration update = MapstructUtils.convert(bo, XzdCbysZjhcbAlteration.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(XzdCbysZjhcbAlteration 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) { + XzdCbysZjhcbAlterationVo 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; + } +}