复制订单
This commit is contained in:
+32
-86
@@ -476,105 +476,51 @@ public class BillManageApplicationService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制账单
|
||||
* 复制账单-获取原账单数据供前端回显
|
||||
* 前端拿到数据后跳转到类似修改/新增账单的页面,用户修改后通过addBill接口提交新增
|
||||
*/
|
||||
@Transactional
|
||||
public Boolean copyBill(BillManageDTO billManageDTO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (ObjectUtil.isNull(loginUser)) {
|
||||
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||
}
|
||||
public BillManagePO copyBill(BillManageDTO billManageDTO) {
|
||||
if (billManageDTO.getBillManageId() == null) {
|
||||
throw new ServiceException("原账单id不能为空");
|
||||
}
|
||||
// 1. 获取原账单信息
|
||||
// 获取原账单信息
|
||||
BillManagePO originalBill = billManageDomainService.getInfo(billManageDTO.getBillManageId());
|
||||
if (null == originalBill) {
|
||||
throw new ServiceException("原账单信息未找到");
|
||||
}
|
||||
// 2. 获取原账单明细
|
||||
// 获取原账单明细
|
||||
List<BillDetailPO> 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);
|
||||
// 复制后重置状态字段为初始值
|
||||
// 账单状态、对账状态、发票状态重置
|
||||
newBill.setBillState(1); // 1-未确认
|
||||
newBill.setBillStep(1); // 1-发起对账
|
||||
newBill.setReconciliationStatus(0); // 1-暂未确认
|
||||
newBill.setIsInvoice(0); // 0-未索取
|
||||
// 实收=0,未收=账单金额
|
||||
newBill.setActualReceivedAmount(BigDecimal.ZERO);
|
||||
newBill.setBillAmountUnsettled(newBill.getBillAmount());
|
||||
newBill.setBillAmountSettlement(BigDecimal.ZERO);
|
||||
// NC同步状态重置
|
||||
newBill.setSynchronousStatus(0); // 0-未同步
|
||||
newBill.setSkSynchronousStatus(0); // 0-未同步
|
||||
// 清空发票、收款、推送相关字段
|
||||
newBill.setApplyNumber(null); // 发票申请单号
|
||||
newBill.setSettlementTime(null); // 收款时间
|
||||
newBill.setSynchronousTime(null); // 应收单推送时间
|
||||
newBill.setSkSynchronousTime(null); // 收款单推送时间
|
||||
newBill.setInvoiceId(null); // 发票表ID
|
||||
newBill.setInvoiceMakeTime(null); // 开票时间
|
||||
newBill.setNcId(null); // nc唯一标识(应收)
|
||||
newBill.setSkNcId(null); // nc唯一标识(收款)
|
||||
// 保存新账单
|
||||
boolean flag = billManageDomainService.saveEntity(newBill);
|
||||
if (!flag) {
|
||||
throw new ServiceException("复制账单失败,请重试");
|
||||
// 重置关键字段为初始值,清空id等,方便前端回显后直接提交新增
|
||||
originalBill.setBillManageId(null);
|
||||
originalBill.setBillNumber(null);
|
||||
originalBill.setBillState(1);
|
||||
originalBill.setBillStep(1);
|
||||
originalBill.setReconciliationStatus(0);
|
||||
originalBill.setIsInvoice(0);
|
||||
originalBill.setActualReceivedAmount(BigDecimal.ZERO);
|
||||
originalBill.setBillAmountUnsettled(originalBill.getBillAmount());
|
||||
originalBill.setBillAmountSettlement(BigDecimal.ZERO);
|
||||
originalBill.setSynchronousStatus(0);
|
||||
originalBill.setSkSynchronousStatus(0);
|
||||
originalBill.setApplyNumber(null);
|
||||
originalBill.setSettlementTime(null);
|
||||
originalBill.setSynchronousTime(null);
|
||||
originalBill.setSkSynchronousTime(null);
|
||||
originalBill.setInvoiceId(null);
|
||||
originalBill.setInvoiceMakeTime(null);
|
||||
originalBill.setNcId(null);
|
||||
originalBill.setSkNcId(null);
|
||||
// 明细也清空id
|
||||
for (BillDetailPO detail : originalDetails) {
|
||||
detail.setBillDetailId(null);
|
||||
detail.setBillManageId(null);
|
||||
detail.setBillNumber(null);
|
||||
}
|
||||
// 4. 复制账单明细
|
||||
List<BillDetail> 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<BillingStatementPO> originalStatements = billingStatementDomainService.getDetailsByManageId(billManageDTO.getBillManageId());
|
||||
boolean flagThree = true;
|
||||
if (originalStatements != null && !originalStatements.isEmpty()) {
|
||||
List<BillingStatement> 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;
|
||||
originalBill.setBillDetailPOList(originalDetails);
|
||||
return originalBill;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -258,7 +258,7 @@ public class BillManageApi extends BaseController{
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("复制账单")
|
||||
@ApiOperation("复制账单-获取原账单数据用于回显")
|
||||
@PostMapping("/copyBill")
|
||||
public AjaxResult copyBill(@RequestBody BillManageDTO billManageDTO)
|
||||
{
|
||||
@@ -266,8 +266,8 @@ public class BillManageApi extends BaseController{
|
||||
throw new ServiceException("原账单id不能为空");
|
||||
}
|
||||
try {
|
||||
Boolean result = billManageApplicationService.copyBill(billManageDTO);
|
||||
return toAjax(result);
|
||||
BillManagePO result = billManageApplicationService.copyBill(billManageDTO);
|
||||
return AjaxResult.success(result);
|
||||
}catch (Exception e){
|
||||
return AjaxResult.error("复制账单失败:"+e.getMessage());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user