package com.java110.job.task.fee; import com.java110.core.factory.GenerateCodeFactory; import com.java110.core.smo.IComputeFeeSMO; import com.java110.dto.RoomDto; import com.java110.dto.community.CommunityDto; import com.java110.dto.fee.*; import com.java110.dto.owner.OwnerCarDto; import com.java110.dto.owner.OwnerRoomRelDto; import com.java110.dto.task.TaskDto; import com.java110.intf.community.IParkingSpaceInnerServiceSMO; import com.java110.intf.community.IRoomInnerServiceSMO; import com.java110.intf.fee.IFeeConfigInnerServiceSMO; import com.java110.intf.fee.IFeeDetailInnerServiceSMO; import com.java110.intf.fee.IFeeInnerServiceSMO; import com.java110.intf.user.IOwnerCarInnerServiceSMO; import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO; import com.java110.job.quartz.TaskSystemQuartz; import com.java110.utils.constant.ResponseConstant; import com.java110.utils.exception.TaskTemplateException; import com.java110.utils.util.DateUtil; import com.java110.utils.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; /** * @ClassName GenerateOwnerBillTemplate * @Description TODO 房屋费用账单生成 * @Author wuxw * @Date 2020/6/4 8:33 * @Version 1.0 * add by wuxw 2020/6/4 **/ @Component public class GenerateOweFeeTemplate extends TaskSystemQuartz { private static final String TASK_ATTR_VALUE_ONCE_MONTH = "005"; //一次性按月出账 @Autowired private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl; @Autowired private IFeeInnerServiceSMO feeInnerServiceSMOImpl; @Autowired private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl; @Autowired private IRoomInnerServiceSMO roomInnerServiceSMOImpl; @Autowired private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMOImpl; @Autowired private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl; @Autowired private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl; @Autowired private IComputeFeeSMO computeFeeSMOImpl; @Override protected void process(TaskDto taskDto) throws Exception { // 获取小区 List communityDtos = getAllCommunity(); for (CommunityDto communityDto : communityDtos) { GenerateOweFee(taskDto, communityDto); } } /** * 根据小区生成账单 * * @param communityDto */ private void GenerateOweFee(TaskDto taskDto, CommunityDto communityDto) { //查询费用项 FeeConfigDto feeConfigDto = new FeeConfigDto(); feeConfigDto.setCommunityId(communityDto.getCommunityId()); if (StringUtil.isEmpty(feeConfigDto.getBillType())) { throw new IllegalArgumentException("配置错误 未拿到属性值"); } List feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto); for (FeeConfigDto tmpFeeConfigDto : feeConfigDtos) { try { GenerateOweFeeByFeeConfig(taskDto, tmpFeeConfigDto); } catch (Exception e) { logger.error("费用出账失败" + tmpFeeConfigDto.getConfigId(), e); } } } /** * 按费用项来出账 * * @param taskDto * @param feeConfigDto */ private void GenerateOweFeeByFeeConfig(TaskDto taskDto, FeeConfigDto feeConfigDto) throws Exception { //当前费用项是否 FeeDto feeDto = new FeeDto(); feeDto.setConfigId(feeConfigDto.getConfigId()); feeDto.setCommunityId(feeConfigDto.getCommunityId()); List feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); //没有关联费用 if (feeDto == null || feeDtos.size() < 1) { return; } for (FeeDto tmpFeeDto : feeDtos) { try { generateFee(tmpFeeDto, feeConfigDto); } catch (Exception e) { logger.error("生成费用失败", e); } } } /** * 生成 费用 * * @param feeDto */ private void generateFee(FeeDto feeDto, FeeConfigDto feeConfigDto) { computeFeeSMOImpl.computeEveryOweFee(feeDto); } /** * 查询车位信息 * * @param billOweFeeDto * @param feeDto */ private void getParkingSpaceInfo(BillOweFeeDto billOweFeeDto, FeeDto feeDto) { OwnerCarDto ownerCarDto = new OwnerCarDto(); ownerCarDto.setWithOwner(true); ownerCarDto.setCarId(feeDto.getPayerObjId()); ownerCarDto.setCommunityId(feeDto.getCommunityId()); List ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto); if (ownerCarDtos == null || ownerCarDtos.size() < 1) { //房屋可能被删除了 billOweFeeDto.setOwnerId("1"); billOweFeeDto.setOwnerName("未知"); billOweFeeDto.setOwnerTel("19999999999"); return; } billOweFeeDto.setPayerObjName(ownerCarDtos.get(0).getCarNum()); billOweFeeDto.setOwnerId(ownerCarDtos.get(0).getOwnerId()); billOweFeeDto.setOwnerName(ownerCarDtos.get(0).getOwnerName()); billOweFeeDto.setOwnerTel(ownerCarDtos.get(0).getLink()); } /** * 查询房屋信息 * * @param billOweFeeDto * @param feeDto */ private void getRoomInfo(BillOweFeeDto billOweFeeDto, FeeDto feeDto) { RoomDto roomDto = new RoomDto(); roomDto.setRoomId(feeDto.getPayerObjId()); roomDto.setCommunityId(feeDto.getCommunityId()); List roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto); if (roomDtos == null || roomDtos.size() < 1) { //房屋可能被删除了 billOweFeeDto.setOweId("1"); billOweFeeDto.setOwnerName("未知"); billOweFeeDto.setOwnerTel("19999999999"); billOweFeeDto.setPayerObjName("未知"); return; } RoomDto tmpRoomDto = roomDtos.get(0); if (RoomDto.ROOM_TYPE_ROOM.equals(tmpRoomDto.getRoomType())) { billOweFeeDto.setPayerObjName(tmpRoomDto.getFloorNum() + "栋" + tmpRoomDto.getUnitNum() + "单元" + tmpRoomDto.getRoomNum() + "室"); } else { billOweFeeDto.setPayerObjName(tmpRoomDto.getFloorNum() + "栋" + tmpRoomDto.getRoomNum() + "室"); } OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto(); ownerRoomRelDto.setByOwnerInfo(true); ownerRoomRelDto.setRoomId(tmpRoomDto.getRoomId()); List ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto); if (ownerRoomRelDtos == null || ownerRoomRelDtos.size() < 1) { //房屋可能被删除了 billOweFeeDto.setOweId("1"); billOweFeeDto.setOwnerName("未知"); billOweFeeDto.setOwnerTel("19999999999"); return; } billOweFeeDto.setOwnerId(ownerRoomRelDtos.get(0).getOwnerId()); billOweFeeDto.setOwnerName(ownerRoomRelDtos.get(0).getOwnerName()); billOweFeeDto.setOwnerTel(ownerRoomRelDtos.get(0).getLink()); } }