成本单

This commit is contained in:
lg
2025-10-18 14:21:49 +08:00
parent f9d9785536
commit 2e5e42fd84
18 changed files with 1077 additions and 39 deletions

View File

@ -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;
/** /**
* 原合同造价 * 原合同造价

View File

@ -30,13 +30,11 @@ public class XzdSubcontractChangeBo extends BaseEntity {
/** /**
* *
*/ */
@NotNull(message = "不能为空", groups = { EditGroup.class })
private Long id; private Long id;
/** /**
* 单据编码 * 单据编码
*/ */
@NotBlank(message = "单据编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String documentCode; 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;
/** /**
* 原合同造价 * 原合同造价

View File

@ -93,7 +93,7 @@ public class XzdSubcontractChangeVo implements Serializable {
* 项目 * 项目
*/ */
@ExcelProperty(value = "项目") @ExcelProperty(value = "项目")
private String project; private String projectName;
/** /**
* 经营模式 * 经营模式
@ -105,19 +105,19 @@ public class XzdSubcontractChangeVo implements Serializable {
* 组织 * 组织
*/ */
@ExcelProperty(value = "组织") @ExcelProperty(value = "组织")
private String organization; private String organizationName;
/** /**
* 甲方单位 * 甲方单位
*/ */
@ExcelProperty(value = "甲方单位") @ExcelProperty(value = "甲方单位")
private String partyAUnit; private String partyAUnitName;
/** /**
* 乙方单位 * 乙方单位
*/ */
@ExcelProperty(value = "乙方单位") @ExcelProperty(value = "乙方单位")
private String partyBUnit; private String partyBUnitName;
/** /**
* 原合同造价 * 原合同造价
@ -191,18 +191,39 @@ public class XzdSubcontractChangeVo implements Serializable {
@ExcelProperty(value = "变更后项目经理") @ExcelProperty(value = "变更后项目经理")
private Long postChangeProjectManager; private Long postChangeProjectManager;
/**
* 变更后项目经理名称
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "postChangeProjectManager")
@ExcelProperty(value = "变更后项目经理名称")
private String postChangeProjectManagerName;
/** /**
* 变更后项目责任人 * 变更后项目责任人
*/ */
@ExcelProperty(value = "变更后项目责任人") @ExcelProperty(value = "变更后项目责任人")
private Long postChangeProjectOwner; private Long postChangeProjectOwner;
/**
* 变更后项目责任人名成
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "postChangeProjectOwner")
@ExcelProperty(value = "变更后项目责任人")
private String postChangeProjectOwnerName;
/** /**
* 变更后现场经理 * 变更后现场经理
*/ */
@ExcelProperty(value = "变更后现场经理") @ExcelProperty(value = "变更后现场经理")
private Long postChangeSiteManager; private Long postChangeSiteManager;
/**
* 变更后现场经理
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "postChangeSiteManager")
@ExcelProperty(value = "变更后现场经理")
private Long postChangeSiteManagerName;
/** /**
* 变更后合同备注 * 变更后合同备注
*/ */

View File

@ -160,11 +160,7 @@ public class XzdSubcontractChangeServiceImpl extends ServiceImpl<XzdSubcontractC
lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdSubcontractChange::getContractName, bo.getContractName()); 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.getContractType()), XzdSubcontractChange::getContractType, bo.getContractType());
lqw.eq(StringUtils.isNotBlank(bo.getChangeType()), XzdSubcontractChange::getChangeType, bo.getChangeType()); 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.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.getOriginalContractCost() != null, XzdSubcontractChange::getOriginalContractCost, bo.getOriginalContractCost());
lqw.eq(bo.getChangeTaxInclusiveTotal() != null, XzdSubcontractChange::getChangeTaxInclusiveTotal, bo.getChangeTaxInclusiveTotal()); lqw.eq(bo.getChangeTaxInclusiveTotal() != null, XzdSubcontractChange::getChangeTaxInclusiveTotal, bo.getChangeTaxInclusiveTotal());
lqw.eq(bo.getPostChangeTotalCost() != null, XzdSubcontractChange::getPostChangeTotalCost, bo.getPostChangeTotalCost()); lqw.eq(bo.getPostChangeTotalCost() != null, XzdSubcontractChange::getPostChangeTotalCost, bo.getPostChangeTotalCost());

View File

