package com.java110.job.adapt.report; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.ReportFeeMonthStatisticsPrepaymentDto.ReportFeeMonthStatisticsPrepaymentDto; import com.java110.dto.fee.FeeConfigDto; import com.java110.dto.fee.FeeDetailDto; import com.java110.dto.fee.FeeDto; import com.java110.dto.floor.FloorDto; import com.java110.dto.owner.OwnerCarDto; import com.java110.dto.parking.ParkingAreaDto; import com.java110.dto.parking.ParkingSpaceDto; import com.java110.dto.room.RoomDto; import com.java110.dto.system.Business; import com.java110.dto.unit.UnitDto; import com.java110.intf.community.*; import com.java110.intf.fee.IFeeConfigInnerServiceSMO; import com.java110.intf.fee.IFeeDetailInnerServiceSMO; import com.java110.intf.fee.IFeeInnerServiceSMO; import com.java110.intf.report.IReportFeeMonthStatisticsPrepaymentInnerServiceSMO; import com.java110.intf.user.IOwnerCarInnerServiceSMO; import com.java110.job.adapt.DatabusAdaptImpl; import com.java110.po.ReportFeeMonthStatisticsPrepaymentPo.ReportFeeMonthStatisticsPrepaymentPo; import com.java110.po.fee.PayFeeDetailPo; import com.java110.utils.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Map; /** * @author fqz * @description 缴费修改预付期账单明细表 * @date 2023-04-10 11:10 */ @Component(value = "editReportFeeMonthStatisticsBillAdapt") public class EditReportFeeMonthStatisticsBillAdapt extends DatabusAdaptImpl { @Autowired private IFeeInnerServiceSMO feeInnerServiceSMOImpl; @Autowired private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl; @Autowired private IReportFeeMonthStatisticsPrepaymentInnerServiceSMO reportFeeMonthStatisticsPrepaymentInnerServiceSMOImpl; @Autowired private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl; @Autowired private IFloorInnerServiceSMO floorInnerServiceSMOImpl; @Autowired private IUnitInnerServiceSMO unitInnerServiceSMOImpl; @Autowired private IRoomInnerServiceSMO roomInnerServiceSMOImpl; @Autowired private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl; @Autowired private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl; @Autowired private IParkingAreaInnerServiceSMO parkingAreaInnerServiceSMOImpl; @Override public void execute(Business business, List businesses) throws ParseException { JSONObject data = business.getData(); JSONArray businessPayFeeDetails = null; if (data == null) { FeeDetailDto feeDetailDto = new FeeDetailDto(); feeDetailDto.setbId(business.getbId()); List feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto); Assert.listOnlyOne(feeDetailDtos, "未查询到缴费记录"); businessPayFeeDetails = JSONArray.parseArray(JSONArray.toJSONString(feeDetailDtos, SerializerFeature.WriteDateUseDateFormat)); } else if (data.containsKey(PayFeeDetailPo.class.getSimpleName())) { Object bObj = data.get(PayFeeDetailPo.class.getSimpleName()); if (bObj instanceof JSONObject) { businessPayFeeDetails = new JSONArray(); businessPayFeeDetails.add(bObj); } else if (bObj instanceof Map) { businessPayFeeDetails = new JSONArray(); businessPayFeeDetails.add(JSONObject.parseObject(JSONObject.toJSONString(bObj))); } else if (bObj instanceof List) { businessPayFeeDetails = JSONArray.parseArray(JSONObject.toJSONString(bObj)); } else { businessPayFeeDetails = (JSONArray) bObj; } } else { if (data instanceof JSONObject) { businessPayFeeDetails = new JSONArray(); businessPayFeeDetails.add(data); } } for (int bPayFeeDetailIndex = 0; bPayFeeDetailIndex < businessPayFeeDetails.size(); bPayFeeDetailIndex++) { JSONObject businessPayFeeDetail = businessPayFeeDetails.getJSONObject(bPayFeeDetailIndex); editReportFeeMonthStatisticsBill(business, businessPayFeeDetail); } } private void editReportFeeMonthStatisticsBill(Business business, JSONObject businessPayFeeDetail) throws ParseException { FeeDto feeDto = new FeeDto(); feeDto.setFeeId(businessPayFeeDetail.getString("feeId")); feeDto.setCommunityId(businessPayFeeDetail.getString("communityId")); List feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); Assert.listOnlyOne(feeDtos, "未查询到费用信息!"); //查询费用项 FeeConfigDto feeConfigDto = new FeeConfigDto(); feeConfigDto.setConfigId(feeDtos.get(0).getConfigId()); List feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto); Assert.listOnlyOne(feeConfigDtos, "查询费用项错误!"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //获取费用标识 String feeFlag = feeConfigDtos.get(0).getFeeFlag(); //1003006 为周期性费用;2006012 为一次性费用;4012024 间接性费用 if (!StringUtil.isEmpty(feeConfigDtos.get(0).getPaymentCycle()) && !StringUtil.isEmpty(businessPayFeeDetail.getString("cycles")) && feeConfigDtos.get(0).getPaymentCycle().equals(businessPayFeeDetail.getString("cycles"))) { //缴费周期为一个周期的情况 //查询预付期账单明细表未缴费的数据 ReportFeeMonthStatisticsPrepaymentDto reportFeeMonthStatisticsPrepaymentDto = new ReportFeeMonthStatisticsPrepaymentDto(); reportFeeMonthStatisticsPrepaymentDto.setFeeId(businessPayFeeDetail.getString("feeId")); reportFeeMonthStatisticsPrepaymentDto.setFeeBeginTime(businessPayFeeDetail.getString("startTime")); //费用开始时间 reportFeeMonthStatisticsPrepaymentDto.setFeeFinishTime(businessPayFeeDetail.getString("endTime")); //费用结束时间 List reportFeeMonthStatisticsPrepayments = reportFeeMonthStatisticsPrepaymentInnerServiceSMOImpl.queryReportFeeMonthStatisticsPrepayment(reportFeeMonthStatisticsPrepaymentDto); if (!ListUtil.isNull(reportFeeMonthStatisticsPrepayments)) { //有数据就更新数据 ReportFeeMonthStatisticsPrepaymentPo reportFeeMonthStatisticsPrepaymentPo = new ReportFeeMonthStatisticsPrepaymentPo(); reportFeeMonthStatisticsPrepaymentPo.setPrepaymentId(reportFeeMonthStatisticsPrepayments.get(0).getPrepaymentId()); reportFeeMonthStatisticsPrepaymentPo.setPrepaymentState("1"); //0 未缴费;1 已缴费 reportFeeMonthStatisticsPrepaymentPo.setbillState("2"); //账单状态:0 正常;1 已逾期; 2已还清 reportFeeMonthStatisticsPrepaymentPo.setReceivedAmount(businessPayFeeDetail.getString("receivedAmount")); //实收 reportFeeMonthStatisticsPrepaymentPo.setPrepaymentDetailId(businessPayFeeDetail.getString("detailId")); //费用明细id reportFeeMonthStatisticsPrepaymentPo.setPayTime(businessPayFeeDetail.getString("createTime")); //缴费时间 reportFeeMonthStatisticsPrepaymentPo.setUpdateTime(sdf.format(new Date())); reportFeeMonthStatisticsPrepaymentInnerServiceSMOImpl.updateReportFeeMonthStatisticsPrepayment(reportFeeMonthStatisticsPrepaymentPo); } else { //没有数据就新增一条预付期账单信息 saveReportFeeMonthStatisticsPrepayment(businessPayFeeDetail, feeDtos, feeConfigDtos); //添加预付期账单信息 } } else if (!StringUtil.isEmpty(feeConfigDtos.get(0).getPaymentCycle()) && !StringUtil.isEmpty(businessPayFeeDetail.getString("cycles")) && !feeConfigDtos.get(0).getPaymentCycle().equals(businessPayFeeDetail.getString("cycles"))) { //缴费周期不是一个周期的情况 //查询预付期账单明细表未缴费的数据 ReportFeeMonthStatisticsPrepaymentDto reportFeeMonthStatisticsPrepaymentDto = new ReportFeeMonthStatisticsPrepaymentDto(); reportFeeMonthStatisticsPrepaymentDto.setFeeId(businessPayFeeDetail.getString("feeId")); reportFeeMonthStatisticsPrepaymentDto.setNewBeginTime(businessPayFeeDetail.getString("startTime")); //费用开始时间 reportFeeMonthStatisticsPrepaymentDto.setNewFinishTime(businessPayFeeDetail.getString("endTime")); //费用结束时间 List reportFeeMonthStatisticsPrepayments = reportFeeMonthStatisticsPrepaymentInnerServiceSMOImpl.queryReportFeeMonthStatisticsPrepayment(reportFeeMonthStatisticsPrepaymentDto); if (reportFeeMonthStatisticsPrepayments != null && reportFeeMonthStatisticsPrepayments.size() > 0) { for (ReportFeeMonthStatisticsPrepaymentDto reportFeeMonthStatisticsPrepayment : reportFeeMonthStatisticsPrepayments) { //删除预付期报表里在本次缴费周期里的数据 ReportFeeMonthStatisticsPrepaymentPo reportFeeMonthStatisticsPrepaymentPo = new ReportFeeMonthStatisticsPrepaymentPo(); reportFeeMonthStatisticsPrepaymentPo.setPrepaymentId(reportFeeMonthStatisticsPrepayment.getPrepaymentId()); reportFeeMonthStatisticsPrepaymentInnerServiceSMOImpl.deleteReportFeeMonthStatisticsPrepayment(reportFeeMonthStatisticsPrepaymentPo); } } saveReportFeeMonthStatisticsPrepayment(businessPayFeeDetail, feeDtos, feeConfigDtos); //添加预付期账单信息 } ReportFeeMonthStatisticsPrepaymentDto reportFeeMonthStatisticsPrepaymentDto = new ReportFeeMonthStatisticsPrepaymentDto(); reportFeeMonthStatisticsPrepaymentDto.setFeeId(businessPayFeeDetail.getString("feeId")); reportFeeMonthStatisticsPrepaymentDto.setPrepaymentState("0"); //0 未缴费;1 已缴费 List reportFeeMonthStatisticsPrepaymentDtos = reportFeeMonthStatisticsPrepaymentInnerServiceSMOImpl.queryReportFeeMonthStatisticsPrepayment(reportFeeMonthStatisticsPrepaymentDto); if (reportFeeMonthStatisticsPrepaymentDtos != null && reportFeeMonthStatisticsPrepaymentDtos.size() > 0) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (ReportFeeMonthStatisticsPrepaymentDto reportFeeMonthStatisticsPrepayment : reportFeeMonthStatisticsPrepaymentDtos) { //获取该账单明细开始时间 String feeBeginTime = reportFeeMonthStatisticsPrepayment.getFeeBeginTime(); Date beginTime = format.parse(feeBeginTime); //获取该账单明细结束时间 String feeFinishTime = reportFeeMonthStatisticsPrepayment.getFeeFinishTime(); Date finishTime = format.parse(feeFinishTime); //获取本次缴费结束时间 String endTime = businessPayFeeDetail.getString("endTime"); Date newEndTime = format.parse(endTime); if (beginTime.before(newEndTime) && finishTime.after(newEndTime)) { ReportFeeMonthStatisticsPrepaymentPo reportFeeMonthStatisticsPrepaymentPo = new ReportFeeMonthStatisticsPrepaymentPo(); reportFeeMonthStatisticsPrepaymentPo.setPrepaymentId(reportFeeMonthStatisticsPrepayment.getPrepaymentId()); reportFeeMonthStatisticsPrepaymentInnerServiceSMOImpl.deleteReportFeeMonthStatisticsPrepayment(reportFeeMonthStatisticsPrepaymentPo); } } } } public void saveReportFeeMonthStatisticsPrepayment(JSONObject businessPayFeeDetail, List feeDtos, List feeConfigDtos) { //获取费用标识 String feeFlag = feeConfigDtos.get(0).getFeeFlag(); //1003006 为周期性费用;2006012 为一次性费用;4012024 间接性费用 ReportFeeMonthStatisticsPrepaymentPo reportFeeMonthStatisticsPrepaymentPo = new ReportFeeMonthStatisticsPrepaymentPo(); reportFeeMonthStatisticsPrepaymentPo.setPrepaymentId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_statisticsId)); reportFeeMonthStatisticsPrepaymentPo.setCommunityId(businessPayFeeDetail.getString("communityId")); reportFeeMonthStatisticsPrepaymentPo.setObjType(feeDtos.get(0).getPayerObjType()); reportFeeMonthStatisticsPrepaymentPo.setObjId(feeDtos.get(0).getPayerObjId()); if (!StringUtil.isEmpty(feeDtos.get(0).getPayerObjType()) && feeDtos.get(0).getPayerObjType().equals("3333")) { //房屋 RoomDto roomDto = new RoomDto(); roomDto.setRoomId(feeDtos.get(0).getPayerObjId()); List roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto); Assert.listOnlyOne(roomDtos, "查询房屋错误!"); UnitDto unitDto = new UnitDto(); unitDto.setUnitId(roomDtos.get(0).getUnitId()); List unitDtos = unitInnerServiceSMOImpl.queryUnits(unitDto); Assert.listOnlyOne(unitDtos, "查询单元错误!"); FloorDto floorDto = new FloorDto(); floorDto.setFloorId(unitDtos.get(0).getFloorId()); List floorDtos = floorInnerServiceSMOImpl.queryFloors(floorDto); Assert.listOnlyOne(floorDtos, "查询楼栋错误!"); if (RoomDto.ROOM_TYPE_ROOM.equals(roomDtos.get(0).getRoomType())) { reportFeeMonthStatisticsPrepaymentPo.setObjName(floorDtos.get(0).getFloorNum() + "栋" + unitDtos.get(0).getUnitNum() + "单元" + roomDtos.get(0).getRoomNum() + "室"); reportFeeMonthStatisticsPrepaymentPo.setObjNameNum(floorDtos.get(0).getFloorNum() + "-" + unitDtos.get(0).getUnitNum() + "-" + roomDtos.get(0).getRoomNum()); } else { reportFeeMonthStatisticsPrepaymentPo.setObjName(floorDtos.get(0).getFloorNum() + "栋" + roomDtos.get(0).getRoomNum() + "室"); reportFeeMonthStatisticsPrepaymentPo.setObjNameNum(floorDtos.get(0).getFloorNum() + "-" + roomDtos.get(0).getRoomNum()); } } else { //车辆 OwnerCarDto ownerCarDto = new OwnerCarDto(); ownerCarDto.setCarId(feeDtos.get(0).getPayerObjId()); List ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto); Assert.listOnlyOne(ownerCarDtos, "查询车辆错误!"); ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto(); parkingSpaceDto.setPsId(ownerCarDtos.get(0).getPsId()); List parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto); Assert.listOnlyOne(parkingSpaceDtos, "查询车位错误!"); ParkingAreaDto parkingAreaDto = new ParkingAreaDto(); parkingAreaDto.setPaId(parkingSpaceDtos.get(0).getPaId()); List parkingAreaDtos = parkingAreaInnerServiceSMOImpl.queryParkingAreas(parkingAreaDto); Assert.listOnlyOne(parkingAreaDtos, "查询停车场错误!"); reportFeeMonthStatisticsPrepaymentPo.setObjName(ownerCarDtos.get(0).getCarNum() + "(" + parkingAreaDtos.get(0).getNum() + "停车场" + parkingSpaceDtos.get(0).getNum() + "车位)"); reportFeeMonthStatisticsPrepaymentPo.setObjNameNum(parkingAreaDtos.get(0).getNum() + "-" + parkingSpaceDtos.get(0).getNum() + "-" + ownerCarDtos.get(0).getCarNum()); } reportFeeMonthStatisticsPrepaymentPo.setFeeId(businessPayFeeDetail.getString("feeId")); reportFeeMonthStatisticsPrepaymentPo.setFeeName(feeDtos.get(0).getFeeName()); reportFeeMonthStatisticsPrepaymentPo.setConfigId(feeDtos.get(0).getConfigId()); reportFeeMonthStatisticsPrepaymentPo.setReceivableAmount(businessPayFeeDetail.getString("receivableAmount")); //应收 reportFeeMonthStatisticsPrepaymentPo.setPayableAmount(businessPayFeeDetail.getString("payableAmount")); //应缴 reportFeeMonthStatisticsPrepaymentPo.setReceivedAmount(businessPayFeeDetail.getString("receivedAmount")); //实收 reportFeeMonthStatisticsPrepaymentPo.setOweAmount("0"); //欠费 reportFeeMonthStatisticsPrepaymentPo.setPrepaymentState("1"); //0 未缴费; 1 已缴费 reportFeeMonthStatisticsPrepaymentPo.setbillState("2"); //账单状态:0 正常;1 已逾期; 2已还清 reportFeeMonthStatisticsPrepaymentPo.setRemark("预付期费用账单已缴费生成"); reportFeeMonthStatisticsPrepaymentPo.setFeeBeginTime(businessPayFeeDetail.getString("startTime"));//计费开始时间 reportFeeMonthStatisticsPrepaymentPo.setFeeFinishTime(businessPayFeeDetail.getString("endTime")); //计费结束时间 reportFeeMonthStatisticsPrepaymentPo.setUpdateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A)); reportFeeMonthStatisticsPrepaymentPo.setPayTime(businessPayFeeDetail.getString("createTime")); if (!StringUtil.isEmpty(feeFlag) && (feeFlag.equals("1003006") || feeFlag.equals("4012024"))) { //1003006 为周期性费用;2006012 为一次性费用;4012024 间接性费用 //获取缴费周期 String paymentCycle = feeConfigDtos.get(0).getPaymentCycle(); reportFeeMonthStatisticsPrepaymentPo.setPrepaymentCycle(paymentCycle); //缴费周期 } else { reportFeeMonthStatisticsPrepaymentPo.setPrepaymentCycle(""); //缴费周期 } reportFeeMonthStatisticsPrepaymentPo.setPayFeeFlag(feeFlag); //费用标识 reportFeeMonthStatisticsPrepaymentPo.setPrepaymentDetailId(businessPayFeeDetail.getString("detailId")); //费用明细id reportFeeMonthStatisticsPrepaymentInnerServiceSMOImpl.saveReportFeeMonthStatisticsPrepayment(reportFeeMonthStatisticsPrepaymentPo); } }