QueryOweFeeImpl.java 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. package com.java110.fee.bmo.impl;
  2. import com.java110.dto.RoomDto;
  3. import com.java110.dto.fee.BillDto;
  4. import com.java110.dto.fee.BillOweFeeDto;
  5. import com.java110.dto.fee.FeeConfigDto;
  6. import com.java110.dto.fee.FeeDto;
  7. import com.java110.dto.parking.ParkingSpaceDto;
  8. import com.java110.fee.bmo.IQueryOweFee;
  9. import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
  10. import com.java110.intf.community.IRoomInnerServiceSMO;
  11. import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
  12. import com.java110.intf.fee.IFeeInnerServiceSMO;
  13. import com.java110.utils.util.DateUtil;
  14. import com.java110.vo.ResultVo;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.http.ResponseEntity;
  17. import org.springframework.stereotype.Service;
  18. import java.math.BigDecimal;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. @Service
  22. public class QueryOweFeeImpl implements IQueryOweFee {
  23. @Autowired
  24. private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
  25. @Autowired
  26. private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
  27. @Autowired
  28. private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
  29. @Autowired
  30. private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
  31. @Override
  32. public ResponseEntity<String> query(FeeDto feeDto) {
  33. //查询费用信息arrearsEndTime
  34. feeDto.setArrearsEndTime(DateUtil.getCurrentDate());
  35. feeDto.setState(FeeDto.STATE_DOING);
  36. List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
  37. if (feeDtos == null || feeDtos.size() < 1) {
  38. feeDtos = new ArrayList<>();
  39. return ResultVo.createResponseEntity(feeDtos);
  40. }
  41. List<FeeDto> tmpFeeDtos = new ArrayList<>();
  42. for (FeeDto tmpFeeDto : feeDtos) {
  43. computeOweFee(tmpFeeDto);//计算欠费金额
  44. //如果金额为0 就排除
  45. if (tmpFeeDto.getFeePrice() > 0) {
  46. tmpFeeDtos.add(tmpFeeDto);
  47. }
  48. }
  49. return ResultVo.createResponseEntity(tmpFeeDtos);
  50. }
  51. /**
  52. * 计算欠费金额
  53. *
  54. * @param tmpFeeDto
  55. */
  56. private void computeOweFee(FeeDto tmpFeeDto) {
  57. String billType = tmpFeeDto.getBillType();
  58. if (FeeConfigDto.BILL_TYPE_EVERY.equals(billType)) {
  59. computeFeePrice(tmpFeeDto);
  60. return;
  61. }
  62. BillDto billDto = new BillDto();
  63. billDto.setCommunityId(tmpFeeDto.getCommunityId());
  64. billDto.setConfigId(tmpFeeDto.getConfigId());
  65. billDto.setCurBill("T");
  66. List<BillDto> billDtos = feeInnerServiceSMOImpl.queryBills(billDto);
  67. if (billDtos == null || billDtos.size() < 1) {
  68. tmpFeeDto.setFeePrice(0.00);
  69. return;
  70. }
  71. BillOweFeeDto billOweFeeDto = new BillOweFeeDto();
  72. billOweFeeDto.setCommunityId(tmpFeeDto.getCommunityId());
  73. billOweFeeDto.setFeeId(tmpFeeDto.getFeeId());
  74. billOweFeeDto.setState(BillOweFeeDto.STATE_WILL_FEE);
  75. billOweFeeDto.setBillId(billDtos.get(0).getBillId());
  76. List<BillOweFeeDto> billOweFeeDtos = feeInnerServiceSMOImpl.queryBillOweFees(billOweFeeDto);
  77. if (billOweFeeDtos == null || billOweFeeDtos.size() < 1) {
  78. tmpFeeDto.setFeePrice(0.00);
  79. return;
  80. }
  81. tmpFeeDto.setFeePrice(Double.parseDouble(billOweFeeDtos.get(0).getAmountOwed()));
  82. }
  83. private void computeFeePrice(FeeDto feeDto) {
  84. if ("3333".equals(feeDto.getPayerObjType())) { //房屋相关
  85. computeFeePriceByRoom(feeDto);
  86. } else if ("6666".equals(feeDto.getPayerObjType())) {//车位相关
  87. computeFeePriceByParkingSpace(feeDto);
  88. }
  89. }
  90. private void computeFeePriceByParkingSpace(FeeDto feeDto) {
  91. ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
  92. parkingSpaceDto.setCommunityId(feeDto.getCommunityId());
  93. parkingSpaceDto.setPsId(feeDto.getPayerObjId());
  94. List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
  95. if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) { //数据有问题
  96. return;
  97. }
  98. String computingFormula = feeDto.getComputingFormula();
  99. double feePrice = 0.00;
  100. if ("1001".equals(computingFormula)) { //面积*单价+附加费
  101. BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
  102. BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(parkingSpaceDtos.get(0).getArea()));
  103. BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
  104. feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
  105. } else if ("2002".equals(computingFormula)) { // 固定费用
  106. BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
  107. feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
  108. } else if ("4004".equals(computingFormula)) {
  109. feePrice = Double.parseDouble(feeDto.getAmount());
  110. } else {
  111. feePrice = 0.00;
  112. }
  113. feeDto.setFeePrice(feePrice);
  114. }
  115. /**
  116. * 根据房屋来算单价
  117. *
  118. * @param feeDto
  119. */
  120. private void computeFeePriceByRoom(FeeDto feeDto) {
  121. RoomDto roomDto = new RoomDto();
  122. roomDto.setCommunityId(feeDto.getCommunityId());
  123. roomDto.setRoomId(feeDto.getPayerObjId());
  124. List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
  125. if (roomDtos == null || roomDtos.size() < 1) { //数据有问题
  126. return;
  127. }
  128. String computingFormula = feeDto.getComputingFormula();
  129. double feePrice = 0.00;
  130. if ("1001".equals(computingFormula)) { //面积*单价+附加费
  131. BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
  132. BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDtos.get(0).getBuiltUpArea()));
  133. BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
  134. feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
  135. } else if ("2002".equals(computingFormula)) { // 固定费用
  136. BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
  137. feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
  138. } else if ("4004".equals(computingFormula)) {
  139. feePrice = Double.parseDouble(feeDto.getAmount());
  140. } else {
  141. feePrice = 0.00;
  142. }
  143. feeDto.setFeePrice(feePrice);
  144. }
  145. }