1.0.76 初始化合同变更、合同变更信息、合同变更物料、合同变更付款方式

dev
yinq 4 months ago
parent bf1e0729e9
commit 1321973ed3

@ -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<ErpContractChangeVo> 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<ErpContractChangeVo> list = erpContractChangeService.queryList(bo);
ExcelUtil.exportExcel(list, "合同变更", ErpContractChangeVo.class, response);
}
/**
*
*
* @param contractChangeId
*/
@SaCheckPermission("oa/erp:contractChange:query")
@GetMapping("/{contractChangeId}")
public R<ErpContractChangeVo> 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<ContractChangeDetailVo> 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<Long> save(@RequestBody ErpContractChangeSaveBo bo) {
return R.ok(erpContractChangeService.saveContractChange(bo));
}
/**
*
*/
@SaCheckPermission("oa/erp:contractChange:add")
@Log(title = "合同变更", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> 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<Void> 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<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable("contractChangeIds") Long[] contractChangeIds) {
return toAjax(erpContractChangeService.deleteWithValidByIds(List.of(contractChangeIds), true));
}
/**
*
*/
@GetMapping("/getErpContractChangeList")
public R<List<ErpContractChangeVo>> getErpContractChangeList(ErpContractChangeBo bo) {
List<ErpContractChangeVo> list = erpContractChangeService.queryList(bo);
return R.ok(list);
}
}

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

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

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

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

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

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

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

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

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

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

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

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

@ -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<ErpContractChangeInfo, ErpContractChangeInfoVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpContractChangeInfoVo> selectCustomErpContractChangeInfoVoList(@Param("page") Page<ErpContractChangeInfoVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpContractChangeInfo> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpContractChangeInfoVo> selectCustomErpContractChangeInfoVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpContractChangeInfo> queryWrapper);
}

@ -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<ErpContractChange, ErpContractChangeVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpContractChangeVo> selectCustomErpContractChangeVoList(@Param("page") Page<ErpContractChangeVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpContractChange> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpContractChangeVo> selectCustomErpContractChangeVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpContractChange> queryWrapper);
}

@ -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<ErpContractChangeMaterial, ErpContractChangeMaterialVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpContractChangeMaterialVo> selectCustomErpContractChangeMaterialVoList(@Param("page") Page<ErpContractChangeMaterialVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpContractChangeMaterial> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpContractChangeMaterialVo> selectCustomErpContractChangeMaterialVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpContractChangeMaterial> queryWrapper);
}

@ -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<ErpContractChangePaymentMethod, ErpContractChangePaymentMethodVo> {
/**
*
*
* @param page
* @param queryWrapper
* @return
*/
public Page<ErpContractChangePaymentMethodVo> selectCustomErpContractChangePaymentMethodVoList(@Param("page") Page<ErpContractChangePaymentMethodVo> page, @Param(Constants.WRAPPER) MPJLambdaWrapper<ErpContractChangePaymentMethod> queryWrapper);
/**
*
*
* @param queryWrapper
* @return
*/
public List<ErpContractChangePaymentMethodVo> selectCustomErpContractChangePaymentMethodVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper<ErpContractChangePaymentMethod> queryWrapper);
}

@ -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<ErpContractChangeInfoVo> queryPageList(ErpContractChangeInfoBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpContractChangeInfoVo> 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<Long> ids, Boolean isValid);
}

@ -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<ErpContractChangeMaterialVo> queryPageList(ErpContractChangeMaterialBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpContractChangeMaterialVo> 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<Long> ids, Boolean isValid);
}

@ -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<ErpContractChangePaymentMethodVo> queryPageList(ErpContractChangePaymentMethodBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpContractChangePaymentMethodVo> 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<Long> ids, Boolean isValid);
}

@ -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<ErpContractChangeVo> queryPageList(ErpContractChangeBo bo, PageQuery pageQuery);
/**
*
*
* @param bo
* @return
*/
List<ErpContractChangeVo> 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<Long> 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);
}

