rk
16 小时以前 33caf2bb79bb3c561916c91ae386ec772411e2e8
server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
@@ -203,16 +203,16 @@
            PricingRule existing = pricingRuleMapper.selectOne(qw);
            if (existing != null) {
                // 更新
                existing.setFieldB(item.getUnitPrice());
                // 更新(元转分)
                existing.setFieldB(yuanToFen(item.getUnitPrice()));
                existing.setUpdateTime(now);
                pricingRuleMapper.updateById(existing);
            } else {
                // 新建
                // 新建(元转分)
                PricingRule rule = new PricingRule();
                rule.setType(Constants.ZERO);
                rule.setFieldA(String.valueOf(item.getCategoryId()));
                rule.setFieldB(item.getUnitPrice());
                rule.setFieldB(yuanToFen(item.getUnitPrice()));
                rule.setCityId(request.getCityId());
                rule.setDeleted(Constants.ZERO);
                rule.setCreateTime(now);
@@ -252,7 +252,7 @@
            PricingRule rule = existingMap.get(String.valueOf(category.getId()));
            if (rule != null) {
                vo.setPricingRuleId(rule.getId());
                vo.setUnitPrice(rule.getFieldB());
                vo.setUnitPrice(fenToYuan(rule.getFieldB()));
            }
            return vo;
        }).collect(Collectors.toList());
@@ -281,9 +281,9 @@
            if (existing != null) {
                existing.setFieldB(item.getStartDistance());
                existing.setFieldC(item.getStartPrice());
                existing.setFieldC(yuanToFen(item.getStartPrice()));
                existing.setFieldD(item.getExtraDistance());
                existing.setFieldE(item.getExtraPrice());
                existing.setFieldE(yuanToFen(item.getExtraPrice()));
                existing.setUpdateTime(now);
                pricingRuleMapper.updateById(existing);
            } else {
@@ -291,9 +291,9 @@
                rule.setType(Constants.ONE);
                rule.setFieldA(String.valueOf(item.getCategoryId()));
                rule.setFieldB(item.getStartDistance());
                rule.setFieldC(item.getStartPrice());
                rule.setFieldC(yuanToFen(item.getStartPrice()));
                rule.setFieldD(item.getExtraDistance());
                rule.setFieldE(item.getExtraPrice());
                rule.setFieldE(yuanToFen(item.getExtraPrice()));
                rule.setCityId(request.getCityId());
                rule.setDeleted(Constants.ZERO);
                rule.setCreateTime(now);
@@ -334,9 +334,9 @@
            if (rule != null) {
                vo.setPricingRuleId(rule.getId());
                vo.setStartDistance(rule.getFieldB());
                vo.setStartPrice(rule.getFieldC());
                vo.setStartPrice(fenToYuan(rule.getFieldC()));
                vo.setExtraDistance(rule.getFieldD());
                vo.setExtraPrice(rule.getFieldE());
                vo.setExtraPrice(fenToYuan(rule.getFieldE()));
            }
            return vo;
        }).collect(Collectors.toList());
@@ -566,7 +566,7 @@
            PricingRule rule = existingMap.get(String.valueOf(i));
            if (rule != null) {
                vo.setPricingRuleId(rule.getId());
                vo.setDepositAmount(rule.getFieldB());
                vo.setDepositAmount(fenToYuan(rule.getFieldB()));
            }
            result.add(vo);
        }
@@ -576,15 +576,15 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void batchSaveRevenueShare(RevenueShareSaveDTO request) {
        // 校验:必须包含 fieldType 0-4 各一条
        // 校验:必须包含 fieldType 0-6 各一条
        Set<Integer> fieldTypes = request.getItems().stream()
                .map(RevenueShareItemDTO::getFieldType)
                .collect(Collectors.toSet());
        if (fieldTypes.size() != Constants.FIVE) {
        if (fieldTypes.size() != Constants.SEVEN) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
                    "必须包含企业寄(0)、个人寄(1)、企业取(2)、个人取(3)、配送员(4)共5条数据");
                    "必须包含异地企业寄(0)、异地个人寄(1)、异地企业取(2)、异地个人取(3)、配送员(4)、就地企业存(5)、就地个人存(6)共7条数据");
        }
        for (int i = 0; i <= Constants.FOUR; i++) {
        for (int i = 0; i <= Constants.SIX; i++) {
            if (!fieldTypes.contains(i)) {
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
                        "缺少类型" + i + "的数据");
@@ -634,10 +634,10 @@
        Map<String, PricingRule> existingMap = rules.stream()
                .collect(Collectors.toMap(PricingRule::getFieldA, r -> r));
        // 固定返回5条:企业寄(0)、个人寄(1)、企业取(2)、个人取(3)、配送员(4)
        // 固定返回7条:异地企业寄(0)、异地个人寄(1)、异地企业取(2)、异地个人取(3)、配送员(4)、就地企业存(5)、就地个人存(6)
        List<RevenueShareVO> result = new ArrayList<>();
        String[] typeNames = {"企业寄", "个人寄", "企业取", "个人取", "配送员"};
        for (int i = 0; i <= Constants.FOUR; i++) {
        String[] typeNames = {"异地企业寄件", "异地个人寄件", "异地企业取件", "异地个人取件", "配送员", "就地企业存件", "就地个人存件"};
        for (int i = 0; i <= Constants.SIX; i++) {
            RevenueShareVO vo = new RevenueShareVO();
            vo.setFieldType(i);
            vo.setFieldTypeName(typeNames[i]);
@@ -653,4 +653,19 @@
        return result;
    }
    private String yuanToFen(String yuan) {
        if (yuan == null || yuan.isEmpty()) return "0";
        return String.valueOf(new BigDecimal(yuan)
                .multiply(new BigDecimal("100"))
                .setScale(0, RoundingMode.HALF_UP)
                .longValue());
    }
    private String fenToYuan(String fen) {
        if (fen == null || fen.isEmpty()) return "0";
        return new BigDecimal(fen)
                .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP)
                .toPlainString();
    }
}