一、结算中心 e6-ms-tms-financial

1、合同管理

1.1 增加和更新也是在一块处理,先是通过 ContractInfoVO 的ID 拿到了一个 ContractInfoPO 的实体类对象,然后先把这个添加到历史版本当中,再次更新;否则进行添加

  1. public E6Wrapper<ContractRuleVO> saveOrUpdate(ContractRuleVO contractRuleVO) {
  2. // 获取并更新原始合同信息
  3. // 先拿出原来的一份合同
  4. ContractInfoPO contractInfoPoTemplate = new ContractInfoPO();
  5. contractInfoPoTemplate.setId(contractRuleVO.getContractId());
  6. Optional<ContractInfoPO> contractInfoOptional = contractInfoDao.findOne(Example.of(contractInfoPoTemplate));

2.2 合同下拉框的处理逻辑,先是进行将集合进行拆分,然后再次进行封装到集合

  1. public E6Wrapper<Object> getContractStatusDropBox() {
  2. LinkedList<ContractDropBoxVO> list = Lists.newLinkedList();
  3. for (ContractStatusEnum item : ContractStatusEnum.values()) {
  4. ContractDropBoxVO dropBoxVO = new ContractDropBoxVO();
  5. dropBoxVO.setId(item.getId());
  6. dropBoxVO.setLabel(item.getLabel());
  7. list.add(dropBoxVO);
  8. }
  9. return E6WrapperUtil.wrap(list);
  10. }

3.3 合同的方式
第一种:企业应该给货运商支付
对于企业就是应付合同
对于货运商就是应收合同
第二种:货运商是客户

2、司机津贴

2.1 有以下两种方式是不用进行展示司机津贴明细的

  1. // BillWaybillBasicPO 表示运单
  2. public void calculate(BillWaybillBasicPO billWayBasicPO) {
  3. // 方式一、委派给承运商的运单,不需要展示出司机津贴明细
  4. String carrierId = billWayBasicPO.getCarrierId();
  5. if (StringUtils.isNotEmpty(carrierId)) {
  6. logger.info("委派给承运商的运单:{},不需要展示出司机津贴明细", billWayBasicPO.getWaybillId());
  7. return;
  8. }
  9. // 方式二、运单没有绑定司机,不需要展示出司机津贴明细
  10. Integer mainDriver = waybillInfoMapper.findMainDriver(billWayBasicPO.getCorpId(), billWayBasicPO.getWaybillId());
  11. if (Objects.isNull(mainDriver) || mainDriver.intValue() == 0) {
  12. logger.info("运单:{}没有绑定司机,不需要展示司机津贴明细", billWayBasicPO.getWaybillId());
  13. return;
  14. }
  15. // 获取计算费用数据
  16. BillWaybillFeeDataPO waybillFeeDataPO = getBillWaybillFeeDataPO(billWayBasicPO);
  17. logger.info("运单:{}获取司机津贴计费数据:{}", billWayBasicPO.getWaybillId(), JSON.toJSONString(waybillFeeDataPO));
  18. if (Objects.isNull(waybillFeeDataPO)) {
  19. logger.warn("运单{}对应的计费数据不存在,无法进行司机费用计算,直接返回", billWayBasicPO.getWaybillId());
  20. return;
  21. }
  22. // 匹配津贴
  23. AllowanceInfoPO allowanceInfoPO = findAllowanceInfo(billWayBasicPO, waybillFeeDataPO);
  24. logger.info("运单:{},匹配到唯一司机津贴:{}", billWayBasicPO.getWaybillId(), JSON.toJSONString(allowanceInfoPO));
  25. if (Objects.isNull(allowanceInfoPO)) {
  26. logger.info("运单{},没有找到唯一的津贴,无法进行司机费用计算,直接返回", billWayBasicPO.getWaybillId());
  27. return;
  28. }
  29. // 计算费用
  30. Boolean feeSuccess = calculateAndRecordDetail(allowanceInfoPO, waybillFeeDataPO, billWayBasicPO, FIND_VALID_ALLOWANCE, Arrays.asList(allowanceInfoPO.getId()), Arrays.asList(allowanceInfoPO.getVersion().toString()));
  31. logger.info("运单{},对应司机津贴:{},费用计算{}", billWayBasicPO.getWaybillId(), allowanceInfoPO.getAllowanceCode(), BooleanUtils.isTrue(feeSuccess) ? "成功" : "失败");
  32. }

2.2 司机津贴添加的逻辑
添加和修改的逻辑在一块,并将索要修改的信息封装成一个对象,并作为参数传入给后台,后台通过获取该封装之后的对象的 ID 来判断该条记录是否存在?若存在,则更新;若不在,则新增

  1. /**
  2. AllowanceInfoVO 封装了新增或者修改的实体类
  3. 与之对应的也有一个:AllowanceInfoPO
  4. */
  5. @Transactional
  6. @Override
  7. public E6Wrapper<AllowanceInfoVO> saveOrUpdate(AllowanceInfoVO allowanceInfoVO) {
  8. logger.info("接收到司机津贴数据={}", JSON.toJSONString(allowanceInfoVO));
  9. // 参数校验
  10. E6Wrapper<AllowanceInfoVO> wrapper = checkDataParam(allowanceInfoVO);
  11. if (wrapper.getCode() != E6Wrapper.CODE_SUCCESS){
  12. return wrapper;
  13. }
  14. String allowanceId = allowanceInfoVO.getAllowanceId();
  15. return StringUtils.isEmpty(allowanceId) ? save(allowanceInfoVO) : update(allowanceInfoVO);
  16. }