gaoluyang
14 小时以前 e6c576bb57aa314e62154bbfc852012280d15aff
fix(device): 设备台账导入模板与导出格式统一为模板字段

- 导入模板、导出统一为 10 列:设备类型、设备名称、规格型号、供应商名称、单位、含税单价、税率、启用状态、录入人、计划运行时间;数量、含税总价、不含税总价改为内部计算字段,不再导出
- 修正不含税总价税率口径:税率按百分数存储(13 表示 13%),按 含税总价/(1+税率/100) 计算
- 导入保持新增模式,数量未填按 1 台、含税总价未填按含税单价处理

Co-Authored-By: Claude Code <noreply@anthropic.com>
已修改2个文件
38 ■■■■■ 文件已修改
src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
@@ -29,7 +29,7 @@
    @Schema(description = "计划运行时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "计划运行时间",sort = 10,dateFormat = "yyyy-MM-dd")
    @Excel(name = "计划运行时间",sort = 9,dateFormat = "yyyy-MM-dd")
    private Date planRuntimeTime;
    /**
@@ -51,46 +51,43 @@
    private String unit;
    /**
     * 数量
     * 数量(不在导入模板/导出中展示,导入时按 1 台处理)
     */
    @Excel(name = "数量",sort = 5, type = Excel.Type.EXPORT)
    private BigDecimal number = BigDecimal.ONE;
    /**
     * 含税单价
     */
    @Excel(name = "含税单价",sort = 6)
    @Excel(name = "含税单价",sort = 5)
    private BigDecimal taxIncludingPriceUnit;
    /**
     * 含税总价
     * 含税总价(不在导入模板/导出中展示,导入时按 含税单价 × 数量 计算)
     */
    @Excel(name = "含税总价",sort = 7, type = Excel.Type.EXPORT)
    private BigDecimal taxIncludingPriceTotal;
    /**
     * 税率
     */
    @Excel(name = "税率",sort = 8)
    @Excel(name = "税率",sort = 6)
    private BigDecimal taxRate;
    /**
     * 不含税总价
     * 不含税总价(不在导入模板/导出中展示,按税率折算)
     */
    @Excel(name = "不含税总价",sort = 9, type = Excel.Type.EXPORT)
    private BigDecimal unTaxIncludingPriceTotal;
    /**
     * 是否启用 1-启用 0-停用
     */
    @Excel(name = "启用状态", sort = 9, readConverterExp = "1=启用,0=停用")
    @Excel(name = "启用状态", sort = 7, readConverterExp = "1=启用,0=停用")
    private Integer isEnabled;
    /**
     * 录入人
     */
    @Excel(name = "录入人",sort = 9)
    @Excel(name = "录入人",sort = 8)
    private String createUser;
src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -190,13 +190,20 @@
            deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
        }
        BeanUtils.copyProperties(c, deviceLedger);
        // 通过含税单价、数量、税率计算含税总价,不含税总价
        deviceLedger.setTaxIncludingPriceTotal(c.getTaxIncludingPriceUnit());
        deviceLedger.setNumber(BigDecimal.ONE);
        // 数量:Excel 未填时按 1 台处理
        if (deviceLedger.getNumber() == null) {
            deviceLedger.setNumber(BigDecimal.ONE);
        }
        // 含税总价:Excel 未填时按 含税单价 × 数量 计算
        if (deviceLedger.getTaxIncludingPriceTotal() == null && deviceLedger.getTaxIncludingPriceUnit() != null) {
            deviceLedger.setTaxIncludingPriceTotal(deviceLedger.getTaxIncludingPriceUnit().multiply(deviceLedger.getNumber()));
        }
        deviceLedger.setPlanRuntimeTime(DateUtils.toLocalDate(c.getPlanRuntimeTime()));
        // 计算不含税总价,处理空值情况
        if (deviceLedger.getTaxIncludingPriceTotal() != null && c.getTaxRate() != null) {
            deviceLedger.setUnTaxIncludingPriceTotal(deviceLedger.getTaxIncludingPriceTotal().divide(BigDecimal.ONE.add(c.getTaxRate()), 2, RoundingMode.HALF_UP));
        // 不含税总价:含税总价与税率都有值时按税率折算,税率按百分数存储(13 表示 13%),与台账现有数据口径一致
        if (deviceLedger.getTaxIncludingPriceTotal() != null && deviceLedger.getTaxRate() != null) {
            BigDecimal rate = deviceLedger.getTaxRate().divide(new BigDecimal(100), 4, RoundingMode.HALF_UP);
            deviceLedger.setUnTaxIncludingPriceTotal(deviceLedger.getTaxIncludingPriceTotal()
                    .divide(BigDecimal.ONE.add(rate), 2, RoundingMode.HALF_UP));
        }
        return deviceLedger;
    }