From 44f84617834dc6eee22a9dde76b2948527cc271c Mon Sep 17 00:00:00 2001 From: yinq Date: Tue, 28 Apr 2026 16:13:13 +0800 Subject: [PATCH] =?UTF-8?q?1.1.25=20=E5=90=88=E5=90=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=B1=9E=E5=9C=B0=E6=A0=87=E8=AF=86=E3=80=81?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=B1=9E=E5=9C=B0=E5=9B=BD=E5=AE=B6/?= =?UTF-8?q?=E5=9C=B0=E5=8C=BA=E3=80=81=E7=BB=93=E7=AE=97=E5=B8=81=E7=A7=8D?= =?UTF-8?q?=E3=80=81=E5=AF=B9=E4=BA=BA=E6=B0=91=E5=B8=81=E6=B1=87=E7=8E=87?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/erp/domain/ErpContractInfo.java | 25 ++++++++++++++ .../oa/erp/domain/bo/ErpContractInfoBo.java | 25 ++++++++++++++ .../oa/erp/domain/bo/ErpProjectInfoBo.java | 5 +++ .../erp/domain/vo/ContractLedgerReportVo.java | 12 +++++++ .../oa/erp/domain/vo/ErpContractInfoVo.java | 33 +++++++++++++++++++ .../impl/ErpContractInfoServiceImpl.java | 9 +++++ .../impl/ErpContractOrderServiceImpl.java | 9 ++--- .../oa/erp/ContractLedgerReportMapper.xml | 3 ++ .../mapper/oa/erp/ErpContractInfoMapper.xml | 5 +++ 9 files changed, 122 insertions(+), 4 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractInfo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractInfo.java index 286b75b3..a52291bb 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractInfo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/ErpContractInfo.java @@ -77,6 +77,31 @@ public class ErpContractInfo extends TenantEntity { */ private Date contractDate; + /** + * 合同属地标识(1中国大陆 2其他) + */ + private String contractTerritorialFlag; + + /** + * 合同属地国家/地区(字典) + */ + private String contractTerritorialCountry; + + /** + * 结算币种(CNY/USD/EUR) + */ + private String settlementCurrency; + + /** + * 对人民币汇率 + */ + private BigDecimal rmbExchangeRate; + + /** + * 已生效客户订单标识(1是 0否) + */ + private String effectiveCustomerOrderFlag; + /** * 合同总价 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java index fd213af6..d105c7db 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpContractInfoBo.java @@ -80,6 +80,31 @@ public class ErpContractInfoBo extends BaseEntity { */ private Date contractDate; + /** + * 合同属地标识(1中国大陆 2其他) + */ + private String contractTerritorialFlag; + + /** + * 合同属地国家/地区(字典) + */ + private String contractTerritorialCountry; + + /** + * 结算币种(CNY/USD/EUR) + */ + private String settlementCurrency; + + /** + * 对人民币汇率 + */ + private BigDecimal rmbExchangeRate; + + /** + * 已生效客户订单标识(1是 0否) + */ + private String effectiveCustomerOrderFlag; + /** * 合同总价 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpProjectInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpProjectInfoBo.java index ababe885..31da653d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpProjectInfoBo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/bo/ErpProjectInfoBo.java @@ -219,6 +219,11 @@ public class ErpProjectInfoBo extends BaseEntity { */ private Long finalCustomerId; + /** + * 对人民币汇率(合同属地标识=2 时必填,回写 erp_contract_info.rmb_exchange_rate) + */ + private BigDecimal rmbExchangeRate; + /** * 备注 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ContractLedgerReportVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ContractLedgerReportVo.java index b5f75722..b492240d 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ContractLedgerReportVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ContractLedgerReportVo.java @@ -49,6 +49,18 @@ public class ContractLedgerReportVo implements Serializable { @ExcelProperty({"合同信息", "签订时间"}) private String contractDate; + @ExcelProperty(value = {"合同信息", "合同属地标识"}, converter = org.dromara.common.excel.convert.ExcelDictConvert.class) + @org.dromara.common.excel.annotation.ExcelDictFormat(dictType = "contract_territorial_flag") + private String contractTerritorialFlag; + + @ExcelProperty(value = {"合同信息", "合同属地国家/地区"}, converter = org.dromara.common.excel.convert.ExcelDictConvert.class) + @org.dromara.common.excel.annotation.ExcelDictFormat(dictType = "country_region") + private String contractTerritorialCountry; + + @ExcelProperty(value = {"合同信息", "结算币种"}, converter = org.dromara.common.excel.convert.ExcelDictConvert.class) + @org.dromara.common.excel.annotation.ExcelDictFormat(dictType = "currency_type") + private String settlementCurrency; + @ExcelProperty({"合同信息", "软控SAP订单号"}) @ColumnWidth(20) private String orderContractCode; diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractInfoVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractInfoVo.java index 017b39d7..8d7f1b01 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractInfoVo.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/domain/vo/ErpContractInfoVo.java @@ -98,6 +98,39 @@ public class ErpContractInfoVo implements Serializable { @ExcelProperty(value = "合同签订日期") private Date contractDate; + /** + * 合同属地标识(1中国大陆 2其他) + */ + @ExcelProperty(value = "合同属地标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "contract_territorial_flag") + private String contractTerritorialFlag; + + /** + * 合同属地国家/地区(字典) + */ + @ExcelProperty(value = "合同属地国家/地区", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "country_region") + private String contractTerritorialCountry; + + /** + * 结算币种(CNY/USD/EUR) + */ + @ExcelProperty(value = "结算币种", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "currency_type") + private String settlementCurrency; + + /** + * 对人民币汇率 + */ + @ExcelProperty(value = "对人民币汇率") + private BigDecimal rmbExchangeRate; + + /** + * 已生效客户订单标识(1是 0否) + */ + @ExcelProperty(value = "已生效客户订单") + private String effectiveCustomerOrderFlag; + /** * 合同总价 */ diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java index a813c846..e5a87d36 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java @@ -224,6 +224,10 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { bo.getBusinessDirection()) .eq(bo.getContractDeptId() != null, ErpContractInfo::getContractDeptId, bo.getContractDeptId()) .eq(bo.getContractDate() != null, ErpContractInfo::getContractDate, bo.getContractDate()) + .eq(StringUtils.isNotBlank(bo.getContractTerritorialFlag()), ErpContractInfo::getContractTerritorialFlag, bo.getContractTerritorialFlag()) + .eq(StringUtils.isNotBlank(bo.getContractTerritorialCountry()), ErpContractInfo::getContractTerritorialCountry, bo.getContractTerritorialCountry()) + .eq(StringUtils.isNotBlank(bo.getSettlementCurrency()), ErpContractInfo::getSettlementCurrency, bo.getSettlementCurrency()) + .eq(bo.getRmbExchangeRate() != null, ErpContractInfo::getRmbExchangeRate, bo.getRmbExchangeRate()) .apply(StringUtils.isNotBlank(bo.getOneCustomerName()), "c1.customer_name LIKE CONCAT('%', {0}, '%')", bo.getOneCustomerName()) .eq(bo.getTotalPrice() != null, ErpContractInfo::getTotalPrice, bo.getTotalPrice()) @@ -472,6 +476,11 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { throw new ServiceException("合同编号【" + entity.getContractCode() + "】已存在,请勿重复"); } } + // 已生效客户订单必须上传附件(无需盖章/签字即刻生效) + if (entity != null && "1".equals(entity.getEffectiveCustomerOrderFlag()) + && StringUtils.isBlank(entity.getOssId())) { + throw new ServiceException("已生效客户订单必须上传附件"); + } // 物料列表的强制校验 // if (entity.getContractMaterialList() == null || diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java index c5e1553e..fee1fedc 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java @@ -304,16 +304,17 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { // 合同订单保存:将客户合同编号、最终客户 if (bo.getContractId() != null) { + ErpContractInfoVo contractInfoVo = contractInfoMapper.selectVoById(bo.getContractId()); + if (contractInfoVo == null) { + throw new ServiceException("合同信息不存在,无法激活订单"); + } ErpContractInfo contractPatch = new ErpContractInfo(); contractPatch.setContractId(bo.getContractId()); contractPatch.setCustomerContractCode(bo.getCustomerContractCode()); contractPatch.setFinalCustomerId(bo.getFinalCustomerId()); + contractPatch.setRmbExchangeRate(bo.getRmbExchangeRate()); // 上传终版合同时:激活合同并校验甲方客户资料 if (StringUtils.isNotBlank(bo.getOssId())) { - ErpContractInfoVo contractInfoVo = contractInfoMapper.selectVoById(bo.getContractId()); - if (contractInfoVo == null) { - throw new ServiceException("合同信息不存在,无法激活订单"); - } validPartyACustomerForOrderActivate(contractInfoVo.getOneCustomerId()); contractPatch.setSignatureAppendix(Convert.toLong(bo.getOssId().trim())); // contractPatch.setContractDeptId(bo.getDeptId()); diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ContractLedgerReportMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ContractLedgerReportMapper.xml index 9904eb86..80cade67 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ContractLedgerReportMapper.xml +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ContractLedgerReportMapper.xml @@ -13,6 +13,9 @@ t.customer_contract_code, DATE_FORMAT(t.contract_date, '%Y-%m-%d') AS contract_date, DATE_FORMAT(t.create_time, '%Y-%m') AS month, + t.contract_territorial_flag, + t.contract_territorial_country, + t.settlement_currency, t.order_contract_code, t.project_contract_code, cust.customer_name AS customer_name, diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractInfoMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractInfoMapper.xml index a5850c88..5f3612dc 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractInfoMapper.xml +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/erp/ErpContractInfoMapper.xml @@ -18,6 +18,11 @@ t.business_direction, t.contract_dept_id, t.contract_date, + t.contract_territorial_flag, + t.contract_territorial_country, + t.settlement_currency, + t.rmb_exchange_rate, + t.effective_customer_order_flag, t.total_price, t.one_customer_id, t.one_represent,