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 12b11832d..e2657b441 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 @@ -617,7 +617,7 @@ public class ContractManageApplicationService { contractManageDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); contractManageDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); boolean flag = contractManageDomainService.insert(contractManageDO); - handleDetils(contractManageDO); + handleDetils(contractManageDO, true); return flag; } @@ -751,7 +751,7 @@ public class ContractManageApplicationService { /** * 处理合同详情 */ - private void handleDetils(ContractManageDO contractManageDO) { + private void handleDetils(ContractManageDO contractManageDO, boolean isInsert) { //获取当前登录人信息 LoginUser loginUser = SecurityUtils.getLoginUser(); if (ObjectUtil.isNull(loginUser)) { @@ -827,10 +827,12 @@ public class ContractManageApplicationService { } } - if(null != contractManagePO){ + if (isInsert) { + // 新增/复制时使用新插入的合同ID + contractManageDetailDO.setContractManageId(contractManageDO.getContractManageId()); + } else if(null != contractManagePO){ contractManageDetailDO.setContractManageId(contractManagePO.getContractManageId()); } - //contractManageDetailDO.setContractManageId(contractManageDO.getContractManageId()); contractManageDetailDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId()); contractManageDetailDO.setOrganizationId(loginUser.getUserPo().getOrganizationId()); contractManageDetailDO.setOrganizationName(loginUser.getUserPo().getOrganizationName()); @@ -847,7 +849,7 @@ public class ContractManageApplicationService { validateContractType(contractManageDO.getContractType()); //checkContract(contractManageDO); handleData(contractManageDO); - handleDetils(contractManageDO); + handleDetils(contractManageDO, false); handleDict(contractManageDO); return contractManageDomainService.update(contractManageDO); } diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/facade/IContractManageService.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/facade/IContractManageService.java index ec306d0d1..10c44632a 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/facade/IContractManageService.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/facade/IContractManageService.java @@ -23,7 +23,7 @@ public interface IContractManageService extends IService /** * 新增合同管理 */ - public Boolean insert(ContractManageDO contractManageDO); + public Long insert(ContractManageDO contractManageDO); /** * 修改合同管理 diff --git a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/persistence/ContractManageImpl.java b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/persistence/ContractManageImpl.java index cac8a93ed..eb4a5e59b 100644 --- a/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/persistence/ContractManageImpl.java +++ b/mhd-modules/mhd-system/src/main/java/com/mhd/basic/domain/contractManage/repository/persistence/ContractManageImpl.java @@ -37,10 +37,11 @@ public class ContractManageImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ContractManage::getOriginalContractNumber,contractNumber); queryWrapper.eq(ContractManage::getDelFlag,1); + queryWrapper.last("LIMIT 1"); ContractManage contractManage = contractManageService.getOne(queryWrapper); if(null != contractManage){ BeanUtils.copyProperties(contractManage,contractManagePO); diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/billManage/BillManageApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/billManage/BillManageApplicationService.java index cc304eb6e..8566a717f 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/billManage/BillManageApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/billManage/BillManageApplicationService.java @@ -17,6 +17,7 @@ import com.mhd.bms.domain.billManage.service.BillManageDomainService; import com.mhd.bms.domain.billOperationLog.repository.todo.BillOperationLogDO; import com.mhd.bms.domain.billOperationLog.service.BillOperationLogDomainService; import com.mhd.bms.domain.billingStatement.entity.BillingStatement; +import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementPO; import com.mhd.bms.domain.billingStatement.service.BillingStatementDomainService; import com.mhd.bms.domain.ncLog.entity.NcLog; import com.mhd.bms.domain.ncLog.repository.mapper.NcLogMapper; @@ -384,6 +385,86 @@ public class BillManageApplicationService { return flag && flagTwo && three; } + /** + * 复制账单 + */ + @Transactional + public Boolean copyBill(BillManageDTO billManageDTO) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (ObjectUtil.isNull(loginUser)) { + throw new DigitalLogisticsException(UserError.TIMEOUT); + } + if (billManageDTO.getBillManageId() == null) { + throw new ServiceException("原账单id不能为空"); + } + // 1. 获取原账单信息 + BillManagePO originalBill = billManageDomainService.getInfo(billManageDTO.getBillManageId()); + if (null == originalBill) { + throw new ServiceException("原账单信息未找到"); + } + // 2. 获取原账单明细 + List originalDetails = billDetailDomainService.getDetailsByBillManageId(billManageDTO.getBillManageId()); + if (originalDetails == null || originalDetails.isEmpty()) { + throw new ServiceException("原账单明细为空,无法复制"); + } + // 3. 创建新账单,除账单编号外完全复制原账单 + String newBillNumber = OrderSequence.getOrderCode("ZD"); + BillManage newBill = new BillManage(); + BeanUtils.copyProperties(originalBill, newBill); + newBill.setBillManageId(null); + newBill.setBillNumber(newBillNumber); + newBill.setCreateBy(loginUser.getUserPo().getUserId()); + newBill.setCreateByName(loginUser.getUserPo().getUserName()); + newBill.setCreateTime(new Date()); + newBill.setUpdateBy(loginUser.getUserPo().getUserId()); + newBill.setUpdateByName(loginUser.getUserPo().getUserName()); + newBill.setUpdateTime(new Date()); + newBill.setDelFlag(1); + // 保存新账单 + boolean flag = billManageDomainService.saveEntity(newBill); + if (!flag) { + throw new ServiceException("复制账单失败,请重试"); + } + // 4. 复制账单明细 + List newDetailList = new ArrayList<>(); + for (BillDetailPO originalDetail : originalDetails) { + BillDetail newDetail = new BillDetail(); + BeanUtils.copyProperties(originalDetail, newDetail); + newDetail.setBillDetailId(null); + newDetail.setBillManageId(newBill.getBillManageId()); + newDetail.setBillNumber(newBillNumber); + newDetail.setCreateBy(loginUser.getUserPo().getUserId()); + newDetail.setCreateByName(loginUser.getUserPo().getUserName()); + newDetail.setCreateTime(new Date()); + newDetailList.add(newDetail); + } + Boolean flagTwo = billDetailDomainService.insertBatch(newDetailList); + // 5. 复制计费流水(billing_statement) + List originalStatements = billingStatementDomainService.getDetailsByManageId(billManageDTO.getBillManageId()); + boolean flagThree = true; + if (originalStatements != null && !originalStatements.isEmpty()) { + List newStatementList = new ArrayList<>(); + for (BillingStatementPO originalStatement : originalStatements) { + BillingStatement newStatement = new BillingStatement(); + BeanUtils.copyProperties(originalStatement, newStatement); + newStatement.setBillingStatementId(null); + newStatement.setBillManageId(newBill.getBillManageId()); + newStatement.setCreateBy(loginUser.getUserPo().getUserId()); + newStatement.setCreateByName(loginUser.getUserPo().getUserName()); + newStatement.setCreateTime(new Date()); + newStatementList.add(newStatement); + } + flagThree = billingStatementDomainService.saveEntityBatch(newStatementList); + } + // 6. 保存操作日志 + BillOperationLogDO billOperationLogDO = new BillOperationLogDO(); + billOperationLogDO.setBillManageId(newBill.getBillManageId()); + billOperationLogDO.setOperationInfo(StringUtils.format(BillLogsConstants.copy_bill_text, originalBill.getBillNumber(), newBillNumber)); + billOperationLogDO.setOperationType(1); + boolean three = billOperationLogDomainService.saveBillOperationLog(billOperationLogDO); + return flag && flagTwo && flagThree && three; + } + /** * 应收账单-客户确认 */ diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billManage/service/BillManageDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billManage/service/BillManageDomainService.java index fc0fbff95..1cfadfa0b 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billManage/service/BillManageDomainService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billManage/service/BillManageDomainService.java @@ -94,6 +94,13 @@ public class BillManageDomainService { return billManageService.insert(billManageDO); } + /** + * 直接保存账单管理实体 + */ + public boolean saveEntity(BillManage billManage) { + return billManageService.save(billManage); + } + /** * 修改账单管理 */ diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java index 6e326dc95..c8702e4c4 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billingStatement/service/BillingStatementDomainService.java @@ -119,6 +119,13 @@ public class BillingStatementDomainService { return billingStatementService.getInfo(billingStatementId); } + /** + * 批量保存计费流水实体 + */ + public boolean saveEntityBatch(List list) { + return billingStatementService.saveBatch(list); + } + /** * 批量审核 */ diff --git a/mhd_bms/src/main/java/com/mhd/bms/infrastructure/constant/BillLogsConstants.java b/mhd_bms/src/main/java/com/mhd/bms/infrastructure/constant/BillLogsConstants.java index 8c6ff068e..4c1eb32ba 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/infrastructure/constant/BillLogsConstants.java +++ b/mhd_bms/src/main/java/com/mhd/bms/infrastructure/constant/BillLogsConstants.java @@ -96,4 +96,12 @@ public class BillLogsConstants public static final String payment_bill_text = "付款单号:{},付款金额:{}元"; + /** + * 复制账单 + * 原账单编号:{},新账单编号:{} + */ + public static final String copy_bill_title = "复制账单"; + public static final String copy_bill_text = "原账单编号:{},新账单编号:{}"; + + } diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillManageApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillManageApi.java index 9a8d9f4a1..cda78e5a5 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillManageApi.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillManageApi.java @@ -229,6 +229,22 @@ public class BillManageApi extends BaseController{ } + @ApiOperation("复制账单") + @PostMapping("/copyBill") + public AjaxResult copyBill(@RequestBody BillManageDTO billManageDTO) + { + if(billManageDTO.getBillManageId() == null){ + throw new ServiceException("原账单id不能为空"); + } + try { + Boolean result = billManageApplicationService.copyBill(billManageDTO); + return toAjax(result); + }catch (Exception e){ + return AjaxResult.error("复制账单失败:"+e.getMessage()); + } + } + + @ApiOperation("应收账单-客户确认") @PostMapping("/customerConfirmation") public AjaxResult customerConfirmation(@RequestBody BillManageDTO billManageDTO)