@ -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<ErpContractChangeInfoVo> queryPageList(ErpContractChangeInfoBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpContractChangeInfo> lqw = buildQueryWrapper(bo);
Page<ErpContractChangeInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpContractChangeInfoVo> queryList(ErpContractChangeInfoBo bo) {
MPJLambdaWrapper<ErpContractChangeInfo> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<ErpContractChangeInfo> buildQueryWrapper(ErpContractChangeInfoBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpContractChangeInfo> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -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<ErpContractChangeMaterialVo> queryPageList(ErpContractChangeMaterialBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpContractChangeMaterial> lqw = buildQueryWrapper(bo);
Page<ErpContractChangeMaterialVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpContractChangeMaterialVo> queryList(ErpContractChangeMaterialBo bo) {
MPJLambdaWrapper<ErpContractChangeMaterial> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<ErpContractChangeMaterial> buildQueryWrapper(ErpContractChangeMaterialBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpContractChangeMaterial> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -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<ErpContractChangePaymentMethodVo> queryPageList(ErpContractChangePaymentMethodBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpContractChangePaymentMethod> lqw = buildQueryWrapper(bo);
Page<ErpContractChangePaymentMethodVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpContractChangePaymentMethodVo> queryList(ErpContractChangePaymentMethodBo bo) {
MPJLambdaWrapper<ErpContractChangePaymentMethod> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<ErpContractChangePaymentMethod> buildQueryWrapper(ErpContractChangePaymentMethodBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpContractChangePaymentMethod> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

@ -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<ErpContractChangeVo> queryPageList(ErpContractChangeBo bo, PageQuery pageQuery) {
MPJLambdaWrapper<ErpContractChange> lqw = buildQueryWrapper(bo);
Page<ErpContractChangeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
*
*
* @param bo
* @return
*/
@Override
public List<ErpContractChangeVo> queryList(ErpContractChangeBo bo) {
MPJLambdaWrapper<ErpContractChange> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private MPJLambdaWrapper<ErpContractChange> buildQueryWrapper(ErpContractChangeBo bo) {
Map<String, Object> params = bo.getParams();
MPJLambdaWrapper<ErpContractChange> 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<Long> 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<ErpContractChangeInfo> q1 = new LambdaQueryWrapper<>();
q1.eq(ErpContractChangeInfo::getContractChangeId, contractChangeId);
changeInfoMapper.delete(q1);
LambdaQueryWrapper<ErpContractChangeMaterial> q2 = new LambdaQueryWrapper<>();
q2.eq(ErpContractChangeMaterial::getContractChangeId, contractChangeId);
changeMaterialMapper.delete(q2);
LambdaQueryWrapper<ErpContractChangePaymentMethod> 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<ErpContractChangeInfoVo> infoList = changeInfoMapper.selectVoList(
new LambdaQueryWrapper<ErpContractChangeInfo>().eq(ErpContractChangeInfo::getContractChangeId, contractChangeId));
vo.setChangeInfo(infoList.isEmpty() ? null : infoList.get(0));
vo.setChangeMaterialList(changeMaterialMapper.selectVoList(
new LambdaQueryWrapper<ErpContractChangeMaterial>().eq(ErpContractChangeMaterial::getContractChangeId, contractChangeId)));
vo.setChangePaymentMethodList(changePaymentMethodMapper.selectVoList(
new LambdaQueryWrapper<ErpContractChangePaymentMethod>().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<ErpContractChangeInfoVo> infoList = changeInfoMapper.selectVoList(
new LambdaQueryWrapper<ErpContractChangeInfo>().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<ErpContractMaterial>().eq(ErpContractMaterial::getContractId, contractId));
List<ErpContractChangeMaterial> materials = changeMaterialMapper.selectList(
new LambdaQueryWrapper<ErpContractChangeMaterial>().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<ErpContractPaymentMethod>().eq(ErpContractPaymentMethod::getContractId, contractId));
List<ErpContractChangePaymentMethod> payments = changePaymentMethodMapper.selectList(
new LambdaQueryWrapper<ErpContractChangePaymentMethod>().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());
}
}

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpContractChangeInfoMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpContractChangeInfoVo" id="ErpContractChangeInfoResult">
</resultMap>
<select id="selectCustomErpContractChangeInfoVoList" resultMap="ErpContractChangeInfoResult">
select change_info_id, tenant_id, contract_change_id, contract_flag, customer_contract_code, contract_code, contract_name, contract_category, contract_type, business_direction, contract_dept_id, contract_date, total_price, one_customer_id, one_represent, one_date, two_customer_id, two_represent, two_date, contract_manager_id, template_id, oss_id, payment_account_id, payment_method, signature_appendix, warranty_period, internal_contract_code, external_contract_code, order_contract_code, project_contract_code, delivery_start, warranty_period_description, delivery_location, ship_method, tax_rate, signing_place, material_remark, contract_template_flag, capitalized_amount, remark, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_contract_change_info t
${ew.getCustomSqlSegment}
</select>
</mapper>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpContractChangeMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpContractChangeVo" id="ErpContractChangeResult">
</resultMap>
<select id="selectCustomErpContractChangeVoList" resultMap="ErpContractChangeResult">
select contract_change_id, tenant_id, contract_id, change_code, change_type, change_contract_code, change_contract_name, customer_name, change_contract_amount, contract_code, contract_name, original_customer_name, original_contract_amount, change_reason, apply_time, undertake_dept_id, undertake_by, industry_region, seal_legal_entity, change_status, flow_status, write_back_flag, write_back_time, remark, active_flag, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_contract_change t
${ew.getCustomSqlSegment}
</select>
</mapper>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpContractChangeMaterialMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpContractChangeMaterialVo" id="ErpContractChangeMaterialResult">
</resultMap>
<select id="selectCustomErpContractChangeMaterialVoList" resultMap="ErpContractChangeMaterialResult">
select change_material_id, tenant_id, contract_change_id, material_flag, product_name, specification_description, material_id, relation_material_id, amount, unit_id, before_price, tax_rate, including_price, subtotal, remark, sort_order, active_flag, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_contract_change_material t
${ew.getCustomSqlSegment}
</select>
</mapper>

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.oa.erp.mapper.ErpContractChangePaymentMethodMapper">
<resultMap type="org.dromara.oa.erp.domain.vo.ErpContractChangePaymentMethodVo" id="ErpContractChangePaymentMethodResult">
</resultMap>
<select id="selectCustomErpContractChangePaymentMethodVoList" resultMap="ErpContractChangePaymentMethodResult">
select change_payment_id, tenant_id, contract_change_id, sort_order, payment_stage_id, payment_deadline, payment_percentage, invoice_percentage, payment_amount, payment_description, remark, active_flag, del_flag, create_dept, create_by, create_time, update_by, update_time from erp_contract_change_payment_method t
${ew.getCustomSqlSegment}
</select>
</mapper>
Loading…
Cancel
Save