From 3759a54b4955610f70668388dff6af100bbd1ff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com> Date: Wed, 29 Apr 2026 09:40:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=A1=E8=B4=B9=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E6=9F=A5=E8=AF=A2=E6=8A=A5=E9=94=99=E4=BF=AE=E6=94=B9?= =?UTF-8?q?;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mhd/system/api/SystemServiceFeign.java | 5 +- .../ContractManageApplicationService.java | 94 +++++++++++++++++++ .../contractManage/ContractManageApi.java | 7 ++ .../BusinessDocumentApplicationService.java | 2 +- 4 files changed, 106 insertions(+), 2 deletions(-) diff --git a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java index 066fd3c56..12993e41f 100644 --- a/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java +++ b/mhd-api/mhd-api-system/src/main/java/com/mhd/system/api/SystemServiceFeign.java @@ -363,6 +363,9 @@ public interface SystemServiceFeign { @GetMapping("/contractManageApi/getInfoByCustomer2") public AjaxResult getInfoByCustomer2(@RequestParam("settlementCustomersCode") String settlementCustomersCode,@RequestParam("contractType") Integer contractType,@RequestParam("topOrganizationId") Long topOrganizationId); + @GetMapping("/contractManageApi/getInfoByCustomerAndOrganizationId") + public AjaxResult getInfoByCustomerAndOrganizationId(@RequestParam("settlementCustomersCode") String settlementCustomersCode,@RequestParam("contractType") Integer contractType,@RequestParam("topOrganizationId") Long topOrganizationId,@RequestParam("organizationId") Long organizationId); + @GetMapping("/contractManageApi/queryList") public AjaxResult queryList(); @@ -377,4 +380,4 @@ public interface SystemServiceFeign { public AjaxResult matchForMaterialImport(@RequestParam("keyword") String keyword, @RequestParam("organizationId") Long organizationId); -} +} \ No newline at end of file diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java index f22d0d317..ba5d69631 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/application/service/contractManage/ContractManageApplicationService.java @@ -757,6 +757,100 @@ public class ContractManageApplicationService { return resultContract; } + /** + * 根据结算主体获取合同信息 + * @param settlementCustomersCode 结算主体code + * @param contractType 合同类型 + */ + public ContractManagePO getInfoByCustomerAndOrganizationId(String settlementCustomersCode,Integer contractType, Long topOrganizationId, Long organizationId) { + /* + 首先根据合同类型(仓储、运输),以及结算客户,查询合同信息 + 如果传了结算主体,则根据结算主体以及当前时间查询有效的特殊合同,如果特殊合同没有,则查询通用合同 + */ + //获取当前登录人信息 + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser) && topOrganizationId == null) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + if(contractType==null){ + throw new ServiceException("合同类型不能为空"); + } + ContractManagePO resultContract = new ContractManagePO(); + //查询当前日期在有效期内的合同 + ContractManageDO queryParam = new ContractManageDO(); + queryParam.setNowDateString(DateUtil.format(new Date(),"yyyy-MM-dd")); + if (!ObjectUtil.isNull(loginUser)) { + queryParam.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); + }else { + queryParam.setTopOrganizationId(topOrganizationId); + } + if (ObjectUtil.isNotEmpty(organizationId)) { + queryParam.setOrganizationId(organizationId); + } + List contractManagePOList = contractManageDomainService.queryList(queryParam); + if(contractManagePOList != null && contractManagePOList.size()>0){ + if(StringUtils.isNotEmpty(settlementCustomersCode)){ + //根据结算对象,及合同的类型 查询对应合同信息 + ContractManagePO contractManagePO = contractManagePOList.stream() + .filter(item -> item.getSettlementCustomersCode().equals(settlementCustomersCode) && Objects.equals(item.getContractType(), contractType)).findFirst().orElse(null); + if(null == contractManagePO){ + if(contractType==1){ + //仓储合同 + resultContract = contractManagePOList.stream() + .filter(item -> + item.getContractType()==1 && + item.getCommonContractFlag() == 1 && item.getContractState() ==2) + .findFirst().orElse(null); + }else{ + //运输合同 + resultContract = contractManagePOList.stream().filter(item -> item.getContractType()==2 + && item.getCommonContractFlag() == 1 && item.getContractState() ==2).findFirst().orElse(null); + } + }else { + resultContract = contractManagePO; + } + }else { + if(contractType==1){ + //仓储合同 + resultContract = contractManagePOList.stream().filter(contractManagePO -> contractManagePO.getContractType()==1 + && contractManagePO.getCommonContractFlag() == 1 && contractManagePO.getContractState() ==2).findFirst().orElse(null); + }else{ + //运输合同 + resultContract = contractManagePOList.stream().filter(contractManagePO -> contractManagePO.getContractType()==2 + && contractManagePO.getCommonContractFlag() == 1 && contractManagePO.getContractState() ==2).findFirst().orElse(null); + } + } + if(null == resultContract){ + throw new ServiceException("找不到匹配的合同,请重试"); + } + //得到合同后,查询合同明细 + List contractManageDetailPOList = contractManageDetailDomainService.queryListByManageId(resultContract.getContractManageId()); + List contractManageDetailSaveList = new ArrayList<>(); + if(contractManageDetailPOList != null && contractManageDetailPOList.size()>0){ + //将临时合同中没有,但是通用合同中有的数据过滤出(使用 ObjectUtil.equal 避免 firstSubjectCode/secondSubjectCode 为 null 时 NPE) + contractManageDetailSaveList = contractManageDetailPOList.stream().filter(item -> contractManageDetailPOList.stream().noneMatch(item1 -> ObjectUtil.equal(item1.getFirstSubjectCode(), item.getFirstSubjectCode()) && ObjectUtil.equal(item1.getSecondSubjectCode(), item.getSecondSubjectCode()) && item1.getSubjectType()==1)).collect(Collectors.toList()); + //首先根据结算科目类型将临时合同过滤出 + List tempContractManageDetailPOList = contractManageDetailPOList.stream().filter(item -> item.getSubjectType()==2).collect(Collectors.toList()); + //遍历两个集合,将相同费用科目code的数据,进行比较,如果结算科目类型是临时且合同有效期有效,则使用该条数据,将另一条移除 + for (ContractManageDetailPO manageDetailPO : tempContractManageDetailPOList) { + for (ContractManageDetailPO contractManageDetailPO : contractManageDetailPOList) { + if(ObjectUtil.equal(contractManageDetailPO.getFirstSubjectCode(), manageDetailPO.getFirstSubjectCode()) && ObjectUtil.equal(contractManageDetailPO.getSecondSubjectCode(), manageDetailPO.getSecondSubjectCode())){ + //判断如果是临时合同在有效期内,则将该条数据保存到集合contractManageDetailSaveList + DateTime start = DateUtil.parseDate(DateUtil.format(manageDetailPO.getSubjectEffectiveDate(),"yyyy-MM-dd")); + DateTime end = DateUtil.parseDateTime(DateUtil.format(manageDetailPO.getSubjectEffectiveDate(),"yyyy-MM-dd")); + DateTime now = DateUtil.beginOfDay(DateUtil.date()); + if (now.isAfterOrEquals(start) && now.isBefore(end)) { + contractManageDetailSaveList.add(manageDetailPO); + } + } + } + } + } + resultContract.setContractManageDetailPOList(contractManageDetailSaveList); + } + return resultContract; + } + /** * 作废合同 * @param contractManageDTO diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java index 2dd6e4bd1..502883e1c 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/interfaces/facade/contractManage/ContractManageApi.java @@ -154,6 +154,13 @@ public class ContractManageApi extends BaseController{ return AjaxResult.success(contractManageApplicationService.getInfoByCustomer(settlementCustomersCode,contractType,topOrganizationId)); } + @ApiOperation("根据结算主体获取合同信息") + @GetMapping(value = "/getInfoByCustomerAndOrganizationId") + public AjaxResult getInfoByCustomerAndOrganizationId(@RequestParam("settlementCustomersCode") String settlementCustomersCode,@RequestParam("contractType") Integer contractType,@RequestParam("topOrganizationId") Long topOrganizationId,@RequestParam("organizationId") Long organizationId) + { + return AjaxResult.success(contractManageApplicationService.getInfoByCustomerAndOrganizationId(settlementCustomersCode,contractType,topOrganizationId,organizationId)); + } + @ApiOperation("根据合同编码获取合同管理") @GetMapping(value = "/getInfoByCode") public AjaxResult getInfoByCode(@RequestParam(value = "contractNumber",required = true) String contractNumber) diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java index 7b7014500..67c69da6a 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/businessDocument/BusinessDocumentApplicationService.java @@ -412,7 +412,7 @@ public class BusinessDocumentApplicationService { if(businessDocumentDO.getBelongModuleCode().equals(BelongModuleCode.WMS.getCode())){ contractType = 1; } - AjaxResult ajaxResult = systemServiceFeign.getInfoByCustomer2(businessDocumentDO.getSettlementCustomersCode(),contractType,businessDocumentDO.getTopOrganizationId()); + AjaxResult ajaxResult = systemServiceFeign.getInfoByCustomerAndOrganizationId(businessDocumentDO.getSettlementCustomersCode(),contractType,businessDocumentDO.getTopOrganizationId(),businessDocumentDO.getOrganizationId()); if(!"200".equals(String.valueOf(ajaxResult.get("code")))) { throw new ServiceException("合同信息未找到"); }