一、结算中心 e6-ms-tms-financial
1、合同管理
1.1 增加和更新也是在一块处理,先是通过 ContractInfoVO 的ID 拿到了一个 ContractInfoPO 的实体类对象,然后先把这个添加到历史版本当中,再次更新;否则进行添加
public E6Wrapper<ContractRuleVO> saveOrUpdate(ContractRuleVO contractRuleVO) {
// 获取并更新原始合同信息
// 先拿出原来的一份合同
ContractInfoPO contractInfoPoTemplate = new ContractInfoPO();
contractInfoPoTemplate.setId(contractRuleVO.getContractId());
Optional<ContractInfoPO> contractInfoOptional = contractInfoDao.findOne(Example.of(contractInfoPoTemplate));
2.2 合同下拉框的处理逻辑,先是进行将集合进行拆分,然后再次进行封装到集合
public E6Wrapper<Object> getContractStatusDropBox() {
LinkedList<ContractDropBoxVO> list = Lists.newLinkedList();
for (ContractStatusEnum item : ContractStatusEnum.values()) {
ContractDropBoxVO dropBoxVO = new ContractDropBoxVO();
dropBoxVO.setId(item.getId());
dropBoxVO.setLabel(item.getLabel());
list.add(dropBoxVO);
}
return E6WrapperUtil.wrap(list);
}
3.3 合同的方式
第一种:企业应该给货运商支付
对于企业就是应付合同
对于货运商就是应收合同
第二种:货运商是客户
2、司机津贴
2.1 有以下两种方式是不用进行展示司机津贴明细的
// BillWaybillBasicPO 表示运单
public void calculate(BillWaybillBasicPO billWayBasicPO) {
// 方式一、委派给承运商的运单,不需要展示出司机津贴明细
String carrierId = billWayBasicPO.getCarrierId();
if (StringUtils.isNotEmpty(carrierId)) {
logger.info("委派给承运商的运单:{},不需要展示出司机津贴明细", billWayBasicPO.getWaybillId());
return;
}
// 方式二、运单没有绑定司机,不需要展示出司机津贴明细
Integer mainDriver = waybillInfoMapper.findMainDriver(billWayBasicPO.getCorpId(), billWayBasicPO.getWaybillId());
if (Objects.isNull(mainDriver) || mainDriver.intValue() == 0) {
logger.info("运单:{}没有绑定司机,不需要展示司机津贴明细", billWayBasicPO.getWaybillId());
return;
}
// 获取计算费用数据
BillWaybillFeeDataPO waybillFeeDataPO = getBillWaybillFeeDataPO(billWayBasicPO);
logger.info("运单:{}获取司机津贴计费数据:{}", billWayBasicPO.getWaybillId(), JSON.toJSONString(waybillFeeDataPO));
if (Objects.isNull(waybillFeeDataPO)) {
logger.warn("运单{}对应的计费数据不存在,无法进行司机费用计算,直接返回", billWayBasicPO.getWaybillId());
return;
}
// 匹配津贴
AllowanceInfoPO allowanceInfoPO = findAllowanceInfo(billWayBasicPO, waybillFeeDataPO);
logger.info("运单:{},匹配到唯一司机津贴:{}", billWayBasicPO.getWaybillId(), JSON.toJSONString(allowanceInfoPO));
if (Objects.isNull(allowanceInfoPO)) {
logger.info("运单{},没有找到唯一的津贴,无法进行司机费用计算,直接返回", billWayBasicPO.getWaybillId());
return;
}
// 计算费用
Boolean feeSuccess = calculateAndRecordDetail(allowanceInfoPO, waybillFeeDataPO, billWayBasicPO, FIND_VALID_ALLOWANCE, Arrays.asList(allowanceInfoPO.getId()), Arrays.asList(allowanceInfoPO.getVersion().toString()));
logger.info("运单{},对应司机津贴:{},费用计算{}", billWayBasicPO.getWaybillId(), allowanceInfoPO.getAllowanceCode(), BooleanUtils.isTrue(feeSuccess) ? "成功" : "失败");
}
2.2 司机津贴添加的逻辑
添加和修改的逻辑在一块,并将索要修改的信息封装成一个对象,并作为参数传入给后台,后台通过获取该封装之后的对象的 ID 来判断该条记录是否存在?若存在,则更新;若不在,则新增
/**
AllowanceInfoVO 封装了新增或者修改的实体类
与之对应的也有一个:AllowanceInfoPO
*/
@Transactional
@Override
public E6Wrapper<AllowanceInfoVO> saveOrUpdate(AllowanceInfoVO allowanceInfoVO) {
logger.info("接收到司机津贴数据={}", JSON.toJSONString(allowanceInfoVO));
// 参数校验
E6Wrapper<AllowanceInfoVO> wrapper = checkDataParam(allowanceInfoVO);
if (wrapper.getCode() != E6Wrapper.CODE_SUCCESS){
return wrapper;
}
String allowanceId = allowanceInfoVO.getAllowanceId();
return StringUtils.isEmpty(allowanceId) ? save(allowanceInfoVO) : update(allowanceInfoVO);
}