3.0.5
This commit is contained in:
+120
@@ -7,10 +7,18 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.mhd.bms.application.server.billingRules.CostCalculationApplicationService;
|
import com.mhd.bms.application.server.billingRules.CostCalculationApplicationService;
|
||||||
import com.mhd.bms.application.server.settlementCustomers.SettlementCustomersApplicationService;
|
import com.mhd.bms.application.server.settlementCustomers.SettlementCustomersApplicationService;
|
||||||
|
import com.mhd.bms.domain.billManage.entity.BillDetail;
|
||||||
|
import com.mhd.bms.domain.billManage.entity.BillManage;
|
||||||
|
import com.mhd.bms.domain.billManage.repository.facade.IBillDetailService;
|
||||||
|
import com.mhd.bms.domain.billManage.repository.facade.IBillManageService;
|
||||||
import com.mhd.bms.domain.billingRules.repository.po.BillingParamsPO;
|
import com.mhd.bms.domain.billingRules.repository.po.BillingParamsPO;
|
||||||
import com.mhd.bms.domain.billingRules.repository.po.BillingRulesPO;
|
import com.mhd.bms.domain.billingRules.repository.po.BillingRulesPO;
|
||||||
|
import com.mhd.bms.domain.billingStatement.entity.BillingStatement;
|
||||||
|
import com.mhd.bms.domain.billingStatement.repository.mapper.BillingStatementMapper;
|
||||||
|
import com.mhd.bms.domain.billingStatement.repository.todo.BillingStatementDO;
|
||||||
import com.mhd.bms.domain.billingStatement.service.BillingStatementDomainService;
|
import com.mhd.bms.domain.billingStatement.service.BillingStatementDomainService;
|
||||||
import com.mhd.bms.domain.businessDocument.entity.BusinessDocument;
|
import com.mhd.bms.domain.businessDocument.entity.BusinessDocument;
|
||||||
|
import com.mhd.bms.domain.businessDocument.repository.mapper.BusinessDocumentMapper;
|
||||||
import com.mhd.bms.domain.businessDocument.repository.po.BusinessDocumentPO;
|
import com.mhd.bms.domain.businessDocument.repository.po.BusinessDocumentPO;
|
||||||
import com.mhd.bms.domain.businessDocument.repository.todo.BusinessDocumentDO;
|
import com.mhd.bms.domain.businessDocument.repository.todo.BusinessDocumentDO;
|
||||||
import com.mhd.bms.domain.businessDocument.service.BusinessDocumentDomainService;
|
import com.mhd.bms.domain.businessDocument.service.BusinessDocumentDomainService;
|
||||||
@@ -30,6 +38,7 @@ import com.mhd.bms.infrastructure.feign.vo.ContractManagePO;
|
|||||||
import com.mhd.bms.infrastructure.feign.vo.ExpenseAccountPO;
|
import com.mhd.bms.infrastructure.feign.vo.ExpenseAccountPO;
|
||||||
import com.mhd.bms.interfaces.assembler.businessDocument.BusinessDocumentAssembler;
|
import com.mhd.bms.interfaces.assembler.businessDocument.BusinessDocumentAssembler;
|
||||||
import com.mhd.bms.interfaces.dto.billingRules.CostCalculationDTO;
|
import com.mhd.bms.interfaces.dto.billingRules.CostCalculationDTO;
|
||||||
|
import com.mhd.bms.interfaces.dto.billingStatement.BillingStatementDTO;
|
||||||
import com.mhd.bms.interfaces.dto.businessDocument.BusinessDocumentDTO;
|
import com.mhd.bms.interfaces.dto.businessDocument.BusinessDocumentDTO;
|
||||||
import com.mhd.common.core.domain.dto.BusinessDataPushDTO;
|
import com.mhd.common.core.domain.dto.BusinessDataPushDTO;
|
||||||
import com.mhd.common.core.domain.po.OrganizationPo;
|
import com.mhd.common.core.domain.po.OrganizationPo;
|
||||||
@@ -86,6 +95,14 @@ public class BusinessDocumentApplicationService {
|
|||||||
private CostCalculationApplicationService costCalculationApplicationService;
|
private CostCalculationApplicationService costCalculationApplicationService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISettlementCustomersService settlementCustomersService;
|
private ISettlementCustomersService settlementCustomersService;
|
||||||
|
@Autowired
|
||||||
|
private BusinessDocumentMapper businessDocumentMapper;
|
||||||
|
@Autowired
|
||||||
|
private BillingStatementMapper billingStatementMapper;
|
||||||
|
@Autowired
|
||||||
|
private IBillManageService billManageService;
|
||||||
|
@Autowired
|
||||||
|
private IBillDetailService billDetailService;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -202,6 +219,109 @@ public class BusinessDocumentApplicationService {
|
|||||||
return businessDocumentDomainService.insert(businessDocumentDO);
|
return businessDocumentDomainService.insert(businessDocumentDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public Boolean manageAddFee(BusinessDocumentDO businessDocumentDO) {
|
||||||
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
|
if (ObjectUtil.isNull(loginUser)) {
|
||||||
|
throw new DigitalLogisticsException(UserError.TIMEOUT);
|
||||||
|
}
|
||||||
|
//先设置组织信息,因为handleDate方法中需要使用topOrganizationId
|
||||||
|
businessDocumentDO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||||
|
businessDocumentDO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||||
|
businessDocumentDO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||||
|
UserPo userPo = loginUser.getUserPo();
|
||||||
|
businessDocumentDO.setCreateBy(userPo.getUserId());
|
||||||
|
businessDocumentDO.setCreateByName(userPo.getUserName());
|
||||||
|
//校验使用的表单是否必填校验
|
||||||
|
checkDoucumentType(businessDocumentDO);
|
||||||
|
//处理数据
|
||||||
|
handleDate(businessDocumentDO);
|
||||||
|
businessDocumentDO.setDataSources(2);
|
||||||
|
businessDocumentDO.setBusinessFlow(OrderSequence.getOrderCode("LS"));
|
||||||
|
//调用费用计算,计算费用金额进行保存
|
||||||
|
CostCalculationDTO costCalculationDTO = new CostCalculationDTO();
|
||||||
|
costCalculationDTO.setOriginalBusinessNum(businessDocumentDO.getOriginalBusinessNum());
|
||||||
|
costCalculationDTO.setContractNumber(businessDocumentDO.getContractNumber());
|
||||||
|
costCalculationDTO.setFormJson(businessDocumentDO.getDocumentFormJson());
|
||||||
|
costCalculationDTO.setSubjectCode(StringUtils.isEmpty(businessDocumentDO.getSecondSubjectCode()) ? businessDocumentDO.getFirstSubjectCode():businessDocumentDO.getSecondSubjectCode());
|
||||||
|
costCalculationDTO.setDocumentTypeCode(businessDocumentDO.getDocumentTypeCode());
|
||||||
|
costCalculationDTO.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
|
||||||
|
costCalculationDTO.setOrganizationId(loginUser.getUserPo().getOrganizationId());
|
||||||
|
costCalculationDTO.setOrganizationName(loginUser.getUserPo().getOrganizationName());
|
||||||
|
BillingCostPo billingCostPo = costCalculationApplicationService.costCalculation(costCalculationDTO);
|
||||||
|
businessDocumentDO.setEstimatedCost(billingCostPo.getComputationalCost());
|
||||||
|
BillingRulesPO billingRulesPO = billingCostPo.getBillingRulesPO();
|
||||||
|
List<BillingParamsPO> billingParamsPOList = billingRulesPO.getBillingParamsPOList();
|
||||||
|
if (ObjectUtil.isNotNull(billingParamsPOList)&&billingParamsPOList.size()>0) {
|
||||||
|
BillingParamsPO billingParamsPO = billingParamsPOList.get(0);
|
||||||
|
String billingParamsJson = billingParamsPO.getBillingParamsJson();
|
||||||
|
String preSetRules = billingParamsPO.getPreSetRules();
|
||||||
|
String documentFormJson = businessDocumentDO.getDocumentFormJson();
|
||||||
|
JSONObject paramObj = JSONObject.parseObject(documentFormJson);
|
||||||
|
List<BillingParamsEntity> billingParamsEntityList = JSON.parseArray(billingParamsJson, BillingParamsEntity.class);
|
||||||
|
for (BillingParamsEntity billingParamsEntity : billingParamsEntityList) {
|
||||||
|
String isFee = billingParamsEntity.getIsFee();
|
||||||
|
String fields = billingParamsEntity.getFields();
|
||||||
|
// 安全获取值并转 BigDecimal(不会报错)
|
||||||
|
BigDecimal value = getSafeBigDecimal(paramObj, fields);
|
||||||
|
|
||||||
|
if ("1".equals(isFee)) {
|
||||||
|
businessDocumentDO.setBillingUnitPrice(value.setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||||
|
} else {
|
||||||
|
businessDocumentDO.setBillingNum(value.setScale(2, BigDecimal.ROUND_HALF_UP));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BusinessDocument businessDocument = businessDocumentDomainService.insertRetrun(businessDocumentDO);
|
||||||
|
BusinessDocumentDTO businessDocumentDTO = new BusinessDocumentDTO();
|
||||||
|
businessDocumentDTO.setBusinessDocumentIds(businessDocument.getBusinessDocumentId().toString());
|
||||||
|
businessDocumentDTO.setAuditOperation(1);
|
||||||
|
takeEffectByIds(businessDocumentDTO);
|
||||||
|
auditByIds(businessDocumentDTO);
|
||||||
|
List<BillingStatement> billingStatements = billingStatementMapper.selectList(new LambdaQueryWrapper<BillingStatement>()
|
||||||
|
.eq(BillingStatement::getBusinessDocumentId, businessDocument.getBusinessDocumentId())
|
||||||
|
.eq(BillingStatement::getDelFlag, 1));
|
||||||
|
BillingStatement billingStatement = null;
|
||||||
|
if (ObjectUtil.isNotNull(billingStatements)&&billingStatements.size()>0) {
|
||||||
|
billingStatement = billingStatements.get(0);
|
||||||
|
BillingStatementDTO billingStatementDTO = new BillingStatementDTO();
|
||||||
|
billingStatementDTO.setBillingStatementIds(billingStatement.getBillingStatementId().toString());
|
||||||
|
billingStatementDTO.setAuditOperation(1);
|
||||||
|
billingStatementDomainService.reviewBilling(billingStatementDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
BillManage billManage = billManageService.getById(businessDocumentDO.getBillManageId());
|
||||||
|
BillDetail billDetail = new BillDetail();
|
||||||
|
billDetail.setBillManageId(businessDocumentDO.getBillManageId());
|
||||||
|
billDetail.setBillNumber(billManage.getBillNumber());
|
||||||
|
billDetail.setBillingStatementId(billingStatement.getBillingStatementId());
|
||||||
|
billDetail.setBillingFlow(billingStatement.getBillingFlow());
|
||||||
|
billDetail.setOrganizationId(billManage.getOrganizationId());
|
||||||
|
billDetail.setOrganizationName(billManage.getOrganizationName());
|
||||||
|
billDetail.setTopOrganizationId(billManage.getTopOrganizationId());
|
||||||
|
billDetail.setCreateBy(userPo.getUserId());
|
||||||
|
billDetail.setCreateByName(userPo.getUserName());
|
||||||
|
billDetail.setCreateTime(new Date());
|
||||||
|
billDetail.setDelFlag(1);
|
||||||
|
billDetail.setBillingTotalAmount(billingStatement.getBillingAmount());
|
||||||
|
billDetail.setBillingDiscountAmount(BigDecimal.ZERO);
|
||||||
|
billDetail.setBillingAmount(billingStatement.getBillingAmount());
|
||||||
|
billDetail.setBillType(1);
|
||||||
|
billDetail.setBillingExpectedAmount(BigDecimal.ZERO);
|
||||||
|
billDetail.setFeeType(billingStatement.getServiceItemsName());
|
||||||
|
billDetail.setInvoiceItem(billingStatement.getFirstSubjectCode());
|
||||||
|
billDetail.setInvoiceItemName(billingStatement.getFirstSubjectName());
|
||||||
|
billDetail.setSettlementCurrency(billingStatement.getSettlementCurrency());
|
||||||
|
billDetailService.save(billDetail);
|
||||||
|
BigDecimal billAmount = billManage.getBillAmount();
|
||||||
|
BigDecimal amount = billAmount.add(billDetail.getBillingAmount());
|
||||||
|
billManage.setBillAmount(amount);
|
||||||
|
billManage.setBillTotalAmount(amount);
|
||||||
|
billManageService.updateById(billManage);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从 JSONObject 安全获取 BigDecimal,支持:
|
* 从 JSONObject 安全获取 BigDecimal,支持:
|
||||||
* 数字、整数字符串、小数字符串、null、空字符串
|
* 数字、整数字符串、小数字符串、null、空字符串
|
||||||
|
|||||||
+2
@@ -218,4 +218,6 @@ public class BusinessDocumentDO extends BaseVOEntity{
|
|||||||
private BigDecimal billingUnitPrice;
|
private BigDecimal billingUnitPrice;
|
||||||
@ApiModelProperty("nc科目编码")
|
@ApiModelProperty("nc科目编码")
|
||||||
private String ncSubjectCode;
|
private String ncSubjectCode;
|
||||||
|
|
||||||
|
private Long billManageId;
|
||||||
}
|
}
|
||||||
@@ -79,6 +79,25 @@ public class BusinessDocumentApi extends BaseController{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存业务单据
|
||||||
|
*/
|
||||||
|
@ApiOperation("账单添加费用")
|
||||||
|
@PostMapping("/manageAddFee")
|
||||||
|
public AjaxResult manageAddFee(@RequestBody BusinessDocumentDTO businessDocumentDTO)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
//转换实体
|
||||||
|
BusinessDocumentDO businessDocumentDO = businessDocumentAssembler.toDO(businessDocumentDTO);
|
||||||
|
return toAjax(businessDocumentApplicationService.manageAddFee(businessDocumentDO));
|
||||||
|
} catch (ServiceException e) {
|
||||||
|
return AjaxResult.error(e.getMessage());
|
||||||
|
} catch (Exception e){
|
||||||
|
return AjaxResult.error("保存业务单据失败:" + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存业务单据
|
* 保存业务单据
|
||||||
|
|||||||
Reference in New Issue
Block a user