@ -161,7 +161,7 @@ public class XzdSubcontract extends BaseEntity {
/** /**
* 项目类型(字典) * 项目类型(字典)
*/ */
private String projectType; private Long projectType;
/** /**
* 项目大类(字典) * 项目大类(字典)

View File

@ -164,7 +164,7 @@ public class XzdSubcontractBo extends BaseEntity {
/** /**
* 项目类型(字典) * 项目类型(字典)
*/ */
private String projectType; private Long projectType;
/** /**
* 项目大类(字典) * 项目大类(字典)

View File

@ -249,6 +249,7 @@ public class XzdSubcontractVo implements Serializable {
/** /**
* 签约组织名称 * 签约组织名称
*/ */
@Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "signingOrganization")
@ExcelProperty(value = "签约组织名称") @ExcelProperty(value = "签约组织名称")
private String signingOrganizationName; private String signingOrganizationName;
@ -257,7 +258,7 @@ public class XzdSubcontractVo implements Serializable {
*/ */
@ExcelProperty(value = "项目类型", converter = ExcelDictConvert.class) @ExcelProperty(value = "项目类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典") @ExcelDictFormat(readConverterExp = "字=典")
private String projectType; private Long projectType;
/** /**
* 项目大类(字典) * 项目大类(字典)

View File

@ -132,7 +132,6 @@ public class XzdSubcontractServiceImpl extends ServiceImpl<XzdSubcontractMapper,
} }
//管理组织(供应商) //管理组织(供应商)
String unitName = xzdSupplierInfoService.queryNameById(item.getPartyBUnit()); String unitName = xzdSupplierInfoService.queryNameById(item.getPartyBUnit());
if (unitName != null){ if (unitName != null){
item.setManagementOrganizationName(unitName); item.setManagementOrganizationName(unitName);
} }
@ -141,19 +140,13 @@ public class XzdSubcontractServiceImpl extends ServiceImpl<XzdSubcontractMapper,
if (unitName1 != null){ if (unitName1 != null){
item.setInvoicingUnitName(unitName1); item.setInvoicingUnitName(unitName1);
} }
//收票单位名称(客户名称) //收票单位名称(供应商名称)
R<QuerCorrespondentDto> byid2 = iXzdCorrespondentList.getCustomerByid(item.getTicketReceivingUnit()); String unitName2 = xzdSupplierInfoService.queryNameById(item.getTicketReceivingUnit());
if (byid2!=null){ if (unitName2 != null){
if (byid2.getData().getXzdCustomerinformation() != null){ item.setTicketReceivingUnitName(unitName2);
item.setTicketReceivingUnitName(byid2.getData().getXzdCustomerinformation().getUnitName());
}
} }
//签约组织(供应商)
String unitName2 = xzdSupplierInfoService.queryNameById(item.getSigningOrganization()); // //合同文本-预收款项
if (unitName2!= null){
item.setSigningOrganizationName(unitName2);
}
//合同文本-预收款项
LambdaQueryWrapper<XzdContractAdvanceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<XzdContractAdvanceInfo> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(XzdContractAdvanceInfo::getContractDetailsId, item.getId()); lambdaQueryWrapper.eq(XzdContractAdvanceInfo::getContractDetailsId, item.getId());
List<XzdContractAdvanceInfo> advanceInfos = xzdContractAdvanceInfoService.list(lambdaQueryWrapper); 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.getRemarks()), XzdSubcontract::getRemarks, bo.getRemarks());
lqw.eq(StringUtils.isNotBlank(bo.getCapitalizedTaxInclusiveTotal()), XzdSubcontract::getCapitalizedTaxInclusiveTotal, bo.getCapitalizedTaxInclusiveTotal()); lqw.eq(StringUtils.isNotBlank(bo.getCapitalizedTaxInclusiveTotal()), XzdSubcontract::getCapitalizedTaxInclusiveTotal, bo.getCapitalizedTaxInclusiveTotal());
lqw.eq(bo.getSigningOrganization() != null, XzdSubcontract::getSigningOrganization, bo.getSigningOrganization()); 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.getProjectCategory()), XzdSubcontract::getProjectCategory, bo.getProjectCategory());
lqw.eq(StringUtils.isNotBlank(bo.getAssociatedMainContract()), XzdSubcontract::getAssociatedMainContract, bo.getAssociatedMainContract()); lqw.eq(StringUtils.isNotBlank(bo.getAssociatedMainContract()), XzdSubcontract::getAssociatedMainContract, bo.getAssociatedMainContract());
lqw.eq(bo.getIsSubContract() != null, XzdSubcontract::getIsSubContract, bo.getIsSubContract()); lqw.eq(bo.getIsSubContract() != null, XzdSubcontract::getIsSubContract, bo.getIsSubContract());

View File

@ -12,6 +12,8 @@ import lombok.RequiredArgsConstructor;
import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.XzdPurchaseContractSuspend; import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.XzdPurchaseContractSuspend;
import org.dromara.xzd.contractManagement.caigoucontractTermination.domain.vo.XzdPurchaseContractSuspendVo; 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.dromara.xzd.utilS.AreaUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -40,6 +42,7 @@ public class XzdSubcontractTerminationServiceImpl extends ServiceImpl<XzdSubcont
private final XzdSubcontractTerminationMapper baseMapper; private final XzdSubcontractTerminationMapper baseMapper;
private final AreaUtil areaUtil; private final AreaUtil areaUtil;
private final IXzdSubcontractService iXzdSubcontractService;
@Autowired @Autowired
private SysOssServiceImpl sysOssService; private SysOssServiceImpl sysOssService;
@ -53,8 +56,20 @@ public class XzdSubcontractTerminationServiceImpl extends ServiceImpl<XzdSubcont
@Override @Override
public XzdSubcontractTerminationVo queryById(Long id){ public XzdSubcontractTerminationVo queryById(Long id){
XzdSubcontractTerminationVo vo = baseMapper.selectVoById(id); XzdSubcontractTerminationVo vo = baseMapper.selectVoById(id);
List.of(vo); List<XzdSubcontractTerminationVo> res = List.of(vo);
return baseMapper.selectVoById(id); 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) { public TableDataInfo<XzdSubcontractTerminationVo> queryPageList(XzdSubcontractTerminationBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSubcontractTermination> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<XzdSubcontractTermination> lqw = buildQueryWrapper(bo);
Page<XzdSubcontractTerminationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<XzdSubcontractTerminationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
saveValue(result.getRecords());
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -27,13 +27,11 @@ public class XzdCbysZjhcbBo extends BaseEntity {
/** /**
* 主键ID * 主键ID
*/ */
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id; private Long id;
/** /**
* 单据编码(带*,必填) * 单据编码(带*,必填)
*/ */
@NotBlank(message = "单据编码(带*,必填)不能为空", groups = { EditGroup.class })
private String docCode; private String docCode;
/** /**

View File

@ -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;
}

View File

@ -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> {
}

View File

@ -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);
}

View File

@ -91,6 +91,10 @@ public class XzdCbysWgcbtbServiceImpl extends ServiceImpl<XzdCbysWgcbtbMapper, X
item.setProjectName(projectName); 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);
} }

View File

@ -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;
}
}