单位收费业务逻辑修改

This commit is contained in:
dy
2025-09-14 16:36:53 +08:00
parent cdbe1a8a96
commit cd2be61255
6 changed files with 56 additions and 27 deletions

View File

@@ -102,6 +102,8 @@ public class Clean extends TenantEntity {
*/ */
private String searchValue; private String searchValue;
private Double area;
@TableField(exist = false) @TableField(exist = false)
private CleanRelation cleanRelation; private CleanRelation cleanRelation;

View File

@@ -29,7 +29,7 @@ public class CostItems extends TenantEntity {
private Long id; private Long id;
/** /**
* 费用类型 * 费用类型(0物业费1押金2停车费3维修费4.服务费5水费6电费7租金8其他)
*/ */
private String costType; private String costType;
/** /**

View File

@@ -75,13 +75,13 @@ public class CostItemsBo extends BaseEntity {
/** /**
* 进位方式 * 进位方式
*/ */
@NotBlank(message = "进位方式不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotBlank(message = "进位方式不能为空", groups = { AddGroup.class, EditGroup.class })
private String roundingMode; private String roundingMode;
/** /**
* 保留小数 * 保留小数
*/ */
@NotBlank(message = "保留小数不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotBlank(message = "保留小数不能为空", groups = { AddGroup.class, EditGroup.class })
private String currencyDecimals; private String currencyDecimals;
/** /**
@@ -92,13 +92,13 @@ public class CostItemsBo extends BaseEntity {
/** /**
* 计算公式 * 计算公式
*/ */
@NotBlank(message = "计算公式不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotBlank(message = "计算公式不能为空", groups = { AddGroup.class, EditGroup.class })
private String formula; private String formula;
/** /**
* 计费单价 * 计费单价
*/ */
@NotNull(message = "计费单价不能为空", groups = { AddGroup.class, EditGroup.class }) // @NotNull(message = "计费单价不能为空", groups = { AddGroup.class, EditGroup.class })
@DecimalMin(value = "0.00", inclusive = false, message = "计费单价必须大于0") @DecimalMin(value = "0.00", inclusive = false, message = "计费单价必须大于0")
@ExcelProperty("计费单价") @ExcelProperty("计费单价")
private BigDecimal unitPrice; private BigDecimal unitPrice;

View File

@@ -151,5 +151,4 @@ public class CleanOrderBo extends BaseEntity {
private CleanOrderRecordBo cleanOrderRecord; private CleanOrderRecordBo cleanOrderRecord;
} }

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.common.core.utils.DictUtils;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -24,7 +25,9 @@ import org.dromara.property.domain.vo.*;
import org.dromara.property.domain.vo.residentVo.ResidentPersonVo; import org.dromara.property.domain.vo.residentVo.ResidentPersonVo;
import org.dromara.property.domain.vo.residentVo.ResidentUnitVo; import org.dromara.property.domain.vo.residentVo.ResidentUnitVo;
import org.dromara.property.mapper.*; import org.dromara.property.mapper.*;
import org.dromara.system.api.RemoteDictService;
import org.dromara.system.api.RemoteUserService; import org.dromara.system.api.RemoteUserService;
import org.dromara.system.api.domain.vo.RemoteDictDataVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.property.domain.bo.CostHouseChargeBo; import org.dromara.property.domain.bo.CostHouseChargeBo;
import org.dromara.property.service.ICostHouseChargeService; import org.dromara.property.service.ICostHouseChargeService;
@@ -32,10 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -59,6 +59,9 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
@DubboReference @DubboReference
private RemoteUserService remoteUserService; private RemoteUserService remoteUserService;
@DubboReference
private RemoteDictService remoteDictService;
/** /**
* 查询房屋收费 * 查询房屋收费
* *
@@ -147,18 +150,18 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
lqw.orderByDesc(CostHouseCharge::getCreateTime) lqw.orderByDesc(CostHouseCharge::getCreateTime)
.orderByDesc(CostHouseCharge::getUpdateTime); .orderByDesc(CostHouseCharge::getUpdateTime);
List<Long> itemIdList = new ArrayList<>(); List<Long> itemIdList = new ArrayList<>();
if(ObjectUtil.isNotEmpty(bo.getCostType())){ if (ObjectUtil.isNotEmpty(bo.getCostType())) {
List<CostItemsVo> costItemsVos = costItemsMapper.selectVoList( List<CostItemsVo> costItemsVos = costItemsMapper.selectVoList(
new LambdaQueryWrapper<CostItems>() new LambdaQueryWrapper<CostItems>()
.eq(CostItems::getCostType, bo.getCostType()) .eq(CostItems::getCostType, bo.getCostType())
); );
//收集项目id //收集项目id
itemIdList = costItemsVos.stream().map(vo -> vo.getId()).distinct().collect(Collectors.toList()); itemIdList = costItemsVos.stream().map(vo -> vo.getId()).distinct().collect(Collectors.toList());
} }
lqw.in(CollUtil.isNotEmpty(itemIdList), CostHouseCharge::getCostItemsId, itemIdList ); lqw.in(CollUtil.isNotEmpty(itemIdList), CostHouseCharge::getCostItemsId, itemIdList);
lqw.eq(bo.getResidentUnitId() != null, CostHouseCharge::getResidentUnitId, bo.getResidentUnitId()); lqw.eq(bo.getResidentUnitId() != null, CostHouseCharge::getResidentUnitId, bo.getResidentUnitId());
lqw.eq(bo.getCostItemsId() != null, CostHouseCharge::getCostItemsId, bo.getCostItemsId()); lqw.eq(bo.getCostItemsId() != null, CostHouseCharge::getCostItemsId, bo.getCostItemsId());
lqw.eq(bo.getType()!= null, CostHouseCharge::getType, bo.getType()); lqw.eq(bo.getType() != null, CostHouseCharge::getType, bo.getType());
lqw.eq(StringUtils.isNotBlank(bo.getChargeCycle()), CostHouseCharge::getChargeCycle, bo.getChargeCycle()); lqw.eq(StringUtils.isNotBlank(bo.getChargeCycle()), CostHouseCharge::getChargeCycle, bo.getChargeCycle());
lqw.eq(bo.getAmountReceivable() != null, CostHouseCharge::getAmountReceivable, bo.getAmountReceivable()); lqw.eq(bo.getAmountReceivable() != null, CostHouseCharge::getAmountReceivable, bo.getAmountReceivable());
lqw.eq(bo.getStartTime() != null, CostHouseCharge::getStartTime, bo.getStartTime()); lqw.eq(bo.getStartTime() != null, CostHouseCharge::getStartTime, bo.getStartTime());
@@ -185,18 +188,43 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
BigDecimal area = new BigDecimal(add.getArea()); BigDecimal area = new BigDecimal(add.getArea());
CostItemsVo costItemsVo = costItemsMapper.selectVoById(add.getCostItemsId()); CostItemsVo costItemsVo = costItemsMapper.selectVoById(add.getCostItemsId());
BigDecimal unitPrice = costItemsVo.getUnitPrice(); BigDecimal unitPrice = costItemsVo.getUnitPrice();
//向上取整 // //向上取整
if (costItemsVo.getRoundingMode().equals("1")) { // if (costItemsVo.getRoundingMode().equals("1")) {
add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale(Integer.valueOf(costItemsVo.getCurrencyDecimals()), BigDecimal.ROUND_UP)); // add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale(Integer.valueOf(costItemsVo.getCurrencyDecimals()), BigDecimal.ROUND_UP));
} // }
//向下取整 // //向下取整
if (costItemsVo.getRoundingMode().equals("2")) { // if (costItemsVo.getRoundingMode().equals("2")) {
add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale(Integer.valueOf(costItemsVo.getCurrencyDecimals()), BigDecimal.ROUND_DOWN)); // add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale(Integer.valueOf(costItemsVo.getCurrencyDecimals()), BigDecimal.ROUND_DOWN));
} // }
//四舍五入 // //四舍五入
if (costItemsVo.getRoundingMode().equals("0")) { // if (costItemsVo.getRoundingMode().equals("0")) {
add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale(Integer.valueOf(costItemsVo.getCurrencyDecimals()), RoundingMode.HALF_UP)); // add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge()).setScale(Integer.valueOf(costItemsVo.getCurrencyDecimals()), RoundingMode.HALF_UP));
// }
List<RemoteDictDataVo> proExpenseType = remoteDictService.selectDictDataByType("pro_expense_type");
//循环proExpenseType
for (RemoteDictDataVo remoteDictDataVo : proExpenseType) {
//类型为0则为物业管理费用设置收费为建筑面积*单价+附加费
if (Objects.equals(remoteDictDataVo.getDictValue(), "0")) {
add.setAmountReceivable(area.multiply(unitPrice).add(costItemsVo.getSurcharge().setScale(Integer.parseInt(costItemsVo.getCurrencyDecimals()), BigDecimal.ROUND_HALF_UP)));
}
//类型为2、7、9则为停车费用、租金、押金设置收费为固定收费
if (Objects.equals(remoteDictDataVo.getDictValue(), "2") || Objects.equals(remoteDictDataVo.getDictValue(), "7") || Objects.equals(remoteDictDataVo.getDictValue(), "9")) {
add.setAmountReceivable(costItemsVo.getSurcharge());
}
//类型为5则为水费
if (Objects.equals(remoteDictDataVo.getDictValue(), "5")) {
}
//类型为6则为电费
if (Objects.equals(remoteDictDataVo.getDictValue(), "6")) {
}
//类型为8则为气费
if (Objects.equals(remoteDictDataVo.getDictValue(), "8")) {
}
} }
add.setChargeStatus(ChargeStatusEnum.PAYMENT_IS_SUBJECT_TO_REVIEW.getValue()); add.setChargeStatus(ChargeStatusEnum.PAYMENT_IS_SUBJECT_TO_REVIEW.getValue());
//area //area
validEntityBeforeSave(add); validEntityBeforeSave(add);
@@ -297,7 +325,7 @@ public class CostHouseChargeServiceImpl implements ICostHouseChargeService {
.setEndTime(bo.getEndTime()) .setEndTime(bo.getEndTime())
.setReceivableAmount(bo.getAmountReceivable()) .setReceivableAmount(bo.getAmountReceivable())
.setState("0"); .setState("0");
return costPayFeeAuditMapper.insert(CostPayFeeAudit)>0; return costPayFeeAuditMapper.insert(CostPayFeeAudit) > 0;
} }
return flag; return flag;
} }

View File

@@ -228,7 +228,7 @@ public class CleanOrderServiceImpl implements ICleanOrderService {
cleanRelation.setCleanserverOrderId(cleanserverOrderIds.get(i)); cleanRelation.setCleanserverOrderId(cleanserverOrderIds.get(i));
cleanRelation.setCleanId(clean.getId()); cleanRelation.setCleanId(clean.getId());
// cleanRelation.setAreas(clean.getArea()); // cleanRelation.setAreas(clean.getArea());
cleanRelation.setSumPrice(bo.getSumPeices()); cleanRelation.setSumPrice(bo.getCleanList().get(i).getArea() * bo.getCleanList().get(i).getPeices());
cleanRelationMapper.insert(cleanRelation); cleanRelationMapper.insert(cleanRelation);
i++; i++;
} }