成本单
This commit is contained in:
		| @ -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; | ||||
|  | ||||
|     /** | ||||
|      * 原合同造价 | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
|     /** | ||||
|      * 原合同造价 | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
|     /** | ||||
|      * 变更后合同备注 | ||||
|      */ | ||||
|  | ||||
| @ -160,11 +160,7 @@ public class XzdSubcontractChangeServiceImpl extends ServiceImpl<XzdSubcontractC | ||||
|         lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdSubcontractChange::getContractName, bo.getContractName()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getContractType()), XzdSubcontractChange::getContractType, bo.getContractType()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getChangeType()), XzdSubcontractChange::getChangeType, bo.getChangeType()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getProject()), XzdSubcontractChange::getProject, bo.getProject()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getBusinessModel()), XzdSubcontractChange::getBusinessModel, bo.getBusinessModel()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getOrganization()), XzdSubcontractChange::getOrganization, bo.getOrganization()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getPartyAUnit()), XzdSubcontractChange::getPartyAUnit, bo.getPartyAUnit()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getPartyBUnit()), XzdSubcontractChange::getPartyBUnit, bo.getPartyBUnit()); | ||||
|         lqw.eq(bo.getOriginalContractCost() != null, XzdSubcontractChange::getOriginalContractCost, bo.getOriginalContractCost()); | ||||
|         lqw.eq(bo.getChangeTaxInclusiveTotal() != null, XzdSubcontractChange::getChangeTaxInclusiveTotal, bo.getChangeTaxInclusiveTotal()); | ||||
|         lqw.eq(bo.getPostChangeTotalCost() != null, XzdSubcontractChange::getPostChangeTotalCost, bo.getPostChangeTotalCost()); | ||||
|  | ||||
| @ -161,7 +161,7 @@ public class XzdSubcontract extends BaseEntity { | ||||
|     /** | ||||
|      * 项目类型(字典) | ||||
|      */ | ||||
|     private String projectType; | ||||
|     private Long projectType; | ||||
|  | ||||
|     /** | ||||
|      * 项目大类(字典) | ||||
|  | ||||
| @ -164,7 +164,7 @@ public class XzdSubcontractBo extends BaseEntity { | ||||
|     /** | ||||
|      * 项目类型(字典) | ||||
|      */ | ||||
|     private String projectType; | ||||
|     private Long projectType; | ||||
|  | ||||
|     /** | ||||
|      * 项目大类(字典) | ||||
|  | ||||
| @ -249,6 +249,7 @@ public class XzdSubcontractVo implements Serializable { | ||||
|     /** | ||||
|      * 签约组织名称 | ||||
|      */ | ||||
|     @Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "signingOrganization") | ||||
|     @ExcelProperty(value = "签约组织名称") | ||||
|     private String signingOrganizationName; | ||||
|  | ||||
| @ -257,7 +258,7 @@ public class XzdSubcontractVo implements Serializable { | ||||
|      */ | ||||
|     @ExcelProperty(value = "项目类型", converter = ExcelDictConvert.class) | ||||
|     @ExcelDictFormat(readConverterExp = "字=典") | ||||
|     private String projectType; | ||||
|     private Long projectType; | ||||
|  | ||||
|     /** | ||||
|      * 项目大类(字典) | ||||
|  | ||||
| @ -132,7 +132,6 @@ public class XzdSubcontractServiceImpl extends ServiceImpl<XzdSubcontractMapper, | ||||
|             } | ||||
|             //管理组织(供应商) | ||||
|             String unitName = xzdSupplierInfoService.queryNameById(item.getPartyBUnit()); | ||||
|  | ||||
|             if (unitName != null){ | ||||
|                 item.setManagementOrganizationName(unitName); | ||||
|             } | ||||
| @ -141,19 +140,13 @@ public class XzdSubcontractServiceImpl extends ServiceImpl<XzdSubcontractMapper, | ||||
|             if (unitName1 != null){ | ||||
|                 item.setInvoicingUnitName(unitName1); | ||||
|             } | ||||
|             //收票单位名称(客户名称) | ||||
|             R<QuerCorrespondentDto> 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<XzdContractAdvanceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>(); | ||||
|             lambdaQueryWrapper.eq(XzdContractAdvanceInfo::getContractDetailsId, item.getId()); | ||||
|             List<XzdContractAdvanceInfo> advanceInfos = xzdContractAdvanceInfoService.list(lambdaQueryWrapper); | ||||
| @ -234,7 +227,7 @@ public class XzdSubcontractServiceImpl extends ServiceImpl<XzdSubcontractMapper, | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), XzdSubcontract::getRemarks, bo.getRemarks()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getCapitalizedTaxInclusiveTotal()), XzdSubcontract::getCapitalizedTaxInclusiveTotal, bo.getCapitalizedTaxInclusiveTotal()); | ||||
|         lqw.eq(bo.getSigningOrganization() != null, XzdSubcontract::getSigningOrganization, bo.getSigningOrganization()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getProjectType()), XzdSubcontract::getProjectType, bo.getProjectType()); | ||||
|         lqw.eq(bo.getProjectType() != null, XzdSubcontract::getProjectType, bo.getProjectType()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getProjectCategory()), XzdSubcontract::getProjectCategory, bo.getProjectCategory()); | ||||
|         lqw.eq(StringUtils.isNotBlank(bo.getAssociatedMainContract()), XzdSubcontract::getAssociatedMainContract, bo.getAssociatedMainContract()); | ||||
|         lqw.eq(bo.getIsSubContract() != null, XzdSubcontract::getIsSubContract, bo.getIsSubContract()); | ||||
|  | ||||
| @ -12,6 +12,8 @@ import lombok.RequiredArgsConstructor; | ||||
| import org.dromara.system.service.impl.SysOssServiceImpl; | ||||
| import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.XzdPurchaseContractSuspend; | ||||
| import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.vo.XzdPurchaseContractSuspendVo; | ||||
| import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdSubcontractVo; | ||||
| import org.dromara.xzd.contractManagement.fenbaohetongxinxi.service.IXzdSubcontractService; | ||||
| import org.dromara.xzd.utilS.AreaUtil; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
| @ -40,6 +42,7 @@ public class XzdSubcontractTerminationServiceImpl extends ServiceImpl<XzdSubcont | ||||
|  | ||||
|     private final XzdSubcontractTerminationMapper baseMapper; | ||||
|     private final AreaUtil areaUtil; | ||||
|     private final IXzdSubcontractService iXzdSubcontractService; | ||||
|  | ||||
|     @Autowired | ||||
|     private SysOssServiceImpl sysOssService; | ||||
| @ -53,8 +56,20 @@ public class XzdSubcontractTerminationServiceImpl extends ServiceImpl<XzdSubcont | ||||
|     @Override | ||||
|     public XzdSubcontractTerminationVo queryById(Long id){ | ||||
|         XzdSubcontractTerminationVo vo = baseMapper.selectVoById(id); | ||||
|         List.of(vo); | ||||
|         return baseMapper.selectVoById(id); | ||||
|         List<XzdSubcontractTerminationVo> res = List.of(vo); | ||||
|         saveValue(res); | ||||
|         return res.getFirst(); | ||||
|     } | ||||
|  | ||||
|     private void saveValue(List<XzdSubcontractTerminationVo> 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<XzdSubcont | ||||
|     public TableDataInfo<XzdSubcontractTerminationVo> queryPageList(XzdSubcontractTerminationBo bo, PageQuery pageQuery) { | ||||
|         LambdaQueryWrapper<XzdSubcontractTermination> lqw = buildQueryWrapper(bo); | ||||
|         Page<XzdSubcontractTerminationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||
|         saveValue(result.getRecords()); | ||||
|         return TableDataInfo.build(result); | ||||
|     } | ||||
|  | ||||
|  | ||||
| @ -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<XzdCbysZjhcbAlterationVo> 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<XzdCbysZjhcbAlterationVo> list = xzdCbysZjhcbAlterationService.queryList(bo); | ||||
|         ExcelUtil.exportExcel(list, "立项及成本-成本预算-总体计划成本变更", XzdCbysZjhcbAlterationVo.class, response); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取立项及成本-成本预算-总体计划成本变更详细信息 | ||||
|      * | ||||
|      * @param id 主键 | ||||
|      */ | ||||
|     @SaCheckPermission("costBudget:cbysZjhcbAlteration:query") | ||||
|     @GetMapping("/{id}") | ||||
|     public R<XzdCbysZjhcbAlterationVo> 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<Void> 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<Void> 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<Void> remove(@NotEmpty(message = "主键不能为空") | ||||
|                           @PathVariable Long[] ids) { | ||||
|         return toAjax(xzdCbysZjhcbAlterationService.deleteWithValidByIds(List.of(ids), true)); | ||||
|     } | ||||
| } | ||||
| @ -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; | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -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> xzdCbysZtjhcbBgjl; | ||||
|  | ||||
|     /** | ||||
|      * 成本明细 | ||||
|      */ | ||||
|     List<XzdCbysWgcbtbFubiao> xzdCbysWgcbtbFubiao; | ||||
|  | ||||
|     /** | ||||
|      * 税收成本 | ||||
|      */ | ||||
|     List<XzdCbysSscb> xzdCbysSscb; | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -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; | ||||
|  | ||||
|     /** | ||||
|  | ||||
| @ -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> xzdCbysZtjhcbBgjl; | ||||
|  | ||||
|     /** | ||||
|      * 成本明细 | ||||
|      */ | ||||
|     List<XzdCbysWgcbtbFubiao> xzdCbysWgcbtbFubiao; | ||||
|  | ||||
|     /** | ||||
|      * 税收成本 | ||||
|      */ | ||||
|     List<XzdCbysSscb> xzdCbysSscb; | ||||
|  | ||||
|  | ||||
|  | ||||
| } | ||||
| @ -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<XzdCbysZjhcbAlteration, XzdCbysZjhcbAlterationVo> { | ||||
|  | ||||
| } | ||||
| @ -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<XzdCbysZjhcbAlteration>{ | ||||
|  | ||||
|     /** | ||||
|      * 查询立项及成本-成本预算-总体计划成本变更 | ||||
|      * | ||||
|      * @param id 主键 | ||||
|      * @return 立项及成本-成本预算-总体计划成本变更 | ||||
|      */ | ||||
|     XzdCbysZjhcbAlterationVo queryById(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 分页查询立项及成本-成本预算-总体计划成本变更列表 | ||||
|      * | ||||
|      * @param bo        查询条件 | ||||
|      * @param pageQuery 分页参数 | ||||
|      * @return 立项及成本-成本预算-总体计划成本变更分页列表 | ||||
|      */ | ||||
|     TableDataInfo<XzdCbysZjhcbAlterationVo> queryPageList(XzdCbysZjhcbAlterationBo bo, PageQuery pageQuery); | ||||
|  | ||||
|     /** | ||||
|      * 查询符合条件的立项及成本-成本预算-总体计划成本变更列表 | ||||
|      * | ||||
|      * @param bo 查询条件 | ||||
|      * @return 立项及成本-成本预算-总体计划成本变更列表 | ||||
|      */ | ||||
|     List<XzdCbysZjhcbAlterationVo> 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<Long> ids, Boolean isValid); | ||||
| } | ||||
| @ -91,6 +91,10 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl<XzdCbysWgcbtbMapper, X | ||||
|                     item.setProjectName(projectName); | ||||
|                 } | ||||
|             } | ||||
|             HashMap<String, Object> hashMap = new HashMap<>(); | ||||
|             hashMap.put("main_doc_id", item.getId()); | ||||
|             List<XzdCbysWgcbtbFubiao> list = fubiaoService.getBaseMapper().selectByMap(hashMap); | ||||
|             item.setXzdCbysWgcbtbFubiao(list); | ||||
|  | ||||
|  | ||||
|         } | ||||
|  | ||||
| @ -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<XzdCbysZjhcbAlterationMapper, XzdCbysZjhcbAlteration> 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<XzdCbysZjhcbAlterationVo> queryPageList(XzdCbysZjhcbAlterationBo bo, PageQuery pageQuery) { | ||||
|         LambdaQueryWrapper<XzdCbysZjhcbAlteration> lqw = buildQueryWrapper(bo); | ||||
|         Page<XzdCbysZjhcbAlterationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); | ||||
|         result.getRecords().forEach(this::getName); | ||||
|         return TableDataInfo.build(result); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 查询符合条件的立项及成本-成本预算-总体计划成本变更列表 | ||||
|      * | ||||
|      * @param bo 查询条件 | ||||
|      * @return 立项及成本-成本预算-总体计划成本变更列表 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<XzdCbysZjhcbAlterationVo> queryList(XzdCbysZjhcbAlterationBo bo) { | ||||
|         LambdaQueryWrapper<XzdCbysZjhcbAlteration> 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<XzdCbysZtjhcbBgjl> xzdCbysZtjhcbBgjls = xzdCbysZtjhcbBgjlService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysZtjhcbBgjl>().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, vo.getId())); | ||||
|         vo.setXzdCbysZtjhcbBgjl(xzdCbysZtjhcbBgjls); | ||||
|         List<XzdCbysSscb> xzdCbysSscbs = xzdCbysSscbService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysSscb>().eq(XzdCbysSscb::getMainDocumentId, vo.getId())); | ||||
|         vo.setXzdCbysSscb(xzdCbysSscbs); | ||||
|         List<XzdCbysWgcbtbFubiao> xzdCbysWgcbtbFubiaos = fubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysWgcbtbFubiao>().eq(XzdCbysWgcbtbFubiao::getMainDocId, vo.getId())); | ||||
|         vo.setXzdCbysWgcbtbFubiao(xzdCbysWgcbtbFubiaos); | ||||
|     } | ||||
|     private LambdaQueryWrapper<XzdCbysZjhcbAlteration> buildQueryWrapper(XzdCbysZjhcbAlterationBo bo) { | ||||
|         Map<String, Object> params = bo.getParams(); | ||||
|         LambdaQueryWrapper<XzdCbysZjhcbAlteration> 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<XzdCbysZtjhcbBgjl>().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, bo.getId())); | ||||
|         xzdCbysSscbService.remove(new LambdaQueryWrapper<XzdCbysSscb>().eq(XzdCbysSscb::getMainDocumentId, bo.getId())); | ||||
|         fubiaoService.remove(new LambdaQueryWrapper<XzdCbysWgcbtbFubiao>().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<Long> ids, Boolean isValid) { | ||||
|         if(isValid){ | ||||
|             //TODO 做一些业务上的校验,判断是否需要校验 | ||||
|         } | ||||
|  | ||||
|         List<Long> deleteIds = new ArrayList<>(); | ||||
|         for (Long id : ids) { | ||||
|             XzdCbysZjhcbAlterationVo vo = baseMapper.selectVoById(id); | ||||
|             if (vo != null){ | ||||
|                 //删除附件 | ||||
|                 if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ | ||||
|                     List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); | ||||
|                     deleteIds.addAll(list); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         if (!deleteIds.isEmpty()) { | ||||
|             sysOssService.deleteWithValidByIds(deleteIds, false); | ||||
|         } | ||||
|         xzdCbysZtjhcbBgjlService.remove(new LambdaQueryWrapper<XzdCbysZtjhcbBgjl>().in(XzdCbysZtjhcbBgjl::getMainDocumentId, ids)); | ||||
|         xzdCbysSscbService.remove(new LambdaQueryWrapper<XzdCbysSscb>().in(XzdCbysSscb::getMainDocumentId, ids)); | ||||
|         fubiaoService.remove(new LambdaQueryWrapper<XzdCbysWgcbtbFubiao>().in(XzdCbysWgcbtbFubiao::getMainDocId, ids)); | ||||
|         return baseMapper.deleteByIds(ids) > 0; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 lg
					lg