机械合同名称结算,收付款

This commit is contained in:
lg
2025-11-19 20:06:32 +08:00
parent 397f8ee768
commit 8a928e852d
32 changed files with 4936 additions and 2 deletions

View File

@ -55,7 +55,7 @@ public interface TransConstant {
String XZD_PURCHASE_CONTRACT_ID_TO_NAME = "xzd_purchase_contract_id_to_name"; String XZD_PURCHASE_CONTRACT_ID_TO_NAME = "xzd_purchase_contract_id_to_name";
/** /**
* 采购合同id转名称 * 机械合同id转名称
*/ */
String XZD_PURCHASE_JXXIE_ID_TO_NAME = "xzd_purchase_contract_jixie_id_to_name"; String XZD_PURCHASE_JXXIE_ID_TO_NAME = "xzd_purchase_contract_jixie_id_to_name";

View File

@ -19,7 +19,9 @@ public enum XzdClassEnum {
FENBAOHETONGBINGGENG_INFORMATION("xzd_subcontract_change"),//分包合同变更 FENBAOHETONGBINGGENG_INFORMATION("xzd_subcontract_change"),//分包合同变更
CAIGOUHETONG_INFORMATION("xzd_purchase_contract_alteration"), //采购变更合同 CAIGOUHETONG_INFORMATION("xzd_purchase_contract_alteration"), //采购变更合同
FENBAOHETONG_JINDU("xzd_settlement_of_subcontracting_contract"),//分包合同进度结算 FENBAOHETONG_JINDU("xzd_settlement_of_subcontracting_contract"),//分包合同进度结算
JIXIEHTTONG_JINDUJS("xzd_settlement_of_jixie_contract"),//机械合同进度结算
JIXIEHETONG_JINDU("xzd_contract_machinery"),//机械合同信息 JIXIEHETONG_JINDU("xzd_contract_machinery"),//机械合同信息
JXHTJG_COMPLETION("xzd_settlement_of_jixie_completion"),//机械合同竣工结算对象
JIXIEHETONGBIANG_XINXI("xzd_contract_machinery"),//机械合同信息变更 JIXIEHETONGBIANG_XINXI("xzd_contract_machinery"),//机械合同信息变更
PURCHASE_CONTRACT_INFORMATION("xzd_purchase_contract_information");//采购合同 PURCHASE_CONTRACT_INFORMATION("xzd_purchase_contract_information");//采购合同

View File

@ -6,6 +6,7 @@ public enum ZxdEnum {
TYPE_CORRESPONDENT("客户","1"), TYPE_CORRESPONDENT("客户","1"),
TYPE_SUPPLIER("供应商","2"), TYPE_SUPPLIER("供应商","2"),
FENBAOHET("分包合同","2"), FENBAOHET("分包合同","2"),
JIXIEHTTONG("机械合同","5"),
CAIGOUHET("采购合同","3"), CAIGOUHET("采购合同","3"),
ZONHEFUWUHET("综合服务合同","4"), ZONHEFUWUHET("综合服务合同","4"),
HETONGLEIXING("合同外清单","1"), HETONGLEIXING("合同外清单","1"),

View File

@ -268,6 +268,8 @@ public class XzdCorrespondentListImp implements IXzdCorrespondentList {
xzdYhxxBo.setYhId(bank.getId()); xzdYhxxBo.setYhId(bank.getId());
xzdYhxxBo.setMainId(id); xzdYhxxBo.setMainId(id);
xzdYhxxBo.setSfmr(bank.getIsDefault()); xzdYhxxBo.setSfmr(bank.getIsDefault());
xzdYhxxBo.setAccount(bank.getAccount());
xzdYhxxBo.setKhhm(bank.getPersonName());
xzdYhxxBo.setType("2"); xzdYhxxBo.setType("2");
xzdYhxxes.add(xzdYhxxBo); xzdYhxxes.add(xzdYhxxBo);
@ -494,6 +496,8 @@ public class XzdCorrespondentListImp implements IXzdCorrespondentList {
xzdYhxxBo.setYhId(bank.getId()); xzdYhxxBo.setYhId(bank.getId());
xzdYhxxBo.setMainId(dto.getXzdCustomerinformation().getId()); xzdYhxxBo.setMainId(dto.getXzdCustomerinformation().getId());
xzdYhxxBo.setSfmr(bank.getIsDefault()); xzdYhxxBo.setSfmr(bank.getIsDefault());
xzdYhxxBo.setAccount(bank.getAccount());
xzdYhxxBo.setKhhm(bank.getPersonName());
xzdYhxxBo.setType("2"); xzdYhxxBo.setType("2");
xzdYhxxes.add(xzdYhxxBo); xzdYhxxes.add(xzdYhxxBo);
} }
@ -598,13 +602,16 @@ public class XzdCorrespondentListImp implements IXzdCorrespondentList {
if ( dto.getXzdSettlementInfo() != null) { if ( dto.getXzdSettlementInfo() != null) {
//处理开户银行 //处理开户银行
LambdaQueryWrapper<XzdYhxx> bankLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<XzdYhxx> bankLambdaQueryWrapper = new LambdaQueryWrapper<>();
bankLambdaQueryWrapper.eq(XzdYhxx::getMainId,dto.getXzdSettlementInfo().getId()); bankLambdaQueryWrapper.eq(XzdYhxx::getMainId,dto.getXzdCustomerinformation().getId());
List<XzdYhxx> xzdYhxxList = xzdYhxxService.list(bankLambdaQueryWrapper); List<XzdYhxx> xzdYhxxList = xzdYhxxService.list(bankLambdaQueryWrapper);
if (xzdYhxxList!= null && !xzdYhxxList.isEmpty()) { if (xzdYhxxList!= null && !xzdYhxxList.isEmpty()) {
List<XzdSupplierOpenBank> openBanks = new ArrayList<>(); List<XzdSupplierOpenBank> openBanks = new ArrayList<>();
for (XzdYhxx yhxx : xzdYhxxList) { for (XzdYhxx yhxx : xzdYhxxList) {
XzdSupplierOpenBank byId = xzdSupplierOpenBankService.getById(yhxx.getYhId()); XzdSupplierOpenBank byId = xzdSupplierOpenBankService.getById(yhxx.getYhId());
if (byId != null){ if (byId != null){
byId.setAccount(yhxx.getAccount());
byId.setIsDefault(yhxx.getSfmr());
byId.setPersonName(yhxx.getKhhm());
openBanks.add(byId); openBanks.add(byId);
} }
if ( yhxx != null && "1".equals(yhxx.getSfmr())){ if ( yhxx != null && "1".equals(yhxx.getSfmr())){

View File

@ -0,0 +1,134 @@
package org.dromara.xzd.settlement.jixiehetongjiesuan.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.bo.XzdContractMachineryBo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.vo.XzdContractMachineryVo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.service.IXzdContractMachineryService;
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.settlement.jixiehetongjiesuan.domain.vo.XzdSettlementOfJixieContractVo;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.bo.XzdSettlementOfJixieContractBo;
import org.dromara.xzd.settlement.jixiehetongjiesuan.service.IXzdSettlementOfJixieContractService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 机械合同进度结算
*
* @author Lion Li
* @date 2025-11-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/xzd/jixiehetongjiesuan/settlementOfJixieContract")
public class XzdSettlementOfJixieContractController extends BaseController {
private final IXzdSettlementOfJixieContractService xzdSettlementOfJixieContractService;
private final IXzdContractMachineryService xzdContractMachineryService;
/**
* 查询机械合同信息列表
*/
@SaCheckPermission(value = {"jixiehetongjiesuan:settlementOfJixieContract:add","jixiehetongjiesuan:settlementOfJixieContract:edit","jixiehetongjiesuan:settlementOfJixieContract:list"},mode = SaMode.OR)
@GetMapping("/getlist")
public TableDataInfo<XzdContractMachineryVo> list(XzdContractMachineryBo bo, PageQuery pageQuery) {
return xzdContractMachineryService.queryPageList(bo, pageQuery);
}
/**
* 获取机械合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"jixiehetongjiesuan:settlementOfJixieContract:add","jixiehetongjiesuan:settlementOfJixieContract:edit","jixiehetongjiesuan:settlementOfJixieContract:list"},mode = SaMode.OR)
@GetMapping("/jxht/{id}")
public R<XzdContractMachineryVo> getInfojx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdContractMachineryService.queryById(id));
}
/**
* 查询机械合同进度结算列表
*/
@SaCheckPermission("jixiehetongjiesuan:settlementOfJixieContract:list")
@GetMapping("/list")
public TableDataInfo<XzdSettlementOfJixieContractVo> list(XzdSettlementOfJixieContractBo bo, PageQuery pageQuery) {
return xzdSettlementOfJixieContractService.queryPageList(bo, pageQuery);
}
/**
* 导出机械合同进度结算列表
*/
@SaCheckPermission("jixiehetongjiesuan:settlementOfJixieContract:export")
@Log(title = "机械合同进度结算", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdSettlementOfJixieContractBo bo, HttpServletResponse response) {
List<XzdSettlementOfJixieContractVo> list = xzdSettlementOfJixieContractService.queryList(bo);
ExcelUtil.exportExcel(list, "机械合同进度结算", XzdSettlementOfJixieContractVo.class, response);
}
/**
* 获取机械合同进度结算详细信息
*
* @param id 主键
*/
@SaCheckPermission("jixiehetongjiesuan:settlementOfJixieContract:query")
@GetMapping("/{id}")
public R<XzdSettlementOfJixieContractVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSettlementOfJixieContractService.queryById(id));
}
/**
* 新增机械合同进度结算
*/
@SaCheckPermission("jixiehetongjiesuan:settlementOfJixieContract:add")
@Log(title = "机械合同进度结算", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdSettlementOfJixieContractBo bo) {
return toAjax(xzdSettlementOfJixieContractService.insertByBo(bo));
}
/**
* 修改机械合同进度结算
*/
@SaCheckPermission("jixiehetongjiesuan:settlementOfJixieContract:edit")
@Log(title = "机械合同进度结算", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdSettlementOfJixieContractBo bo) {
return toAjax(xzdSettlementOfJixieContractService.updateByBo(bo));
}
/**
* 删除机械合同进度结算
*
* @param ids 主键串
*/
@SaCheckPermission("jixiehetongjiesuan:settlementOfJixieContract:remove")
@Log(title = "机械合同进度结算", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdSettlementOfJixieContractService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,173 @@
package org.dromara.xzd.settlement.jixiehetongjiesuan.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_settlement_of_jixie_contract
*
* @author Lion Li
* @date 2025-11-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_settlement_of_jixie_contract")
public class XzdSettlementOfJixieContract extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 单据编码
*/
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编码
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 统计周期
*/
private String statisticPeriod;
/**
* 计量开始
*/
private LocalDate measurementStart;
/**
* 项目
*/
private Long project;
/**
* 审批金额
*/
private Long approvalAmount;
/**
* 计量结束
*/
private LocalDate measurementEnd;
/**
* 结算单位
*/
private BigDecimal settlementUnit;
/**
* 合同金额
*/
private BigDecimal contractAmount;
/**
* 累计结算金额(含本期)
*/
private BigDecimal cumulativeSettlementAmountIncludeCurrent;
/**
* 累计结算金额(不含本期)
*/
private BigDecimal cumulativeSettlementNotAmountIncludeCurrent;
/**
* 本次结算比例
*/
private BigDecimal currentSettlementRatio;
/**
* 截止本期结算比例
*/
private BigDecimal settlementRatioUntilCurrent;
/**
* 已结算比例(不含本期)
*/
private BigDecimal settlementRatioExcludeCurrent;
/**
* 备注
*/
private String remarks;
/**
* 合同含税金额
*/
private BigDecimal contractTaxInclusiveAmount;
/**
* 合同不含税金额
*/
private BigDecimal contractTaxExclusiveAmount;
/**
* 累计结算金额
*/
private BigDecimal cumulativeSettlementAmount;
/**
* 本期扣款金额
*/
private BigDecimal currentDeductionAmount;
/**
* 本期奖励金额
*/
private BigDecimal currentRewardAmount;
/**
* 实时刷新 1选择 0未选
*/
private String realtimeRefresh;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
/**
* 组织id
*/
private Long deptId;
}

View File

@ -0,0 +1,194 @@
package org.dromara.xzd.settlement.jixiehetongjiesuan.domain.bo;
import org.dromara.xzd.settlement.domain.bo.XzdAlterationInventoryBo;
import org.dromara.xzd.settlement.domain.bo.XzdContractInventoryBo;
import org.dromara.xzd.settlement.domain.bo.XzdJsDeductionItemsBo;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.XzdSettlementOfJixieContract;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 机械合同进度结算业务对象 xzd_settlement_of_jixie_contract
*
* @author Lion Li
* @date 2025-11-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdSettlementOfJixieContract.class, reverseConvertGenerate = false)
public class XzdSettlementOfJixieContractBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 单据编码
*/
private String documentCode;
/**
* 标题
*/
@NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
/**
* 单据日期
*/
@NotNull(message = "单据日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate documentDate;
/**
* 合同编码
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 统计周期
*/
@NotBlank(message = "统计周期不能为空", groups = { AddGroup.class, EditGroup.class })
private String statisticPeriod;
/**
* 计量开始
*/
private LocalDate measurementStart;
/**
* 项目
*/
private Long project;
/**
* 审批金额
*/
@NotNull(message = "审批金额不能为空", groups = { AddGroup.class, EditGroup.class })
private Long approvalAmount;
/**
* 计量结束
*/
private LocalDate measurementEnd;
/**
* 结算单位
*/
private BigDecimal settlementUnit;
/**
* 合同金额
*/
private BigDecimal contractAmount;
/**
* 累计结算金额(含本期)
*/
private BigDecimal cumulativeSettlementAmountIncludeCurrent;
/**
* 累计结算金额(不含本期)
*/
private BigDecimal cumulativeSettlementNotAmountIncludeCurrent;
/**
* 本次结算比例
*/
private BigDecimal currentSettlementRatio;
/**
* 截止本期结算比例
*/
private BigDecimal settlementRatioUntilCurrent;
/**
* 已结算比例(不含本期)
*/
private BigDecimal settlementRatioExcludeCurrent;
/**
* 备注
*/
private String remarks;
/**
* 合同含税金额
*/
private BigDecimal contractTaxInclusiveAmount;
/**
* 合同不含税金额
*/
private BigDecimal contractTaxExclusiveAmount;
/**
* 累计结算金额
*/
private BigDecimal cumulativeSettlementAmount;
/**
* 本期扣款金额
*/
private BigDecimal currentDeductionAmount;
/**
* 本期奖励金额
*/
private BigDecimal currentRewardAmount;
/**
* 实时刷新 1选择 0未选
*/
private String realtimeRefresh;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
/**
* 组织id
*/
private Long deptId;
private LocalDate startDate;
private LocalDate endDate;
// 奖惩与扣款
private List<XzdJsDeductionItemsBo> jlykk;
// 合同内清单
private List<XzdContractInventoryBo> htnqd;
// 变更增加清单
private List<XzdAlterationInventoryBo> bgzjqd;
// 合同外清单
private List<XzdContractInventoryBo> htwqd;
}

View File

@ -0,0 +1,252 @@
package org.dromara.xzd.settlement.jixiehetongjiesuan.domain.vo;
import java.math.BigDecimal;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.XzdEquipmentLeasing;
import org.dromara.xzd.settlement.domain.vo.XzdAlterationInventoryVo;
import org.dromara.xzd.settlement.domain.vo.XzdContractInventoryVo;
import org.dromara.xzd.settlement.domain.vo.XzdJsDeductionItemsVo;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.XzdSettlementOfJixieContract;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 机械合同进度结算视图对象 xzd_settlement_of_jixie_contract
*
* @author Lion Li
* @date 2025-11-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdSettlementOfJixieContract.class)
public class XzdSettlementOfJixieContractVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 单据编码
*/
@ExcelProperty(value = "单据编码")
private String documentCode;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate documentDate;
/**
* 合同编码
*/
@ExcelProperty(value = "合同编码")
private Long contractCode;
/**
* 合同编码名称
*/
@ExcelProperty(value = "合同编码名称")
@Translation(type = TransConstant.XZD_PURCHASE_JXXIE_ID_TO_NAME, mapper = "contractCode")
private String contractCodeName;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 统计周期
*/
@ExcelProperty(value = "统计周期")
private String statisticPeriod;
/**
* 计量开始
*/
@ExcelProperty(value = "计量开始")
private LocalDate measurementStart;
/**
* 项目
*/
@ExcelProperty(value = "项目")
private Long project;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
@Translation(type = TransConstant.XZD_PROJECT_ID_TO_NAME, mapper = "project")
private String projectName;
/**
* 审批金额
*/
@ExcelProperty(value = "审批金额")
private Long approvalAmount;
/**
* 计量结束
*/
@ExcelProperty(value = "计量结束")
private LocalDate measurementEnd;
/**
* 结算单位
*/
@ExcelProperty(value = "结算单位 ")
private BigDecimal settlementUnit;
/**
* 结算单位 客户信息名称
*/
@ExcelProperty(value = "结算单位 ")
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "settlementUnit")
private String settlementUnitName;
/**
* 合同金额
*/
@ExcelProperty(value = "合同金额")
private BigDecimal contractAmount;
/**
* 累计结算金额(含本期)
*/
@ExcelProperty(value = "累计结算金额(含本期)")
private BigDecimal cumulativeSettlementAmountIncludeCurrent;
/**
* 累计结算金额(不含本期)
*/
@ExcelProperty(value = "累计结算金额(不含本期)")
private BigDecimal cumulativeSettlementNotAmountIncludeCurrent;
/**
* 本次结算比例
*/
@ExcelProperty(value = "本次结算比例")
private BigDecimal currentSettlementRatio;
/**
* 截止本期结算比例
*/
@ExcelProperty(value = "截止本期结算比例")
private BigDecimal settlementRatioUntilCurrent;
/**
* 已结算比例(不含本期)
*/
@ExcelProperty(value = "已结算比例(不含本期)")
private BigDecimal settlementRatioExcludeCurrent;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remarks;
/**
* 合同含税金额
*/
@ExcelProperty(value = "合同含税金额")
private BigDecimal contractTaxInclusiveAmount;
/**
* 合同不含税金额
*/
@ExcelProperty(value = "合同不含税金额")
private BigDecimal contractTaxExclusiveAmount;
/**
* 累计结算金额
*/
@ExcelProperty(value = "累计结算金额")
private BigDecimal cumulativeSettlementAmount;
/**
* 本期扣款金额
*/
@ExcelProperty(value = "本期扣款金额")
private BigDecimal currentDeductionAmount;
/**
* 本期奖励金额
*/
@ExcelProperty(value = "本期奖励金额")
private BigDecimal currentRewardAmount;
/**
* 实时刷新 1选择 0未选
*/
@ExcelProperty(value = "实时刷新 1选择 0未选")
private String realtimeRefresh;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
/**
* 组织id
*/
@ExcelProperty(value = "组织id")
private Long deptId;
// 奖惩与扣款
private List<XzdJsDeductionItemsVo> jlykk;
// 合同内清单
private List<XzdContractInventoryVo> htnqd;
// 变更增加清单
private List<XzdAlterationInventoryVo> bgzjqd;
// 合同外清单
private List<XzdContractInventoryVo> htwqd;
/**
* 设备租聘列表
*/
private List<XzdEquipmentLeasing> jqlist;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.settlement.jixiehetongjiesuan.mapper;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.XzdSettlementOfJixieContract;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.vo.XzdSettlementOfJixieContractVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械合同进度结算Mapper接口
*
* @author Lion Li
* @date 2025-11-19
*/
public interface XzdSettlementOfJixieContractMapper extends BaseMapperPlus<XzdSettlementOfJixieContract, XzdSettlementOfJixieContractVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.settlement.jixiehetongjiesuan.service;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.vo.XzdSettlementOfJixieContractVo;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.bo.XzdSettlementOfJixieContractBo;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.XzdSettlementOfJixieContract;
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-11-19
*/
public interface IXzdSettlementOfJixieContractService extends IService<XzdSettlementOfJixieContract>{
/**
* 查询机械合同进度结算
*
* @param id 主键
* @return 机械合同进度结算
*/
XzdSettlementOfJixieContractVo queryById(Long id);
/**
* 分页查询机械合同进度结算列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械合同进度结算分页列表
*/
TableDataInfo<XzdSettlementOfJixieContractVo> queryPageList(XzdSettlementOfJixieContractBo bo, PageQuery pageQuery);
/**
* 查询符合条件的机械合同进度结算列表
*
* @param bo 查询条件
* @return 机械合同进度结算列表
*/
List<XzdSettlementOfJixieContractVo> queryList(XzdSettlementOfJixieContractBo bo);
/**
* 新增机械合同进度结算
*
* @param bo 机械合同进度结算
* @return 是否新增成功
*/
Boolean insertByBo(XzdSettlementOfJixieContractBo bo);
/**
* 修改机械合同进度结算
*
* @param bo 机械合同进度结算
* @return 是否修改成功
*/
Boolean updateByBo(XzdSettlementOfJixieContractBo bo);
/**
* 校验并批量删除机械合同进度结算信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,402 @@
package org.dromara.xzd.settlement.jixiehetongjiesuan.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.ProcessDeleteEvent;
import org.dromara.common.core.domain.event.ProcessEvent;
import org.dromara.common.core.domain.event.ProcessTaskEvent;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.domain.vo.XzdSubcontractVo;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.service.IXzdSubcontractService;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.XzdEquipmentLeasing;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.service.IXzdEquipmentLeasingService;
import org.dromara.xzd.enums.XzdClassEnum;
import org.dromara.xzd.enums.ZxdEnum;
import org.dromara.xzd.settlement.domain.XzdAlterationInventory;
import org.dromara.xzd.settlement.domain.XzdContractInventory;
import org.dromara.xzd.settlement.domain.XzdJsDeductionItems;
import org.dromara.xzd.settlement.domain.bo.XzdAlterationInventoryBo;
import org.dromara.xzd.settlement.domain.bo.XzdContractInventoryBo;
import org.dromara.xzd.settlement.domain.bo.XzdJsDeductionItemsBo;
import org.dromara.xzd.settlement.domain.vo.XzdAlterationInventoryVo;
import org.dromara.xzd.settlement.domain.vo.XzdContractInventoryVo;
import org.dromara.xzd.settlement.domain.vo.XzdJsDeductionItemsVo;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.SettlementOfSubcontractingContract;
import org.dromara.xzd.settlement.fenbaohetongjingdu.domain.vo.SettlementOfSubcontractingContractVo;
import org.dromara.xzd.settlement.service.IXzdAlterationInventoryService;
import org.dromara.xzd.settlement.service.IXzdContractInventoryService;
import org.dromara.xzd.settlement.service.IXzdJsDeductionItemsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.bo.XzdSettlementOfJixieContractBo;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.vo.XzdSettlementOfJixieContractVo;
import org.dromara.xzd.settlement.jixiehetongjiesuan.domain.XzdSettlementOfJixieContract;
import org.dromara.xzd.settlement.jixiehetongjiesuan.mapper.XzdSettlementOfJixieContractMapper;
import org.dromara.xzd.settlement.jixiehetongjiesuan.service.IXzdSettlementOfJixieContractService;
import java.util.*;
/**
* 机械合同进度结算Service业务层处理
*
* @author Lion Li
* @date 2025-11-19
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class XzdSettlementOfJixieContractServiceImpl extends ServiceImpl<XzdSettlementOfJixieContractMapper, XzdSettlementOfJixieContract> implements IXzdSettlementOfJixieContractService {
private final XzdSettlementOfJixieContractMapper baseMapper;
private final IXzdSubcontractService iXzdSubcontractService;
@Autowired
private IXzdJsDeductionItemsService deductionItemsService;
private final IXzdContractInventoryService iXzdContractInventoryService;
private final IXzdAlterationInventoryService iXzdAlterationInventoryService;
@Autowired
private SysOssServiceImpl sysOssService;
private final IXzdEquipmentLeasingService xzdEquipmentLeasingService;
/**
* 查询机械合同进度结算
*
* @param id 主键
* @return 机械合同进度结算
*/
@Override
public XzdSettlementOfJixieContractVo queryById(Long id){
XzdSettlementOfJixieContractVo vo = baseMapper.selectVoById(id);
saveValue(vo);
return vo;
}
private void saveValue(XzdSettlementOfJixieContractVo item) {
// 机械
List<XzdEquipmentLeasing> xzdEquipmentLeasings = xzdEquipmentLeasingService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdEquipmentLeasing>().eq(XzdEquipmentLeasing::getRelevanceId, item.getContractCode()));
if (xzdEquipmentLeasings != null && xzdEquipmentLeasings.size() > 0) {
item.setJqlist(xzdEquipmentLeasings);
}
// 合同内清单
List<XzdContractInventory> xzdContractInventories = iXzdContractInventoryService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdContractInventory>().eq(XzdContractInventory::getPrimaryMeterId, item.getId()).eq(XzdContractInventory::getType, ZxdEnum.HETONGLEIXINGNEI.getTypeValue()));
if (xzdContractInventories != null && xzdContractInventories.size() > 0) {
item.setHtnqd(MapstructUtils.convert(xzdContractInventories, XzdContractInventoryVo.class));
}
// 合同外清单
List<XzdContractInventory> xzdContractInventories1 = iXzdContractInventoryService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdContractInventory>().eq(XzdContractInventory::getPrimaryMeterId, item.getId()).eq(XzdContractInventory::getType, ZxdEnum.HETONGLEIXING.getTypeValue()));
if (xzdContractInventories1 != null && xzdContractInventories1.size() > 0) {
item.setHtwqd(MapstructUtils.convert(xzdContractInventories1, XzdContractInventoryVo.class));
}
// 变更清单
List<XzdAlterationInventory> temp = iXzdAlterationInventoryService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdAlterationInventory>().eq(XzdAlterationInventory::getPrimaryMeterId, item.getId()));
if (temp != null && temp.size() > 0){
item.setBgzjqd(MapstructUtils.convert(temp, XzdAlterationInventoryVo.class));
}
// 奖惩
List<XzdJsDeductionItems> xzdJsDeductionItems = deductionItemsService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdJsDeductionItems>().eq(XzdJsDeductionItems::getMainDocId, item.getId()));
if (xzdJsDeductionItems != null && xzdJsDeductionItems.size() > 0) {
item.setJlykk(MapstructUtils.convert(xzdJsDeductionItems, XzdJsDeductionItemsVo.class));
}
}
/**
* 分页查询机械合同进度结算列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械合同进度结算分页列表
*/
@Override
public TableDataInfo<XzdSettlementOfJixieContractVo> queryPageList(XzdSettlementOfJixieContractBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSettlementOfJixieContract> lqw = buildQueryWrapper(bo);
Page<XzdSettlementOfJixieContractVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的机械合同进度结算列表
*
* @param bo 查询条件
* @return 机械合同进度结算列表
*/
@Override
public List<XzdSettlementOfJixieContractVo> queryList(XzdSettlementOfJixieContractBo bo) {
LambdaQueryWrapper<XzdSettlementOfJixieContract> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdSettlementOfJixieContract> buildQueryWrapper(XzdSettlementOfJixieContractBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdSettlementOfJixieContract> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdSettlementOfJixieContract::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), XzdSettlementOfJixieContract::getDocumentCode, bo.getDocumentCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), XzdSettlementOfJixieContract::getTitle, bo.getTitle());
lqw.ge(bo.getStartDate() != null, XzdSettlementOfJixieContract::getDocumentDate, bo.getStartDate());
lqw.le(bo.getEndDate() != null, XzdSettlementOfJixieContract::getDocumentDate, bo.getEndDate());
lqw.eq(bo.getDocumentDate() != null, XzdSettlementOfJixieContract::getDocumentDate, bo.getDocumentDate());
lqw.eq(bo.getContractCode() != null, XzdSettlementOfJixieContract::getContractCode, bo.getContractCode());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdSettlementOfJixieContract::getContractName, bo.getContractName());
lqw.eq(StringUtils.isNotBlank(bo.getStatisticPeriod()), XzdSettlementOfJixieContract::getStatisticPeriod, bo.getStatisticPeriod());
lqw.eq(bo.getMeasurementStart() != null, XzdSettlementOfJixieContract::getMeasurementStart, bo.getMeasurementStart());
lqw.eq(bo.getProject() != null, XzdSettlementOfJixieContract::getProject, bo.getProject());
lqw.eq(bo.getApprovalAmount() != null, XzdSettlementOfJixieContract::getApprovalAmount, bo.getApprovalAmount());
lqw.eq(bo.getMeasurementEnd() != null, XzdSettlementOfJixieContract::getMeasurementEnd, bo.getMeasurementEnd());
lqw.eq(bo.getSettlementUnit() != null, XzdSettlementOfJixieContract::getSettlementUnit, bo.getSettlementUnit());
lqw.eq(bo.getContractAmount() != null, XzdSettlementOfJixieContract::getContractAmount, bo.getContractAmount());
lqw.eq(bo.getCumulativeSettlementAmountIncludeCurrent() != null, XzdSettlementOfJixieContract::getCumulativeSettlementAmountIncludeCurrent, bo.getCumulativeSettlementAmountIncludeCurrent());
lqw.eq(bo.getCumulativeSettlementNotAmountIncludeCurrent() != null, XzdSettlementOfJixieContract::getCumulativeSettlementNotAmountIncludeCurrent, bo.getCumulativeSettlementNotAmountIncludeCurrent());
lqw.eq(bo.getCurrentSettlementRatio() != null, XzdSettlementOfJixieContract::getCurrentSettlementRatio, bo.getCurrentSettlementRatio());
lqw.eq(bo.getSettlementRatioUntilCurrent() != null, XzdSettlementOfJixieContract::getSettlementRatioUntilCurrent, bo.getSettlementRatioUntilCurrent());
lqw.eq(bo.getSettlementRatioExcludeCurrent() != null, XzdSettlementOfJixieContract::getSettlementRatioExcludeCurrent, bo.getSettlementRatioExcludeCurrent());
lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), XzdSettlementOfJixieContract::getRemarks, bo.getRemarks());
lqw.eq(bo.getContractTaxInclusiveAmount() != null, XzdSettlementOfJixieContract::getContractTaxInclusiveAmount, bo.getContractTaxInclusiveAmount());
lqw.eq(bo.getContractTaxExclusiveAmount() != null, XzdSettlementOfJixieContract::getContractTaxExclusiveAmount, bo.getContractTaxExclusiveAmount());
lqw.eq(bo.getCumulativeSettlementAmount() != null, XzdSettlementOfJixieContract::getCumulativeSettlementAmount, bo.getCumulativeSettlementAmount());
lqw.eq(bo.getCurrentDeductionAmount() != null, XzdSettlementOfJixieContract::getCurrentDeductionAmount, bo.getCurrentDeductionAmount());
lqw.eq(bo.getCurrentRewardAmount() != null, XzdSettlementOfJixieContract::getCurrentRewardAmount, bo.getCurrentRewardAmount());
lqw.eq(StringUtils.isNotBlank(bo.getRealtimeRefresh()), XzdSettlementOfJixieContract::getRealtimeRefresh, bo.getRealtimeRefresh());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdSettlementOfJixieContract::getFileId, bo.getFileId());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), XzdSettlementOfJixieContract::getAuditStatus, bo.getAuditStatus());
lqw.eq(bo.getDeptId() != null, XzdSettlementOfJixieContract::getDeptId, bo.getDeptId());
return lqw;
}
/**
* 新增机械合同进度结算
*
* @param bo 机械合同进度结算
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdSettlementOfJixieContractBo bo) {
XzdSettlementOfJixieContract add = MapstructUtils.convert(bo, XzdSettlementOfJixieContract.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("JXHTJD-");
add.setDocumentCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
// 合同内清单
List<XzdContractInventoryBo> htnqd = bo.getHtnqd();
if (htnqd != null && htnqd.size() > 0) {
htnqd.forEach(temp ->{
temp.setContractType(ZxdEnum.JIXIEHTTONG.getTypeValue());
temp.setType(ZxdEnum.HETONGLEIXINGNEI.getTypeValue());
temp.setPrimaryMeterId(add.getId());
});
iXzdContractInventoryService.saveBatch(MapstructUtils.convert(htnqd, XzdContractInventory.class));
}
// 合同外清单
List<XzdContractInventoryBo> htwqd = bo.getHtwqd();
if (htwqd != null && htwqd.size() > 0) {
htwqd.forEach(temp ->{
temp.setContractType(ZxdEnum.JIXIEHTTONG.getTypeValue());
temp.setType(ZxdEnum.HETONGLEIXING.getTypeValue());
temp.setPrimaryMeterId(add.getId());
});
iXzdContractInventoryService.saveBatch(MapstructUtils.convert(htwqd, XzdContractInventory.class));
}
// 变更清单
List<XzdAlterationInventoryBo> bgzjqd = bo.getBgzjqd();
if (bgzjqd != null && bgzjqd.size() > 0) {
bgzjqd.forEach(temp ->{
temp.setContractType(ZxdEnum.JIXIEHTTONG.getTypeValue());
temp.setPrimaryMeterId(add.getId());
});
iXzdAlterationInventoryService.saveBatch(MapstructUtils.convert(bgzjqd, XzdAlterationInventory.class));
}
// 奖惩
String tableName = XzdClassEnum.JIXIEHTTONG_JINDUJS.getClassName();
List<XzdJsDeductionItemsBo> jlykk = bo.getJlykk();
if (jlykk != null && jlykk.size() > 0){
jlykk.forEach(temp ->{
temp.setTableName(tableName);
temp.setMainDocId(add.getId());
});
deductionItemsService.saveBatch(MapstructUtils.convert(jlykk, XzdJsDeductionItems.class));
}
return flag;
}
/**
* 修改机械合同进度结算
*
* @param bo 机械合同进度结算
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdSettlementOfJixieContractBo bo) {
XzdSettlementOfJixieContract update = MapstructUtils.convert(bo, XzdSettlementOfJixieContract.class);
validEntityBeforeSave(update);
// 变更清单
iXzdAlterationInventoryService.getBaseMapper().delete(new LambdaQueryWrapper<XzdAlterationInventory>().eq(XzdAlterationInventory::getPrimaryMeterId, bo.getId()));
List<XzdAlterationInventoryBo> bgzjqd = bo.getBgzjqd();
if (bgzjqd != null && bgzjqd.size() > 0) {
bgzjqd.forEach(temp ->{
temp.setContractType(ZxdEnum.JIXIEHTTONG.getTypeValue());
temp.setPrimaryMeterId(update.getId());
});
iXzdAlterationInventoryService.saveBatch(MapstructUtils.convert(bgzjqd, XzdAlterationInventory.class));
}
// 合同内清单
List<XzdContractInventoryBo> htnqd = bo.getHtnqd();
iXzdContractInventoryService.getBaseMapper().delete(new LambdaQueryWrapper<XzdContractInventory>().eq(XzdContractInventory::getPrimaryMeterId, bo.getId()).eq(XzdContractInventory::getContractType, ZxdEnum.HETONGLEIXINGNEI.getTypeValue()));
if (htnqd != null && htnqd.size() > 0) {
htnqd.forEach(temp ->{
temp.setContractType(ZxdEnum.JIXIEHTTONG.getTypeValue());
temp.setType(ZxdEnum.HETONGLEIXINGNEI.getTypeValue());
temp.setPrimaryMeterId(update.getId());
});
iXzdContractInventoryService.saveBatch(MapstructUtils.convert(htnqd, XzdContractInventory.class));
}
// 合同外清单
List<XzdContractInventoryBo> htwqd = bo.getHtwqd();
iXzdContractInventoryService.getBaseMapper().delete(new LambdaQueryWrapper<XzdContractInventory>().eq(XzdContractInventory::getPrimaryMeterId, bo.getId()).eq(XzdContractInventory::getContractType,ZxdEnum.HETONGLEIXING.getTypeValue()));
if (htwqd != null && htwqd.size() > 0) {
htwqd.forEach(temp ->{
temp.setContractType(ZxdEnum.JIXIEHTTONG.getTypeValue());
temp.setType(ZxdEnum.HETONGLEIXING.getTypeValue());
temp.setPrimaryMeterId(update.getId());
});
iXzdContractInventoryService.saveBatch(MapstructUtils.convert(htwqd, XzdContractInventory.class));
}
// 奖惩
String tableName = XzdClassEnum.JIXIEHTTONG_JINDUJS.getClassName();
List<XzdJsDeductionItemsBo> jlykk = bo.getJlykk();
HashMap<String, Object> tempMap = new HashMap<>();
tempMap.put("main_doc_id", update.getId());
deductionItemsService.getBaseMapper().deleteByMap(tempMap);
if (jlykk != null && jlykk.size() > 0){
jlykk.forEach(temp ->{
temp.setTableName(tableName);
temp.setMainDocId(update.getId());
});
deductionItemsService.saveBatch(MapstructUtils.convert(jlykk, XzdJsDeductionItems.class));
}
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdSettlementOfJixieContract entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除机械合同进度结算信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids) {
XzdSettlementOfJixieContractVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> deleteIds = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
}
}
}
iXzdAlterationInventoryService.getBaseMapper().delete(new LambdaQueryWrapper<XzdAlterationInventory>().in(XzdAlterationInventory::getPrimaryMeterId, ids));
// 合同内清单
iXzdContractInventoryService.getBaseMapper().delete(new LambdaQueryWrapper<XzdContractInventory>().in (XzdContractInventory::getPrimaryMeterId, ids));
deductionItemsService.remove(new LambdaQueryWrapper<XzdJsDeductionItems>().in(XzdJsDeductionItems::getMainDocId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
* 正常使用只需#processEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('xzdjxhtjdjs')")
public void processPlansHandlErequipmentList(ProcessEvent processEvent) {
log.info("机械合同进度结算审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
XzdSettlementOfJixieContract vo = baseMapper.selectById(Long.valueOf(id));
if (vo == null) {
return;
}
vo.setAuditStatus(processEvent.getStatus());
this.updateById(vo);
}
/**
* 执行任务创建监听
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
* 在方法中判断流程节点key
* if ("xxx".equals(processTaskEvent.getNodeCode())) {
* //执行业务逻辑
* }
*
* @param processTaskEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processTaskEvent.flowCode.endsWith('xzdjxhtjdjs')")
public void processTaskPlansHandlerEquipmentList(ProcessTaskEvent processTaskEvent) {
log.info("机械合同进度结算审核任务创建了{}", processTaskEvent.toString());
}
/**
* 监听删除流程事件
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processDeleteEvent 参数
*/
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('xzdjxhtjdjs')")
public void processDeletePlansHandlerEquipmentList(ProcessDeleteEvent processDeleteEvent) {
log.info("机械合同进度结算删除流程事件,机械合同进度结算审核任务执行了{}", processDeleteEvent.toString());
}
}

