From 1321973ed31d72b30001a8676c02573093bcf69c Mon Sep 17 00:00:00 2001 From: yinq Date: Sat, 7 Mar 2026 17:27:40 +0800 Subject: [PATCH] =?UTF-8?q?1.0.76=20=E5=88=9D=E5=A7=8B=E5=8C=96=E5=90=88?= =?UTF-8?q?=E5=90=8C=E5=8F=98=E6=9B=B4=E3=80=81=E5=90=88=E5=90=8C=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E4=BF=A1=E6=81=AF=E3=80=81=E5=90=88=E5=90=8C=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E7=89=A9=E6=96=99=E3=80=81=E5=90=88=E5=90=8C=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E4=BB=98=E6=AC=BE=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ErpContractChangeController.java | 141 +++++++ .../oa/erp/domain/ErpContractChange.java | 154 +++++++ .../oa/erp/domain/ErpContractChangeInfo.java | 229 +++++++++++ .../erp/domain/ErpContractChangeMaterial.java | 112 +++++ .../ErpContractChangePaymentMethod.java | 87 ++++ .../oa/erp/domain/bo/ErpContractChangeBo.java | 148 +++++++ .../domain/bo/ErpContractChangeInfoBo.java | 221 ++++++++++ .../bo/ErpContractChangeMaterialBo.java | 104 +++++ .../bo/ErpContractChangePaymentMethodBo.java | 79 ++++ .../domain/vo/ErpContractChangeInfoVo.java | 268 ++++++++++++ .../vo/ErpContractChangeMaterialVo.java | 128 ++++++ .../vo/ErpContractChangePaymentMethodVo.java | 99 +++++ .../oa/erp/domain/vo/ErpContractChangeVo.java | 219 ++++++++++ .../mapper/ErpContractChangeInfoMapper.java | 37 ++ .../erp/mapper/ErpContractChangeMapper.java | 37 ++ .../ErpContractChangeMaterialMapper.java | 37 ++ .../ErpContractChangePaymentMethodMapper.java | 37 ++ .../IErpContractChangeInfoService.java | 69 ++++ .../IErpContractChangeMaterialService.java | 69 ++++ ...ErpContractChangePaymentMethodService.java | 69 ++++ .../service/IErpContractChangeService.java | 94 +++++ .../ErpContractChangeInfoServiceImpl.java | 169 ++++++++ .../ErpContractChangeMaterialServiceImpl.java | 146 +++++++ ...ontractChangePaymentMethodServiceImpl.java | 141 +++++++ .../impl/ErpContractChangeServiceImpl.java | 385 ++++++++++++++++++ .../oa/erp/ErpContractChangeInfoMapper.xml | 14 + .../mapper/oa/erp/ErpContractChangeMapper.xml | 14 + .../erp/ErpContractChangeMaterialMapper.xml | 14 + .../ErpContractChangePaymentMethodMapper.xml | 14 + 29 files changed, 3335 insertions(+) create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractChangeController.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChange.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangeInfo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangeMaterial.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangePaymentMethod.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeBo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeInfoBo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeMaterialBo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangePaymentMethodBo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeInfoVo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeMaterialVo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangePaymentMethodVo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeVo.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeInfoMapper.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeMapper.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeMaterialMapper.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangePaymentMethodMapper.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeInfoService.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeMaterialService.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangePaymentMethodService.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeService.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeInfoServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeMaterialServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangePaymentMethodServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeInfoMapper.xml create mode 100644 ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeMapper.xml create mode 100644 ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeMaterialMapper.xml create mode 100644 ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangePaymentMethodMapper.xml diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractChangeController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractChangeController.java new file mode 100644 index 00000000..d227d74f --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/controller/ErpContractChangeController.java @@ -0,0 +1,141 @@ +package org.dromara.oa.erp.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.oa.erp.domain.vo.ErpContractChangeVo; +import org.dromara.oa.erp.domain.vo.ContractChangeDetailVo; +import org.dromara.oa.erp.domain.bo.ErpContractChangeBo; +import org.dromara.oa.erp.domain.bo.ErpContractChangeSaveBo; +import org.dromara.oa.erp.service.IErpContractChangeService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 合同变更 + * 前端访问路由地址为:/oa/erp/contractChange + * + * @author Yinq + * @date 2026-03-07 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/erp/contractChange") +public class ErpContractChangeController extends BaseController { + + private final IErpContractChangeService erpContractChangeService; + + /** + * 查询合同变更列表 + */ + @SaCheckPermission("oa/erp:contractChange:list") + @GetMapping("/list") + public TableDataInfo list(ErpContractChangeBo bo, PageQuery pageQuery) { + return erpContractChangeService.queryPageList(bo, pageQuery); + } + + /** + * 导出合同变更列表 + */ + @SaCheckPermission("oa/erp:contractChange:export") + @Log(title = "合同变更", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ErpContractChangeBo bo, HttpServletResponse response) { + List list = erpContractChangeService.queryList(bo); + ExcelUtil.exportExcel(list, "合同变更", ErpContractChangeVo.class, response); + } + + /** + * 获取合同变更详细信息 + * + * @param contractChangeId 主键 + */ + @SaCheckPermission("oa/erp:contractChange:query") + @GetMapping("/{contractChangeId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("contractChangeId") Long contractChangeId) { + return R.ok(erpContractChangeService.queryById(contractChangeId)); + } + + /** + * 获取合同变更详情(主表+信息快照+物料+付款方式) + * + * @param contractChangeId 主键 + */ + @SaCheckPermission("oa/erp:contractChange:query") + @GetMapping("/detail/{contractChangeId}") + public R getDetail(@NotNull(message = "主键不能为空") + @PathVariable("contractChangeId") Long contractChangeId) { + return R.ok(erpContractChangeService.queryDetailById(contractChangeId)); + } + + /** + * 保存合同变更(主表+信息+物料+付款方式 一个接口,新增与修改统一) + */ + @SaCheckPermission("oa/erp:contractChange:add") + @Log(title = "合同变更", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/save") + public R save(@RequestBody ErpContractChangeSaveBo bo) { + return R.ok(erpContractChangeService.saveContractChange(bo)); + } + + /** + * 新增合同变更 + */ + @SaCheckPermission("oa/erp:contractChange:add") + @Log(title = "合同变更", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ErpContractChangeBo bo) { + return toAjax(erpContractChangeService.insertByBo(bo)); + } + + /** + * 修改合同变更 + */ + @SaCheckPermission("oa/erp:contractChange:edit") + @Log(title = "合同变更", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ErpContractChangeBo bo) { + return toAjax(erpContractChangeService.updateByBo(bo)); + } + + /** + * 删除合同变更 + * + * @param contractChangeIds 主键串 + */ + @SaCheckPermission("oa/erp:contractChange:remove") + @Log(title = "合同变更", businessType = BusinessType.DELETE) + @DeleteMapping("/{contractChangeIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("contractChangeIds") Long[] contractChangeIds) { + return toAjax(erpContractChangeService.deleteWithValidByIds(List.of(contractChangeIds), true)); + } + + /** + * 下拉框查询合同变更列表 + */ + @GetMapping("/getErpContractChangeList") + public R> getErpContractChangeList(ErpContractChangeBo bo) { + List list = erpContractChangeService.queryList(bo); + return R.ok(list); + } + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChange.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChange.java new file mode 100644 index 00000000..276771dd --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChange.java @@ -0,0 +1,154 @@ +package org.dromara.oa.erp.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 合同变更对象 erp_contract_change + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("erp_contract_change") +public class ErpContractChange extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 合同变更ID + */ + @TableId(value = "contract_change_id", type = IdType.ASSIGN_ID) + private Long contractChangeId; + + /** + * 原合同ID + */ + private Long contractId; + + /** + * 变更单编号 + */ + private String changeCode; + + /** + * 变更类型(1内容变更 2解除合同) + */ + private String changeType; + + /** + * 合同编号 + */ + private String changeContractCode; + + /** + * 合同名称 + */ + private String changeContractName; + + /** + * 客户名称 + */ + private String customerName; + + /** + * 合同金额 + */ + private Long changeContractAmount; + + /** + * 原合同编号 + */ + private String contractCode; + + /** + * 原合同名称 + */ + private String contractName; + + /** + * 原客户名称 + */ + private String originalCustomerName; + + /** + * 原合同金额 + */ + private Long originalContractAmount; + + /** + * 变更原因 + */ + private String changeReason; + + /** + * 申请时间 + */ + private Date applyTime; + + /** + * 承办部门 + */ + private Long undertakeDeptId; + + /** + * 承办人 + */ + private Long undertakeBy; + + /** + * 行业/大区 + */ + private String industryRegion; + + /** + * 印章法人单位(1公章 2法人章 3合同章 4销售合同章) + */ + private String sealLegalEntity; + + /** + * 变更状态(1暂存 2审批中 3可用) + */ + private String changeStatus; + + /** + * 流程状态 + */ + private String flowStatus; + + /** + * 是否已回写(0否 1是) + */ + private String writeBackFlag; + + /** + * 回写时间 + */ + private Date writeBackTime; + + /** + * 备注 + */ + private String remark; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + /** + * 删除标志(0存在 1删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangeInfo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangeInfo.java new file mode 100644 index 00000000..c9b77f85 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangeInfo.java @@ -0,0 +1,229 @@ +package org.dromara.oa.erp.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 合同变更信息对象 erp_contract_change_info + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("erp_contract_change_info") +public class ErpContractChangeInfo extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 变更信息快照ID + */ + @TableId(value = "change_info_id", type = IdType.AUTO) + private Long changeInfoId; + + /** + * 合同变更ID + */ + private Long contractChangeId; + + /** + * 有无合同(1有 2无) + */ + private String contractFlag; + + /** + * 客户合同编号 + */ + private String customerContractCode; + + /** + * 合同编号 + */ + private String contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 合同大类 + */ + private String contractCategory; + + /** + * 合同类型 + */ + private String contractType; + + /** + * 业务方向 + */ + private String businessDirection; + + /** + * 部门 + */ + private Long contractDeptId; + + /** + * 合同签订日期 + */ + private Date contractDate; + + /** + * 合同总价 + */ + private Long totalPrice; + + /** + * 甲方公司 + */ + private Long oneCustomerId; + + /** + * 甲方授权代表 + */ + private String oneRepresent; + + /** + * 甲方签字日期 + */ + private Date oneDate; + + /** + * 乙方公司 + */ + private Long twoCustomerId; + + /** + * 乙方授权代表 + */ + private String twoRepresent; + + /** + * 乙方签字日期 + */ + private Date twoDate; + + /** + * 合同负责人 + */ + private Long contractManagerId; + + /** + * 合同模板ID + */ + private Long templateId; + + /** + * 附件ID + */ + private String ossId; + + /** + * 付款账户ID + */ + private Long paymentAccountId; + + /** + * 付款方式 + */ + private String paymentMethod; + + /** + * 签字合同附件 + */ + private Long signatureAppendix; + + /** + * 质保期(天) + */ + private Long warrantyPeriod; + + /** + * 内部合同号 + */ + private String internalContractCode; + + /** + * 外部合同号 + */ + private String externalContractCode; + + /** + * 订单号 + */ + private String orderContractCode; + + /** + * 项目号 + */ + private String projectContractCode; + + /** + * 交付启动期限 + */ + private Long deliveryStart; + + /** + * 质保期描述 + */ + private String warrantyPeriodDescription; + + /** + * 交货地点 + */ + private String deliveryLocation; + + /** + * 运输方式 + */ + private String shipMethod; + + /** + * 合同税率 + */ + private Long taxRate; + + /** + * 签订地点 + */ + private String signingPlace; + + /** + * 合同物料备注 + */ + private String materialRemark; + + /** + * 合同模板标识 + */ + private String contractTemplateFlag; + + /** + * 合同大写金额 + */ + private String capitalizedAmount; + + /** + * 备注 + */ + private String remark; + + /** + * 删除标志 + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangeMaterial.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangeMaterial.java new file mode 100644 index 00000000..b5d39d0b --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangeMaterial.java @@ -0,0 +1,112 @@ +package org.dromara.oa.erp.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 合同变更物料对象 erp_contract_change_material + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("erp_contract_change_material") +public class ErpContractChangeMaterial extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 变更物料快照ID + */ + @TableId(value = "change_material_id", type = IdType.AUTO) + private Long changeMaterialId; + + /** + * 合同变更ID + */ + private Long contractChangeId; + + /** + * 标准物料标识 + */ + private String materialFlag; + + /** + * 产品名称 + */ + private String productName; + + /** + * 规格描述 + */ + private String specificationDescription; + + /** + * 物料ID + */ + private Long materialId; + + /** + * 销售物料ID + */ + private Long relationMaterialId; + + /** + * 数量 + */ + private Long amount; + + /** + * 单位ID + */ + private Long unitId; + + /** + * 未税单价 + */ + private Long beforePrice; + + /** + * 税率 + */ + private Long taxRate; + + /** + * 含税单价 + */ + private Long includingPrice; + + /** + * 小计 + */ + private Long subtotal; + + /** + * 备注 + */ + private String remark; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 激活标识 + */ + private String activeFlag; + + /** + * 删除标志 + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangePaymentMethod.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangePaymentMethod.java new file mode 100644 index 00000000..83865029 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractChangePaymentMethod.java @@ -0,0 +1,87 @@ +package org.dromara.oa.erp.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 合同变更付款方式对象 erp_contract_change_payment_method + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("erp_contract_change_payment_method") +public class ErpContractChangePaymentMethod extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 变更付款方式快照ID + */ + @TableId(value = "change_payment_id", type = IdType.AUTO) + private Long changePaymentId; + + /** + * 合同变更ID + */ + private Long contractChangeId; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 付款节点ID + */ + private Long paymentStageId; + + /** + * 支付期限 + */ + private Long paymentDeadline; + + /** + * 支付比例 + */ + private Long paymentPercentage; + + /** + * 发票比例 + */ + private Long invoicePercentage; + + /** + * 支付金额 + */ + private Long paymentAmount; + + /** + * 付款条款 + */ + private String paymentDescription; + + /** + * 备注 + */ + private String remark; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic + private String delFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeBo.java new file mode 100644 index 00000000..c3edba91 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeBo.java @@ -0,0 +1,148 @@ +package org.dromara.oa.erp.domain.bo; + +import org.dromara.oa.erp.domain.ErpContractChange; +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 合同变更业务对象 erp_contract_change + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ErpContractChange.class, reverseConvertGenerate = false) +public class ErpContractChangeBo extends BaseEntity { + + /** + * 合同变更ID + */ + private Long contractChangeId; + + /** + * 原合同ID + */ + private Long contractId; + + /** + * 变更单编号 + */ + private String changeCode; + + /** + * 变更类型(1内容变更 2解除合同) + */ + @NotBlank(message = "变更类型(1内容变更 2解除合同)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String changeType; + + /** + * 合同编号 + */ + private String changeContractCode; + + /** + * 合同名称 + */ + private String changeContractName; + + /** + * 客户名称 + */ + private String customerName; + + /** + * 合同金额 + */ + private Long changeContractAmount; + + /** + * 原合同编号 + */ + private String contractCode; + + /** + * 原合同名称 + */ + private String contractName; + + /** + * 原客户名称 + */ + private String originalCustomerName; + + /** + * 原合同金额 + */ + private Long originalContractAmount; + + /** + * 变更原因 + */ + @NotBlank(message = "变更原因不能为空", groups = { AddGroup.class, EditGroup.class }) + private String changeReason; + + /** + * 申请时间 + */ + private Date applyTime; + + /** + * 承办部门 + */ + private Long undertakeDeptId; + + /** + * 承办人 + */ + private Long undertakeBy; + + /** + * 行业/大区 + */ + private String industryRegion; + + /** + * 印章法人单位(1公章 2法人章 3合同章 4销售合同章) + */ + private String sealLegalEntity; + + /** + * 变更状态(1暂存 2审批中 3可用) + */ + private String changeStatus; + + /** + * 流程状态 + */ + private String flowStatus; + + /** + * 是否已回写(0否 1是) + */ + private String writeBackFlag; + + /** + * 回写时间 + */ + private Date writeBackTime; + + /** + * 备注 + */ + private String remark; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeInfoBo.java new file mode 100644 index 00000000..4b92c5a9 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeInfoBo.java @@ -0,0 +1,221 @@ +package org.dromara.oa.erp.domain.bo; + +import org.dromara.oa.erp.domain.ErpContractChangeInfo; +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 合同变更信息业务对象 erp_contract_change_info + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ErpContractChangeInfo.class, reverseConvertGenerate = false) +public class ErpContractChangeInfoBo extends BaseEntity { + + /** + * 变更信息快照ID + */ + private Long changeInfoId; + + /** + * 合同变更ID + */ + private Long contractChangeId; + + /** + * 有无合同(1有 2无) + */ + private String contractFlag; + + /** + * 客户合同编号 + */ + private String customerContractCode; + + /** + * 合同编号 + */ + private String contractCode; + + /** + * 合同名称 + */ + private String contractName; + + /** + * 合同大类 + */ + private String contractCategory; + + /** + * 合同类型 + */ + private String contractType; + + /** + * 业务方向 + */ + private String businessDirection; + + /** + * 部门 + */ + private Long contractDeptId; + + /** + * 合同签订日期 + */ + private Date contractDate; + + /** + * 合同总价 + */ + private Long totalPrice; + + /** + * 甲方公司 + */ + private Long oneCustomerId; + + /** + * 甲方授权代表 + */ + private String oneRepresent; + + /** + * 甲方签字日期 + */ + private Date oneDate; + + /** + * 乙方公司 + */ + private Long twoCustomerId; + + /** + * 乙方授权代表 + */ + private String twoRepresent; + + /** + * 乙方签字日期 + */ + private Date twoDate; + + /** + * 合同负责人 + */ + private Long contractManagerId; + + /** + * 合同模板ID + */ + private Long templateId; + + /** + * 附件ID + */ + private String ossId; + + /** + * 付款账户ID + */ + private Long paymentAccountId; + + /** + * 付款方式 + */ + private String paymentMethod; + + /** + * 签字合同附件 + */ + private Long signatureAppendix; + + /** + * 质保期(天) + */ + private Long warrantyPeriod; + + /** + * 内部合同号 + */ + private String internalContractCode; + + /** + * 外部合同号 + */ + private String externalContractCode; + + /** + * 订单号 + */ + private String orderContractCode; + + /** + * 项目号 + */ + private String projectContractCode; + + /** + * 交付启动期限 + */ + private Long deliveryStart; + + /** + * 质保期描述 + */ + private String warrantyPeriodDescription; + + /** + * 交货地点 + */ + private String deliveryLocation; + + /** + * 运输方式 + */ + private String shipMethod; + + /** + * 合同税率 + */ + private Long taxRate; + + /** + * 签订地点 + */ + private String signingPlace; + + /** + * 合同物料备注 + */ + private String materialRemark; + + /** + * 合同模板标识 + */ + private String contractTemplateFlag; + + /** + * 合同大写金额 + */ + private String capitalizedAmount; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeMaterialBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeMaterialBo.java new file mode 100644 index 00000000..aa61d5c9 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangeMaterialBo.java @@ -0,0 +1,104 @@ +package org.dromara.oa.erp.domain.bo; + +import org.dromara.oa.erp.domain.ErpContractChangeMaterial; +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.*; + +/** + * 合同变更物料业务对象 erp_contract_change_material + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ErpContractChangeMaterial.class, reverseConvertGenerate = false) +public class ErpContractChangeMaterialBo extends BaseEntity { + + /** + * 变更物料快照ID + */ + private Long changeMaterialId; + + /** + * 合同变更ID + */ + private Long contractChangeId; + + /** + * 标准物料标识 + */ + private String materialFlag; + + /** + * 产品名称 + */ + private String productName; + + /** + * 规格描述 + */ + private String specificationDescription; + + /** + * 物料ID + */ + private Long materialId; + + /** + * 销售物料ID + */ + private Long relationMaterialId; + + /** + * 数量 + */ + private Long amount; + + /** + * 单位ID + */ + private Long unitId; + + /** + * 未税单价 + */ + private Long beforePrice; + + /** + * 税率 + */ + private Long taxRate; + + /** + * 含税单价 + */ + private Long includingPrice; + + /** + * 小计 + */ + private Long subtotal; + + /** + * 备注 + */ + private String remark; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 激活标识 + */ + private String activeFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangePaymentMethodBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangePaymentMethodBo.java new file mode 100644 index 00000000..55112c6e --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractChangePaymentMethodBo.java @@ -0,0 +1,79 @@ +package org.dromara.oa.erp.domain.bo; + +import org.dromara.oa.erp.domain.ErpContractChangePaymentMethod; +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.*; + +/** + * 合同变更付款方式业务对象 erp_contract_change_payment_method + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ErpContractChangePaymentMethod.class, reverseConvertGenerate = false) +public class ErpContractChangePaymentMethodBo extends BaseEntity { + + /** + * 变更付款方式快照ID + */ + private Long changePaymentId; + + /** + * 合同变更ID + */ + private Long contractChangeId; + + /** + * 排序号 + */ + private Long sortOrder; + + /** + * 付款节点ID + */ + private Long paymentStageId; + + /** + * 支付期限 + */ + private Long paymentDeadline; + + /** + * 支付比例 + */ + private Long paymentPercentage; + + /** + * 发票比例 + */ + private Long invoicePercentage; + + /** + * 支付金额 + */ + private Long paymentAmount; + + /** + * 付款条款 + */ + private String paymentDescription; + + /** + * 备注 + */ + private String remark; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeInfoVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeInfoVo.java new file mode 100644 index 00000000..fc44dbcf --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeInfoVo.java @@ -0,0 +1,268 @@ +package org.dromara.oa.erp.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.oa.erp.domain.ErpContractChangeInfo; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.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.util.Date; + + + +/** + * 合同变更信息视图对象 erp_contract_change_info + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ErpContractChangeInfo.class) +public class ErpContractChangeInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 变更信息快照ID + */ + @ExcelProperty(value = "变更信息快照ID") + private Long changeInfoId; + + /** + * 合同变更ID + */ + @ExcelProperty(value = "合同变更ID") + private Long contractChangeId; + + /** + * 有无合同(1有 2无) + */ + @ExcelProperty(value = "有无合同(1有 2无)") + private String contractFlag; + + /** + * 客户合同编号 + */ + @ExcelProperty(value = "客户合同编号") + private String customerContractCode; + + /** + * 合同编号 + */ + @ExcelProperty(value = "合同编号") + private String contractCode; + + /** + * 合同名称 + */ + @ExcelProperty(value = "合同名称") + private String contractName; + + /** + * 合同大类 + */ + @ExcelProperty(value = "合同大类") + private String contractCategory; + + /** + * 合同类型 + */ + @ExcelProperty(value = "合同类型") + private String contractType; + + /** + * 业务方向 + */ + @ExcelProperty(value = "业务方向") + private String businessDirection; + + /** + * 部门 + */ + @ExcelProperty(value = "部门") + private Long contractDeptId; + + /** + * 合同签订日期 + */ + @ExcelProperty(value = "合同签订日期") + private Date contractDate; + + /** + * 合同总价 + */ + @ExcelProperty(value = "合同总价") + private Long totalPrice; + + /** + * 甲方公司 + */ + @ExcelProperty(value = "甲方公司") + private Long oneCustomerId; + + /** + * 甲方授权代表 + */ + @ExcelProperty(value = "甲方授权代表") + private String oneRepresent; + + /** + * 甲方签字日期 + */ + @ExcelProperty(value = "甲方签字日期") + private Date oneDate; + + /** + * 乙方公司 + */ + @ExcelProperty(value = "乙方公司") + private Long twoCustomerId; + + /** + * 乙方授权代表 + */ + @ExcelProperty(value = "乙方授权代表") + private String twoRepresent; + + /** + * 乙方签字日期 + */ + @ExcelProperty(value = "乙方签字日期") + private Date twoDate; + + /** + * 合同负责人 + */ + @ExcelProperty(value = "合同负责人") + private Long contractManagerId; + + /** + * 合同模板ID + */ + @ExcelProperty(value = "合同模板ID") + private Long templateId; + + /** + * 附件ID + */ + @ExcelProperty(value = "附件ID") + private String ossId; + + /** + * 付款账户ID + */ + @ExcelProperty(value = "付款账户ID") + private Long paymentAccountId; + + /** + * 付款方式 + */ + @ExcelProperty(value = "付款方式") + private String paymentMethod; + + /** + * 签字合同附件 + */ + @ExcelProperty(value = "签字合同附件") + private Long signatureAppendix; + + /** + * 质保期(天) + */ + @ExcelProperty(value = "质保期(天)") + private Long warrantyPeriod; + + /** + * 内部合同号 + */ + @ExcelProperty(value = "内部合同号") + private String internalContractCode; + + /** + * 外部合同号 + */ + @ExcelProperty(value = "外部合同号") + private String externalContractCode; + + /** + * 订单号 + */ + @ExcelProperty(value = "订单号") + private String orderContractCode; + + /** + * 项目号 + */ + @ExcelProperty(value = "项目号") + private String projectContractCode; + + /** + * 交付启动期限 + */ + @ExcelProperty(value = "交付启动期限") + private Long deliveryStart; + + /** + * 质保期描述 + */ + @ExcelProperty(value = "质保期描述") + private String warrantyPeriodDescription; + + /** + * 交货地点 + */ + @ExcelProperty(value = "交货地点") + private String deliveryLocation; + + /** + * 运输方式 + */ + @ExcelProperty(value = "运输方式") + private String shipMethod; + + /** + * 合同税率 + */ + @ExcelProperty(value = "合同税率") + private Long taxRate; + + /** + * 签订地点 + */ + @ExcelProperty(value = "签订地点") + private String signingPlace; + + /** + * 合同物料备注 + */ + @ExcelProperty(value = "合同物料备注") + private String materialRemark; + + /** + * 合同模板标识 + */ + @ExcelProperty(value = "合同模板标识") + private String contractTemplateFlag; + + /** + * 合同大写金额 + */ + @ExcelProperty(value = "合同大写金额") + private String capitalizedAmount; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeMaterialVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeMaterialVo.java new file mode 100644 index 00000000..316f5819 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeMaterialVo.java @@ -0,0 +1,128 @@ +package org.dromara.oa.erp.domain.vo; + +import org.dromara.oa.erp.domain.ErpContractChangeMaterial; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.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.util.Date; + + + +/** + * 合同变更物料视图对象 erp_contract_change_material + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ErpContractChangeMaterial.class) +public class ErpContractChangeMaterialVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 变更物料快照ID + */ + @ExcelProperty(value = "变更物料快照ID") + private Long changeMaterialId; + + /** + * 合同变更ID + */ + @ExcelProperty(value = "合同变更ID") + private Long contractChangeId; + + /** + * 标准物料标识 + */ + @ExcelProperty(value = "标准物料标识") + private String materialFlag; + + /** + * 产品名称 + */ + @ExcelProperty(value = "产品名称") + private String productName; + + /** + * 规格描述 + */ + @ExcelProperty(value = "规格描述") + private String specificationDescription; + + /** + * 物料ID + */ + @ExcelProperty(value = "物料ID") + private Long materialId; + + /** + * 销售物料ID + */ + @ExcelProperty(value = "销售物料ID") + private Long relationMaterialId; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private Long amount; + + /** + * 单位ID + */ + @ExcelProperty(value = "单位ID") + private Long unitId; + + /** + * 未税单价 + */ + @ExcelProperty(value = "未税单价") + private Long beforePrice; + + /** + * 税率 + */ + @ExcelProperty(value = "税率") + private Long taxRate; + + /** + * 含税单价 + */ + @ExcelProperty(value = "含税单价") + private Long includingPrice; + + /** + * 小计 + */ + @ExcelProperty(value = "小计") + private Long subtotal; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 排序号 + */ + @ExcelProperty(value = "排序号") + private Long sortOrder; + + /** + * 激活标识 + */ + @ExcelProperty(value = "激活标识") + private String activeFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangePaymentMethodVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangePaymentMethodVo.java new file mode 100644 index 00000000..ec0c5300 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangePaymentMethodVo.java @@ -0,0 +1,99 @@ +package org.dromara.oa.erp.domain.vo; + +import org.dromara.oa.erp.domain.ErpContractChangePaymentMethod; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.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.util.Date; + + + +/** + * 合同变更付款方式视图对象 erp_contract_change_payment_method + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ErpContractChangePaymentMethod.class) +public class ErpContractChangePaymentMethodVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 变更付款方式快照ID + */ + @ExcelProperty(value = "变更付款方式快照ID") + private Long changePaymentId; + + /** + * 合同变更ID + */ + @ExcelProperty(value = "合同变更ID") + private Long contractChangeId; + + /** + * 排序号 + */ + @ExcelProperty(value = "排序号") + private Long sortOrder; + + /** + * 付款节点ID + */ + @ExcelProperty(value = "付款节点ID") + private Long paymentStageId; + + /** + * 支付期限 + */ + @ExcelProperty(value = "支付期限") + private Long paymentDeadline; + + /** + * 支付比例 + */ + @ExcelProperty(value = "支付比例") + private Long paymentPercentage; + + /** + * 发票比例 + */ + @ExcelProperty(value = "发票比例") + private Long invoicePercentage; + + /** + * 支付金额 + */ + @ExcelProperty(value = "支付金额") + private Long paymentAmount; + + /** + * 付款条款 + */ + @ExcelProperty(value = "付款条款") + private String paymentDescription; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 激活标识(1是 0否) + */ + @ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=是,0=否") + private String activeFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeVo.java new file mode 100644 index 00000000..1a819ecf --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractChangeVo.java @@ -0,0 +1,219 @@ +package org.dromara.oa.erp.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.oa.erp.domain.ErpContractChange; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.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.util.Date; + + + +/** + * 合同变更视图对象 erp_contract_change + * + * @author Yinq + * @date 2026-03-07 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ErpContractChange.class) +public class ErpContractChangeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 合同变更ID + */ + @ExcelProperty(value = "合同变更ID") + private Long contractChangeId; + + /** + * 原合同ID + */ + @ExcelProperty(value = "原合同ID") + private Long contractId; + + /** + * 变更单编号 + */ + @ExcelProperty(value = "变更单编号") + private String changeCode; + + /** + * 变更类型(1内容变更 2解除合同) + */ + @ExcelProperty(value = "变更类型(1内容变更 2解除合同)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "contract_change_type") + private String changeType; + + /** + * 合同编号 + */ + @ExcelProperty(value = "合同编号") + private String changeContractCode; + + /** + * 合同名称 + */ + @ExcelProperty(value = "合同名称") + private String changeContractName; + + /** + * 客户名称 + */ + @ExcelProperty(value = "客户名称") + private String customerName; + + /** + * 合同金额 + */ + @ExcelProperty(value = "合同金额") + private Long changeContractAmount; + + /** + * 原合同编号 + */ + @ExcelProperty(value = "原合同编号") + private String contractCode; + + /** + * 原合同名称 + */ + @ExcelProperty(value = "原合同名称") + private String contractName; + + /** + * 原客户名称 + */ + @ExcelProperty(value = "原客户名称") + private String originalCustomerName; + + /** + * 原合同金额 + */ + @ExcelProperty(value = "原合同金额") + private Long originalContractAmount; + + /** + * 变更原因 + */ + @ExcelProperty(value = "变更原因") + private String changeReason; + + /** + * 申请时间 + */ + @ExcelProperty(value = "申请时间") + private Date applyTime; + + /** + * 承办部门 + */ + @ExcelProperty(value = "承办部门") + private Long undertakeDeptId; + + /** + * 承办人 + */ + @ExcelProperty(value = "承办人") + private Long undertakeBy; + + /** + * 行业/大区 + */ + @ExcelProperty(value = "行业/大区") + private String industryRegion; + + /** + * 印章法人单位(1公章 2法人章 3合同章 4销售合同章) + */ + @ExcelProperty(value = "印章法人单位", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "seal_legal_entity") + private String sealLegalEntity; + + /** + * 变更状态(1暂存 2审批中 3可用) + */ + @ExcelProperty(value = "变更状态(1暂存 2审批中 3可用)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "contract_change_status") + private String changeStatus; + + /** + * 流程状态 + */ + @ExcelProperty(value = "流程状态") + private String flowStatus; + + /** + * 是否已回写(0否 1是) + */ + @ExcelProperty(value = "是否已回写(0否 1是)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "write_back_flag") + private String writeBackFlag; + + /** + * 回写时间 + */ + @ExcelProperty(value = "回写时间") + private Date writeBackTime; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 激活标识(1是 0否) + */ + @ExcelProperty(value = "激活标识(1是 0否)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "active_flag") + private String activeFlag; + + /** + * 删除标志(0存在 1删除) + */ + @ExcelProperty(value = "删除标志(0存在 1删除)") + private String delFlag; + + /** + * 创建部门 + */ + @ExcelProperty(value = "创建部门") + private Long createDept; + + /** + * 创建人 + */ + @ExcelProperty(value = "创建人") + private Long createBy; + + /** + * 创建时间 + */ + @ExcelProperty(value = "创建时间") + private Date createTime; + + /** + * 更新人 + */ + @ExcelProperty(value = "更新人") + private Long updateBy; + + /** + * 更新时间 + */ + @ExcelProperty(value = "更新时间") + private Date updateTime; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeInfoMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeInfoMapper.java new file mode 100644 index 00000000..67851736 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeInfoMapper.java @@ -0,0 +1,37 @@ +package org.dromara.oa.erp.mapper; + +import java.util.List; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.oa.erp.domain.ErpContractChangeInfo; +import org.dromara.oa.erp.domain.vo.ErpContractChangeInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 合同变更信息Mapper接口 + * + * @author Yinq + * @date 2026-03-07 + */ +public interface ErpContractChangeInfoMapper extends BaseMapperPlus { + + /** + * 查询合同变更信息列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 合同变更信息集合 + */ + public Page selectCustomErpContractChangeInfoVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询合同变更信息列表 + * + * @param queryWrapper 条件 + * @return 合同变更信息集合 + */ + public List selectCustomErpContractChangeInfoVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeMapper.java new file mode 100644 index 00000000..7fdfaef3 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeMapper.java @@ -0,0 +1,37 @@ +package org.dromara.oa.erp.mapper; + +import java.util.List; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.oa.erp.domain.ErpContractChange; +import org.dromara.oa.erp.domain.vo.ErpContractChangeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 合同变更Mapper接口 + * + * @author Yinq + * @date 2026-03-07 + */ +public interface ErpContractChangeMapper extends BaseMapperPlus { + + /** + * 查询合同变更列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 合同变更集合 + */ + public Page selectCustomErpContractChangeVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询合同变更列表 + * + * @param queryWrapper 条件 + * @return 合同变更集合 + */ + public List selectCustomErpContractChangeVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeMaterialMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeMaterialMapper.java new file mode 100644 index 00000000..c26a8f6b --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangeMaterialMapper.java @@ -0,0 +1,37 @@ +package org.dromara.oa.erp.mapper; + +import java.util.List; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.oa.erp.domain.ErpContractChangeMaterial; +import org.dromara.oa.erp.domain.vo.ErpContractChangeMaterialVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 合同变更物料Mapper接口 + * + * @author Yinq + * @date 2026-03-07 + */ +public interface ErpContractChangeMaterialMapper extends BaseMapperPlus { + + /** + * 查询合同变更物料列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 合同变更物料集合 + */ + public Page selectCustomErpContractChangeMaterialVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询合同变更物料列表 + * + * @param queryWrapper 条件 + * @return 合同变更物料集合 + */ + public List selectCustomErpContractChangeMaterialVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangePaymentMethodMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangePaymentMethodMapper.java new file mode 100644 index 00000000..1e19435d --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractChangePaymentMethodMapper.java @@ -0,0 +1,37 @@ +package org.dromara.oa.erp.mapper; + +import java.util.List; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.oa.erp.domain.ErpContractChangePaymentMethod; +import org.dromara.oa.erp.domain.vo.ErpContractChangePaymentMethodVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 合同变更付款方式Mapper接口 + * + * @author Yinq + * @date 2026-03-07 + */ +public interface ErpContractChangePaymentMethodMapper extends BaseMapperPlus { + + /** + * 查询合同变更付款方式列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 合同变更付款方式集合 + */ + public Page selectCustomErpContractChangePaymentMethodVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询合同变更付款方式列表 + * + * @param queryWrapper 条件 + * @return 合同变更付款方式集合 + */ + public List selectCustomErpContractChangePaymentMethodVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeInfoService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeInfoService.java new file mode 100644 index 00000000..7bebbe5a --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeInfoService.java @@ -0,0 +1,69 @@ +package org.dromara.oa.erp.service; + +import org.dromara.oa.erp.domain.ErpContractChangeInfo; +import org.dromara.oa.erp.domain.vo.ErpContractChangeInfoVo; +import org.dromara.oa.erp.domain.bo.ErpContractChangeInfoBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 合同变更信息Service接口 + * + * @author Yinq + * @date 2026-03-07 + */ +public interface IErpContractChangeInfoService { + + /** + * 查询合同变更信息 + * + * @param changeInfoId 主键 + * @return 合同变更信息 + */ + ErpContractChangeInfoVo queryById(Long changeInfoId); + + /** + * 分页查询合同变更信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同变更信息分页列表 + */ + TableDataInfo queryPageList(ErpContractChangeInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的合同变更信息列表 + * + * @param bo 查询条件 + * @return 合同变更信息列表 + */ + List queryList(ErpContractChangeInfoBo bo); + + /** + * 新增合同变更信息 + * + * @param bo 合同变更信息 + * @return 是否新增成功 + */ + Boolean insertByBo(ErpContractChangeInfoBo bo); + + /** + * 修改合同变更信息 + * + * @param bo 合同变更信息 + * @return 是否修改成功 + */ + Boolean updateByBo(ErpContractChangeInfoBo bo); + + /** + * 校验并批量删除合同变更信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeMaterialService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeMaterialService.java new file mode 100644 index 00000000..8c938ca4 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeMaterialService.java @@ -0,0 +1,69 @@ +package org.dromara.oa.erp.service; + +import org.dromara.oa.erp.domain.ErpContractChangeMaterial; +import org.dromara.oa.erp.domain.vo.ErpContractChangeMaterialVo; +import org.dromara.oa.erp.domain.bo.ErpContractChangeMaterialBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 合同变更物料Service接口 + * + * @author Yinq + * @date 2026-03-07 + */ +public interface IErpContractChangeMaterialService { + + /** + * 查询合同变更物料 + * + * @param changeMaterialId 主键 + * @return 合同变更物料 + */ + ErpContractChangeMaterialVo queryById(Long changeMaterialId); + + /** + * 分页查询合同变更物料列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同变更物料分页列表 + */ + TableDataInfo queryPageList(ErpContractChangeMaterialBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的合同变更物料列表 + * + * @param bo 查询条件 + * @return 合同变更物料列表 + */ + List queryList(ErpContractChangeMaterialBo bo); + + /** + * 新增合同变更物料 + * + * @param bo 合同变更物料 + * @return 是否新增成功 + */ + Boolean insertByBo(ErpContractChangeMaterialBo bo); + + /** + * 修改合同变更物料 + * + * @param bo 合同变更物料 + * @return 是否修改成功 + */ + Boolean updateByBo(ErpContractChangeMaterialBo bo); + + /** + * 校验并批量删除合同变更物料信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangePaymentMethodService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangePaymentMethodService.java new file mode 100644 index 00000000..b646124b --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangePaymentMethodService.java @@ -0,0 +1,69 @@ +package org.dromara.oa.erp.service; + +import org.dromara.oa.erp.domain.ErpContractChangePaymentMethod; +import org.dromara.oa.erp.domain.vo.ErpContractChangePaymentMethodVo; +import org.dromara.oa.erp.domain.bo.ErpContractChangePaymentMethodBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 合同变更付款方式Service接口 + * + * @author Yinq + * @date 2026-03-07 + */ +public interface IErpContractChangePaymentMethodService { + + /** + * 查询合同变更付款方式 + * + * @param changePaymentId 主键 + * @return 合同变更付款方式 + */ + ErpContractChangePaymentMethodVo queryById(Long changePaymentId); + + /** + * 分页查询合同变更付款方式列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同变更付款方式分页列表 + */ + TableDataInfo queryPageList(ErpContractChangePaymentMethodBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的合同变更付款方式列表 + * + * @param bo 查询条件 + * @return 合同变更付款方式列表 + */ + List queryList(ErpContractChangePaymentMethodBo bo); + + /** + * 新增合同变更付款方式 + * + * @param bo 合同变更付款方式 + * @return 是否新增成功 + */ + Boolean insertByBo(ErpContractChangePaymentMethodBo bo); + + /** + * 修改合同变更付款方式 + * + * @param bo 合同变更付款方式 + * @return 是否修改成功 + */ + Boolean updateByBo(ErpContractChangePaymentMethodBo bo); + + /** + * 校验并批量删除合同变更付款方式信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeService.java new file mode 100644 index 00000000..64ab5b58 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/IErpContractChangeService.java @@ -0,0 +1,94 @@ +package org.dromara.oa.erp.service; + +import org.dromara.oa.erp.domain.ErpContractChange; +import org.dromara.oa.erp.domain.vo.ErpContractChangeVo; +import org.dromara.oa.erp.domain.vo.ContractChangeDetailVo; +import org.dromara.oa.erp.domain.bo.ErpContractChangeBo; +import org.dromara.oa.erp.domain.bo.ErpContractChangeSaveBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 合同变更Service接口 + * + * @author Yinq + * @date 2026-03-07 + */ +public interface IErpContractChangeService { + + /** + * 查询合同变更 + * + * @param contractChangeId 主键 + * @return 合同变更 + */ + ErpContractChangeVo queryById(Long contractChangeId); + + /** + * 分页查询合同变更列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同变更分页列表 + */ + TableDataInfo queryPageList(ErpContractChangeBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的合同变更列表 + * + * @param bo 查询条件 + * @return 合同变更列表 + */ + List queryList(ErpContractChangeBo bo); + + /** + * 新增合同变更 + * + * @param bo 合同变更 + * @return 是否新增成功 + */ + Boolean insertByBo(ErpContractChangeBo bo); + + /** + * 修改合同变更 + * + * @param bo 合同变更 + * @return 是否修改成功 + */ + Boolean updateByBo(ErpContractChangeBo bo); + + /** + * 校验并批量删除合同变更信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 保存合同变更(主表+信息快照+物料+付款方式 一个接口) + * + * @param bo 保存业务对象 + * @return 合同变更主表ID + */ + Long saveContractChange(ErpContractChangeSaveBo bo); + + /** + * 查询合同变更详情(主表+信息+物料+付款方式) + * + * @param contractChangeId 合同变更ID + * @return 详情 + */ + ContractChangeDetailVo queryDetailById(Long contractChangeId); + + /** + * 审批通过后回写合同表/合同物料/合同付款方式(仅流程完成时调用,幂等) + * + * @param contractChangeId 合同变更ID + */ + void writeBackToContract(Long contractChangeId); +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeInfoServiceImpl.java new file mode 100644 index 00000000..28dffe4e --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeInfoServiceImpl.java @@ -0,0 +1,169 @@ +package org.dromara.oa.erp.service.impl; + +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.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.oa.erp.domain.bo.ErpContractChangeInfoBo; +import org.dromara.oa.erp.domain.vo.ErpContractChangeInfoVo; +import org.dromara.oa.erp.domain.ErpContractChangeInfo; +import org.dromara.oa.erp.mapper.ErpContractChangeInfoMapper; +import org.dromara.oa.erp.service.IErpContractChangeInfoService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 合同变更信息Service业务层处理 + * + * @author Yinq + * @date 2026-03-07 + */ +@RequiredArgsConstructor +@Service +public class ErpContractChangeInfoServiceImpl implements IErpContractChangeInfoService { + + private final ErpContractChangeInfoMapper baseMapper; + + /** + * 查询合同变更信息 + * + * @param changeInfoId 主键 + * @return 合同变更信息 + */ + @Override + public ErpContractChangeInfoVo queryById(Long changeInfoId){ + return baseMapper.selectVoById(changeInfoId); + } + + /** + * 分页查询合同变更信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同变更信息分页列表 + */ + @Override + public TableDataInfo queryPageList(ErpContractChangeInfoBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的合同变更信息列表 + * + * @param bo 查询条件 + * @return 合同变更信息列表 + */ + @Override + public List queryList(ErpContractChangeInfoBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(ErpContractChangeInfoBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpContractChangeInfo.class) + .selectAll(ErpContractChangeInfo.class) + .eq(ErpContractChangeInfo::getDelFlag, "0") + .eq(bo.getContractChangeId() != null, ErpContractChangeInfo::getContractChangeId, bo.getContractChangeId()) + .eq(StringUtils.isNotBlank(bo.getContractFlag()), ErpContractChangeInfo::getContractFlag, bo.getContractFlag()) + .eq(StringUtils.isNotBlank(bo.getCustomerContractCode()), ErpContractChangeInfo::getCustomerContractCode, bo.getCustomerContractCode()) + .eq(StringUtils.isNotBlank(bo.getContractCode()), ErpContractChangeInfo::getContractCode, bo.getContractCode()) + .like(StringUtils.isNotBlank(bo.getContractName()), ErpContractChangeInfo::getContractName, bo.getContractName()) + .eq(StringUtils.isNotBlank(bo.getContractCategory()), ErpContractChangeInfo::getContractCategory, bo.getContractCategory()) + .eq(StringUtils.isNotBlank(bo.getContractType()), ErpContractChangeInfo::getContractType, bo.getContractType()) + .eq(StringUtils.isNotBlank(bo.getBusinessDirection()), ErpContractChangeInfo::getBusinessDirection, bo.getBusinessDirection()) + .eq(bo.getContractDeptId() != null, ErpContractChangeInfo::getContractDeptId, bo.getContractDeptId()) + .eq(bo.getContractDate() != null, ErpContractChangeInfo::getContractDate, bo.getContractDate()) + .eq(bo.getTotalPrice() != null, ErpContractChangeInfo::getTotalPrice, bo.getTotalPrice()) + .eq(bo.getOneCustomerId() != null, ErpContractChangeInfo::getOneCustomerId, bo.getOneCustomerId()) + .eq(StringUtils.isNotBlank(bo.getOneRepresent()), ErpContractChangeInfo::getOneRepresent, bo.getOneRepresent()) + .eq(bo.getOneDate() != null, ErpContractChangeInfo::getOneDate, bo.getOneDate()) + .eq(bo.getTwoCustomerId() != null, ErpContractChangeInfo::getTwoCustomerId, bo.getTwoCustomerId()) + .eq(StringUtils.isNotBlank(bo.getTwoRepresent()), ErpContractChangeInfo::getTwoRepresent, bo.getTwoRepresent()) + .eq(bo.getTwoDate() != null, ErpContractChangeInfo::getTwoDate, bo.getTwoDate()) + .eq(bo.getContractManagerId() != null, ErpContractChangeInfo::getContractManagerId, bo.getContractManagerId()) + .eq(bo.getTemplateId() != null, ErpContractChangeInfo::getTemplateId, bo.getTemplateId()) + .eq(StringUtils.isNotBlank(bo.getOssId()), ErpContractChangeInfo::getOssId, bo.getOssId()) + .eq(bo.getPaymentAccountId() != null, ErpContractChangeInfo::getPaymentAccountId, bo.getPaymentAccountId()) + .eq(StringUtils.isNotBlank(bo.getPaymentMethod()), ErpContractChangeInfo::getPaymentMethod, bo.getPaymentMethod()) + .eq(bo.getSignatureAppendix() != null, ErpContractChangeInfo::getSignatureAppendix, bo.getSignatureAppendix()) + .eq(bo.getWarrantyPeriod() != null, ErpContractChangeInfo::getWarrantyPeriod, bo.getWarrantyPeriod()) + .eq(StringUtils.isNotBlank(bo.getInternalContractCode()), ErpContractChangeInfo::getInternalContractCode, bo.getInternalContractCode()) + .eq(StringUtils.isNotBlank(bo.getExternalContractCode()), ErpContractChangeInfo::getExternalContractCode, bo.getExternalContractCode()) + .eq(StringUtils.isNotBlank(bo.getOrderContractCode()), ErpContractChangeInfo::getOrderContractCode, bo.getOrderContractCode()) + .eq(StringUtils.isNotBlank(bo.getProjectContractCode()), ErpContractChangeInfo::getProjectContractCode, bo.getProjectContractCode()) + .eq(bo.getDeliveryStart() != null, ErpContractChangeInfo::getDeliveryStart, bo.getDeliveryStart()) + .eq(StringUtils.isNotBlank(bo.getWarrantyPeriodDescription()), ErpContractChangeInfo::getWarrantyPeriodDescription, bo.getWarrantyPeriodDescription()) + .eq(StringUtils.isNotBlank(bo.getDeliveryLocation()), ErpContractChangeInfo::getDeliveryLocation, bo.getDeliveryLocation()) + .eq(StringUtils.isNotBlank(bo.getShipMethod()), ErpContractChangeInfo::getShipMethod, bo.getShipMethod()) + .eq(bo.getTaxRate() != null, ErpContractChangeInfo::getTaxRate, bo.getTaxRate()) + .eq(StringUtils.isNotBlank(bo.getSigningPlace()), ErpContractChangeInfo::getSigningPlace, bo.getSigningPlace()) + .eq(StringUtils.isNotBlank(bo.getMaterialRemark()), ErpContractChangeInfo::getMaterialRemark, bo.getMaterialRemark()) + .eq(StringUtils.isNotBlank(bo.getContractTemplateFlag()), ErpContractChangeInfo::getContractTemplateFlag, bo.getContractTemplateFlag()) + .eq(StringUtils.isNotBlank(bo.getCapitalizedAmount()), ErpContractChangeInfo::getCapitalizedAmount, bo.getCapitalizedAmount()) +; + return lqw; + } + + /** + * 新增合同变更信息 + * + * @param bo 合同变更信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ErpContractChangeInfoBo bo) { + ErpContractChangeInfo add = MapstructUtils.convert(bo, ErpContractChangeInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setChangeInfoId(add.getChangeInfoId()); + } + return flag; + } + + /** + * 修改合同变更信息 + * + * @param bo 合同变更信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ErpContractChangeInfoBo bo) { + ErpContractChangeInfo update = MapstructUtils.convert(bo, ErpContractChangeInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ErpContractChangeInfo entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除合同变更信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeMaterialServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeMaterialServiceImpl.java new file mode 100644 index 00000000..78ece7eb --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeMaterialServiceImpl.java @@ -0,0 +1,146 @@ +package org.dromara.oa.erp.service.impl; + +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.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.oa.erp.domain.bo.ErpContractChangeMaterialBo; +import org.dromara.oa.erp.domain.vo.ErpContractChangeMaterialVo; +import org.dromara.oa.erp.domain.ErpContractChangeMaterial; +import org.dromara.oa.erp.mapper.ErpContractChangeMaterialMapper; +import org.dromara.oa.erp.service.IErpContractChangeMaterialService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 合同变更物料Service业务层处理 + * + * @author Yinq + * @date 2026-03-07 + */ +@RequiredArgsConstructor +@Service +public class ErpContractChangeMaterialServiceImpl implements IErpContractChangeMaterialService { + + private final ErpContractChangeMaterialMapper baseMapper; + + /** + * 查询合同变更物料 + * + * @param changeMaterialId 主键 + * @return 合同变更物料 + */ + @Override + public ErpContractChangeMaterialVo queryById(Long changeMaterialId){ + return baseMapper.selectVoById(changeMaterialId); + } + + /** + * 分页查询合同变更物料列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同变更物料分页列表 + */ + @Override + public TableDataInfo queryPageList(ErpContractChangeMaterialBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的合同变更物料列表 + * + * @param bo 查询条件 + * @return 合同变更物料列表 + */ + @Override + public List queryList(ErpContractChangeMaterialBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(ErpContractChangeMaterialBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpContractChangeMaterial.class) + .selectAll(ErpContractChangeMaterial.class) + .eq(ErpContractChangeMaterial::getDelFlag, "0") + .eq(bo.getContractChangeId() != null, ErpContractChangeMaterial::getContractChangeId, bo.getContractChangeId()) + .eq(StringUtils.isNotBlank(bo.getMaterialFlag()), ErpContractChangeMaterial::getMaterialFlag, bo.getMaterialFlag()) + .like(StringUtils.isNotBlank(bo.getProductName()), ErpContractChangeMaterial::getProductName, bo.getProductName()) + .eq(StringUtils.isNotBlank(bo.getSpecificationDescription()), ErpContractChangeMaterial::getSpecificationDescription, bo.getSpecificationDescription()) + .eq(bo.getMaterialId() != null, ErpContractChangeMaterial::getMaterialId, bo.getMaterialId()) + .eq(bo.getRelationMaterialId() != null, ErpContractChangeMaterial::getRelationMaterialId, bo.getRelationMaterialId()) + .eq(bo.getAmount() != null, ErpContractChangeMaterial::getAmount, bo.getAmount()) + .eq(bo.getUnitId() != null, ErpContractChangeMaterial::getUnitId, bo.getUnitId()) + .eq(bo.getBeforePrice() != null, ErpContractChangeMaterial::getBeforePrice, bo.getBeforePrice()) + .eq(bo.getTaxRate() != null, ErpContractChangeMaterial::getTaxRate, bo.getTaxRate()) + .eq(bo.getIncludingPrice() != null, ErpContractChangeMaterial::getIncludingPrice, bo.getIncludingPrice()) + .eq(bo.getSubtotal() != null, ErpContractChangeMaterial::getSubtotal, bo.getSubtotal()) + .eq(bo.getSortOrder() != null, ErpContractChangeMaterial::getSortOrder, bo.getSortOrder()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractChangeMaterial::getActiveFlag, bo.getActiveFlag()) +; + return lqw; + } + + /** + * 新增合同变更物料 + * + * @param bo 合同变更物料 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ErpContractChangeMaterialBo bo) { + ErpContractChangeMaterial add = MapstructUtils.convert(bo, ErpContractChangeMaterial.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setChangeMaterialId(add.getChangeMaterialId()); + } + return flag; + } + + /** + * 修改合同变更物料 + * + * @param bo 合同变更物料 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ErpContractChangeMaterialBo bo) { + ErpContractChangeMaterial update = MapstructUtils.convert(bo, ErpContractChangeMaterial.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ErpContractChangeMaterial entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除合同变更物料信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangePaymentMethodServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangePaymentMethodServiceImpl.java new file mode 100644 index 00000000..2ed342c7 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangePaymentMethodServiceImpl.java @@ -0,0 +1,141 @@ +package org.dromara.oa.erp.service.impl; + +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.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.oa.erp.domain.bo.ErpContractChangePaymentMethodBo; +import org.dromara.oa.erp.domain.vo.ErpContractChangePaymentMethodVo; +import org.dromara.oa.erp.domain.ErpContractChangePaymentMethod; +import org.dromara.oa.erp.mapper.ErpContractChangePaymentMethodMapper; +import org.dromara.oa.erp.service.IErpContractChangePaymentMethodService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 合同变更付款方式Service业务层处理 + * + * @author Yinq + * @date 2026-03-07 + */ +@RequiredArgsConstructor +@Service +public class ErpContractChangePaymentMethodServiceImpl implements IErpContractChangePaymentMethodService { + + private final ErpContractChangePaymentMethodMapper baseMapper; + + /** + * 查询合同变更付款方式 + * + * @param changePaymentId 主键 + * @return 合同变更付款方式 + */ + @Override + public ErpContractChangePaymentMethodVo queryById(Long changePaymentId){ + return baseMapper.selectVoById(changePaymentId); + } + + /** + * 分页查询合同变更付款方式列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同变更付款方式分页列表 + */ + @Override + public TableDataInfo queryPageList(ErpContractChangePaymentMethodBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的合同变更付款方式列表 + * + * @param bo 查询条件 + * @return 合同变更付款方式列表 + */ + @Override + public List queryList(ErpContractChangePaymentMethodBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(ErpContractChangePaymentMethodBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpContractChangePaymentMethod.class) + .selectAll(ErpContractChangePaymentMethod.class) + .eq(ErpContractChangePaymentMethod::getDelFlag, "0") + .eq(bo.getContractChangeId() != null, ErpContractChangePaymentMethod::getContractChangeId, bo.getContractChangeId()) + .eq(bo.getSortOrder() != null, ErpContractChangePaymentMethod::getSortOrder, bo.getSortOrder()) + .eq(bo.getPaymentStageId() != null, ErpContractChangePaymentMethod::getPaymentStageId, bo.getPaymentStageId()) + .eq(bo.getPaymentDeadline() != null, ErpContractChangePaymentMethod::getPaymentDeadline, bo.getPaymentDeadline()) + .eq(bo.getPaymentPercentage() != null, ErpContractChangePaymentMethod::getPaymentPercentage, bo.getPaymentPercentage()) + .eq(bo.getInvoicePercentage() != null, ErpContractChangePaymentMethod::getInvoicePercentage, bo.getInvoicePercentage()) + .eq(bo.getPaymentAmount() != null, ErpContractChangePaymentMethod::getPaymentAmount, bo.getPaymentAmount()) + .eq(StringUtils.isNotBlank(bo.getPaymentDescription()), ErpContractChangePaymentMethod::getPaymentDescription, bo.getPaymentDescription()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractChangePaymentMethod::getActiveFlag, bo.getActiveFlag()) +; + return lqw; + } + + /** + * 新增合同变更付款方式 + * + * @param bo 合同变更付款方式 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ErpContractChangePaymentMethodBo bo) { + ErpContractChangePaymentMethod add = MapstructUtils.convert(bo, ErpContractChangePaymentMethod.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setChangePaymentId(add.getChangePaymentId()); + } + return flag; + } + + /** + * 修改合同变更付款方式 + * + * @param bo 合同变更付款方式 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ErpContractChangePaymentMethodBo bo) { + ErpContractChangePaymentMethod update = MapstructUtils.convert(bo, ErpContractChangePaymentMethod.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ErpContractChangePaymentMethod entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除合同变更付款方式信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeServiceImpl.java new file mode 100644 index 00000000..5706f496 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeServiceImpl.java @@ -0,0 +1,385 @@ +package org.dromara.oa.erp.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.dromara.common.core.enums.BusinessStatusEnum; +import org.dromara.common.tenant.helper.TenantHelper; +import org.dromara.oa.erp.domain.bo.ErpContractChangeMaterialBo; +import org.dromara.oa.erp.domain.bo.ErpContractChangePaymentMethodBo; +import org.dromara.workflow.api.event.ProcessEvent; +import org.springframework.context.event.EventListener; +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.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.dromara.oa.erp.domain.*; +import org.dromara.oa.erp.domain.bo.ErpContractChangeBo; +import org.dromara.oa.erp.domain.bo.ErpContractChangeSaveBo; +import org.dromara.oa.erp.domain.vo.*; +import org.dromara.oa.erp.mapper.*; +import org.dromara.oa.erp.service.IErpContractChangeService; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.Objects; + +/** + * 合同变更Service业务层处理 + * + * @author Yinq + * @date 2026-03-07 + */ +@RequiredArgsConstructor +@Service +public class ErpContractChangeServiceImpl implements IErpContractChangeService { + + private final ErpContractChangeMapper baseMapper; + private final ErpContractChangeInfoMapper changeInfoMapper; + private final ErpContractChangeMaterialMapper changeMaterialMapper; + private final ErpContractChangePaymentMethodMapper changePaymentMethodMapper; + private final ErpContractInfoMapper contractInfoMapper; + private final ErpContractMaterialMapper contractMaterialMapper; + private final ErpContractPaymentMethodMapper contractPaymentMethodMapper; + + /** 合同变更流程编码(审批通过后回写用) */ + public static final String FLOW_CODE_CONTRACT_CHANGE = "HTBG"; + + /** + * 查询合同变更 + * + * @param contractChangeId 主键 + * @return 合同变更 + */ + @Override + public ErpContractChangeVo queryById(Long contractChangeId){ + return baseMapper.selectVoById(contractChangeId); + } + + /** + * 分页查询合同变更列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 合同变更分页列表 + */ + @Override + public TableDataInfo queryPageList(ErpContractChangeBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的合同变更列表 + * + * @param bo 查询条件 + * @return 合同变更列表 + */ + @Override + public List queryList(ErpContractChangeBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(ErpContractChangeBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ErpContractChange.class) + .selectAll(ErpContractChange.class) + .eq(ErpContractChange::getDelFlag, "0") + .eq(bo.getContractId() != null, ErpContractChange::getContractId, bo.getContractId()) + .eq(StringUtils.isNotBlank(bo.getChangeCode()), ErpContractChange::getChangeCode, bo.getChangeCode()) + .eq(StringUtils.isNotBlank(bo.getChangeType()), ErpContractChange::getChangeType, bo.getChangeType()) + .eq(StringUtils.isNotBlank(bo.getChangeContractCode()), ErpContractChange::getChangeContractCode, bo.getChangeContractCode()) + .like(StringUtils.isNotBlank(bo.getChangeContractName()), ErpContractChange::getChangeContractName, bo.getChangeContractName()) + .like(StringUtils.isNotBlank(bo.getCustomerName()), ErpContractChange::getCustomerName, bo.getCustomerName()) + .eq(bo.getChangeContractAmount() != null, ErpContractChange::getChangeContractAmount, bo.getChangeContractAmount()) + .eq(StringUtils.isNotBlank(bo.getContractCode()), ErpContractChange::getContractCode, bo.getContractCode()) + .like(StringUtils.isNotBlank(bo.getContractName()), ErpContractChange::getContractName, bo.getContractName()) + .like(StringUtils.isNotBlank(bo.getOriginalCustomerName()), ErpContractChange::getOriginalCustomerName, bo.getOriginalCustomerName()) + .eq(bo.getOriginalContractAmount() != null, ErpContractChange::getOriginalContractAmount, bo.getOriginalContractAmount()) + .eq(StringUtils.isNotBlank(bo.getChangeReason()), ErpContractChange::getChangeReason, bo.getChangeReason()) + .eq(bo.getApplyTime() != null, ErpContractChange::getApplyTime, bo.getApplyTime()) + .eq(bo.getUndertakeDeptId() != null, ErpContractChange::getUndertakeDeptId, bo.getUndertakeDeptId()) + .eq(bo.getUndertakeBy() != null, ErpContractChange::getUndertakeBy, bo.getUndertakeBy()) + .eq(StringUtils.isNotBlank(bo.getIndustryRegion()), ErpContractChange::getIndustryRegion, bo.getIndustryRegion()) + .eq(StringUtils.isNotBlank(bo.getSealLegalEntity()), ErpContractChange::getSealLegalEntity, bo.getSealLegalEntity()) + .eq(StringUtils.isNotBlank(bo.getChangeStatus()), ErpContractChange::getChangeStatus, bo.getChangeStatus()) + .eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpContractChange::getFlowStatus, bo.getFlowStatus()) + .eq(StringUtils.isNotBlank(bo.getWriteBackFlag()), ErpContractChange::getWriteBackFlag, bo.getWriteBackFlag()) + .eq(bo.getWriteBackTime() != null, ErpContractChange::getWriteBackTime, bo.getWriteBackTime()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ErpContractChange::getActiveFlag, bo.getActiveFlag()) +; + return lqw; + } + + /** + * 新增合同变更 + * + * @param bo 合同变更 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ErpContractChangeBo bo) { + ErpContractChange add = MapstructUtils.convert(bo, ErpContractChange.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setContractChangeId(add.getContractChangeId()); + } + return flag; + } + + /** + * 修改合同变更 + * + * @param bo 合同变更 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ErpContractChangeBo bo) { + ErpContractChange update = MapstructUtils.convert(bo, ErpContractChange.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ErpContractChange entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除合同变更信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Long saveContractChange(ErpContractChangeSaveBo bo) { + boolean isUpdate = bo.getContractChangeId() != null; + ErpContractChange main = buildMainEntity(bo); + validEntityBeforeSave(main); + + if (isUpdate) { + baseMapper.updateById(main); + // 内容变更时先删子表再插 + if ("1".equals(bo.getChangeType())) { + deleteChangeSubByChangeId(main.getContractChangeId()); + } + } else { + baseMapper.insert(main); + bo.setContractChangeId(main.getContractChangeId()); + } + + if ("1".equals(bo.getChangeType())) { + if (bo.getChangeInfo() != null) { + ErpContractChangeInfo info = MapstructUtils.convert(bo.getChangeInfo(), ErpContractChangeInfo.class); + info.setContractChangeId(main.getContractChangeId()); + info.setChangeInfoId(null); + changeInfoMapper.insert(info); + } + if (bo.getChangeMaterialList() != null && !bo.getChangeMaterialList().isEmpty()) { + for (ErpContractChangeMaterialBo m : bo.getChangeMaterialList()) { + ErpContractChangeMaterial e = MapstructUtils.convert(m, ErpContractChangeMaterial.class); + e.setContractChangeId(main.getContractChangeId()); + e.setChangeMaterialId(null); + changeMaterialMapper.insert(e); + } + } + if (bo.getChangePaymentMethodList() != null && !bo.getChangePaymentMethodList().isEmpty()) { + for (ErpContractChangePaymentMethodBo p : bo.getChangePaymentMethodList()) { + ErpContractChangePaymentMethod e = MapstructUtils.convert(p, ErpContractChangePaymentMethod.class); + e.setContractChangeId(main.getContractChangeId()); + e.setChangePaymentId(null); + changePaymentMethodMapper.insert(e); + } + } + } + return main.getContractChangeId(); + } + + private ErpContractChange buildMainEntity(ErpContractChangeSaveBo bo) { + ErpContractChange e = new ErpContractChange(); + e.setContractChangeId(bo.getContractChangeId()); + e.setContractId(bo.getContractId()); + e.setChangeType(bo.getChangeType()); + e.setChangeCode(bo.getChangeCode()); + e.setChangeReason(bo.getChangeReason()); + e.setApplyTime(bo.getApplyTime()); + e.setUndertakeDeptId(bo.getUndertakeDeptId()); + e.setUndertakeBy(bo.getUndertakeBy()); + e.setIndustryRegion(bo.getIndustryRegion()); + e.setSealLegalEntity(bo.getSealLegalEntity()); + e.setChangeStatus(StringUtils.isNotBlank(bo.getChangeStatus()) ? bo.getChangeStatus() : "1"); + e.setFlowStatus(bo.getFlowStatus()); + e.setRemark(bo.getRemark()); + e.setActiveFlag(StringUtils.isNotBlank(bo.getActiveFlag()) ? bo.getActiveFlag() : "1"); + e.setContractCode(bo.getContractCode()); + e.setContractName(bo.getContractName()); + e.setOriginalCustomerName(bo.getOriginalCustomerName()); + e.setOriginalContractAmount(bo.getOriginalContractAmount()); + e.setChangeContractCode(bo.getChangeContractCode()); + e.setChangeContractName(bo.getChangeContractName()); + e.setCustomerName(bo.getCustomerName()); + e.setChangeContractAmount(bo.getChangeContractAmount()); + e.setWriteBackFlag("0"); + return e; + } + + private void deleteChangeSubByChangeId(Long contractChangeId) { + LambdaQueryWrapper q1 = new LambdaQueryWrapper<>(); + q1.eq(ErpContractChangeInfo::getContractChangeId, contractChangeId); + changeInfoMapper.delete(q1); + LambdaQueryWrapper q2 = new LambdaQueryWrapper<>(); + q2.eq(ErpContractChangeMaterial::getContractChangeId, contractChangeId); + changeMaterialMapper.delete(q2); + LambdaQueryWrapper q3 = new LambdaQueryWrapper<>(); + q3.eq(ErpContractChangePaymentMethod::getContractChangeId, contractChangeId); + changePaymentMethodMapper.delete(q3); + } + + @Override + public ContractChangeDetailVo queryDetailById(Long contractChangeId) { + ContractChangeDetailVo vo = new ContractChangeDetailVo(); + vo.setMain(baseMapper.selectVoById(contractChangeId)); + if (vo.getMain() == null) { + return vo; + } + List infoList = changeInfoMapper.selectVoList( + new LambdaQueryWrapper().eq(ErpContractChangeInfo::getContractChangeId, contractChangeId)); + vo.setChangeInfo(infoList.isEmpty() ? null : infoList.get(0)); + vo.setChangeMaterialList(changeMaterialMapper.selectVoList( + new LambdaQueryWrapper().eq(ErpContractChangeMaterial::getContractChangeId, contractChangeId))); + vo.setChangePaymentMethodList(changePaymentMethodMapper.selectVoList( + new LambdaQueryWrapper().eq(ErpContractChangePaymentMethod::getContractChangeId, contractChangeId))); + return vo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void writeBackToContract(Long contractChangeId) { + ErpContractChange change = baseMapper.selectById(contractChangeId); + if (change == null || !"0".equals(change.getWriteBackFlag())) { + return; + } + change.setChangeStatus("3"); + baseMapper.updateById(change); + Long contractId = change.getContractId(); + if ("2".equals(change.getChangeType())) { + ErpContractInfo info = contractInfoMapper.selectById(contractId); + if (info != null) { + info.setActiveFlag("0"); + contractInfoMapper.updateById(info); + } + } else { + List infoList = changeInfoMapper.selectVoList( + new LambdaQueryWrapper().eq(ErpContractChangeInfo::getContractChangeId, contractChangeId)); + if (!infoList.isEmpty()) { + ErpContractInfo contractInfo = contractInfoMapper.selectById(contractId); + if (contractInfo != null) { + ErpContractChangeInfoVo snap = infoList.get(0); + copyChangeInfoToContract(snap, contractInfo); + contractInfoMapper.updateById(contractInfo); + } + } + contractMaterialMapper.delete(new LambdaQueryWrapper().eq(ErpContractMaterial::getContractId, contractId)); + List materials = changeMaterialMapper.selectList( + new LambdaQueryWrapper().eq(ErpContractChangeMaterial::getContractChangeId, contractChangeId)); + for (ErpContractChangeMaterial m : materials) { + ErpContractMaterial cm = new ErpContractMaterial(); + BeanUtil.copyProperties(m, cm, "contractMaterialId", "contractChangeId", "createTime", "updateTime", "createBy", "updateBy"); + cm.setContractId(contractId); + cm.setContractMaterialId(null); + contractMaterialMapper.insert(cm); + } + contractPaymentMethodMapper.delete(new LambdaQueryWrapper().eq(ErpContractPaymentMethod::getContractId, contractId)); + List payments = changePaymentMethodMapper.selectList( + new LambdaQueryWrapper().eq(ErpContractChangePaymentMethod::getContractChangeId, contractChangeId)); + for (ErpContractChangePaymentMethod p : payments) { + ErpContractPaymentMethod cpm = new ErpContractPaymentMethod(); + BeanUtil.copyProperties(p, cpm, "paymentMethodId", "contractChangeId", "changePaymentId", "createTime", "updateTime", "createBy", "updateBy"); + cpm.setContractId(contractId); + cpm.setPaymentMethodId(null); + contractPaymentMethodMapper.insert(cpm); + } + } + change.setWriteBackFlag("1"); + change.setWriteBackTime(new Date()); + baseMapper.updateById(change); + } + + /** + * 合同变更流程监听:审批通过后回写合同表 + */ + @EventListener(condition = "#processEvent.flowCode == T(org.dromara.oa.erp.service.impl.ErpContractChangeServiceImpl).FLOW_CODE_CONTRACT_CHANGE") + public void processHandler(ProcessEvent processEvent) { + TenantHelper.dynamic(processEvent.getTenantId(), () -> { + if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.FINISH.getStatus())) { + Long contractChangeId = Convert.toLong(processEvent.getBusinessId()); + writeBackToContract(contractChangeId); + } + }); + } + + private void copyChangeInfoToContract(ErpContractChangeInfoVo snap, ErpContractInfo contract) { + contract.setContractFlag(snap.getContractFlag()); + contract.setCustomerContractCode(snap.getCustomerContractCode()); + contract.setContractCode(snap.getContractCode()); + contract.setContractName(snap.getContractName()); + contract.setContractCategory(snap.getContractCategory()); + contract.setContractType(snap.getContractType()); + contract.setBusinessDirection(snap.getBusinessDirection()); + contract.setContractDeptId(snap.getContractDeptId()); + contract.setContractDate(snap.getContractDate()); + contract.setTotalPrice(snap.getTotalPrice() != null ? BigDecimal.valueOf(snap.getTotalPrice()) : null); + contract.setOneCustomerId(snap.getOneCustomerId()); + contract.setOneRepresent(snap.getOneRepresent()); + contract.setOneDate(snap.getOneDate()); + contract.setTwoCustomerId(snap.getTwoCustomerId()); + contract.setTwoRepresent(snap.getTwoRepresent()); + contract.setTwoDate(snap.getTwoDate()); + contract.setContractManagerId(snap.getContractManagerId()); + contract.setTemplateId(snap.getTemplateId()); + contract.setOssId(snap.getOssId()); + contract.setPaymentAccountId(snap.getPaymentAccountId()); + contract.setPaymentMethod(snap.getPaymentMethod()); + contract.setSignatureAppendix(snap.getSignatureAppendix()); + contract.setWarrantyPeriod(snap.getWarrantyPeriod()); + contract.setInternalContractCode(snap.getInternalContractCode()); + contract.setExternalContractCode(snap.getExternalContractCode()); + contract.setOrderContractCode(snap.getOrderContractCode()); + contract.setProjectContractCode(snap.getProjectContractCode()); + contract.setDeliveryStart(snap.getDeliveryStart() != null ? snap.getDeliveryStart().intValue() : null); + contract.setWarrantyPeriodDescription(snap.getWarrantyPeriodDescription()); + contract.setDeliveryLocation(snap.getDeliveryLocation()); + contract.setShipMethod(snap.getShipMethod()); + contract.setTaxRate(snap.getTaxRate() != null ? BigDecimal.valueOf(snap.getTaxRate()) : null); + contract.setSigningPlace(snap.getSigningPlace()); + contract.setMaterialRemark(snap.getMaterialRemark()); + contract.setContractTemplateFlag(snap.getContractTemplateFlag()); + contract.setCapitalizedAmount(snap.getCapitalizedAmount()); + contract.setRemark(snap.getRemark()); + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeInfoMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeInfoMapper.xml new file mode 100644 index 00000000..f3df388a --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeInfoMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeMapper.xml new file mode 100644 index 00000000..ded11212 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeMaterialMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeMaterialMapper.xml new file mode 100644 index 00000000..5ac0e5a8 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangeMaterialMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangePaymentMethodMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangePaymentMethodMapper.xml new file mode 100644 index 00000000..0c129af5 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractChangePaymentMethodMapper.xml @@ -0,0 +1,14 @@ + + + + + + + + +