diff --git a/xinnengyuan/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java b/xinnengyuan/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java index 4acb435a..5a414a17 100644 --- a/xinnengyuan/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java +++ b/xinnengyuan/ruoyi-common/ruoyi-common-translation/src/main/java/org/dromara/common/translation/constant/TransConstant.java @@ -55,7 +55,7 @@ public interface TransConstant { 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"; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/enums/XzdClassEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/enums/XzdClassEnum.java index 6bfe7e6a..8a0e1211 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/enums/XzdClassEnum.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/enums/XzdClassEnum.java @@ -19,7 +19,9 @@ public enum XzdClassEnum { FENBAOHETONGBINGGENG_INFORMATION("xzd_subcontract_change"),//分包合同变更 CAIGOUHETONG_INFORMATION("xzd_purchase_contract_alteration"), //采购变更合同 FENBAOHETONG_JINDU("xzd_settlement_of_subcontracting_contract"),//分包合同进度结算 + JIXIEHTTONG_JINDUJS("xzd_settlement_of_jixie_contract"),//机械合同进度结算 JIXIEHETONG_JINDU("xzd_contract_machinery"),//机械合同信息 + JXHTJG_COMPLETION("xzd_settlement_of_jixie_completion"),//机械合同竣工结算对象 JIXIEHETONGBIANG_XINXI("xzd_contract_machinery"),//机械合同信息变更 PURCHASE_CONTRACT_INFORMATION("xzd_purchase_contract_information");//采购合同 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/enums/ZxdEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/enums/ZxdEnum.java index 6a36ea08..2d58f18c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/enums/ZxdEnum.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/enums/ZxdEnum.java @@ -6,6 +6,7 @@ public enum ZxdEnum { TYPE_CORRESPONDENT("客户","1"), TYPE_SUPPLIER("供应商","2"), FENBAOHET("分包合同","2"), + JIXIEHTTONG("机械合同","5"), CAIGOUHET("采购合同","3"), ZONHEFUWUHET("综合服务合同","4"), HETONGLEIXING("合同外清单","1"), diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdCorrespondentListImp.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdCorrespondentListImp.java index 746081e6..3a153465 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdCorrespondentListImp.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdCorrespondentListImp.java @@ -268,6 +268,8 @@ public class XzdCorrespondentListImp implements IXzdCorrespondentList { xzdYhxxBo.setYhId(bank.getId()); xzdYhxxBo.setMainId(id); xzdYhxxBo.setSfmr(bank.getIsDefault()); + xzdYhxxBo.setAccount(bank.getAccount()); + xzdYhxxBo.setKhhm(bank.getPersonName()); xzdYhxxBo.setType("2"); xzdYhxxes.add(xzdYhxxBo); @@ -494,6 +496,8 @@ public class XzdCorrespondentListImp implements IXzdCorrespondentList { xzdYhxxBo.setYhId(bank.getId()); xzdYhxxBo.setMainId(dto.getXzdCustomerinformation().getId()); xzdYhxxBo.setSfmr(bank.getIsDefault()); + xzdYhxxBo.setAccount(bank.getAccount()); + xzdYhxxBo.setKhhm(bank.getPersonName()); xzdYhxxBo.setType("2"); xzdYhxxes.add(xzdYhxxBo); } @@ -598,13 +602,16 @@ public class XzdCorrespondentListImp implements IXzdCorrespondentList { if ( dto.getXzdSettlementInfo() != null) { //处理开户银行 LambdaQueryWrapper bankLambdaQueryWrapper = new LambdaQueryWrapper<>(); - bankLambdaQueryWrapper.eq(XzdYhxx::getMainId,dto.getXzdSettlementInfo().getId()); + bankLambdaQueryWrapper.eq(XzdYhxx::getMainId,dto.getXzdCustomerinformation().getId()); List xzdYhxxList = xzdYhxxService.list(bankLambdaQueryWrapper); if (xzdYhxxList!= null && !xzdYhxxList.isEmpty()) { List openBanks = new ArrayList<>(); for (XzdYhxx yhxx : xzdYhxxList) { XzdSupplierOpenBank byId = xzdSupplierOpenBankService.getById(yhxx.getYhId()); if (byId != null){ + byId.setAccount(yhxx.getAccount()); + byId.setIsDefault(yhxx.getSfmr()); + byId.setPersonName(yhxx.getKhhm()); openBanks.add(byId); } if ( yhxx != null && "1".equals(yhxx.getSfmr())){ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/controller/XzdSettlementOfJixieContractController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/controller/XzdSettlementOfJixieContractController.java new file mode 100644 index 00000000..6ef32366 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/controller/XzdSettlementOfJixieContractController.java @@ -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 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 getInfojx(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xzdContractMachineryService.queryById(id)); + } + + /** + * 查询机械合同进度结算列表 + */ + @SaCheckPermission("jixiehetongjiesuan:settlementOfJixieContract:list") + @GetMapping("/list") + public TableDataInfo 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 list = xzdSettlementOfJixieContractService.queryList(bo); + ExcelUtil.exportExcel(list, "机械合同进度结算", XzdSettlementOfJixieContractVo.class, response); + } + + /** + * 获取机械合同进度结算详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jixiehetongjiesuan:settlementOfJixieContract:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdSettlementOfJixieContractService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/XzdSettlementOfJixieContract.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/XzdSettlementOfJixieContract.java new file mode 100644 index 00000000..f248fa39 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/XzdSettlementOfJixieContract.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/bo/XzdSettlementOfJixieContractBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/bo/XzdSettlementOfJixieContractBo.java new file mode 100644 index 00000000..4710d5f9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/bo/XzdSettlementOfJixieContractBo.java @@ -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 jlykk; + // 合同内清单 + private List htnqd; +// 变更增加清单 + + private List bgzjqd; + // 合同外清单 + private List htwqd; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/vo/XzdSettlementOfJixieContractVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/vo/XzdSettlementOfJixieContractVo.java new file mode 100644 index 00000000..f2715593 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/domain/vo/XzdSettlementOfJixieContractVo.java @@ -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 jlykk; + // 合同内清单 + private List htnqd; +// 变更增加清单 + + private List bgzjqd; + // 合同外清单 + private List htwqd; + + /** + * 设备租聘列表 + */ + + private List jqlist; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/mapper/XzdSettlementOfJixieContractMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/mapper/XzdSettlementOfJixieContractMapper.java new file mode 100644 index 00000000..82cfd130 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/mapper/XzdSettlementOfJixieContractMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/service/IXzdSettlementOfJixieContractService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/service/IXzdSettlementOfJixieContractService.java new file mode 100644 index 00000000..8a6e8c5b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/service/IXzdSettlementOfJixieContractService.java @@ -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{ + + /** + * 查询机械合同进度结算 + * + * @param id 主键 + * @return 机械合同进度结算 + */ + XzdSettlementOfJixieContractVo queryById(Long id); + + /** + * 分页查询机械合同进度结算列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械合同进度结算分页列表 + */ + TableDataInfo queryPageList(XzdSettlementOfJixieContractBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械合同进度结算列表 + * + * @param bo 查询条件 + * @return 机械合同进度结算列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/service/impl/XzdSettlementOfJixieContractServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/service/impl/XzdSettlementOfJixieContractServiceImpl.java new file mode 100644 index 00000000..10ea58dd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjiesuan/service/impl/XzdSettlementOfJixieContractServiceImpl.java @@ -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 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 xzdEquipmentLeasings = xzdEquipmentLeasingService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdEquipmentLeasing::getRelevanceId, item.getContractCode())); + if (xzdEquipmentLeasings != null && xzdEquipmentLeasings.size() > 0) { + item.setJqlist(xzdEquipmentLeasings); + } + + +// 合同内清单 + List xzdContractInventories = iXzdContractInventoryService.getBaseMapper().selectList(new LambdaQueryWrapper().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 xzdContractInventories1 = iXzdContractInventoryService.getBaseMapper().selectList(new LambdaQueryWrapper().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 temp = iXzdAlterationInventoryService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdAlterationInventory::getPrimaryMeterId, item.getId())); + if (temp != null && temp.size() > 0){ + item.setBgzjqd(MapstructUtils.convert(temp, XzdAlterationInventoryVo.class)); + } + +// 奖惩 + List xzdJsDeductionItems = deductionItemsService.getBaseMapper().selectList(new LambdaQueryWrapper().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 queryPageList(XzdSettlementOfJixieContractBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械合同进度结算列表 + * + * @param bo 查询条件 + * @return 机械合同进度结算列表 + */ + @Override + public List queryList(XzdSettlementOfJixieContractBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdSettlementOfJixieContractBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 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 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 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 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().eq(XzdAlterationInventory::getPrimaryMeterId, bo.getId())); + List 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 htnqd = bo.getHtnqd(); + iXzdContractInventoryService.getBaseMapper().delete(new LambdaQueryWrapper().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 htwqd = bo.getHtwqd(); + iXzdContractInventoryService.getBaseMapper().delete(new LambdaQueryWrapper().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 jlykk = bo.getJlykk(); + HashMap 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 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 deleteIds = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + } + } + } + iXzdAlterationInventoryService.getBaseMapper().delete(new LambdaQueryWrapper().in(XzdAlterationInventory::getPrimaryMeterId, ids)); +// 合同内清单 + iXzdContractInventoryService.getBaseMapper().delete(new LambdaQueryWrapper().in (XzdContractInventory::getPrimaryMeterId, ids)); + deductionItemsService.remove(new LambdaQueryWrapper().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()); + } + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/controller/XzdSettlementOfJixieCompletionController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/controller/XzdSettlementOfJixieCompletionController.java new file mode 100644 index 00000000..e1bd5e8f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/controller/XzdSettlementOfJixieCompletionController.java @@ -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 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 getInfojx(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xzdContractMachineryService.queryById(id)); + } + + /** + * 查询机械合同竣工结算列表 + */ + @SaCheckPermission("jixiehetongjungong:settlementOfJixieCompletion:list") + @GetMapping("/list") + public TableDataInfo 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 list = xzdSettlementOfJixieCompletionService.queryList(bo); + ExcelUtil.exportExcel(list, "机械合同竣工结算", XzdSettlementOfJixieCompletionVo.class, response); + } + + /** + * 获取机械合同竣工结算详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jixiehetongjungong:settlementOfJixieCompletion:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdSettlementOfJixieCompletionService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/XzdSettlementOfJixieCompletion.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/XzdSettlementOfJixieCompletion.java new file mode 100644 index 00000000..12828617 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/XzdSettlementOfJixieCompletion.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/bo/XzdSettlementOfJixieCompletionBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/bo/XzdSettlementOfJixieCompletionBo.java new file mode 100644 index 00000000..fabd24de --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/bo/XzdSettlementOfJixieCompletionBo.java @@ -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 jstzqd; + + + // 奖惩与扣款 + private List jlykk; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/vo/XzdSettlementOfJixieCompletionVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/vo/XzdSettlementOfJixieCompletionVo.java new file mode 100644 index 00000000..cc7a1f4c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/domain/vo/XzdSettlementOfJixieCompletionVo.java @@ -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 jstzqd; + + + // 奖惩与扣款 + private List jlykk; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/mapper/XzdSettlementOfJixieCompletionMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/mapper/XzdSettlementOfJixieCompletionMapper.java new file mode 100644 index 00000000..78b76e54 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/mapper/XzdSettlementOfJixieCompletionMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/service/IXzdSettlementOfJixieCompletionService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/service/IXzdSettlementOfJixieCompletionService.java new file mode 100644 index 00000000..77d1dea1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/service/IXzdSettlementOfJixieCompletionService.java @@ -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{ + + /** + * 查询机械合同竣工结算 + * + * @param id 主键 + * @return 机械合同竣工结算 + */ + XzdSettlementOfJixieCompletionVo queryById(Long id); + + /** + * 分页查询机械合同竣工结算列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械合同竣工结算分页列表 + */ + TableDataInfo queryPageList(XzdSettlementOfJixieCompletionBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械合同竣工结算列表 + * + * @param bo 查询条件 + * @return 机械合同竣工结算列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/service/impl/XzdSettlementOfJixieCompletionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/service/impl/XzdSettlementOfJixieCompletionServiceImpl.java new file mode 100644 index 00000000..019ebb7d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/settlement/jixiehetongjungong/service/impl/XzdSettlementOfJixieCompletionServiceImpl.java @@ -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 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 xzdJsqdTzs = iXzdJsqdTzService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdJsqdTz::getMainId, item.getId())); + if (xzdJsqdTzs != null && xzdJsqdTzs.size() > 0) { + item.setJstzqd(MapstructUtils.convert(xzdJsqdTzs, XzdJsqdTzVo.class)); + } + List xzdJsDeductionItems = deductionItemsService.getBaseMapper().selectList(new LambdaQueryWrapper().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 queryPageList(XzdSettlementOfJixieCompletionBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械合同竣工结算列表 + * + * @param bo 查询条件 + * @return 机械合同竣工结算列表 + */ + @Override + public List queryList(XzdSettlementOfJixieCompletionBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdSettlementOfJixieCompletionBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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 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 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 jstzqd = bo.getJstzqd(); + iXzdJsqdTzService.getBaseMapper().delete(new LambdaQueryWrapper().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 jlykk = bo.getJlykk(); + deductionItemsService.getBaseMapper().delete(new LambdaQueryWrapper().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 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 deleteIds = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + } + } + } + iXzdJsqdTzService.getBaseMapper().delete(new LambdaQueryWrapper().in(XzdJsqdTz::getMainId, ids)); + deductionItemsService.getBaseMapper().delete(new LambdaQueryWrapper().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()); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/controller/XzdSfkJixieFkController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/controller/XzdSfkJixieFkController.java new file mode 100644 index 00000000..2175b884 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/controller/XzdSfkJixieFkController.java @@ -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 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 getInfojx(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xzdContractMachineryService.queryById(id)); + } + + + /** + * 查询机械合同付款列表 + */ + @SaCheckPermission("fkxx:sfkJixieFk:list") + @GetMapping("/list") + public TableDataInfo 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 list = xzdSfkJixieFkService.queryList(bo); + ExcelUtil.exportExcel(list, "机械合同付款", XzdSfkJixieFkVo.class, response); + } + + /** + * 获取机械合同付款详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("fkxx:sfkJixieFk:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdSfkJixieFkService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/XzdSfkJixieFk.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/XzdSfkJixieFk.java new file mode 100644 index 00000000..d5d51d67 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/XzdSfkJixieFk.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/bo/XzdSfkJixieFkBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/bo/XzdSfkJixieFkBo.java new file mode 100644 index 00000000..790b5b22 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/bo/XzdSfkJixieFkBo.java @@ -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 fukuanList; + + List fapiaoList; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/vo/XzdSfkJixieFkVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/vo/XzdSfkJixieFkVo.java new file mode 100644 index 00000000..e99c95a8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/domain/vo/XzdSfkJixieFkVo.java @@ -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 fukuanList; + + List fapiaoList; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/mapper/XzdSfkJixieFkMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/mapper/XzdSfkJixieFkMapper.java new file mode 100644 index 00000000..2281a16e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/mapper/XzdSfkJixieFkMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/service/IXzdSfkJixieFkService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/service/IXzdSfkJixieFkService.java new file mode 100644 index 00000000..a6a4f320 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/service/IXzdSfkJixieFkService.java @@ -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{ + + /** + * 查询机械合同付款 + * + * @param id 主键 + * @return 机械合同付款 + */ + XzdSfkJixieFkVo queryById(Long id); + + /** + * 分页查询机械合同付款列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械合同付款分页列表 + */ + TableDataInfo queryPageList(XzdSfkJixieFkBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械合同付款列表 + * + * @param bo 查询条件 + * @return 机械合同付款列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/service/impl/XzdSfkJixieFkServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/service/impl/XzdSfkJixieFkServiceImpl.java new file mode 100644 index 00000000..a31e9909 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/fkxx/service/impl/XzdSfkJixieFkServiceImpl.java @@ -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 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 queryPageList(XzdSfkJixieFkBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械合同付款列表 + * + * @param bo 查询条件 + * @return 机械合同付款列表 + */ + @Override + public List queryList(XzdSfkJixieFkBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + /** + * 获取子项 + * @param vo + */ + private void getHttk(XzdSfkJixieFkVo vo) { + //发票信息 + vo.setFapiaoList(fapiaoService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdSfkFapiao::getMainDocumentId, vo.getId()))); + + //付款信息 + vo.setFukuanList(fukuanService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(XzdSfkFukuan::getMainDocumentId, vo.getId()))); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdSfkJixieFkBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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().eq(XzdSfkFapiao::getMainDocumentId, bo.getId())); + fukuanService.remove(new LambdaQueryWrapper().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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + XzdSfkJixieFkVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + fapiaoService.remove(new LambdaQueryWrapper().in(XzdSfkFapiao::getMainDocumentId, ids)); + fukuanService.remove(new LambdaQueryWrapper().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()); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/controller/XzdSfkJixieSkController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/controller/XzdSfkJixieSkController.java new file mode 100644 index 00000000..7160f4ff --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/controller/XzdSfkJixieSkController.java @@ -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 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 getInfojx(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(xzdContractMachineryService.queryById(id)); + } + + + /** + * 查询机械合同收款列表 + */ + @SaCheckPermission("skxx:sfkJixieSk:list") + @GetMapping("/list") + public TableDataInfo 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 list = xzdSfkJixieSkService.queryList(bo); + ExcelUtil.exportExcel(list, "机械合同收款", XzdSfkJixieSkVo.class, response); + } + + /** + * 获取机械合同收款详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("skxx:sfkJixieSk:query") + @GetMapping("/{id}") + public R 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 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 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 remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(xzdSfkJixieSkService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/XzdSfkJixieSk.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/XzdSfkJixieSk.java new file mode 100644 index 00000000..18e0725c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/XzdSfkJixieSk.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/bo/XzdSfkJixieSkBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/bo/XzdSfkJixieSkBo.java new file mode 100644 index 00000000..defa21d3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/bo/XzdSfkJixieSkBo.java @@ -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 fpxx; + + /** + * 收款信息 + */ + List skxx; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/vo/XzdSfkJixieSkVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/vo/XzdSfkJixieSkVo.java new file mode 100644 index 00000000..5ee3199e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/domain/vo/XzdSfkJixieSkVo.java @@ -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 fpxx; + + /** + * 收款信息 + */ + List skxx; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/mapper/XzdSfkJixieSkMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/mapper/XzdSfkJixieSkMapper.java new file mode 100644 index 00000000..523d808d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/mapper/XzdSfkJixieSkMapper.java @@ -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 { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/service/IXzdSfkJixieSkService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/service/IXzdSfkJixieSkService.java new file mode 100644 index 00000000..04587c8d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/service/IXzdSfkJixieSkService.java @@ -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{ + + /** + * 查询机械合同收款 + * + * @param id 主键 + * @return 机械合同收款 + */ + XzdSfkJixieSkVo queryById(Long id); + + /** + * 分页查询机械合同收款列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械合同收款分页列表 + */ + TableDataInfo queryPageList(XzdSfkJixieSkBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械合同收款列表 + * + * @param bo 查询条件 + * @return 机械合同收款列表 + */ + List 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 ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/service/impl/XzdSfkJixieSkServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/service/impl/XzdSfkJixieSkServiceImpl.java new file mode 100644 index 00000000..52323805 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/skyfk/jixiehetong/skxx/service/impl/XzdSfkJixieSkServiceImpl.java @@ -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 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 xzdContractSkxxVos = xzdContractSkxxService.getBaseMapper().selectVoList(new LambdaQueryWrapper().eq(XzdContractSkxx::getMainId, vo.getId())); + List xzdSfkFapiaoVos = sfkFapiaoService.getBaseMapper().selectVoList(new LambdaQueryWrapper().eq(XzdSfkFapiao::getMainDocumentId, vo.getId())); + + vo.setSkxx(xzdContractSkxxVos); + vo.setFpxx(xzdSfkFapiaoVos); + } + + /** + * 分页查询机械合同收款列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械合同收款分页列表 + */ + @Override + public TableDataInfo queryPageList(XzdSfkJixieSkBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械合同收款列表 + * + * @param bo 查询条件 + * @return 机械合同收款列表 + */ + @Override + public List queryList(XzdSfkJixieSkBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(XzdSfkJixieSkBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper 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().eq(XzdContractSkxx::getMainId, update.getId())); + sfkFapiaoService.getBaseMapper().delete(new LambdaQueryWrapper().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 ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + XzdSfkJixieSkVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + + xzdContractSkxxService.getBaseMapper().delete(new LambdaQueryWrapper().in(XzdContractSkxx::getMainId, ids)); + sfkFapiaoService.getBaseMapper().delete(new LambdaQueryWrapper().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()); + } + +}