View File

@ -0,0 +1,136 @@
package org.dromara.xzd.settlement.jixiehetongjungong.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.bo.XzdContractMachineryBo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.vo.XzdContractMachineryVo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.service.IXzdContractMachineryService;
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.settlement.jixiehetongjungong.domain.vo.XzdSettlementOfJixieCompletionVo;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.bo.XzdSettlementOfJixieCompletionBo;
import org.dromara.xzd.settlement.jixiehetongjungong.service.IXzdSettlementOfJixieCompletionService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 机械合同竣工结算
*
* @author Lion Li
* @date 2025-11-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/jixiehetongjungong/settlementOfJixieCompletion")
public class XzdSettlementOfJixieCompletionController extends BaseController {
private final IXzdSettlementOfJixieCompletionService xzdSettlementOfJixieCompletionService;
private final IXzdContractMachineryService xzdContractMachineryService;
/**
* 查询机械合同信息列表
*/
@SaCheckPermission(value = {"jixiehetongjungong:settlementOfJixieCompletion:add","jixiehetongjungong:settlementOfJixieCompletion:edit","jixiehetongjungong:settlementOfJixieCompletion:list"},mode = SaMode.OR)
@GetMapping("/getlist")
public TableDataInfo<XzdContractMachineryVo> list(XzdContractMachineryBo bo, PageQuery pageQuery) {
return xzdContractMachineryService.queryPageList(bo, pageQuery);
}
/**
* 获取机械合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"jixiehetongjungong:settlementOfJixieCompletion:add","jixiehetongjungong:settlementOfJixieCompletion:edit","jixiehetongjungong:settlementOfJixieCompletion:list"},mode = SaMode.OR)
@GetMapping("/jxht/{id}")
public R<XzdContractMachineryVo> getInfojx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdContractMachineryService.queryById(id));
}
/**
* 查询机械合同竣工结算列表
*/
@SaCheckPermission("jixiehetongjungong:settlementOfJixieCompletion:list")
@GetMapping("/list")
public TableDataInfo<XzdSettlementOfJixieCompletionVo> list(XzdSettlementOfJixieCompletionBo bo, PageQuery pageQuery) {
return xzdSettlementOfJixieCompletionService.queryPageList(bo, pageQuery);
}
/**
* 导出机械合同竣工结算列表
*/
@SaCheckPermission("jixiehetongjungong:settlementOfJixieCompletion:export")
@Log(title = "机械合同竣工结算", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdSettlementOfJixieCompletionBo bo, HttpServletResponse response) {
List<XzdSettlementOfJixieCompletionVo> list = xzdSettlementOfJixieCompletionService.queryList(bo);
ExcelUtil.exportExcel(list, "机械合同竣工结算", XzdSettlementOfJixieCompletionVo.class, response);
}
/**
* 获取机械合同竣工结算详细信息
*
* @param id 主键
*/
@SaCheckPermission("jixiehetongjungong:settlementOfJixieCompletion:query")
@GetMapping("/{id}")
public R<XzdSettlementOfJixieCompletionVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSettlementOfJixieCompletionService.queryById(id));
}
/**
* 新增机械合同竣工结算
*/
@SaCheckPermission("jixiehetongjungong:settlementOfJixieCompletion:add")
@Log(title = "机械合同竣工结算", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdSettlementOfJixieCompletionBo bo) {
return toAjax(xzdSettlementOfJixieCompletionService.insertByBo(bo));
}
/**
* 修改机械合同竣工结算
*/
@SaCheckPermission("jixiehetongjungong:settlementOfJixieCompletion:edit")
@Log(title = "机械合同竣工结算", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdSettlementOfJixieCompletionBo bo) {
return toAjax(xzdSettlementOfJixieCompletionService.updateByBo(bo));
}
/**
* 删除机械合同竣工结算
*
* @param ids 主键串
*/
@SaCheckPermission("jixiehetongjungong:settlementOfJixieCompletion:remove")
@Log(title = "机械合同竣工结算", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdSettlementOfJixieCompletionService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,183 @@
package org.dromara.xzd.settlement.jixiehetongjungong.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_settlement_of_jixie_completion
*
* @author Lion Li
* @date 2025-11-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_settlement_of_jixie_completion")
public class XzdSettlementOfJixieCompletion extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 单据编号
*/
private String documentCode;
/**
* 标题
*/
private String title;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同编号
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 审定总价
*/
private BigDecimal approvedTotalPrice;
/**
* 审定日期
*/
private LocalDate approvedDate;
/**
* 工程项目
*/
private Long engineeringProject;
/**
* 经营模式
*/
private String businessModel;
/**
* 甲方单位
*/
private Long partyAUnit;
/**
* 乙方单位
*/
private Long partyBUnit;
/**
* 累计已结金额
*/
private BigDecimal cumulativeSettledAmount;
/**
* 累计已付金额
*/
private BigDecimal cumulativePaidAmount;
/**
* 已付比例
*/
private BigDecimal paidRatio;
/**
* 支付条款
*/
private String paymentTerms;
/**
* 本期应付金额
*/
private BigDecimal currentPayableAmount;
/**
* 应付日期
*/
private LocalDate payableDate;
/**
* 竣工日期
*/
private LocalDate completionDate;
/**
* 警示
*/
private String warning;
/**
* 备注
*/
private String remarks;
/**
* 本期决算总额
*/
private BigDecimal currentFinalSettlementAmount;
/**
* 业主单位 客户
*/
private Long ownerUnit;
/**
* 监理单位 客户
*/
private Long supervisionUnit;
/**
* 施工单位 客户
*/
private Long constructionUnit;
/**
* 审核单位 客户
*/
private Long auditUnit;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
/**
* 组织id
*/
private Long deptId;
/**
* 合同文本
*/
private String contractText;
}

