diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CostCarCharge.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CostCarCharge.java index 13aaf1e..425fa65 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CostCarCharge.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/CostCarCharge.java @@ -4,6 +4,8 @@ import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; import java.util.Date; import java.io.Serial; @@ -48,6 +50,11 @@ public class CostCarCharge extends TenantEntity { */ private String location; + /** + * 应收金额 + */ + private BigDecimal amountReceivable; + /** * 状态 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostHouseChargeBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostHouseChargeBo.java index 322041f..3eee843 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostHouseChargeBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostHouseChargeBo.java @@ -8,6 +8,8 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; + +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -53,7 +55,7 @@ public class CostHouseChargeBo extends BaseEntity { /** * 应收金额 */ - private Long amountReceivable; + private BigDecimal amountReceivable; /** * 计费开始时间 @@ -75,10 +77,6 @@ public class CostHouseChargeBo extends BaseEntity { */ private String remark; - /** - * 搜索值 - */ - private String searchValue; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostItemsBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostItemsBo.java index 210dcde..3898048 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostItemsBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/CostItemsBo.java @@ -74,11 +74,13 @@ public class CostItemsBo extends BaseEntity { /** * 进位方式 */ + @NotBlank(message = "进位方式不能为空", groups = { AddGroup.class, EditGroup.class }) private String roundingMode; /** * 保留小数 */ + @NotBlank(message = "保留小数不能为空", groups = { AddGroup.class, EditGroup.class }) private String currencyDecimals; /** @@ -89,11 +91,13 @@ public class CostItemsBo extends BaseEntity { /** * 计算公式 */ + @NotBlank(message = "计算公式不能", groups = { AddGroup.class, EditGroup.class }) private String formula; /** * 计费单价 */ + @NotBlank(message = "计费单价", groups = { AddGroup.class, EditGroup.class }) private BigDecimal unitPrice; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostCarChargeVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostCarChargeVo.java index e80f660..52dc372 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostCarChargeVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostCarChargeVo.java @@ -1,5 +1,6 @@ package org.dromara.property.domain.vo; +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import org.dromara.property.domain.CostCarCharge; @@ -60,6 +61,10 @@ public class CostCarChargeVo implements Serializable { @ExcelProperty(value = "车位") private String location; + /** + * 应收金额 + */ + private BigDecimal amountReceivable; /** * 状态 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostPayFeeAuditVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostPayFeeAuditVo.java index 306df5b..ed32952 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostPayFeeAuditVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/CostPayFeeAuditVo.java @@ -4,6 +4,8 @@ import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.property.domain.CostPayFeeAudit; import java.io.Serial; @@ -31,6 +33,7 @@ public class CostPayFeeAuditVo implements Serializable { * 主键 */ @ExcelProperty(value = "主键") + private Long id; /** @@ -38,7 +41,12 @@ public class CostPayFeeAuditVo implements Serializable { */ @ExcelProperty(value = "房屋收费id") private Long houseChargeId; - + /** + * 费用类型 + */ + @ExcelProperty(value = "费用类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "pro_expense_type") + private String costType; /** * 房间号(如101,202) */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java index 1ebd32f..533b7db 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/TbRoomVo.java @@ -76,7 +76,7 @@ public class TbRoomVo implements Serializable { * 面积(平方米) */ @ExcelProperty(value = "面积(平方米)") - private Long area; + private Float area; /** * 套内面积(平方米) */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java index 6389367..e0ea615 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostCarChargeServiceImpl.java @@ -9,6 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.property.domain.vo.CostItemsVo; +import org.dromara.property.mapper.CostItemsMapper; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.CostCarChargeBo; import org.dromara.property.domain.vo.CostCarChargeVo; @@ -16,6 +18,7 @@ import org.dromara.property.domain.CostCarCharge; import org.dromara.property.mapper.CostCarChargeMapper; import org.dromara.property.service.ICostCarChargeService; +import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Collection; @@ -32,6 +35,8 @@ import java.util.Collection; public class CostCarChargeServiceImpl implements ICostCarChargeService { private final CostCarChargeMapper baseMapper; + private final CostItemsMapper costItemsMapper; + /** * 查询费用-车辆收费 @@ -95,6 +100,9 @@ public class CostCarChargeServiceImpl implements ICostCarChargeService { @Override public Boolean insertByBo(CostCarChargeBo bo) { CostCarCharge add = MapstructUtils.convert(bo, CostCarCharge.class); + CostItemsVo costItemsVo = costItemsMapper.selectVoById(add.getCostItemsId()); + BigDecimal unitPrice = costItemsVo.getUnitPrice(); + add.setAmountReceivable(unitPrice); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java index b946d79..a4aa0f1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostHouseChargeServiceImpl.java @@ -22,6 +22,8 @@ import org.dromara.property.domain.CostHouseCharge; import org.dromara.property.mapper.CostHouseChargeMapper; import org.dromara.property.service.ICostHouseChargeService; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; import java.util.Map; import java.util.Collection; @@ -109,6 +111,24 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService { @Override public Boolean insertByBo(CostHouseChargeBo bo) { CostHouseCharge add = MapstructUtils.convert(bo, CostHouseCharge.class); + //查询房间面积 + TbRoomVo tbRoomVo = tbRoomMapper.selectVoById(bo.getRoomId()); + BigDecimal area = new BigDecimal(tbRoomVo.getArea()); + CostItemsVo costItemsVo = costItemsMapper.selectVoById(add.getCostItemsId()); + BigDecimal unitPrice = costItemsVo.getUnitPrice(); + //向上取整 + if(costItemsVo.getRoundingMode().equals("1")){ + add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale(Integer.valueOf(costItemsVo.getCurrencyDecimals()), BigDecimal.ROUND_UP).longValue()); + } + //向下取整 + if(costItemsVo.getRoundingMode().equals("2")){ + add.setAmountReceivable( area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale(Integer.valueOf(costItemsVo.getCurrencyDecimals()), BigDecimal.ROUND_DOWN).longValue()); + } + //四舍五入 + if(costItemsVo.getRoundingMode().equals("0")){ + add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale( Integer.valueOf(costItemsVo.getCurrencyDecimals()), RoundingMode.HALF_UP).longValue()); + } + //area validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostPayFeeAuditServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostPayFeeAuditServiceImpl.java index 40b62e0..fe2b5a0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostPayFeeAuditServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/CostPayFeeAuditServiceImpl.java @@ -1,5 +1,7 @@ package org.dromara.property.service.impl; +import cn.hutool.core.util.ObjectUtil; +import org.checkerframework.checker.units.qual.C; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -11,14 +13,18 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.property.domain.CostPayFeeAudit; import org.dromara.property.domain.bo.CostPayFeeAuditBo; -import org.dromara.property.domain.vo.CostPayFeeAuditVo; +import org.dromara.property.domain.vo.*; +import org.dromara.property.mapper.CostItemsMapper; import org.dromara.property.mapper.CostPayFeeAuditMapper; +import org.dromara.property.mapper.TbRoomMapper; import org.dromara.property.service.ICostPayFeeAuditService; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 费用-缴费审核Service业务层处理 @@ -32,6 +38,8 @@ import java.util.Collection; public class CostPayFeeAuditServiceImpl implements ICostPayFeeAuditService { private final CostPayFeeAuditMapper baseMapper; + private final CostItemsMapper costItemsMapper; + private final TbRoomMapper roomMapper; /** * 查询费用-缴费审核 @@ -55,7 +63,30 @@ public class CostPayFeeAuditServiceImpl implements ICostPayFeeAuditService { public TableDataInfo queryPageList(CostPayFeeAuditBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); + List itemIdList = result.getRecords().stream() + .map(vo -> vo.getItemId()) + .distinct() + .collect(Collectors.toList()); + List roomIdList = result.getRecords().stream() + .map(vo -> vo.getHouseChargeId()) + .distinct() + .collect(Collectors.toList()); + List costItemsVoList = costItemsMapper.selectVoByIds(itemIdList); + List roomVoList = roomMapper.selectVoByIds(roomIdList); + List costPayFeeAuditVoList = new ArrayList<>(); + result.getRecords().stream().forEach(s -> { + CostItemsVo costItemsVo = costItemsVoList.stream() + .filter(vo -> vo.getId() != null && vo.getId().equals(s.getItemId())).findFirst().orElse(null); + s.setChargeItem(ObjectUtil.isNotEmpty(costItemsVo)?costItemsVo.getChargeItem():null); + s.setCostType(ObjectUtil.isNotEmpty(costItemsVo)?costItemsVo.getCostType():null); + s.setChargeCycle(ObjectUtil.isNotEmpty(costItemsVo)?costItemsVo.getChargeCycle():null); + TbRoomVo tbRoomVo = roomVoList.stream() + .filter(vo -> vo.getId() != null && vo.getId().equals(s.getHouseChargeId())).findFirst().orElse(null); + s.setRoomNumber(ObjectUtil.isNotEmpty(tbRoomVo)?tbRoomVo.getRoomNumber():null); + + costPayFeeAuditVoList.add(s); + }); + return TableDataInfo.build(new Page().setRecords(costPayFeeAuditVoList)); } /**