diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractPageReqVO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractPageReqVO.java index 6b4b1a34..1a6f11a7 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractPageReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractPageReqVO.java @@ -40,4 +40,12 @@ public class ContractPageReqVO extends PageParam { @Schema(description = "合同分类(字典:SPLY_BSN_TP)") private String businessType; + + @Schema(description = "合同主键") + private Long id; + + @Schema(description = "甲方公司编号;与ERP(YQGHD)对应") + private String erpPurchaseCompanyNumber; + @Schema(description = "乙方公司编号;与ERP(YQGHD)对应") + private String erpSalesCompanyNumber; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/RelationContractVO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/RelationContractVO.java new file mode 100644 index 00000000..aba1a331 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/RelationContractVO.java @@ -0,0 +1,20 @@ +package com.zt.plat.module.contractorder.api.vo.contract; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import org.springframework.validation.annotation.Validated; + +@Data +@Schema(description = "绑定合同VO") +@Validated +public class RelationContractVO { + + @Schema(description = "合同ID") + @NotNull(message = "合同ID不能为空") + private Long contractId; + + @Schema(description = "被绑定的合同ID") + @NotNull(message = "被绑定的合同ID不能为空") + private Long relationContractId; +} diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java index d623c0e5..c917921d 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java @@ -35,5 +35,6 @@ public interface ErrorCodeConstants { ErrorCode CONTRACT_STATUS_NOT_CANCEL = new ErrorCode(1_027_000_020, "{}状态合同不允许作废"); ErrorCode AMOUNT_DISMANTLE_NOT_EXISTS = new ErrorCode(1_027_000_022, "资金拆分不存在"); ErrorCode CONTRACT_RECEIVE_SEND_NOT_EXISTS = new ErrorCode(1_027_000_021, "收发货规则不存在"); - + ErrorCode PARAMETER_ID_EMPTY = new ErrorCode(1_027_000_023, "绑定的合同ID不能空"); + ErrorCode PARAMETER_BUSINESS_TYPE_INVALID = new ErrorCode(1_027_000_024, "合同业务类型无效请参考字典(SPLY_BSN_TP)"); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java index 1822b802..eaa0a32e 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/OrderApiImpl.java @@ -81,7 +81,7 @@ public class OrderApiImpl implements OrderApi { if ("SALE".equals(f.getSplyBsnTp())) { // 销售订单 salesOrdNoS.add(f.getId()); - } else { + } else if ("PUR".equals(f.getSplyBsnTp())) { // 非销售订单(采购订单) purchaseOrderNoS.add(f.getId()); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java index 7d4f2ee3..3f9792dc 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java @@ -14,6 +14,7 @@ import com.zt.plat.module.contractorder.api.vo.contract.international.IntPushCon import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractMainDO; import com.zt.plat.module.contractorder.service.contract.ContractService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; @@ -223,4 +224,22 @@ public class ContractController implements BusinessControllerMarker { ) { return success(contractService.transactionInfoByPaperNumber(contractPaperNumber)); } + + @PostMapping("/relationContract") + @Operation(summary = "关联合同-新") + // @PreAuthorize("@ss.hasAnyPermissions({'base:contract:get','purchaseContract:detail'})") + public CommonResult relationContract(@RequestBody RelationContractVO reqVo) { + contractService.relationContract(reqVo); + return success(true); + } + + + @GetMapping("/page-no-permission") + @Operation(summary = "获得合同分页列表-没有权限") + @PreAuthorize("@ss.hasAnyPermissions({'base:contract:get','purchaseContract:detail'})") + public CommonResult> getPageNoPermission(@Valid ContractPageReqVO pageReqVO) { + PageResult pageResult = contractService.getPageNoPermission(pageReqVO); + return success(BeanUtils.toBean(pageResult, ContractRespVO.class)); + } + } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java index 2ca8402f..6bfe61bf 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java @@ -455,4 +455,10 @@ public class ContractMainDO extends BusinessBaseDO { */ @TableField("HS_CRDT") private String hasCredit; + + /** + * 关联合同ID + */ + @TableField(value = "REL_CTRT_ID") + private Long relatedContractId; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractMainMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractMainMapper.java index 85bfebd2..81aabe40 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractMainMapper.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractMainMapper.java @@ -1,6 +1,9 @@ package com.zt.plat.module.contractorder.dal.mysql.contract; import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.framework.datapermission.core.annotation.CompanyDataPermissionIgnore; +import com.zt.plat.framework.datapermission.core.annotation.DataPermission; +import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIgnore; import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.contractorder.api.vo.contract.ContractPageReqVO; @@ -27,4 +30,23 @@ public interface ContractMainMapper extends BaseMapperX { .eqIfPresent(ContractMainDO::getBusinessType, reqVO.getBusinessType()) .orderByDesc(ContractMainDO::getCreateTime)); } + + @CompanyDataPermissionIgnore + @DeptDataPermissionIgnore + default PageResult selectContractPageNoPermission(ContractPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eq(ContractMainDO::getId, reqVO.getId()) + .likeIfPresent(ContractMainDO::getContractName, reqVO.getContractName()) + .likeIfPresent(ContractMainDO::getContractPaperNumber, reqVO.getContractPaperNumber()) + .eqIfPresent(ContractMainDO::getDirection, reqVO.getDirection()) + .betweenIfPresent(ContractMainDO::getSignDate, reqVO.getSignDate()) + .likeIfPresent(ContractMainDO::getPurchaseCompanyName, reqVO.getPurchaseCompanyName()) + .likeIfPresent(ContractMainDO::getSalesCompanyName, reqVO.getSalesCompanyName()) + .eqIfPresent(ContractMainDO::getBasicAmount, reqVO.getBasicAmount()) + .eqIfPresent(ContractMainDO::getStatus, reqVO.getStatus()) + .eqIfPresent(ContractMainDO::getBusinessType, reqVO.getBusinessType()) + .eqIfPresent(ContractMainDO::getErpSalesCompanyNumber, reqVO.getErpSalesCompanyNumber()) + .eqIfPresent(ContractMainDO::getErpPurchaseCompanyNumber, reqVO.getErpPurchaseCompanyNumber()) + .orderByDesc(ContractMainDO::getCreateTime)); + } } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java index 7304312f..affeffac 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java @@ -26,6 +26,14 @@ public interface ContractService { * @return 分页列表 */ PageResult getContractPage(@Valid ContractPageReqVO pageReqVO); + /** + * 获得合同分页列表--无权限 + * + * @param pageReqVO 分页条件 + * @return 分页列表 + */ + PageResult getPageNoPermission(@Valid ContractPageReqVO pageReqVO); + /** * 新增合同 @@ -247,4 +255,10 @@ public interface ContractService { * @return 交易信息 */ TransactionInfoRespVO transactionInfoByPaperNumber(String contractPaperNumber); + /** + * 关联合同 + * + * @param relationContractVO 关联合同信息 + */ + void relationContract(RelationContractVO relationContractVO); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java index e15e3a83..715ad3a0 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java @@ -10,6 +10,7 @@ import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.framework.security.core.LoginUser; import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.framework.tenant.core.context.CompanyContextHolder; import com.zt.plat.module.base.controller.admin.templtp.vo.TmplInscBsnRelRespVO; @@ -43,6 +44,7 @@ import com.zt.plat.module.erp.dal.dataobject.erp.ErpContractDO; import com.zt.plat.module.erp.service.erp.ErpContractService; import com.zt.plat.module.infra.api.file.FileApi; import com.zt.plat.module.infra.api.file.dto.FileRespDTO; +import com.zt.plat.module.system.api.dept.DeptApi; import com.zt.plat.module.system.api.user.AdminUserApi; import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO; import jakarta.annotation.Resource; @@ -123,12 +125,47 @@ public class ContractServiceImpl implements ContractService { private ContractReceiveSendService contractReceiveSendService; @Resource private AmountDismantleService amountDismantleService; + @Resource + private DeptApi deptApi; + + private static final Map VALID_RELATIONS = new HashMap<>(); + + static { + VALID_RELATIONS.put("ENT", "ENTED"); + VALID_RELATIONS.put("ENTED", "ENT"); + VALID_RELATIONS.put("PUR", "SALE"); + VALID_RELATIONS.put("SALE", "PUR"); + } @Override public PageResult getContractPage(ContractPageReqVO pageReqVO) { return contractMainMapper.selectContractPage(pageReqVO); } + @Override + public PageResult getPageNoPermission(ContractPageReqVO pageReqVO) { + if (pageReqVO.getId() == null) { + throw exception(PARAMETER_ID_EMPTY); + } + ContractMainDO contractMainDO = contractMainMapper.selectById(pageReqVO.getId()); + String businessType = VALID_RELATIONS.getOrDefault(contractMainDO.getBusinessType(), null); + if (businessType == null) { + throw exception(PARAMETER_BUSINESS_TYPE_INVALID); + } + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + String visitCompanyCode = loginUser.getVisitCompanyCode(); + //判断当前人应该查询哪个公司 + if (visitCompanyCode.equals(contractMainDO.getErpPurchaseCompanyNumber())) { + //查乙方 + pageReqVO.setErpSalesCompanyNumber(contractMainDO.getErpSalesCompanyNumber()); + } else if (visitCompanyCode.equals(contractMainDO.getErpSalesCompanyNumber())) { + //查甲方 + pageReqVO.setErpPurchaseCompanyNumber(contractMainDO.getErpPurchaseCompanyNumber()); + } + pageReqVO.setBusinessType(businessType); + return contractMainMapper.selectContractPageNoPermission(pageReqVO); + } + boolean isContractReceiveSendValid(List contractReceiveSends) { if (CollectionUtils.isEmpty(contractReceiveSends)) { return true; @@ -974,7 +1011,7 @@ public class ContractServiceImpl implements ContractService { if (reqVO.getContractReceiveSends() != null && !reqVO.getContractReceiveSends().isEmpty()) { //通过合同id删除收发货规则 List contractReceiveSendListByContract = contractReceiveSendService.getContractReceiveSendListByContractId(id); - if (!contractReceiveSendListByContract.isEmpty()){ + if (!contractReceiveSendListByContract.isEmpty()) { contractReceiveSendService.deleteContractReceiveSendListByIds(contractReceiveSendListByContract.stream().map(ContractReceiveSendRespVO::getId).toList()); } //重新插入收发货规则 @@ -987,9 +1024,9 @@ public class ContractServiceImpl implements ContractService { //更新资金拆分表(直接先删除后面再插入) if (reqVO.getAmountSplit() != null && !reqVO.getAmountSplit().isEmpty()) { List amountDismantleList = amountDismantleService.getAmountDismantleListByContractId(id); - if(!amountDismantleList.isEmpty()){ - amountDismantleService.deleteAmountDismantleListByIds(amountDismantleList.stream().map(AmountDismantleDO::getId).toList()); - } + if (!amountDismantleList.isEmpty()) { + amountDismantleService.deleteAmountDismantleListByIds(amountDismantleList.stream().map(AmountDismantleDO::getId).toList()); + } reqVO.getAmountSplit().forEach(item -> { item.setContractId(id); item.setId(null); @@ -1440,7 +1477,7 @@ public class ContractServiceImpl implements ContractService { //金额拆分 List amountDismantleListByContractId = amountDismantleService.getAmountDismantleListByContractId(contractMainDO.getId()); if (amountDismantleListByContractId != null && !amountDismantleListByContractId.isEmpty()) { - respDTO.setAmountSplits(BeanUtils.toBean(amountDismantleListByContractId,AmountSplitRespDTO.class)); + respDTO.setAmountSplits(BeanUtils.toBean(amountDismantleListByContractId, AmountSplitRespDTO.class)); } return respDTO; } @@ -1537,7 +1574,7 @@ public class ContractServiceImpl implements ContractService { //金额拆分 List amountDismantleListByContractId = amountDismantleService.getAmountDismantleListByContractId(contractMainDO.getId()); if (amountDismantleListByContractId != null && !amountDismantleListByContractId.isEmpty()) { - respDTO.setAmountSplits(BeanUtils.toBean(amountDismantleListByContractId,AmountSplitRespDTO.class)); + respDTO.setAmountSplits(BeanUtils.toBean(amountDismantleListByContractId, AmountSplitRespDTO.class)); } return respDTO; @@ -1569,7 +1606,7 @@ public class ContractServiceImpl implements ContractService { } // 生成ERP合同映射表 - ErpContractSaveReqVO erpContractVO = getErpContract(contractMainDO); //TODO ERP暂时返回成功 + ErpContractSaveReqVO erpContractVO = getErpContract(contractMainDO); //TODO ERP暂时返回成功 //ErpContractSaveReqVO erpContractVO = new ErpContractSaveReqVO(); // 调用ERP模块 @@ -1825,7 +1862,7 @@ public class ContractServiceImpl implements ContractService { if ("E".equals(result.get("flag"))) { erpResult.putOnce("success", false); - erpResult.putOnce("errMsg", result.get("resStr")+":"+result.get("E_RESP")); + erpResult.putOnce("errMsg", result.get("resStr") + ":" + result.get("E_RESP")); } else { erpResult.putOnce("success", true); erpResult.putOnce("data", result); @@ -2054,6 +2091,29 @@ public class ContractServiceImpl implements ContractService { return infoRespVO; } + @Override + @Transactional(rollbackFor = Exception.class) + public void relationContract(RelationContractVO relationContractVO) { + //查询当前订单是否已经绑定订单了 + ContractMainDO contractMainDO = contractMainMapper.selectById(relationContractVO.getContractId()); + if (contractMainDO != null && contractMainDO.getRelatedContractId() != null) { + ContractMainDO updateObj = contractMainMapper.selectById(contractMainDO.getRelatedContractId()); + updateObj.setRelatedContractId(null); + contractMainMapper.updateById(updateObj); + } + contractMainDO.setRelatedContractId(relationContractVO.getRelationContractId()); + contractMainMapper.updateById(contractMainDO);// 绑定合同订单 + ContractMainDO relationContract = contractMainMapper.selectById(relationContractVO.getRelationContractId()); + if (relationContract != null) { + // 绑定合同订单 + relationContract.setRelatedContractId(relationContractVO.getContractId()); + contractMainMapper.updateById(relationContract); + }else { + throw exception(CONTRACT_NOT_EXISTS); + } + + } + /** * 校验合同内容 *