View File

@ -0,0 +1,201 @@
package org.dromara.xzd.settlement.jixiehetongjungong.domain.bo;
import org.dromara.xzd.domain.bo.XzdJsqdTzBo;
import org.dromara.xzd.settlement.domain.bo.XzdJsDeductionItemsBo;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.XzdSettlementOfJixieCompletion;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 机械合同竣工结算业务对象 xzd_settlement_of_jixie_completion
*
* @author Lion Li
* @date 2025-11-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdSettlementOfJixieCompletion.class, reverseConvertGenerate = false)
public class XzdSettlementOfJixieCompletionBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 单据编号
*/
private String documentCode;
/**
* 标题
*/
@NotBlank(message = "标题不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
/**
* 单据日期
*/
@NotNull(message = "单据日期不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate documentDate;
/**
* 合同编号
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 审定总价
*/
private BigDecimal approvedTotalPrice;
/**
* 审定日期
*/
private LocalDate approvedDate;
/**
* 工程项目
*/
private Long engineeringProject;
/**
* 经营模式
*/
private String businessModel;
/**
* 甲方单位
*/
private Long partyAUnit;
/**
* 乙方单位
*/
private Long partyBUnit;
/**
* 累计已结金额
*/
private BigDecimal cumulativeSettledAmount;
/**
* 累计已付金额
*/
private BigDecimal cumulativePaidAmount;
/**
* 已付比例
*/
private BigDecimal paidRatio;
/**
* 支付条款
*/
private String paymentTerms;
/**
* 本期应付金额
*/
private BigDecimal currentPayableAmount;
/**
* 应付日期
*/
private LocalDate payableDate;
/**
* 竣工日期
*/
private LocalDate completionDate;
/**
* 警示
*/
private String warning;
/**
* 备注
*/
private String remarks;
/**
* 本期决算总额
*/
private BigDecimal currentFinalSettlementAmount;
/**
* 业主单位 客户
*/
private Long ownerUnit;
/**
* 监理单位 客户
*/
private Long supervisionUnit;
/**
* 施工单位 客户
*/
private Long constructionUnit;
/**
* 审核单位 客户
*/
private Long auditUnit;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
/**
* 组织id
*/
private Long deptId;
/**
* 合同文本
*/
private String contractText;
private LocalDate startTime;
private LocalDate endTime;
/**
* 决算调整清单
*/
private List<XzdJsqdTzBo> jstzqd;
// 奖惩与扣款
private List<XzdJsDeductionItemsBo> jlykk;
}

View File

@ -0,0 +1,261 @@
package org.dromara.xzd.settlement.jixiehetongjungong.domain.vo;
import java.math.BigDecimal;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.domain.vo.XzdJsqdTzVo;
import org.dromara.xzd.settlement.domain.vo.XzdJsDeductionItemsVo;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.XzdSettlementOfJixieCompletion;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 机械合同竣工结算视图对象 xzd_settlement_of_jixie_completion
*
* @author Lion Li
* @date 2025-11-19
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdSettlementOfJixieCompletion.class)
public class XzdSettlementOfJixieCompletionVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 单据编号
*/
@ExcelProperty(value = "单据编号")
private String documentCode;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String title;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate documentDate;
/**
* 合同编号
*/
@ExcelProperty(value = "合同编号")
private Long contractCode;
/**
* 合同编号名称
*/
@ExcelProperty(value = "合同编号名称")
@Translation(type = TransConstant.XZD_PURCHASE_JXXIE_ID_TO_NAME, mapper = "contractCode")
private String contractCodeName;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 审定总价
*/
@ExcelProperty(value = "审定总价")
private BigDecimal approvedTotalPrice;
/**
* 审定日期
*/
@ExcelProperty(value = "审定日期")
private LocalDate approvedDate;
/**
* 工程项目
*/
@ExcelProperty(value = "工程项目")
private Long engineeringProject;
/**
* 工程项目名称
*/
@ExcelProperty(value = "工程项目名称")
@Translation(type = TransConstant.XZD_PROJECT_ID_TO_NAME, mapper = "engineeringProject")
private String engineeringProjectName;
/**
* 经营模式
*/
@ExcelProperty(value = "经营模式")
private String businessModel;
/**
* 甲方单位
*/
@ExcelProperty(value = "甲方单位")
private Long partyAUnit;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "partyAUnit")
private String partyAUnitName;
/**
* 乙方单位
*/
@ExcelProperty(value = "乙方单位")
private Long partyBUnit;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "partyBUnit")
private String partyBUnitName;
/**
* 累计已结金额
*/
@ExcelProperty(value = "累计已结金额")
private BigDecimal cumulativeSettledAmount;
/**
* 累计已付金额
*/
@ExcelProperty(value = "累计已付金额")
private BigDecimal cumulativePaidAmount;
/**
* 已付比例
*/
@ExcelProperty(value = "已付比例")
private BigDecimal paidRatio;
/**
* 支付条款
*/
@ExcelProperty(value = "支付条款")
private String paymentTerms;
/**
* 本期应付金额
*/
@ExcelProperty(value = "本期应付金额")
private BigDecimal currentPayableAmount;
/**
* 应付日期
*/
@ExcelProperty(value = "应付日期")
private LocalDate payableDate;
/**
* 竣工日期
*/
@ExcelProperty(value = "竣工日期")
private LocalDate completionDate;
/**
* 警示
*/
@ExcelProperty(value = "警示")
private String warning;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remarks;
/**
* 本期决算总额
*/
@ExcelProperty(value = "本期决算总额")
private BigDecimal currentFinalSettlementAmount;
/**
* 业主单位 客户
*/
@ExcelProperty(value = "业主单位 客户")
private Long ownerUnit;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "ownerUnit")
private String ownerUnitName;
/**
* 监理单位 客户
*/
@ExcelProperty(value = "监理单位 客户")
private Long supervisionUnit;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "supervisionUnit")
private String supervisionUnitName;
/**
* 施工单位 客户
*/
@ExcelProperty(value = "施工单位 客户")
private Long constructionUnit;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "constructionUnit")
private String constructionUnitName;
/**
* 审核单位 客户
*/
@ExcelProperty(value = "审核单位 客户")
private Long auditUnit;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "auditUnit")
private String auditUnitName;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
/**
* 组织id
*/
@ExcelProperty(value = "组织id")
private Long deptId;
/**
* 合同文本
*/
@ExcelProperty(value = "合同文本")
private String contractText;
/**
* 决算调整清单
*/
private List<XzdJsqdTzVo> jstzqd;
// 奖惩与扣款
private List<XzdJsDeductionItemsVo> jlykk;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.settlement.jixiehetongjungong.mapper;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.XzdSettlementOfJixieCompletion;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.vo.XzdSettlementOfJixieCompletionVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械合同竣工结算Mapper接口
*
* @author Lion Li
* @date 2025-11-19
*/
public interface XzdSettlementOfJixieCompletionMapper extends BaseMapperPlus<XzdSettlementOfJixieCompletion, XzdSettlementOfJixieCompletionVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.settlement.jixiehetongjungong.service;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.vo.XzdSettlementOfJixieCompletionVo;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.bo.XzdSettlementOfJixieCompletionBo;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.XzdSettlementOfJixieCompletion;
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-11-19
*/
public interface IXzdSettlementOfJixieCompletionService extends IService<XzdSettlementOfJixieCompletion>{
/**
* 查询机械合同竣工结算
*
* @param id 主键
* @return 机械合同竣工结算
*/
XzdSettlementOfJixieCompletionVo queryById(Long id);
/**
* 分页查询机械合同竣工结算列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械合同竣工结算分页列表
*/
TableDataInfo<XzdSettlementOfJixieCompletionVo> queryPageList(XzdSettlementOfJixieCompletionBo bo, PageQuery pageQuery);
/**
* 查询符合条件的机械合同竣工结算列表
*
* @param bo 查询条件
* @return 机械合同竣工结算列表
*/
List<XzdSettlementOfJixieCompletionVo> queryList(XzdSettlementOfJixieCompletionBo bo);
/**
* 新增机械合同竣工结算
*
* @param bo 机械合同竣工结算
* @return 是否新增成功
*/
Boolean insertByBo(XzdSettlementOfJixieCompletionBo bo);
/**
* 修改机械合同竣工结算
*
* @param bo 机械合同竣工结算
* @return 是否修改成功
*/
Boolean updateByBo(XzdSettlementOfJixieCompletionBo bo);
/**
* 校验并批量删除机械合同竣工结算信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,315 @@
package org.dromara.xzd.settlement.jixiehetongjungong.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.ProcessDeleteEvent;
import org.dromara.common.core.domain.event.ProcessEvent;
import org.dromara.common.core.domain.event.ProcessTaskEvent;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.fenbaohetongxinxi.service.IXzdSubcontractService;
import org.dromara.xzd.domain.XzdJsqdTz;
import org.dromara.xzd.domain.bo.XzdJsqdTzBo;
import org.dromara.xzd.domain.vo.XzdJsqdTzVo;
import org.dromara.xzd.enums.XzdClassEnum;
import org.dromara.xzd.enums.ZxdEnum;
import org.dromara.xzd.service.IXzdJsqdTzService;
import org.dromara.xzd.settlement.domain.XzdJsDeductionItems;
import org.dromara.xzd.settlement.domain.bo.XzdJsDeductionItemsBo;
import org.dromara.xzd.settlement.domain.vo.XzdJsDeductionItemsVo;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.SettlementOfSubcontractingCompletion;
import org.dromara.xzd.settlement.fenbaohetongjungong.domain.vo.SettlementOfSubcontractingCompletionVo;
import org.dromara.xzd.settlement.service.IXzdJsDeductionItemsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.bo.XzdSettlementOfJixieCompletionBo;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.vo.XzdSettlementOfJixieCompletionVo;
import org.dromara.xzd.settlement.jixiehetongjungong.domain.XzdSettlementOfJixieCompletion;
import org.dromara.xzd.settlement.jixiehetongjungong.mapper.XzdSettlementOfJixieCompletionMapper;
import org.dromara.xzd.settlement.jixiehetongjungong.service.IXzdSettlementOfJixieCompletionService;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 机械合同竣工结算Service业务层处理
*
* @author Lion Li
* @date 2025-11-19
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class XzdSettlementOfJixieCompletionServiceImpl extends ServiceImpl<XzdSettlementOfJixieCompletionMapper, XzdSettlementOfJixieCompletion> implements IXzdSettlementOfJixieCompletionService {
private final XzdSettlementOfJixieCompletionMapper baseMapper;
private final IXzdJsqdTzService iXzdJsqdTzService;
@Autowired
private SysOssServiceImpl sysOssService;
@Autowired
private IXzdJsDeductionItemsService deductionItemsService;
/**
* 查询机械合同竣工结算
*
* @param id 主键
* @return 机械合同竣工结算
*/
@Override
public XzdSettlementOfJixieCompletionVo queryById(Long id){
XzdSettlementOfJixieCompletionVo vo = baseMapper.selectVoById(id);
saveValue(vo);
return vo;
}
private void saveValue(XzdSettlementOfJixieCompletionVo item) {
if (item != null) {
List<XzdJsqdTz> xzdJsqdTzs = iXzdJsqdTzService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdJsqdTz>().eq(XzdJsqdTz::getMainId, item.getId()));
if (xzdJsqdTzs != null && xzdJsqdTzs.size() > 0) {
item.setJstzqd(MapstructUtils.convert(xzdJsqdTzs, XzdJsqdTzVo.class));
}
List<XzdJsDeductionItems> xzdJsDeductionItems = deductionItemsService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdJsDeductionItems>().eq(XzdJsDeductionItems::getMainDocId, item.getId()));
if (xzdJsDeductionItems != null && xzdJsDeductionItems.size() > 0) {
item.setJlykk(MapstructUtils.convert(xzdJsDeductionItems, XzdJsDeductionItemsVo.class));
}
}
}
/**
* 分页查询机械合同竣工结算列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械合同竣工结算分页列表
*/
@Override
public TableDataInfo<XzdSettlementOfJixieCompletionVo> queryPageList(XzdSettlementOfJixieCompletionBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSettlementOfJixieCompletion> lqw = buildQueryWrapper(bo);
Page<XzdSettlementOfJixieCompletionVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的机械合同竣工结算列表
*
* @param bo 查询条件
* @return 机械合同竣工结算列表
*/
@Override
public List<XzdSettlementOfJixieCompletionVo> queryList(XzdSettlementOfJixieCompletionBo bo) {
LambdaQueryWrapper<XzdSettlementOfJixieCompletion> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdSettlementOfJixieCompletion> buildQueryWrapper(XzdSettlementOfJixieCompletionBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdSettlementOfJixieCompletion> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdSettlementOfJixieCompletion::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), XzdSettlementOfJixieCompletion::getDocumentCode, bo.getDocumentCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), XzdSettlementOfJixieCompletion::getTitle, bo.getTitle());
lqw.eq(bo.getDocumentDate() != null, XzdSettlementOfJixieCompletion::getDocumentDate, bo.getDocumentDate());
lqw.eq(bo.getContractCode() != null, XzdSettlementOfJixieCompletion::getContractCode, bo.getContractCode());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdSettlementOfJixieCompletion::getContractName, bo.getContractName());
lqw.eq(bo.getApprovedTotalPrice() != null, XzdSettlementOfJixieCompletion::getApprovedTotalPrice, bo.getApprovedTotalPrice());
lqw.eq(bo.getApprovedDate() != null, XzdSettlementOfJixieCompletion::getApprovedDate, bo.getApprovedDate());
lqw.eq(bo.getEngineeringProject() != null, XzdSettlementOfJixieCompletion::getEngineeringProject, bo.getEngineeringProject());
lqw.eq(StringUtils.isNotBlank(bo.getBusinessModel()), XzdSettlementOfJixieCompletion::getBusinessModel, bo.getBusinessModel());
lqw.eq(bo.getPartyAUnit() != null, XzdSettlementOfJixieCompletion::getPartyAUnit, bo.getPartyAUnit());
lqw.eq(bo.getPartyBUnit() != null, XzdSettlementOfJixieCompletion::getPartyBUnit, bo.getPartyBUnit());
lqw.eq(bo.getCumulativeSettledAmount() != null, XzdSettlementOfJixieCompletion::getCumulativeSettledAmount, bo.getCumulativeSettledAmount());
lqw.eq(bo.getCumulativePaidAmount() != null, XzdSettlementOfJixieCompletion::getCumulativePaidAmount, bo.getCumulativePaidAmount());
lqw.eq(bo.getPaidRatio() != null, XzdSettlementOfJixieCompletion::getPaidRatio, bo.getPaidRatio());
lqw.eq(StringUtils.isNotBlank(bo.getPaymentTerms()), XzdSettlementOfJixieCompletion::getPaymentTerms, bo.getPaymentTerms());
lqw.eq(bo.getCurrentPayableAmount() != null, XzdSettlementOfJixieCompletion::getCurrentPayableAmount, bo.getCurrentPayableAmount());
lqw.eq(bo.getPayableDate() != null, XzdSettlementOfJixieCompletion::getPayableDate, bo.getPayableDate());
lqw.eq(bo.getCompletionDate() != null, XzdSettlementOfJixieCompletion::getCompletionDate, bo.getCompletionDate());
lqw.eq(StringUtils.isNotBlank(bo.getWarning()), XzdSettlementOfJixieCompletion::getWarning, bo.getWarning());
lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), XzdSettlementOfJixieCompletion::getRemarks, bo.getRemarks());
lqw.eq(bo.getCurrentFinalSettlementAmount() != null, XzdSettlementOfJixieCompletion::getCurrentFinalSettlementAmount, bo.getCurrentFinalSettlementAmount());
lqw.eq(bo.getOwnerUnit() != null, XzdSettlementOfJixieCompletion::getOwnerUnit, bo.getOwnerUnit());
lqw.eq(bo.getSupervisionUnit() != null, XzdSettlementOfJixieCompletion::getSupervisionUnit, bo.getSupervisionUnit());
lqw.eq(bo.getConstructionUnit() != null, XzdSettlementOfJixieCompletion::getConstructionUnit, bo.getConstructionUnit());
lqw.eq(bo.getAuditUnit() != null, XzdSettlementOfJixieCompletion::getAuditUnit, bo.getAuditUnit());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdSettlementOfJixieCompletion::getFileId, bo.getFileId());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), XzdSettlementOfJixieCompletion::getAuditStatus, bo.getAuditStatus());
lqw.eq(bo.getDeptId() != null, XzdSettlementOfJixieCompletion::getDeptId, bo.getDeptId());
lqw.eq(StringUtils.isNotBlank(bo.getContractText()), XzdSettlementOfJixieCompletion::getContractText, bo.getContractText());
return lqw;
}
/**
* 新增机械合同竣工结算
*
* @param bo 机械合同竣工结算
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdSettlementOfJixieCompletionBo bo) {
XzdSettlementOfJixieCompletion add = MapstructUtils.convert(bo, XzdSettlementOfJixieCompletion.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("JXHTJG-");
add.setDocumentCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
// 决算调整清单
List<XzdJsqdTzBo> jstzqd = bo.getJstzqd();
if (jstzqd != null && jstzqd.size() > 0) {
jstzqd.forEach(item -> {
item.setMainId(add.getId());
item.setType(ZxdEnum.SFWJSD_S.getTypeValue());
});
iXzdJsqdTzService.saveBatch(MapstructUtils.convert(jstzqd, XzdJsqdTz.class));
}
// 奖励与扣款
List<XzdJsDeductionItemsBo> jlykk = bo.getJlykk();
if (jlykk != null && jlykk.size() > 0){
jlykk.forEach(item ->{
item.setTableName(XzdClassEnum.JXHTJG_COMPLETION.getClassName());
item.setMainDocId(add.getId());
});
deductionItemsService.saveBatch(MapstructUtils.convert(jlykk, XzdJsDeductionItems.class));
}
return flag;
}
/**
* 修改机械合同竣工结算
*
* @param bo 机械合同竣工结算
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdSettlementOfJixieCompletionBo bo) {
XzdSettlementOfJixieCompletion update = MapstructUtils.convert(bo, XzdSettlementOfJixieCompletion.class);
validEntityBeforeSave(update);
// 决算调整清单
List<XzdJsqdTzBo> jstzqd = bo.getJstzqd();
iXzdJsqdTzService.getBaseMapper().delete(new LambdaQueryWrapper<XzdJsqdTz>().eq(XzdJsqdTz::getMainId, update.getId()));
if (jstzqd != null && jstzqd.size() > 0) {
jstzqd.forEach(item -> {
item.setMainId(update.getId());
item.setType(ZxdEnum.SFWJSD_S.getTypeValue());
});
iXzdJsqdTzService.saveBatch(MapstructUtils.convert(jstzqd, XzdJsqdTz.class));
}
// 奖励与扣款
List<XzdJsDeductionItemsBo> jlykk = bo.getJlykk();
deductionItemsService.getBaseMapper().delete(new LambdaQueryWrapper<XzdJsDeductionItems>().eq(XzdJsDeductionItems::getMainDocId, update.getId()));
if (jlykk != null && jlykk.size() > 0){
jlykk.forEach(item ->{
item.setTableName(XzdClassEnum.JXHTJG_COMPLETION.getClassName());
item.setMainDocId(update.getId());
});
deductionItemsService.saveBatch(MapstructUtils.convert(jlykk, XzdJsDeductionItems.class));
}
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdSettlementOfJixieCompletion entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除机械合同竣工结算信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids) {
XzdSettlementOfJixieCompletionVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> deleteIds = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
}
}
}
iXzdJsqdTzService.getBaseMapper().delete(new LambdaQueryWrapper<XzdJsqdTz>().in(XzdJsqdTz::getMainId, ids));
deductionItemsService.getBaseMapper().delete(new LambdaQueryWrapper<XzdJsDeductionItems>().in(XzdJsDeductionItems::getMainDocId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
* 正常使用只需#processEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('xzdjxhtjgjs')")
public void processPlansHandlErequipmentList(ProcessEvent processEvent) {
log.info("机械合同竣工结算审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
XzdSettlementOfJixieCompletion vo = baseMapper.selectById(Long.valueOf(id));
if (vo == null) {
return;
}
vo.setAuditStatus(processEvent.getStatus());
this.updateById(vo);
}
/**
* 执行任务创建监听
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
* 在方法中判断流程节点key
* if ("xxx".equals(processTaskEvent.getNodeCode())) {
* //执行业务逻辑
* }
*
* @param processTaskEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processTaskEvent.flowCode.endsWith('xzdjxhtjgjs')")
public void processTaskPlansHandlerEquipmentList(ProcessTaskEvent processTaskEvent) {
log.info("机械合同竣工结算审核任务创建了{}", processTaskEvent.toString());
}
/**
* 监听删除流程事件
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processDeleteEvent 参数
*/
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('xzdfbhtjgjs')")
public void processDeletePlansHandlerEquipmentList(ProcessDeleteEvent processDeleteEvent) {
log.info("机械合同竣工结算删除流程事件,机械合同竣工结算审核任务执行了{}", processDeleteEvent.toString());
}
}

