Browse Source

加入根据手机号查询欠费的工嗯呢

wuxw 2 years ago
parent
commit
87c3b35bb8

+ 1 - 0
service-api/src/main/java/com/java110/api/configuration/ServiceConfiguration.java

@@ -120,6 +120,7 @@ public class ServiceConfiguration {
         exclusions.append("/app/payment.cashier,");// 收银接口
         exclusions.append("/app/fee.queryFeeDetail,");// 缴费明细
         exclusions.append("/app/payment.getNativeQrcodePayment,");// 获取二维码信息
+        exclusions.append("/app/fee.listOwnerTelOweFee,");// 根据手机号查询欠费
 
         exclusions.append("/app/reportInfoAnswer/queryReportInfoAnswerByOpenId");
 

+ 275 - 0
service-fee/src/main/java/com/java110/fee/cmd/fee/ListOwnerTelOweFeeCmd.java

@@ -0,0 +1,275 @@
+package com.java110.fee.cmd.fee;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.fee.BillOweFeeDto;
+import com.java110.dto.fee.FeeConfigDto;
+import com.java110.dto.fee.FeeDto;
+import com.java110.dto.owner.OwnerCarDto;
+import com.java110.dto.owner.OwnerDto;
+import com.java110.dto.owner.OwnerRoomRelDto;
+import com.java110.dto.parking.ParkingSpaceDto;
+import com.java110.dto.room.RoomDto;
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
+import com.java110.intf.community.IRoomInnerServiceSMO;
+import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
+import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
+import com.java110.intf.user.IOwnerV1InnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.ListUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Java110Cmd(serviceCode = "fee.listOwnerTelOweFee")
+public class ListOwnerTelOweFeeCmd extends Cmd {
+    @Autowired
+    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
+
+    @Autowired
+    private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+    @Autowired
+    private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+        //super.validatePageInfo(reqJson);
+        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区ID");
+        Assert.hasKeyAndValue(reqJson, "ownerTel", "未包含小区业主手机号");
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException {
+
+        OwnerDto ownerDto = new OwnerDto();
+        ownerDto.setLink(reqJson.getString("ownerTel"));
+        ownerDto.setCommunityId(reqJson.getString("communityId"));
+        List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
+
+        if (ListUtil.isNull(ownerDtos)) {
+            throw new CmdException("业主不存在");
+        }
+
+        //1.0 查询业主房屋 查询业主是否有房屋欠费
+        OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
+        ownerRoomRelDto.setOwnerId(ownerDtos.get(0).getOwnerId());
+        ownerRoomRelDto.setCommunityId(reqJson.getString("communityId"));
+        List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
+
+        List<FeeDto> resultFees = new ArrayList<>();
+
+        if (!ListUtil.isNull(ownerRoomRelDtos)) {
+            getRoomOweFee(ownerRoomRelDtos, reqJson, resultFees);
+        }
+
+        //2.0 查询业主是否有 车位欠费
+
+        OwnerCarDto ownerCarDto = new OwnerCarDto();
+        ownerCarDto.setOwnerId(ownerDtos.get(0).getOwnerId());
+        ownerCarDto.setCommunityId(reqJson.getString("communityId"));
+        List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+
+        if (!ListUtil.isNull(ownerCarDtos)) {
+            getParkingSpaceOweFee(ownerCarDtos, reqJson, resultFees);
+        }
+
+        ResponseEntity<String> responseEntity = ResultVo.createResponseEntity(1, resultFees.size(), resultFees);
+        context.setResponseEntity(responseEntity);
+    }
+
+    private void getParkingSpaceOweFee(List<OwnerCarDto> ownerCarDtos, JSONObject reqJson, List<FeeDto> resultFees) {
+        String payObjName = "";
+        for (OwnerCarDto ownerCarDto : ownerCarDtos) {
+            ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+            parkingSpaceDto.setCommunityId(reqJson.getString("communityId"));
+            parkingSpaceDto.setPsId(ownerCarDto.getPsId());
+            List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+            if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) {
+                continue;
+            }
+            ParkingSpaceDto tmpParkingSpaceDto = parkingSpaceDtos.get(0);
+            payObjName = tmpParkingSpaceDto.getAreaNum() + "停车场" + tmpParkingSpaceDto.getNum() + "车位";
+            FeeDto feeDto = new FeeDto();
+            feeDto.setCommunityId(reqJson.getString("communityId"));
+            feeDto.setPayerObjId(ownerCarDto.getPsId());
+            feeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_PARKING_SPACE);
+            List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+            getOweFee(feeDtos, reqJson, resultFees, payObjName);
+        }
+
+    }
+
+    private void getRoomOweFee(List<OwnerRoomRelDto> ownerRoomRelDtos, JSONObject reqJson, List<FeeDto> resultFees) {
+        String payObjName = "";
+        for (OwnerRoomRelDto ownerRoomRelDto : ownerRoomRelDtos) {
+            RoomDto roomDto = new RoomDto();
+            roomDto.setCommunityId(reqJson.getString("communityId"));
+            roomDto.setRoomId(ownerRoomRelDto.getRoomId());
+            List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
+            if (roomDtos == null || roomDtos.size() < 1) {
+                continue;
+            }
+            RoomDto tmpRoomDto = roomDtos.get(0);
+            payObjName = tmpRoomDto.getFloorNum() + "栋" + tmpRoomDto.getUnitNum() + "单元" + tmpRoomDto.getRoomNum() + "室";
+            FeeDto feeDto = new FeeDto();
+            feeDto.setCommunityId(reqJson.getString("communityId"));
+            feeDto.setPayerObjId(ownerRoomRelDto.getRoomId());
+            feeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
+            List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+            getOweFee(feeDtos, reqJson, resultFees, payObjName);
+        }
+
+    }
+
+    private void getOweFee(List<FeeDto> feeDtos, JSONObject reqJson, List<FeeDto> resultFees, String payObjName) {
+        if (ListUtil.isNull(feeDtos)) {
+            return;
+        }
+
+        for (FeeDto feeDto : feeDtos) {
+            Date endTime = feeDto.getEndTime();
+            if (endTime.getTime() > DateUtil.getCurrentDate().getTime()) {//没有欠费
+                continue;
+            }
+
+            FeeConfigDto feeConfigDto = new FeeConfigDto();
+            feeConfigDto.setCommunityId(reqJson.getString("communityId"));
+            feeConfigDto.setConfigId(feeDto.getConfigId());
+            List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
+            if (feeConfigDtos == null || feeConfigDtos.size() < 1) {
+                continue;
+            }
+
+            FeeConfigDto tmpFeeConfigDto = feeConfigDtos.get(0);
+
+            if (FeeConfigDto.BILL_TYPE_EVERY.equals(tmpFeeConfigDto.getBillType())) {//直接计算 欠费金额
+                computeFeePriceByRoom(feeDto);
+                double month = DateUtil.dayCompare(endTime, DateUtil.getCurrentDate());
+                BigDecimal feePrice = new BigDecimal(feeDto.getFeePrice());
+                feePrice = feePrice.multiply(new BigDecimal(month));
+                FeeDto tmpFeeDto = new FeeDto();
+                tmpFeeDto.setFeeId(feeDto.getFeeId());
+                tmpFeeDto.setFeeName(feeDto.getFeeName());
+                tmpFeeDto.setOweFee(feePrice.doubleValue());
+                tmpFeeDto.setPayerObjType(feeDto.getPayerObjType());
+                tmpFeeDto.setPayerObjName(payObjName);
+                tmpFeeDto.setPayerObjId(feeDto.getPayerObjId());
+                resultFees.add(tmpFeeDto);
+                continue;
+            }
+            //查询档期欠费账单表 是否有欠费
+            BillOweFeeDto billOweFeeDto = new BillOweFeeDto();
+            billOweFeeDto.setCommunityId(reqJson.getString("communityId"));
+            billOweFeeDto.setFeeId(feeDto.getFeeId());
+            List<BillOweFeeDto> billOweFeeDtos = feeInnerServiceSMOImpl.queryBillOweFees(billOweFeeDto);
+
+            if (billOweFeeDtos == null || billOweFeeDtos.size() < 1) { //没有欠费
+
+                continue;
+            }
+
+            for (BillOweFeeDto tmpBillOweFeeDto : billOweFeeDtos) {
+                FeeDto tmpFeeDto = new FeeDto();
+                tmpFeeDto.setFeeId(feeDto.getFeeId());
+                tmpFeeDto.setFeeName(feeDto.getFeeName());
+                tmpFeeDto.setOweFee(Double.parseDouble(tmpBillOweFeeDto.getBillAmountOwed()));
+                tmpFeeDto.setPayerObjName(payObjName);
+                tmpFeeDto.setPayerObjId(feeDto.getPayerObjId());
+                tmpFeeDto.setPayerObjType(feeDto.getPayerObjType());
+                resultFees.add(tmpFeeDto);
+            }
+
+
+        }
+
+    }
+
+
+    private void computeFeePriceByParkingSpace(FeeDto feeDto) {
+
+        ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+        parkingSpaceDto.setCommunityId(feeDto.getCommunityId());
+        parkingSpaceDto.setPsId(feeDto.getPayerObjId());
+        List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+
+        if (parkingSpaceDtos == null || parkingSpaceDtos.size() < 1) { //数据有问题
+            return;
+        }
+
+        String computingFormula = feeDto.getComputingFormula();
+        double feePrice = 0.00;
+        if ("1001".equals(computingFormula)) { //面积*单价+附加费
+            BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
+            BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(parkingSpaceDtos.get(0).getArea()));
+            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
+            feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+        } else if ("2002".equals(computingFormula)) { // 固定费用
+
+            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
+            feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+        } else {
+            feePrice = -1.00;
+        }
+
+        feeDto.setFeePrice(feePrice);
+
+
+    }
+
+    /**
+     * 根据房屋来算单价
+     *
+     * @param feeDto
+     */
+    private void computeFeePriceByRoom(FeeDto feeDto) {
+        RoomDto roomDto = new RoomDto();
+        roomDto.setCommunityId(feeDto.getCommunityId());
+        roomDto.setRoomId(feeDto.getPayerObjId());
+        List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
+
+        if (roomDtos == null || roomDtos.size() < 1) { //数据有问题
+            return;
+        }
+
+        String computingFormula = feeDto.getComputingFormula();
+        double feePrice = 0.00;
+        if ("1001".equals(computingFormula)) { //面积*单价+附加费
+            BigDecimal squarePrice = new BigDecimal(Double.parseDouble(feeDto.getSquarePrice()));
+            BigDecimal builtUpArea = new BigDecimal(Double.parseDouble(roomDtos.get(0).getBuiltUpArea()));
+            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
+            feePrice = squarePrice.multiply(builtUpArea).add(additionalAmount).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+        } else if ("2002".equals(computingFormula)) { // 固定费用
+            BigDecimal additionalAmount = new BigDecimal(Double.parseDouble(feeDto.getAdditionalAmount()));
+            feePrice = additionalAmount.setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+        } else {
+            feePrice = -1.00;
+        }
+
+        feeDto.setFeePrice(feePrice);
+    }
+}

+ 1 - 0
springboot/src/main/java/com/java110/boot/configuration/ServiceConfiguration.java

@@ -121,6 +121,7 @@ public class ServiceConfiguration {
         exclusions.append("/app/payment.cashier,");// 收银接口
         exclusions.append("/app/fee.queryFeeDetail,");// 缴费明细
         exclusions.append("/app/payment.getNativeQrcodePayment,");// 获取二维码信息
+        exclusions.append("/app/fee.listOwnerTelOweFee,");// 根据手机号查询欠费
 
 
         exclusions.append("/app/reportInfoAnswer/queryReportInfoAnswerByOpenId");