View File

@ -0,0 +1,134 @@
package org.dromara.xzd.skyfk.jixiehetong.fkxx.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.bo.XzdContractMachineryBo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.vo.XzdContractMachineryVo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.service.IXzdContractMachineryService;
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.skyfk.jixiehetong.fkxx.domain.vo.XzdSfkJixieFkVo;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.bo.XzdSfkJixieFkBo;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.service.IXzdSfkJixieFkService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 机械合同付款
*
* @author Lion Li
* @date 2025-11-18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/xzd/fkxx/sfkJixieFk")
public class XzdSfkJixieFkController extends BaseController {
private final IXzdSfkJixieFkService xzdSfkJixieFkService;
private final IXzdContractMachineryService xzdContractMachineryService;
/**
* 查询机械合同信息列表
*/
@SaCheckPermission(value = {"fkxx:sfkJixieFk:add","fkxx:sfkJixieFk:edit","fkxx:sfkJixieFk:list"},mode = SaMode.OR)
@GetMapping("/getlist")
public TableDataInfo<XzdContractMachineryVo> list(XzdContractMachineryBo bo, PageQuery pageQuery) {
return xzdContractMachineryService.queryPageList(bo, pageQuery);
}
/**
* 获取机械合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"fkxx:sfkJixieFk:add","fkxx:sfkJixieFk:edit","fkxx:sfkJixieFk:list"},mode = SaMode.OR)
@GetMapping("/jxht/{id}")
public R<XzdContractMachineryVo> getInfojx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdContractMachineryService.queryById(id));
}
/**
* 查询机械合同付款列表
*/
@SaCheckPermission("fkxx:sfkJixieFk:list")
@GetMapping("/list")
public TableDataInfo<XzdSfkJixieFkVo> list(XzdSfkJixieFkBo bo, PageQuery pageQuery) {
return xzdSfkJixieFkService.queryPageList(bo, pageQuery);
}
/**
* 导出机械合同付款列表
*/
@SaCheckPermission("fkxx:sfkJixieFk:export")
@Log(title = "机械合同付款", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdSfkJixieFkBo bo, HttpServletResponse response) {
List<XzdSfkJixieFkVo> list = xzdSfkJixieFkService.queryList(bo);
ExcelUtil.exportExcel(list, "机械合同付款", XzdSfkJixieFkVo.class, response);
}
/**
* 获取机械合同付款详细信息
*
* @param id 主键
*/
@SaCheckPermission("fkxx:sfkJixieFk:query")
@GetMapping("/{id}")
public R<XzdSfkJixieFkVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSfkJixieFkService.queryById(id));
}
/**
* 新增机械合同付款
*/
@SaCheckPermission("fkxx:sfkJixieFk:add")
@Log(title = "机械合同付款", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdSfkJixieFkBo bo) {
return toAjax(xzdSfkJixieFkService.insertByBo(bo));
}
/**
* 修改机械合同付款
*/
@SaCheckPermission("fkxx:sfkJixieFk:edit")
@Log(title = "机械合同付款", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdSfkJixieFkBo bo) {
return toAjax(xzdSfkJixieFkService.updateByBo(bo));
}
/**
* 删除机械合同付款
*
* @param ids 主键串
*/
@SaCheckPermission("fkxx:sfkJixieFk:remove")
@Log(title = "机械合同付款", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdSfkJixieFkService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,233 @@
package org.dromara.xzd.skyfk.jixiehetong.fkxx.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_sfk_jixie_fk
*
* @author Lion Li
* @date 2025-11-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_sfk_jixie_fk")
public class XzdSfkJixieFk extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 部门id
*/
private Long deptId;
/**
* 单据编码(带*,必填)
*/
private String docCode;
/**
* 标题(带*,必填)
*/
private String title;
/**
* 单据日期(带*,必填)
*/
private LocalDate docDate;
/**
* 合同编码(带*,必填)
*/
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 付款性质(带*,必填)
*/
private Long paymentProperty;
/**
* 支出合同金额
*/
private BigDecimal expendContractAmount;
/**
* 本期审批金额
*/
private BigDecimal currentApproveAmount;
/**
* 项目
*/
private Long project;
/**
* 付款单位
*/
private Long paymentUnit;
/**
* 收款单位(带*,必填)
*/
private Long receiptUnit;
/**
* 收款银行
*/
private Long receiptBank;
/**
* 收款银行账号
*/
private String receiptBankAccount;
/**
* 统计周期(带*,必填)
*/
private String statCycle;
/**
* 项目类型
*/
private String projectType;
/**
* 税率(带*,必填)
*/
private BigDecimal taxRate;
/**
* 项目大类
*/
private String projectCategory;
/**
* 备注
*/
private String remark;
/**
* 本期进度支付金额
*/
private BigDecimal currentProgressPayment;
/**
* 累计进度支付金额
*/
private BigDecimal totalProgressPayment;
/**
* 预付款金额
*/
private BigDecimal advancePayment;
/**
* 累计支付金额
*/
private BigDecimal totalPaymentAmount;
/**
* 本期进度应付金额(带*,必填)
*/
private BigDecimal currentProgressPayable;
/**
* 累计进度应付金额
*/
private BigDecimal totalProgressPayable;
/**
* 预付款扣回金额
*/
private BigDecimal advanceDeductionAmount;
/**
* 累计进度结算占合同比例(%
*/
private BigDecimal totalProgressSettlementRatio;
/**
* 本期进度支付占本期进度应付(%
*/
private BigDecimal currentPaymentRatio;
/**
* 累计进度支付占累计进度应付(%
*/
private BigDecimal totalPaymentRatio;
/**
* 预付款剩余未抵扣金额
*/
private BigDecimal advanceRemainingDeduction;
/**
* 累计支付占合同比例(%
*/
private BigDecimal totalPaymentContractRatio;
/**
* 剩余进度应付未付金额
*/
private BigDecimal remainingProgressPayable;
/**
* 累计进度结算金额
*/
private BigDecimal totalProgressSettlementAmount;
/**
* 实时刷新0=未勾选1=勾选)
*/
private Long realTimeRefresh;
/**
* 合同含税金额
*/
private BigDecimal contractTaxInclAmount;
/**
* 合同累计实际付款金额
*/
private BigDecimal contractTotalActualPayment;
/**
* 累计结算金额
*/
private BigDecimal totalSettlementAmount;
/**
* 单据引用
*/
private String documentReference;
/**
* 审核状态
*/
private String auditStatus;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,247 @@
package org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.bo;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.XzdSfkJixieFk;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 机械合同付款业务对象 xzd_sfk_jixie_fk
*
* @author Lion Li
* @date 2025-11-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdSfkJixieFk.class, reverseConvertGenerate = false)
public class XzdSfkJixieFkBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 部门id
*/
private Long deptId;
/**
* 单据编码(带*,必填)
*/
private String docCode;
/**
* 标题(带*,必填)
*/
@NotBlank(message = "标题(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String title;
/**
* 单据日期(带*,必填)
*/
@NotNull(message = "单据日期(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private LocalDate docDate;
/**
* 合同编码(带*,必填)
*/
@NotNull(message = "合同编码(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 付款性质(带*,必填)
*/
@NotNull(message = "付款性质(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long paymentProperty;
/**
* 支出合同金额
*/
private BigDecimal expendContractAmount;
/**
* 本期审批金额
*/
private BigDecimal currentApproveAmount;
/**
* 项目
*/
private Long project;
/**
* 付款单位
*/
private Long paymentUnit;
/**
* 收款单位(带*,必填)
*/
@NotNull(message = "收款单位(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long receiptUnit;
/**
* 收款银行
*/
private Long receiptBank;
/**
* 收款银行账号
*/
private String receiptBankAccount;
/**
* 统计周期(带*,必填)
*/
@NotBlank(message = "统计周期(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String statCycle;
/**
* 项目类型
*/
private String projectType;
/**
* 税率(带*,必填)
*/
@NotNull(message = "税率(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal taxRate;
/**
* 项目大类
*/
private String projectCategory;
/**
* 备注
*/
private String remark;
/**
* 本期进度支付金额
*/
private BigDecimal currentProgressPayment;
/**
* 累计进度支付金额
*/
private BigDecimal totalProgressPayment;
/**
* 预付款金额
*/
private BigDecimal advancePayment;
/**
* 累计支付金额
*/
private BigDecimal totalPaymentAmount;
/**
* 本期进度应付金额(带*,必填)
*/
@NotNull(message = "本期进度应付金额(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal currentProgressPayable;
/**
* 累计进度应付金额
*/
private BigDecimal totalProgressPayable;
/**
* 预付款扣回金额
*/
private BigDecimal advanceDeductionAmount;
/**
* 累计进度结算占合同比例(%
*/
private BigDecimal totalProgressSettlementRatio;
/**
* 本期进度支付占本期进度应付(%
*/
private BigDecimal currentPaymentRatio;
/**
* 累计进度支付占累计进度应付(%
*/
private BigDecimal totalPaymentRatio;
/**
* 预付款剩余未抵扣金额
*/
private BigDecimal advanceRemainingDeduction;
/**
* 累计支付占合同比例(%
*/
private BigDecimal totalPaymentContractRatio;
/**
* 剩余进度应付未付金额
*/
private BigDecimal remainingProgressPayable;
/**
* 累计进度结算金额
*/
private BigDecimal totalProgressSettlementAmount;
/**
* 实时刷新0=未勾选1=勾选)
*/
private Long realTimeRefresh;
/**
* 合同含税金额
*/
private BigDecimal contractTaxInclAmount;
/**
* 合同累计实际付款金额
*/
private BigDecimal contractTotalActualPayment;
/**
* 累计结算金额
*/
private BigDecimal totalSettlementAmount;
/**
* 单据引用
*/
private String documentReference;
/**
* 审核状态
*/
private String auditStatus;
/**
* 文件ID
*/
private String fileId;
List<XzdSfkFukuan> fukuanList;
List<XzdSfkFapiao> fapiaoList;
}

View File

@ -0,0 +1,323 @@
package org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.vo;
import java.math.BigDecimal;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.XzdSfkJixieFk;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 机械合同付款视图对象 xzd_sfk_jixie_fk
*
* @author Lion Li
* @date 2025-11-18
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdSfkJixieFk.class)
public class XzdSfkJixieFkVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID自增
*/
@ExcelProperty(value = "主键ID自增")
private Long id;
/**
* 部门id
*/
private Long deptId;
/**
* 单据编码(带*,必填)
*/
@ExcelProperty(value = "单据编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String docCode;
/**
* 标题(带*,必填)
*/
@ExcelProperty(value = "标题", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String title;
/**
* 单据日期(带*,必填)
*/
@ExcelProperty(value = "单据日期", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private LocalDate docDate;
/**
* 合同编码(带*,必填)
*/
@ExcelProperty(value = "合同编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long contractCode;
@Translation(type = TransConstant.XZD_PURCHASE_JXXIE_ID_TO_NAME, mapper = "contractCode")
private String contractCodeName;
/**
* 合同名称
*/
@ExcelProperty(value = "合同名称")
private String contractName;
/**
* 付款性质(带*,必填)
*/
@ExcelProperty(value = "付款性质", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long paymentProperty;
/**
* 支出合同金额
*/
@ExcelProperty(value = "支出合同金额")
private BigDecimal expendContractAmount;
/**
* 本期审批金额
*/
@ExcelProperty(value = "本期审批金额")
private BigDecimal currentApproveAmount;
/**
* 项目
*/
@ExcelProperty(value = "项目")
private Long project;
@Translation(type = TransConstant.XZD_PROJECT_ID_TO_NAME, mapper = "project")
private String projectName;
/**
* 付款单位
*/
@ExcelProperty(value = "付款单位")
private Long paymentUnit;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "paymentUnit")
private String paymentUnitName;
/**
* 收款单位(带*,必填)
*/
@ExcelProperty(value = "收款单位", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long receiptUnit;
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "receiptUnit")
private String receiptUnitName;
/**
* 收款银行
*/
@ExcelProperty(value = "收款银行")
private Long receiptBank;
@Translation(type = TransConstant.XZD_SUPPLIER_OPEN_BANK_ID_TO_NAME, mapper = "receiptBank")
private String receiptBankName;
/**
* 创建者
*/
private Long createBy;
/**
* 创建者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy")
private String createByName;
/**
* 收款银行账号
*/
@ExcelProperty(value = "收款银行账号")
private String receiptBankAccount;
/**
* 统计周期(带*,必填)
*/
@ExcelProperty(value = "统计周期", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String statCycle;
/**
* 项目类型
*/
@ExcelProperty(value = "项目类型")
private String projectType;
/**
* 税率(带*,必填)
*/
@ExcelProperty(value = "税率", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private BigDecimal taxRate;
/**
* 项目大类
*/
@ExcelProperty(value = "项目大类")
private String projectCategory;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 本期进度支付金额
*/
@ExcelProperty(value = "本期进度支付金额")
private BigDecimal currentProgressPayment;
/**
* 累计进度支付金额
*/
@ExcelProperty(value = "累计进度支付金额")
private BigDecimal totalProgressPayment;
/**
* 预付款金额
*/
@ExcelProperty(value = "预付款金额")
private BigDecimal advancePayment;
/**
* 累计支付金额
*/
@ExcelProperty(value = "累计支付金额")
private BigDecimal totalPaymentAmount;
/**
* 本期进度应付金额(带*,必填)
*/
@ExcelProperty(value = "本期进度应付金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private BigDecimal currentProgressPayable;
/**
* 累计进度应付金额
*/
@ExcelProperty(value = "累计进度应付金额")
private BigDecimal totalProgressPayable;
/**
* 预付款扣回金额
*/
@ExcelProperty(value = "预付款扣回金额")
private BigDecimal advanceDeductionAmount;
/**
* 累计进度结算占合同比例(%
*/
@ExcelProperty(value = "累计进度结算占合同比例", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "%=")
private BigDecimal totalProgressSettlementRatio;
/**
* 本期进度支付占本期进度应付(%
*/
@ExcelProperty(value = "本期进度支付占本期进度应付", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "%=")
private BigDecimal currentPaymentRatio;
/**
* 累计进度支付占累计进度应付(%
*/
@ExcelProperty(value = "累计进度支付占累计进度应付", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "%=")
private BigDecimal totalPaymentRatio;
/**
* 预付款剩余未抵扣金额
*/
@ExcelProperty(value = "预付款剩余未抵扣金额")
private BigDecimal advanceRemainingDeduction;
/**
* 累计支付占合同比例(%
*/
@ExcelProperty(value = "累计支付占合同比例", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "%=")
private BigDecimal totalPaymentContractRatio;
/**
* 剩余进度应付未付金额
*/
@ExcelProperty(value = "剩余进度应付未付金额")
private BigDecimal remainingProgressPayable;
/**
* 累计进度结算金额
*/
@ExcelProperty(value = "累计进度结算金额")
private BigDecimal totalProgressSettlementAmount;
/**
* 实时刷新0=未勾选1=勾选)
*/
@ExcelProperty(value = "实时刷新", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==未勾选1=勾选")
private Long realTimeRefresh;
/**
* 合同含税金额
*/
@ExcelProperty(value = "合同含税金额")
private BigDecimal contractTaxInclAmount;
/**
* 合同累计实际付款金额
*/
@ExcelProperty(value = "合同累计实际付款金额")
private BigDecimal contractTotalActualPayment;
/**
* 累计结算金额
*/
@ExcelProperty(value = "累计结算金额")
private BigDecimal totalSettlementAmount;
/**
* 单据引用
*/
@ExcelProperty(value = "单据引用")
private String documentReference;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 审核状态
*/
private String auditStatus;
List<XzdSfkFukuan> fukuanList;
List<XzdSfkFapiao> fapiaoList;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.skyfk.jixiehetong.fkxx.mapper;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.XzdSfkJixieFk;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.vo.XzdSfkJixieFkVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械合同付款Mapper接口
*
* @author Lion Li
* @date 2025-11-18
*/
public interface XzdSfkJixieFkMapper extends BaseMapperPlus<XzdSfkJixieFk, XzdSfkJixieFkVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.skyfk.jixiehetong.fkxx.service;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.vo.XzdSfkJixieFkVo;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.bo.XzdSfkJixieFkBo;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.XzdSfkJixieFk;
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-11-18
*/
public interface IXzdSfkJixieFkService extends IService<XzdSfkJixieFk>{
/**
* 查询机械合同付款
*
* @param id 主键
* @return 机械合同付款
*/
XzdSfkJixieFkVo queryById(Long id);
/**
* 分页查询机械合同付款列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械合同付款分页列表
*/
TableDataInfo<XzdSfkJixieFkVo> queryPageList(XzdSfkJixieFkBo bo, PageQuery pageQuery);
/**
* 查询符合条件的机械合同付款列表
*
* @param bo 查询条件
* @return 机械合同付款列表
*/
List<XzdSfkJixieFkVo> queryList(XzdSfkJixieFkBo bo);
/**
* 新增机械合同付款
*
* @param bo 机械合同付款
* @return 是否新增成功
*/
Boolean insertByBo(XzdSfkJixieFkBo bo);
/**
* 修改机械合同付款
*
* @param bo 机械合同付款
* @return 是否修改成功
*/
Boolean updateByBo(XzdSfkJixieFkBo bo);
/**
* 校验并批量删除机械合同付款信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,318 @@
package org.dromara.xzd.skyfk.jixiehetong.fkxx.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.ProcessDeleteEvent;
import org.dromara.common.core.domain.event.ProcessEvent;
import org.dromara.common.core.domain.event.ProcessTaskEvent;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.XzdContractMachinery;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.vo.XzdContractMachineryVo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.service.IXzdContractMachineryService;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFukuan;
import org.dromara.xzd.paymentsReceipts.domain.vo.XzdSfkCaigouFkVo;
import org.dromara.xzd.paymentsReceipts.service.IXzdSfkFapiaoService;
import org.dromara.xzd.paymentsReceipts.service.IXzdSfkFukuanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.bo.XzdSfkJixieFkBo;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.vo.XzdSfkJixieFkVo;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.XzdSfkJixieFk;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.mapper.XzdSfkJixieFkMapper;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.service.IXzdSfkJixieFkService;
import java.math.BigDecimal;
import java.util.*;
/**
* 机械合同付款Service业务层处理
*
* @author Lion Li
* @date 2025-11-18
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class XzdSfkJixieFkServiceImpl extends ServiceImpl<XzdSfkJixieFkMapper, XzdSfkJixieFk> implements IXzdSfkJixieFkService {
private final XzdSfkJixieFkMapper baseMapper;
@Autowired
private IXzdSfkFapiaoService fapiaoService;
@Autowired
private IXzdSfkFukuanService fukuanService;
@Autowired
private SysOssServiceImpl sysOssService;
private final IXzdContractMachineryService xzdContractMachineryService;
/**
* 查询机械合同付款
*
* @param id 主键
* @return 机械合同付款
*/
@Override
public XzdSfkJixieFkVo queryById(Long id){
XzdSfkJixieFkVo vo = baseMapper.selectVoById(id);
getHttk(vo);
return vo;
}
/**
* 分页查询机械合同付款列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械合同付款分页列表
*/
@Override
public TableDataInfo<XzdSfkJixieFkVo> queryPageList(XzdSfkJixieFkBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSfkJixieFk> lqw = buildQueryWrapper(bo);
Page<XzdSfkJixieFkVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的机械合同付款列表
*
* @param bo 查询条件
* @return 机械合同付款列表
*/
@Override
public List<XzdSfkJixieFkVo> queryList(XzdSfkJixieFkBo bo) {
LambdaQueryWrapper<XzdSfkJixieFk> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
/**
* 获取子项
* @param vo
*/
private void getHttk(XzdSfkJixieFkVo vo) {
//发票信息
vo.setFapiaoList(fapiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdSfkFapiao>().eq(XzdSfkFapiao::getMainDocumentId, vo.getId())));
//付款信息
vo.setFukuanList(fukuanService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdSfkFukuan>().eq(XzdSfkFukuan::getMainDocumentId, vo.getId())));
}
private LambdaQueryWrapper<XzdSfkJixieFk> buildQueryWrapper(XzdSfkJixieFkBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdSfkJixieFk> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdSfkJixieFk::getId);
lqw.eq(bo.getDeptId() != null, XzdSfkJixieFk::getDeptId, bo.getDeptId());
lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdSfkJixieFk::getDocCode, bo.getDocCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitle()), XzdSfkJixieFk::getTitle, bo.getTitle());
lqw.eq(bo.getDocDate() != null, XzdSfkJixieFk::getDocDate, bo.getDocDate());
lqw.eq(bo.getContractCode() != null, XzdSfkJixieFk::getContractCode, bo.getContractCode());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdSfkJixieFk::getContractName, bo.getContractName());
lqw.eq(bo.getPaymentProperty() != null, XzdSfkJixieFk::getPaymentProperty, bo.getPaymentProperty());
lqw.eq(bo.getExpendContractAmount() != null, XzdSfkJixieFk::getExpendContractAmount, bo.getExpendContractAmount());
lqw.eq(bo.getCurrentApproveAmount() != null, XzdSfkJixieFk::getCurrentApproveAmount, bo.getCurrentApproveAmount());
lqw.eq(bo.getProject() != null, XzdSfkJixieFk::getProject, bo.getProject());
lqw.eq(bo.getPaymentUnit() != null, XzdSfkJixieFk::getPaymentUnit, bo.getPaymentUnit());
lqw.eq(bo.getReceiptUnit() != null, XzdSfkJixieFk::getReceiptUnit, bo.getReceiptUnit());
lqw.eq(bo.getReceiptBank() != null, XzdSfkJixieFk::getReceiptBank, bo.getReceiptBank());
lqw.eq(StringUtils.isNotBlank(bo.getReceiptBankAccount()), XzdSfkJixieFk::getReceiptBankAccount, bo.getReceiptBankAccount());
lqw.eq(StringUtils.isNotBlank(bo.getStatCycle()), XzdSfkJixieFk::getStatCycle, bo.getStatCycle());
lqw.eq(StringUtils.isNotBlank(bo.getProjectType()), XzdSfkJixieFk::getProjectType, bo.getProjectType());
lqw.eq(bo.getTaxRate() != null, XzdSfkJixieFk::getTaxRate, bo.getTaxRate());
lqw.eq(StringUtils.isNotBlank(bo.getProjectCategory()), XzdSfkJixieFk::getProjectCategory, bo.getProjectCategory());
lqw.eq(bo.getCurrentProgressPayment() != null, XzdSfkJixieFk::getCurrentProgressPayment, bo.getCurrentProgressPayment());
lqw.eq(bo.getTotalProgressPayment() != null, XzdSfkJixieFk::getTotalProgressPayment, bo.getTotalProgressPayment());
lqw.eq(bo.getAdvancePayment() != null, XzdSfkJixieFk::getAdvancePayment, bo.getAdvancePayment());
lqw.eq(bo.getTotalPaymentAmount() != null, XzdSfkJixieFk::getTotalPaymentAmount, bo.getTotalPaymentAmount());
lqw.eq(bo.getCurrentProgressPayable() != null, XzdSfkJixieFk::getCurrentProgressPayable, bo.getCurrentProgressPayable());
lqw.eq(bo.getTotalProgressPayable() != null, XzdSfkJixieFk::getTotalProgressPayable, bo.getTotalProgressPayable());
lqw.eq(bo.getAdvanceDeductionAmount() != null, XzdSfkJixieFk::getAdvanceDeductionAmount, bo.getAdvanceDeductionAmount());
lqw.eq(bo.getTotalProgressSettlementRatio() != null, XzdSfkJixieFk::getTotalProgressSettlementRatio, bo.getTotalProgressSettlementRatio());
lqw.eq(bo.getCurrentPaymentRatio() != null, XzdSfkJixieFk::getCurrentPaymentRatio, bo.getCurrentPaymentRatio());
lqw.eq(bo.getTotalPaymentRatio() != null, XzdSfkJixieFk::getTotalPaymentRatio, bo.getTotalPaymentRatio());
lqw.eq(bo.getAdvanceRemainingDeduction() != null, XzdSfkJixieFk::getAdvanceRemainingDeduction, bo.getAdvanceRemainingDeduction());
lqw.eq(bo.getTotalPaymentContractRatio() != null, XzdSfkJixieFk::getTotalPaymentContractRatio, bo.getTotalPaymentContractRatio());
lqw.eq(bo.getRemainingProgressPayable() != null, XzdSfkJixieFk::getRemainingProgressPayable, bo.getRemainingProgressPayable());
lqw.eq(bo.getTotalProgressSettlementAmount() != null, XzdSfkJixieFk::getTotalProgressSettlementAmount, bo.getTotalProgressSettlementAmount());
lqw.eq(bo.getRealTimeRefresh() != null, XzdSfkJixieFk::getRealTimeRefresh, bo.getRealTimeRefresh());
lqw.eq(bo.getContractTaxInclAmount() != null, XzdSfkJixieFk::getContractTaxInclAmount, bo.getContractTaxInclAmount());
lqw.eq(bo.getContractTotalActualPayment() != null, XzdSfkJixieFk::getContractTotalActualPayment, bo.getContractTotalActualPayment());
lqw.eq(bo.getTotalSettlementAmount() != null, XzdSfkJixieFk::getTotalSettlementAmount, bo.getTotalSettlementAmount());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdSfkJixieFk::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), XzdSfkJixieFk::getAuditStatus, bo.getAuditStatus());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdSfkJixieFk::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增机械合同付款
*
* @param bo 机械合同付款
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdSfkJixieFkBo bo) {
XzdSfkJixieFk add = MapstructUtils.convert(bo, XzdSfkJixieFk.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("JXHTFK-");
add.setDocCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
// 发票信息
if (bo.getFapiaoList() != null || !bo.getFapiaoList().isEmpty()) {
bo.getFapiaoList().forEach(item -> {item.setMainDocumentId(add.getId());});
fapiaoService.saveBatch(bo.getFapiaoList());
}
// 付款信息
if (bo.getFukuanList() != null || !bo.getFukuanList().isEmpty()) {
bo.getFukuanList().forEach(item -> {item.setMainDocumentId(add.getId());});
fukuanService.saveBatch(bo.getFukuanList());
}
return flag;
}
/**
* 修改机械合同付款
*
* @param bo 机械合同付款
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdSfkJixieFkBo bo) {
XzdSfkJixieFk update = MapstructUtils.convert(bo, XzdSfkJixieFk.class);
validEntityBeforeSave(update);
fapiaoService.remove(new LambdaQueryWrapper<XzdSfkFapiao>().eq(XzdSfkFapiao::getMainDocumentId, bo.getId()));
fukuanService.remove(new LambdaQueryWrapper<XzdSfkFukuan>().eq(XzdSfkFukuan::getMainDocumentId, bo.getId()));
// 发票信息
if (bo.getFapiaoList() != null || !bo.getFapiaoList().isEmpty()) {
bo.getFapiaoList().forEach(item -> {item.setMainDocumentId(update.getId());});
fapiaoService.saveBatch(bo.getFapiaoList());
}
// 付款信息
if (bo.getFukuanList() != null || !bo.getFukuanList().isEmpty()) {
bo.getFukuanList().forEach(item -> {item.setMainDocumentId(update.getId());});
fukuanService.saveBatch(bo.getFukuanList());
}
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdSfkJixieFk entity){
//TODO 做一些数据校验,如唯一约束
// 判断金额是否超出
if (entity != null && entity.getContractCode() != null && entity.getTotalPaymentAmount() != null) {
XzdContractMachineryVo vo = xzdContractMachineryService.queryById(entity.getContractCode());
if (vo != null && vo.getPaymentNotExceedPayment() == 1 && vo.getTaxInclusiveContractAmount() != null) {
BigDecimal multiply = vo.getTaxInclusiveContractAmount().multiply(vo.getPaymentNotExceedContractRatio().divide(new BigDecimal(100)));
if (entity.getTotalPaymentAmount().compareTo(multiply) > 0){
throw new RuntimeException("付款额不能超合同额支付比例:"+vo.getPaymentNotExceedContractRatio()+"%");
};
}
}
}
/**
* 校验并批量删除机械合同付款信息
*
* @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) {
XzdSfkJixieFkVo 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);
}
fapiaoService.remove(new LambdaQueryWrapper<XzdSfkFapiao>().in(XzdSfkFapiao::getMainDocumentId, ids));
fukuanService.remove(new LambdaQueryWrapper<XzdSfkFukuan>().in(XzdSfkFukuan::getMainDocumentId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
* 正常使用只需#processEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('xzdjxhtfksp')")
public void processPlansHandlErequipmentList(ProcessEvent processEvent) {
log.info("机械合同信息付款审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
XzdSfkJixieFk vo = baseMapper.selectById(Long.valueOf(id));
if (vo == null) {
return;
}
vo.setAuditStatus(processEvent.getStatus());
this.updateById(vo);
}
/**
* 执行任务创建监听
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
* 在方法中判断流程节点key
* if ("xxx".equals(processTaskEvent.getNodeCode())) {
* //执行业务逻辑
* }
*
* @param processTaskEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processTaskEvent.flowCode.endsWith('xzdjxhtfksp')")
public void processTaskPlansHandlerEquipmentList(ProcessTaskEvent processTaskEvent) {
log.info("机械合同信息付款审核任务创建了{}", processTaskEvent.toString());
}
/**
* 监听删除流程事件
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processDeleteEvent 参数
*/
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('xzdjxhtfksp')")
public void processDeletePlansHandlerEquipmentList(ProcessDeleteEvent processDeleteEvent) {
log.info("机械合同信息付款删除流程事件,机械合同信息付款审核任务执行了{}", processDeleteEvent.toString());
}
}

View File

@ -0,0 +1,136 @@
package org.dromara.xzd.skyfk.jixiehetong.skxx.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaMode;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.bo.XzdContractMachineryBo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.domain.vo.XzdContractMachineryVo;
import org.dromara.xzd.contractManagement.jixiehetongxinxi.service.IXzdContractMachineryService;
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.skyfk.jixiehetong.skxx.domain.vo.XzdSfkJixieSkVo;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.bo.XzdSfkJixieSkBo;
import org.dromara.xzd.skyfk.jixiehetong.skxx.service.IXzdSfkJixieSkService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 机械合同收款
*
* @author Lion Li
* @date 2025-11-18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/xzd/skxx/sfkJixieSk")
public class XzdSfkJixieSkController extends BaseController {
private final IXzdSfkJixieSkService xzdSfkJixieSkService;
private final IXzdContractMachineryService xzdContractMachineryService;
/**
* 查询机械合同信息列表
*/
@SaCheckPermission(value = {"skxx:sfkJixieSk:add","skxx:sfkJixieSk:edit","skxx:sfkJixieSk:list"},mode = SaMode.OR)
@GetMapping("/getlist")
public TableDataInfo<XzdContractMachineryVo> list(XzdContractMachineryBo bo, PageQuery pageQuery) {
return xzdContractMachineryService.queryPageList(bo, pageQuery);
}
/**
* 获取机械合同信息详细信息
*
* @param id 主键
*/
@SaCheckPermission(value = {"skxx:sfkJixieSk:add","skxx:sfkJixieSk:edit","skxx:sfkJixieSk:list"},mode = SaMode.OR)
@GetMapping("/jxht/{id}")
public R<XzdContractMachineryVo> getInfojx(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdContractMachineryService.queryById(id));
}
/**
* 查询机械合同收款列表
*/
@SaCheckPermission("skxx:sfkJixieSk:list")
@GetMapping("/list")
public TableDataInfo<XzdSfkJixieSkVo> list(XzdSfkJixieSkBo bo, PageQuery pageQuery) {
return xzdSfkJixieSkService.queryPageList(bo, pageQuery);
}
/**
* 导出机械合同收款列表
*/
@SaCheckPermission("skxx:sfkJixieSk:export")
@Log(title = "机械合同收款", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdSfkJixieSkBo bo, HttpServletResponse response) {
List<XzdSfkJixieSkVo> list = xzdSfkJixieSkService.queryList(bo);
ExcelUtil.exportExcel(list, "机械合同收款", XzdSfkJixieSkVo.class, response);
}
/**
* 获取机械合同收款详细信息
*
* @param id 主键
*/
@SaCheckPermission("skxx:sfkJixieSk:query")
@GetMapping("/{id}")
public R<XzdSfkJixieSkVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdSfkJixieSkService.queryById(id));
}
/**
* 新增机械合同收款
*/
@SaCheckPermission("skxx:sfkJixieSk:add")
@Log(title = "机械合同收款", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdSfkJixieSkBo bo) {
return toAjax(xzdSfkJixieSkService.insertByBo(bo));
}
/**
* 修改机械合同收款
*/
@SaCheckPermission("skxx:sfkJixieSk:edit")
@Log(title = "机械合同收款", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdSfkJixieSkBo bo) {
return toAjax(xzdSfkJixieSkService.updateByBo(bo));
}
/**
* 删除机械合同收款
*
* @param ids 主键串
*/
@SaCheckPermission("skxx:sfkJixieSk:remove")
@Log(title = "机械合同收款", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdSfkJixieSkService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,189 @@
package org.dromara.xzd.skyfk.jixiehetong.skxx.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_sfk_jixie_sk
*
* @author Lion Li
* @date 2025-11-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_sfk_jixie_sk")
public class XzdSfkJixieSk extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@TableId(value = "id")
private Long id;
/**
* 审核状态
*/
private String auditStatus;
/**
* 部门id
*/
private Long deptId;
/**
* 单据编码
*/
private String documentCode;
/**
* 合同名称
*/
private String contractName;
/**
* 收款单位
*/
private String partyBUnit;
/**
* 合同金额
*/
private BigDecimal contractAmount;
/**
* 标题
*/
private String titile;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同id
*/
private Long contractId;
/**
* 合同编码
*/
private String contractCode;
/**
* 收款性质
*/
private String collectionNature;
/**
* 实际收款日期
*/
private LocalDate paymentDate;
/**
* 项目id
*/
private Long projectId;
/**
* 付款单位(客户)id
*/
private Long payer;
/**
* 收款银行
*/
private Long beneficiaryBank;
/**
* 收款银行账号
*/
private String bankAccount;
/**
* 本期审批收款金额
*/
private BigDecimal paymentAmount;
/**
* 预收款剩余未抵扣金额
*/
private BigDecimal undischargedPayment;
/**
* 税率
*/
private String taxRate;
/**
* 累计审定产值金额
*/
private BigDecimal outputAmount;
/**
* 累计收款金额(不含本期)
*/
private BigDecimal ljskjeElse;
/**
* 累计收款金额(含本期)
*/
private BigDecimal ljskjeAll;
/**
* 已收款比例(不含本期)
*/
private BigDecimal yskblElse;
/**
* 本次收款比例
*/
private BigDecimal bcskbl;
/**
* 截止本期收款比例
*/
private BigDecimal jzbqskbl;
/**
* 备注
*/
private String remark;
/**
* 0否1是
*/
private String sssx;
/**
* 合同含税金额
*/
private BigDecimal hthsje;
/**
* 合同累计实际收款金额
*/
private BigDecimal htljsjskje;
/**
* 累计结算金额
*/
private BigDecimal ljjsje;
/**
* 多文件逗号分隔
*/
private String fileId;
}

View File

@ -0,0 +1,198 @@
package org.dromara.xzd.skyfk.jixiehetong.skxx.domain.bo;
import org.dromara.xzd.domain.bo.XzdContractSkxxBo;
import org.dromara.xzd.paymentsReceipts.domain.bo.XzdSfkFapiaoBo;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.XzdSfkJixieSk;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 机械合同收款业务对象 xzd_sfk_jixie_sk
*
* @author Lion Li
* @date 2025-11-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdSfkJixieSk.class, reverseConvertGenerate = false)
public class XzdSfkJixieSkBo extends BaseEntity {
/**
* id
*/
@NotNull(message = "id不能为空", groups = { EditGroup.class })
private Long id;
/**
* 审核状态
*/
private String auditStatus;
/**
* 部门id
*/
private Long deptId;
/**
* 单据编码
*/
private String documentCode;
/**
* 标题
*/
private String titile;
/**
* 单据日期
*/
private LocalDate documentDate;
/**
* 合同id
*/
private Long contractId;
/**
* 合同编码
*/
private String contractCode;
/**
* 收款性质
*/
private String collectionNature;
/**
* 实际收款日期
*/
private LocalDate paymentDate;
/**
* 项目id
*/
private Long projectId;
/**
* 付款单位(客户)id
*/
private Long payer;
/**
* 收款银行
*/
private Long beneficiaryBank;
/**
* 收款银行账号
*/
private String bankAccount;
/**
* 本期审批收款金额
*/
private BigDecimal paymentAmount;
/**
* 预收款剩余未抵扣金额
*/
private BigDecimal undischargedPayment;
/**
* 税率
*/
private String taxRate;
/**
* 累计审定产值金额
*/
private BigDecimal outputAmount;
/**
* 累计收款金额(不含本期)
*/
private BigDecimal ljskjeElse;
/**
* 累计收款金额(含本期)
*/
private BigDecimal ljskjeAll;
/**
* 已收款比例(不含本期)
*/
private BigDecimal yskblElse;
/**
* 本次收款比例
*/
private BigDecimal bcskbl;
/**
* 截止本期收款比例
*/
private BigDecimal jzbqskbl;
/**
* 备注
*/
private String remark;
/**
* 0否1是
*/
private String sssx;
/**
* 合同名称
*/
private String contractName;
/**
* 收款单位
*/
private String partyBUnit;
/**
* 合同金额
*/
private BigDecimal contractAmount;
/**
* 合同含税金额
*/
private BigDecimal hthsje;
/**
* 合同累计实际收款金额
*/
private BigDecimal htljsjskje;
/**
* 累计结算金额
*/
private BigDecimal ljjsje;
/**
* 多文件逗号分隔
*/
private String fileId;
/**
* 发票信息
*/
List<XzdSfkFapiaoBo> fpxx;
/**
* 收款信息
*/
List<XzdContractSkxxBo> skxx;
}

View File

@ -0,0 +1,265 @@
package org.dromara.xzd.skyfk.jixiehetong.skxx.domain.vo;
import java.math.BigDecimal;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.domain.vo.XzdContractSkxxVo;
import org.dromara.xzd.paymentsReceipts.domain.vo.XzdSfkFapiaoVo;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.XzdSfkJixieSk;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 机械合同收款视图对象 xzd_sfk_jixie_sk
*
* @author Lion Li
* @date 2025-11-18
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdSfkJixieSk.class)
public class XzdSfkJixieSkVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@ExcelProperty(value = "id")
private Long id;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
/**
* 部门id
*/
@ExcelProperty(value = "部门id")
private Long deptId;
/**
* 单据编码
*/
@ExcelProperty(value = "单据编码")
private String documentCode;
/**
* 标题
*/
@ExcelProperty(value = "标题")
private String titile;
/**
* 合同名称
*/
private String contractName;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate documentDate;
/**
* 合同id
*/
@ExcelProperty(value = "合同id")
private Long contractId;
/**
* 合同编码
*/
@ExcelProperty(value = "合同编码")
private String contractCode;
/**
* 收款性质
*/
@ExcelProperty(value = "收款性质")
private String collectionNature;
/**
* 实际收款日期
*/
@ExcelProperty(value = "实际收款日期")
private LocalDate paymentDate;
/**
* 收款单位
*/
private String partyBUnit;
/**
* 收款单位
*/
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "partyBUnit")
private String partyBUnitName;
/**
* 合同金额
*/
private BigDecimal contractAmount;
/**
* 项目id
*/
@ExcelProperty(value = "项目id")
private Long projectId;
/**
* 项目名称
*/
@Translation(type = TransConstant.XZD_PROJECT_ID_TO_NAME, mapper = "projectId")
private String projectName;
/**
* 付款单位(客户)id
*/
@ExcelProperty(value = "付款单位(客户)id")
private Long payer;
/**
* 付款单位(客户)名称
*/
@Translation(type = TransConstant.XZD_KHXX_ID_TO_NAME, mapper = "payer")
private String payerName;
/**
* 收款银行
*/
@ExcelProperty(value = "收款银行")
private Long beneficiaryBank;
/**
* 收款银行名称
*/
@Translation(type = TransConstant.XZD_SUPPLIER_OPEN_BANK_ID_TO_NAME, mapper = "beneficiaryBank")
private String beneficiaryBankName;
/**
* 收款银行账号
*/
@ExcelProperty(value = "收款银行账号")
private String bankAccount;
/**
* 本期审批收款金额
*/
@ExcelProperty(value = "本期审批收款金额")
private BigDecimal paymentAmount;
/**
* 预收款剩余未抵扣金额
*/
@ExcelProperty(value = "预收款剩余未抵扣金额")
private BigDecimal undischargedPayment;
/**
* 税率
*/
@ExcelProperty(value = "税率")
private String taxRate;
/**
* 累计审定产值金额
*/
@ExcelProperty(value = "累计审定产值金额")
private BigDecimal outputAmount;
/**
* 累计收款金额(不含本期)
*/
@ExcelProperty(value = "累计收款金额(不含本期)")
private BigDecimal ljskjeElse;
/**
* 累计收款金额(含本期)
*/
@ExcelProperty(value = "累计收款金额(含本期)")
private BigDecimal ljskjeAll;
/**
* 已收款比例(不含本期)
*/
@ExcelProperty(value = "已收款比例(不含本期)")
private BigDecimal yskblElse;
/**
* 本次收款比例
*/
@ExcelProperty(value = "本次收款比例")
private BigDecimal bcskbl;
/**
* 截止本期收款比例
*/
@ExcelProperty(value = "截止本期收款比例")
private BigDecimal jzbqskbl;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 0否1是
*/
@ExcelProperty(value = "0否1是")
private String sssx;
/**
* 合同含税金额
*/
@ExcelProperty(value = "合同含税金额")
private BigDecimal hthsje;
/**
* 合同累计实际收款金额
*/
@ExcelProperty(value = "合同累计实际收款金额")
private BigDecimal htljsjskje;
/**
* 累计结算金额
*/
@ExcelProperty(value = "累计结算金额")
private BigDecimal ljjsje;
/**
* 多文件逗号分隔
*/
@ExcelProperty(value = "多文件逗号分隔")
private String fileId;
/**
* 发票信息
*/
List<XzdSfkFapiaoVo> fpxx;
/**
* 收款信息
*/
List<XzdContractSkxxVo> skxx;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.skyfk.jixiehetong.skxx.mapper;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.XzdSfkJixieSk;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.vo.XzdSfkJixieSkVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 机械合同收款Mapper接口
*
* @author Lion Li
* @date 2025-11-18
*/
public interface XzdSfkJixieSkMapper extends BaseMapperPlus<XzdSfkJixieSk, XzdSfkJixieSkVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.skyfk.jixiehetong.skxx.service;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.vo.XzdSfkJixieSkVo;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.bo.XzdSfkJixieSkBo;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.XzdSfkJixieSk;
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-11-18
*/
public interface IXzdSfkJixieSkService extends IService<XzdSfkJixieSk>{
/**
* 查询机械合同收款
*
* @param id 主键
* @return 机械合同收款
*/
XzdSfkJixieSkVo queryById(Long id);
/**
* 分页查询机械合同收款列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械合同收款分页列表
*/
TableDataInfo<XzdSfkJixieSkVo> queryPageList(XzdSfkJixieSkBo bo, PageQuery pageQuery);
/**
* 查询符合条件的机械合同收款列表
*
* @param bo 查询条件
* @return 机械合同收款列表
*/
List<XzdSfkJixieSkVo> queryList(XzdSfkJixieSkBo bo);
/**
* 新增机械合同收款
*
* @param bo 机械合同收款
* @return 是否新增成功
*/
Boolean insertByBo(XzdSfkJixieSkBo bo);
/**
* 修改机械合同收款
*
* @param bo 机械合同收款
* @return 是否修改成功
*/
Boolean updateByBo(XzdSfkJixieSkBo bo);
/**
* 校验并批量删除机械合同收款信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,290 @@
package org.dromara.xzd.skyfk.jixiehetong.skxx.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.event.ProcessDeleteEvent;
import org.dromara.common.core.domain.event.ProcessEvent;
import org.dromara.common.core.domain.event.ProcessTaskEvent;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.domain.XzdContractSkxx;
import org.dromara.xzd.domain.bo.XzdContractSkxxBo;
import org.dromara.xzd.domain.vo.XzdContractSkxxVo;
import org.dromara.xzd.paymentsReceipts.domain.XzdSfkFapiao;
import org.dromara.xzd.paymentsReceipts.domain.bo.XzdSfkFapiaoBo;
import org.dromara.xzd.paymentsReceipts.domain.vo.XzdSfkFapiaoVo;
import org.dromara.xzd.paymentsReceipts.service.impl.XzdSfkFapiaoServiceImpl;
import org.dromara.xzd.service.impl.XzdContractSkxxServiceImpl;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.XzdSfkJixieFk;
import org.dromara.xzd.skyfk.jixiehetong.fkxx.domain.vo.XzdSfkJixieFkVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.bo.XzdSfkJixieSkBo;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.vo.XzdSfkJixieSkVo;
import org.dromara.xzd.skyfk.jixiehetong.skxx.domain.XzdSfkJixieSk;
import org.dromara.xzd.skyfk.jixiehetong.skxx.mapper.XzdSfkJixieSkMapper;
import org.dromara.xzd.skyfk.jixiehetong.skxx.service.IXzdSfkJixieSkService;
import java.util.*;
/**
* 机械合同收款Service业务层处理
*
* @author Lion Li
* @date 2025-11-18
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class XzdSfkJixieSkServiceImpl extends ServiceImpl<XzdSfkJixieSkMapper, XzdSfkJixieSk> implements IXzdSfkJixieSkService {
private final XzdSfkJixieSkMapper baseMapper;
@Autowired
private XzdSfkFapiaoServiceImpl sfkFapiaoService;
@Autowired
private XzdContractSkxxServiceImpl xzdContractSkxxService;
@Autowired
private SysOssServiceImpl sysOssService;
/**
* 查询机械合同收款
*
* @param id 主键
* @return 机械合同收款
*/
@Override
public XzdSfkJixieSkVo queryById(Long id){
XzdSfkJixieSkVo vo = baseMapper.selectVoById(id);
saveValue(vo);
return vo;
}
private void saveValue(XzdSfkJixieSkVo vo) {
List<XzdContractSkxxVo> xzdContractSkxxVos = xzdContractSkxxService.getBaseMapper().selectVoList(new LambdaQueryWrapper<XzdContractSkxx>().eq(XzdContractSkxx::getMainId, vo.getId()));
List<XzdSfkFapiaoVo> xzdSfkFapiaoVos = sfkFapiaoService.getBaseMapper().selectVoList(new LambdaQueryWrapper<XzdSfkFapiao>().eq(XzdSfkFapiao::getMainDocumentId, vo.getId()));
vo.setSkxx(xzdContractSkxxVos);
vo.setFpxx(xzdSfkFapiaoVos);
}
/**
* 分页查询机械合同收款列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 机械合同收款分页列表
*/
@Override
public TableDataInfo<XzdSfkJixieSkVo> queryPageList(XzdSfkJixieSkBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdSfkJixieSk> lqw = buildQueryWrapper(bo);
Page<XzdSfkJixieSkVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的机械合同收款列表
*
* @param bo 查询条件
* @return 机械合同收款列表
*/
@Override
public List<XzdSfkJixieSkVo> queryList(XzdSfkJixieSkBo bo) {
LambdaQueryWrapper<XzdSfkJixieSk> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdSfkJixieSk> buildQueryWrapper(XzdSfkJixieSkBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdSfkJixieSk> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdSfkJixieSk::getId);
lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), XzdSfkJixieSk::getAuditStatus, bo.getAuditStatus());
lqw.eq(bo.getDeptId() != null, XzdSfkJixieSk::getDeptId, bo.getDeptId());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), XzdSfkJixieSk::getDocumentCode, bo.getDocumentCode());
lqw.eq(StringUtils.isNotBlank(bo.getTitile()), XzdSfkJixieSk::getTitile, bo.getTitile());
lqw.eq(bo.getDocumentDate() != null, XzdSfkJixieSk::getDocumentDate, bo.getDocumentDate());
lqw.eq(bo.getContractId() != null, XzdSfkJixieSk::getContractId, bo.getContractId());
lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), XzdSfkJixieSk::getContractCode, bo.getContractCode());
lqw.eq(StringUtils.isNotBlank(bo.getCollectionNature()), XzdSfkJixieSk::getCollectionNature, bo.getCollectionNature());
lqw.eq(bo.getPaymentDate() != null, XzdSfkJixieSk::getPaymentDate, bo.getPaymentDate());
lqw.eq(bo.getProjectId() != null, XzdSfkJixieSk::getProjectId, bo.getProjectId());
lqw.eq(bo.getPayer() != null, XzdSfkJixieSk::getPayer, bo.getPayer());
lqw.eq(bo.getBeneficiaryBank() != null, XzdSfkJixieSk::getBeneficiaryBank, bo.getBeneficiaryBank());
lqw.eq(StringUtils.isNotBlank(bo.getBankAccount()), XzdSfkJixieSk::getBankAccount, bo.getBankAccount());
lqw.eq(bo.getPaymentAmount() != null, XzdSfkJixieSk::getPaymentAmount, bo.getPaymentAmount());
lqw.eq(bo.getUndischargedPayment() != null, XzdSfkJixieSk::getUndischargedPayment, bo.getUndischargedPayment());
lqw.eq(StringUtils.isNotBlank(bo.getTaxRate()), XzdSfkJixieSk::getTaxRate, bo.getTaxRate());
lqw.eq(bo.getOutputAmount() != null, XzdSfkJixieSk::getOutputAmount, bo.getOutputAmount());
lqw.eq(bo.getLjskjeElse() != null, XzdSfkJixieSk::getLjskjeElse, bo.getLjskjeElse());
lqw.eq(bo.getLjskjeAll() != null, XzdSfkJixieSk::getLjskjeAll, bo.getLjskjeAll());
lqw.eq(bo.getYskblElse() != null, XzdSfkJixieSk::getYskblElse, bo.getYskblElse());
lqw.eq(bo.getBcskbl() != null, XzdSfkJixieSk::getBcskbl, bo.getBcskbl());
lqw.eq(bo.getJzbqskbl() != null, XzdSfkJixieSk::getJzbqskbl, bo.getJzbqskbl());
lqw.eq(StringUtils.isNotBlank(bo.getSssx()), XzdSfkJixieSk::getSssx, bo.getSssx());
lqw.eq(bo.getHthsje() != null, XzdSfkJixieSk::getHthsje, bo.getHthsje());
lqw.eq(bo.getHtljsjskje() != null, XzdSfkJixieSk::getHtljsjskje, bo.getHtljsjskje());
lqw.eq(bo.getLjjsje() != null, XzdSfkJixieSk::getLjjsje, bo.getLjjsje());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdSfkJixieSk::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增机械合同收款
*
* @param bo 机械合同收款
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdSfkJixieSkBo bo) {
XzdSfkJixieSk add = MapstructUtils.convert(bo, XzdSfkJixieSk.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("JXHTSK-");
add.setDocumentCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
//收款信息
if (bo.getSkxx() != null && !bo.getSkxx().isEmpty()){
for (XzdContractSkxxBo skxx : bo.getSkxx()) {
skxx.setMainId(add.getId());
xzdContractSkxxService.insertByBo(skxx);
}
}
//发票信息
if (bo.getFpxx() != null && !bo.getFpxx().isEmpty()){
for (XzdSfkFapiaoBo fpxx : bo.getFpxx()) {
fpxx.setMainDocumentId(add.getId());
sfkFapiaoService.insertByBo(fpxx);
}
}
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改机械合同收款
*
* @param bo 机械合同收款
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdSfkJixieSkBo bo) {
XzdSfkJixieSk update = MapstructUtils.convert(bo, XzdSfkJixieSk.class);
validEntityBeforeSave(update);
xzdContractSkxxService.getBaseMapper().delete(new LambdaQueryWrapper<XzdContractSkxx>().eq(XzdContractSkxx::getMainId, update.getId()));
sfkFapiaoService.getBaseMapper().delete(new LambdaQueryWrapper<XzdSfkFapiao>().eq(XzdSfkFapiao::getMainDocumentId, update.getId()));
if (bo.getSkxx() != null && !bo.getSkxx().isEmpty()){
bo.getSkxx().forEach(skxx -> {
skxx.setMainId(update.getId());
});
xzdContractSkxxService.saveBatch(MapstructUtils.convert(bo.getSkxx(), XzdContractSkxx.class));
}
if (bo.getFpxx() != null && !bo.getFpxx().isEmpty()){
bo.getFpxx().forEach(fpxx -> {
fpxx.setMainDocumentId(update.getId());
});
sfkFapiaoService.saveBatch(MapstructUtils.convert(bo.getFpxx(), XzdSfkFapiao.class));
}
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdSfkJixieSk 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) {
XzdSfkJixieSkVo 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);
}
xzdContractSkxxService.getBaseMapper().delete(new LambdaQueryWrapper<XzdContractSkxx>().in(XzdContractSkxx::getMainId, ids));
sfkFapiaoService.getBaseMapper().delete(new LambdaQueryWrapper<XzdSfkFapiao>().in(XzdSfkFapiao::getMainDocumentId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
* 正常使用只需#processEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('xzdjxhtsksp')")
public void processPlansHandlErequipmentList(ProcessEvent processEvent) {
log.info("机械合同信息收款审核任务执行了{}", processEvent.toString());
String id = processEvent.getBusinessId();
XzdSfkJixieSk vo = baseMapper.selectById(Long.valueOf(id));
if (vo == null) {
return;
}
vo.setAuditStatus(processEvent.getStatus());
this.updateById(vo);
}
/**
* 执行任务创建监听
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
* 在方法中判断流程节点key
* if ("xxx".equals(processTaskEvent.getNodeCode())) {
* //执行业务逻辑
* }
*
* @param processTaskEvent 参数
*/
@org.springframework.context.event.EventListener(condition = "#processTaskEvent.flowCode.endsWith('xzdjxhtsksp')")
public void processTaskPlansHandlerEquipmentList(ProcessTaskEvent processTaskEvent) {
log.info("机械合同信息收款审核任务创建了{}", processTaskEvent.toString());
}
/**
* 监听删除流程事件
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
* 示例为了方便则使用startsWith匹配了全部示例key
*
* @param processDeleteEvent 参数
*/
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('xzdjxhtsksp')")
public void processDeletePlansHandlerEquipmentList(ProcessDeleteEvent processDeleteEvent) {
log.info("机械合同信息收款删除流程事件,机械合同信息收款审核任务执行了{}", processDeleteEvent.toString());
}
}