| | |
| | | package com.java110.job.importData.adapt; |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.fasterxml.jackson.core.type.TypeReference; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.java110.core.factory.GenerateCodeFactory; |
| | | import com.java110.core.smo.IComputeFeeSMO; |
| | | import com.java110.core.smo.impl.ComputeFeeSMOImpl; |
| | | import com.java110.dto.PropertyWhiteListFlowDto; |
| | | import com.java110.dto.fee.FeeAttrDto; |
| | | import com.java110.dto.fee.FeeConfigDto; |
| | | import com.java110.dto.fee.FeeDto; |
| | | import com.java110.dto.community.CommunityDto; |
| | | import com.java110.dto.contract.ContractDto; |
| | | import com.java110.dto.contract.ContractPartyaDto; |
| | | import com.java110.dto.fee.*; |
| | | import com.java110.dto.importData.ImportRoomFee; |
| | | import com.java110.dto.log.AssetImportLogDetailDto; |
| | | import com.java110.dto.owner.OwnerCarDto; |
| | | import com.java110.dto.owner.OwnerRoomRelDto; |
| | | import com.java110.dto.payFee.PayFeeDetailDiscountDto; |
| | | import com.java110.dto.room.RoomDto; |
| | | import com.java110.dto.system.ComponentValidateResult; |
| | | import com.java110.fee.api.FeeDiscountApi; |
| | | import com.java110.fee.cmd.fee.PayFeeCmd; |
| | | import com.java110.fee.cmd.fee.PayFeePreCmd; |
| | | import com.java110.fee.feeMonth.IPayFeeMonth; |
| | | import com.java110.intf.IImportPropertyWhiteListfFlowServiceSMO; |
| | | import com.java110.intf.common.ICarInoutInnerServiceSMO; |
| | | import com.java110.intf.community.ICommunityInnerServiceSMO; |
| | | import com.java110.intf.community.IRoomInnerServiceSMO; |
| | | import com.java110.intf.fee.*; |
| | | import com.java110.intf.store.IContractInnerServiceSMO; |
| | | import com.java110.intf.store.IContractPartyaInnerServiceSMO; |
| | | import com.java110.intf.user.IOwnerCarInnerServiceSMO; |
| | | import com.java110.intf.user.IOwnerRoomRelV1InnerServiceSMO; |
| | | import com.java110.job.cmd.importCarInout.CarInout; |
| | |
| | | import com.java110.po.fee.FeeAttrPo; |
| | | import com.java110.po.fee.PayFeeDetailPo; |
| | | import com.java110.po.fee.PayFeePo; |
| | | import com.java110.po.payFee.PayFeeDetailDiscountPo; |
| | | import com.java110.utils.constant.ResponseConstant; |
| | | import com.java110.utils.constant.StatusConstant; |
| | | import com.java110.utils.util.BeanConvertUtil; |
| | | import com.java110.utils.util.DateUtil; |
| | | import com.java110.utils.util.ListUtil; |
| | | import com.java110.utils.util.StringUtil; |
| | | import com.java110.utils.exception.DAOException; |
| | | import com.java110.utils.exception.ListenerExecuteException; |
| | | import com.java110.utils.util.*; |
| | | import com.java110.vo.ResultVo; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.io.IOException; |
| | | import java.math.BigDecimal; |
| | | import java.text.ParseException; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.time.temporal.ChronoUnit; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Random; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 房屋缴费信息导入 适配器 |
| | |
| | | @Service("importHistoryFeeDetailQueueData") |
| | | public class ImportHistoryFeeDetailQueueDataAdapt extends DefaultImportData implements IImportDataAdapt { |
| | | |
| | | @Autowired |
| | | private FeeDiscountApi feeDiscountApi; |
| | | |
| | | @Autowired |
| | | private IComputeFeeSMO computeFeeSMOImpl; |
| | | |
| | | @Autowired |
| | | private IImportFeeDetailInnerServiceSMO importFeeDetailInnerServiceSMOImpl; |
| | |
| | | private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private PayFeeCmd payFeeCmd; |
| | | |
| | | @Autowired |
| | | private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | |
| | | @Autowired |
| | | private ICarInoutInnerServiceSMO carInoutInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private ImportCarHistoryFeeDetailQueueDataAdapt importCarHistoryFeeDetailQueueDataAdapt; |
| | | |
| | | @Autowired |
| | | private IContractPartyaInnerServiceSMO contractPartyaInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IContractInnerServiceSMO contractInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IPayFeeDetailDiscountNewV1InnerServiceSMO payFeeDetailDiscountNewV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private ImportRoomFeeQueueDataAdapt importRoomFeeQueueDataAdapt; |
| | | |
| | | @Autowired |
| | | private ICommunityInnerServiceSMO communityInnerServiceSMO; |
| | | |
| | | @Autowired |
| | | private ComputeFeeSMOImpl calculateFeeSMOImpl; |
| | | |
| | | @Override |
| | | public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) { |
| | | importDatas(assetImportLogDetailDtos); |
| | | String communityId = assetImportLogDetailDtos.get(0).getCommunityId(); |
| | | CommunityDto communityDto = new CommunityDto(); |
| | | communityDto.setCommunityId(communityId); |
| | | List<CommunityDto> communityDtos = communityInnerServiceSMO.queryCommunitys(communityDto); |
| | | Set<String> invoiceObjects = new HashSet<>(); |
| | | for (AssetImportLogDetailDto obj : assetImportLogDetailDtos) { |
| | | String context = obj.getContent(); |
| | | if (context != null && context.contains("frequency")) { |
| | | invoiceObjects.add(JSONObject.parseObject(context).getString("frequency")); |
| | | } |
| | | } |
| | | for (AssetImportLogDetailDto assetImportLogDetailDto : assetImportLogDetailDtos) { |
| | | if (!assetImportLogDetailDto.getMessage().equals("待导入")){ |
| | | continue; |
| | | } |
| | | JSONObject jsonObject = JSONObject.parseObject(assetImportLogDetailDto.getContent()); |
| | | if (jsonObject.containsKey("frequency")){ |
| | | if (jsonObject.getString("frequency").contains("退费-") && !jsonObject.getString("frequency").contains("被退费-")){ |
| | | String invoce = jsonObject.getString("frequency").split("-")[1]; |
| | | for (AssetImportLogDetailDto ass : assetImportLogDetailDtos){ |
| | | if (JSONObject.parseObject(ass.getContent()).getString("invoiceReceiptNo").equals(invoce)){ |
| | | try { |
| | | assetImportLogDetailDto.setTakeTime(communityDtos.get(0).getTakeTime()); |
| | | assetImportLogDetailDto.setOutTime(communityDtos.get(0).getOutTime()); |
| | | assetImportLogDetailDto.setState("1300"); |
| | | importDatas(assetImportLogDetailDto); |
| | | updateImportLogDetailState(assetImportLogDetailDto.getDetailId()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e); |
| | | } |
| | | try { |
| | | ass.setTakeTime(communityDtos.get(0).getTakeTime()); |
| | | ass.setOutTime(communityDtos.get(0).getOutTime()); |
| | | ass.setState("1100"); |
| | | importDatas(ass); |
| | | updateImportLogDetailState(ass.getDetailId()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | updateImportLogDetailState(ass.getDetailId(), e); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | continue; |
| | | } |
| | | } |
| | | try { |
| | | assetImportLogDetailDto.setTakeTime(communityDtos.get(0).getTakeTime()); |
| | | assetImportLogDetailDto.setOutTime(communityDtos.get(0).getOutTime()); |
| | | String invoce = "退费-"+JSONObject.parseObject(assetImportLogDetailDto.getContent()).getString("invoiceReceiptNo"); |
| | | if (invoiceObjects.contains(invoce)){ |
| | | continue; |
| | | } |
| | | importDatas(assetImportLogDetailDto); |
| | | updateImportLogDetailState(assetImportLogDetailDto.getDetailId()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | private void importDatas(List<AssetImportLogDetailDto> infos) { |
| | | private void importDatas(AssetImportLogDetailDto assetImportLogDetailDto) { |
| | | |
| | | List<ImportRoomFee> importRoomFees = new ArrayList<>(); |
| | | for (AssetImportLogDetailDto assetImportLogDetailDto : infos) { |
| | | String communityId = assetImportLogDetailDto.getCommunityId(); |
| | | JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent()); |
| | | ImportRoomFee importRoomFee = BeanConvertUtil.covertBean(data, ImportRoomFee.class); |
| | | RoomDto roomDto = new RoomDto(); |
| | | roomDto.setDoorRoomNum(importRoomFee.getDoorRoomNum()); |
| | | roomDto.setCommunityId(communityId); |
| | | if(importRoomFee.getSecondaryFeeTypeCd()!= null && importRoomFee.getSecondaryFeeTypeCd().equals("临时停车费-其他")){ |
| | | List<ImportRoomFee> importCarFees = new ArrayList<>(); |
| | | List<CarInoutPo> carInoutPos = new ArrayList<>(); |
| | | String communityId = assetImportLogDetailDto.getCommunityId(); |
| | | JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent()); |
| | | ImportRoomFee importRoomFee = BeanConvertUtil.covertBean(data, ImportRoomFee.class); |
| | | if (assetImportLogDetailDto.getState().equals("1100") || assetImportLogDetailDto.getState().equals("1300")) { |
| | | importRoomFee.setState(assetImportLogDetailDto.getState()); |
| | | } |
| | | if (importRoomFee.getFrequency()==null) { |
| | | importRoomFee.setFrequency("正常费用"); |
| | | } |
| | | // if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){ |
| | | // throw new IllegalStateException("该费用为起始时间小于小区接管时间不进行导入"); |
| | | // } |
| | | if (importRoomFee.getEndTime() != null){ |
| | | String[] split = importRoomFee.getEndTime().split(" "); |
| | | importRoomFee.setEndTime(split[0] + " 23:59:59"); |
| | | } |
| | | // List<String> roomTypes = Arrays.asList("住宅物业费","商铺物业费","维修收入","维修基金收入","电费及管理费","代收水费","各类押金","租金收入"); |
| | | List<String> carTypes = Arrays.asList("临时停车费", "业主产权过道停车费", "小业主产权车辆管理费","地下停车费","地面停车费"); |
| | | List<String> contractTypes = Arrays.asList("垃圾清运费","其他收入","补贴费用","场地使用费","电梯广告(业委会)","快递柜","电梯广告(联讯)","房产中介","非机动车管理费","其他广告"); |
| | | FeeConfigDto feeConfigDto = new FeeConfigDto(); |
| | | feeConfigDto.setCommunityId(importRoomFee.getCommunityId()); |
| | | feeConfigDto.setFeeNameEq(data.getString("secondaryFeeTypeCd")); |
| | | // feeConfigDto.setFeeTypeCds(new String[]{"630000007","630000017"}); |
| | | importRoomFee.setInvoiceNo(data.getString("invoiceReceiptNo")); |
| | | List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto); |
| | | if(feeConfigDtos.size() > 0){ |
| | | for(FeeConfigDto feeConfigDto1 : feeConfigDtos){ |
| | | if(feeConfigDto1.getIsContractFee() != null && feeConfigDto1.getIsContractFee().equals("true")){ |
| | | importRoomFee.setObjType("7777"); |
| | | } |
| | | } |
| | | } |
| | | // if (importRoomFee.getDoorRoomNum() != null && importRoomFee.getDoorRoomNum().split("-").length < 2) { |
| | | // importRoomFee.setObjType("7777"); |
| | | // } |
| | | if(importRoomFee.getSecondaryFeeTypeCd()!= null && importRoomFee.getSecondaryFeeTypeCd().equals("临时停车费-其他") &&(importRoomFee.getObjType() == null || !(importRoomFee.getObjType().equals("7777")))){ |
| | | CarInoutPo carInout = new CarInoutPo(); |
| | | carInout.setbId(JSONObject.parseObject(assetImportLogDetailDto.getContent().toString()).getString("invoiceReceiptNo")); |
| | | carInout.setCommunityId(communityId); |
| | | carInout.setCarNum("A888888"); |
| | | carInout.setVehicleType("temp"); |
| | |
| | | carInout.setState("100300"); |
| | | carInout.setInTime(JSONObject.parseObject(assetImportLogDetailDto.getContent().toString()).getString("chargeStart")); |
| | | carInout.setStatusCd("0"); |
| | | carInout.setCreateTime(JSONObject.parseObject(assetImportLogDetailDto.getContent().toString()).getString("inputTime")); |
| | | |
| | | // 检查重复代码... |
| | | carInout.setCreateTime(JSONObject.parseObject(assetImportLogDetailDto.getContent().toString()).getString("chargeTime")); |
| | | carInout.setbId(JSONObject.parseObject(assetImportLogDetailDto.getContent().toString()).getString("batchId")); |
| | | |
| | | List<CarInoutPo> carInoutPos = new ArrayList<>(); |
| | | carInout.setInoutId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_inoutId)); |
| | | carInout.setDetailId(assetImportLogDetailDto.getDetailId()); |
| | | carInoutPos.add(carInout); |
| | | |
| | | // 如果有结束时间,创建新的对象作为出口记录 |
| | |
| | | // 创建新的对象,而不是修改已添加的对象 |
| | | CarInoutPo exitCarInout = new CarInoutPo(); |
| | | // 复制基本属性 |
| | | exitCarInout.setbId(carInout.getbId()); |
| | | exitCarInout.setbId(JSONObject.parseObject(assetImportLogDetailDto.getContent().toString()).getString("batchId")); |
| | | exitCarInout.setCommunityId(carInout.getCommunityId()); |
| | | exitCarInout.setCarNum(carInout.getCarNum()); |
| | | exitCarInout.setVehicleType(carInout.getVehicleType()); |
| | |
| | | exitCarInout.setState("100400"); |
| | | exitCarInout.setInoutId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_inoutId)); |
| | | exitCarInout.setPaymentAmount(JSONObject.parseObject(assetImportLogDetailDto.getContent().toString()).getString("chargeAmount")); |
| | | |
| | | exitCarInout.setDetailId(assetImportLogDetailDto.getDetailId()); |
| | | carInoutPos.add(exitCarInout); |
| | | } |
| | | |
| | | try { |
| | | carInoutInnerServiceSMOImpl.batchSaveCarInout2(carInoutPos); |
| | | }catch (Exception e){ |
| | | |
| | | updateImportLogDetailState(importRoomFee.getDetailId(),e); |
| | | } |
| | | updateImportLogDetailState(importRoomFee.getDetailId()); |
| | | } |
| | | else if(JSONObject.parseObject(assetImportLogDetailDto.getContent().toString()).getString("secondaryFeeTypeCd").contains("广告")){ |
| | | List<RoomDto> roomDtos = iRoomInnerServiceSMOImpl.queryRooms(roomDto); |
| | | try { |
| | | importRoomFee.setRoomId(roomDtos.get(0).getRoomId()); |
| | | }catch (Exception e){ |
| | | throw new IllegalArgumentException("门室号"+importRoomFee.getDoorRoomNum()+"未查询到房屋"); |
| | | } |
| | | else if(contractTypes.contains(JSONObject.parseObject(assetImportLogDetailDto.getContent()).get("category22")) || (importRoomFee.getObjType() != null && importRoomFee.getObjType().equals("7777"))){ |
| | | importRoomFee.setFeeName(data.getString("secondaryFeeTypeCd")); |
| | | FeeDto feeDto = new FeeDto(); |
| | | feeDto.setFeeName(importRoomFee.getFeeName()); |
| | | List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | if(feeDtos.size() == 0){ |
| | | updateImportLogDetailState(importRoomFee.getDetailId(),new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在")); |
| | | |
| | | throw new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在"); |
| | | } |
| | | |
| | | importRoomFee.setCommunityId(communityId); |
| | | importRoomFee.setDetailId(assetImportLogDetailDto.getDetailId()); |
| | | importRoomFee.setStartTime(data.getString("chargeStart")); |
| | | importRoomFee.setEndTime(data.getString("chargeEnd").split(" ")[0]+" 23:59:59"); |
| | | importRoomFee.setCreateTime(data.getString("inputTime")); |
| | | importRoomFee.setCreateTime(data.getString("chargeTime")); |
| | | importRoomFee.setReceivableAmount(data.getString("bankDepositAmount")); |
| | | importRoomFee.setAmount(data.getString("chargeAmount")); |
| | | importRoomFee.setStaffName(data.getString("charger")); |
| | | importRoomFee.setIsContractFee("O"); |
| | | importRoomFee.setOpenInv(data.containsKey("invoiceReceiptNo") && data.getString("invoiceReceiptNo") != null ? "Y" : "N"); |
| | | importRoomFee.setContractId(data.getString("licensePlate")); |
| | | importRoomFee.setInvoiceNo(data.containsKey("invoiceReceiptNo") && data.getString("invoiceReceiptNo") != null ? "Y" : "N"); |
| | | importRoomFee.setObjType("7777"); |
| | | importRoomFee.setCycle((DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee.getEndTime()) |
| | | )) + ""); |
| | | if (new BigDecimal(importRoomFee.getAmount()).doubleValue() < 0){ |
| | | importRoomFee.setCycle("-"+importRoomFee.getCycle()); |
| | | } |
| | | // if(importRoomFee.getPayerObjName()) |
| | | importRoomFees.add(importRoomFee); |
| | | importCarFees.add(importRoomFee); |
| | | } |
| | | else{ |
| | | List<RoomDto> roomDtos = iRoomInnerServiceSMOImpl.queryRooms(roomDto); |
| | | try { |
| | | importRoomFee.setRoomId(roomDtos.get(0).getRoomId()); |
| | | }catch (Exception e){ |
| | | updateImportLogDetailState(importRoomFee.getDetailId(),new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在")); |
| | | throw new IllegalArgumentException("门室号"+importRoomFee.getDoorRoomNum()+"未查询到房屋"); |
| | | } |
| | | else if(carTypes.contains(JSONObject.parseObject(assetImportLogDetailDto.getContent()).get("category22"))){ |
| | | importRoomFee.setCommunityId(communityId); |
| | | importRoomFee.setFeeName(data.getString("secondaryFeeTypeCd")); |
| | | FeeDto feeDto = new FeeDto(); |
| | | feeDto.setFeeName(importRoomFee.getFeeName()); |
| | | List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | if(feeDtos.size() == 0){ |
| | | updateImportLogDetailState(importRoomFee.getDetailId(),new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在")); |
| | | throw new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在"); |
| | | } |
| | | |
| | | importRoomFee.setDetailId(assetImportLogDetailDto.getDetailId()); |
| | | importRoomFee.setStartTime(data.getString("chargeStart")); |
| | | importRoomFee.setEndTime(data.getString("chargeEnd").split(" ")[0]+" 23:59:59"); |
| | | importRoomFee.setCreateTime(data.getString("inputTime")); |
| | | importRoomFee.setCreateTime(data.getString("chargeTime")); |
| | | importRoomFee.setReceivableAmount(data.getString("bankDepositAmount")); |
| | | importRoomFee.setAmount(data.getString("chargeAmount")); |
| | | importRoomFee.setCarNum(data.getString("licensePlate")); |
| | | importRoomFee.setStaffName(data.getString("charger")); |
| | | importRoomFee.setOpenInv(data.containsKey("invoiceReceiptNo") && data.getString("invoiceReceiptNo") != null ? "Y" : "N"); |
| | | // if(importRoomFee.getPayerObjName()) |
| | | importRoomFee.setObjType("6666"); |
| | | importRoomFee.setCycle((DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee.getEndTime()) |
| | | )) + ""); |
| | | if (new BigDecimal(importRoomFee.getAmount()).doubleValue() < 0){ |
| | | importRoomFee.setCycle("-"+importRoomFee.getCycle()); |
| | | } |
| | | importCarFees.add(importRoomFee); |
| | | } |
| | | else{ |
| | | importRoomFee.setCommunityId(communityId); |
| | | importRoomFee.setFeeName(data.getString("secondaryFeeTypeCd")); |
| | | importRoomFee.setDetailId(assetImportLogDetailDto.getDetailId()); |
| | | importRoomFee.setStartTime(data.getString("chargeStart")); |
| | | importRoomFee.setEndTime(data.getString("chargeEnd").split(" ")[0]+" 23:59:59"); |
| | | importRoomFee.setCreateTime(data.getString("chargeTime")); |
| | | importRoomFee.setReceivableAmount(data.getString("bankDepositAmount")); |
| | | importRoomFee.setAmount(data.getString("chargeAmount")); |
| | | importRoomFee.setStaffName(data.getString("charger")); |
| | | importRoomFee.setOpenInv(data.containsKey("invoiceReceiptNo") && data.getString("invoiceReceiptNo") != null ? "Y" : "N"); |
| | | importRoomFee.setCycle((DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee.getEndTime()) |
| | | )) + ""); |
| | | if (new BigDecimal(importRoomFee.getAmount()).doubleValue() < 0){ |
| | | importRoomFee.setCycle("-"+importRoomFee.getCycle()); |
| | | } |
| | | // if(importRoomFee.getPayerObjName()) |
| | | importRoomFees.add(importRoomFee); |
| | | } |
| | | } |
| | | importFeeDetailsByCarInout(carInoutPos); |
| | | |
| | | if (ListUtil.isNull(importRoomFees)) { |
| | | if (ListUtil.isNull(importRoomFees) && ListUtil.isNull(importCarFees)) { |
| | | return; |
| | | } |
| | | |
| | | importFeeDetails(importRoomFees.get(0).getStoreId(), importRoomFees.get(0).getUserId(), importRoomFees, importRoomFees.get(0).getBatchId()); |
| | | try{ |
| | | if(assetImportLogDetailDto.getOutTime() == null) { |
| | | assetImportLogDetailDto.setOutTime("2050-01-01 23:59:59"); |
| | | } |
| | | if(!(ListUtil.isNull(importRoomFees))){ |
| | | if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() < DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime() && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){ |
| | | ImportRoomFee original = importRoomFees.get(0); |
| | | ImportRoomFee importRoomFee1 = (ImportRoomFee) original.clone(); // 克隆新对象 |
| | | ImportRoomFee importRoomFee2 = (ImportRoomFee) original.clone(); // 克隆另一个新对象 |
| | | double cycle = (DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee1.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee1.getEndTime()) |
| | | )) ; |
| | | double amount = Double.parseDouble(importRoomFee1.getAmount()); |
| | | importRoomFees = new ArrayList<>(); |
| | | importRoomFee1.setEndTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]),-1) + " 23:59:59"); |
| | | importRoomFee1.setCycle((DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee1.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee1.getEndTime()) |
| | | )) + ""); |
| | | importRoomFee1.setAmount((amount/cycle) * Double.parseDouble(importRoomFee1.getCycle()) + ""); |
| | | importRoomFee2.setStartTime(assetImportLogDetailDto.getTakeTime().split(" ")[0] + " 00:00:00"); |
| | | importRoomFee2.setCycle((DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee2.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee2.getEndTime()) |
| | | )) + ""); |
| | | importRoomFee2.setAmount(Double.parseDouble(importRoomFee2.getAmount()) - Double.parseDouble(importRoomFee1.getAmount()) + ""); |
| | | importRoomFee1.setState("1600"); |
| | | importRoomFee2.setState("1400"); |
| | | |
| | | importRoomFees.add(importRoomFee1); |
| | | importRoomFees.add(importRoomFee2); |
| | | } |
| | | if (DateUtil.getDateFromStringB(data.getString("chargeEnd").split(" ")[0]).getTime() > DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime().split(" ")[0]).getTime() |
| | | && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){ |
| | | ImportRoomFee importRoomFeeLast = importRoomFees.get(importRoomFees.size()-1); |
| | | double cycle = Double.parseDouble(importRoomFeeLast.getCycle()); |
| | | double amount = Double.parseDouble(importRoomFeeLast.getAmount()); |
| | | |
| | | ImportRoomFee importRoomFeeEnd = (ImportRoomFee) importRoomFeeLast.clone(); |
| | | |
| | | importRoomFeeLast.setEndTime(assetImportLogDetailDto.getOutTime() + " 23:59:59"); |
| | | double cycle1 = (DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFeeLast.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFeeLast.getEndTime()) |
| | | )); |
| | | double amount1 = amount/cycle * cycle1; |
| | | |
| | | importRoomFeeEnd.setStartTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime()),1) + " 00:00:00"); |
| | | importRoomFeeEnd.setCycle(DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFeeEnd.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFeeEnd.getEndTime()) |
| | | ) + ""); |
| | | importRoomFeeEnd.setAmount(amount - amount1 + ""); |
| | | importRoomFeeEnd.setState("1900"); |
| | | importRoomFees.add(importRoomFeeEnd); |
| | | } |
| | | importFeeDetails(importRoomFees.get(0).getStoreId(), importRoomFees.get(0).getUserId(), importRoomFees, importRoomFees.get(0).getBatchId()); |
| | | } |
| | | if(!(ListUtil.isNull(importCarFees))){ |
| | | importRoomFees = importCarFees; |
| | | if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() < DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime() && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){ |
| | | ImportRoomFee original = importRoomFees.get(0); |
| | | ImportRoomFee importRoomFee1 = (ImportRoomFee) original.clone(); // 克隆新对象 |
| | | ImportRoomFee importRoomFee2 = (ImportRoomFee) original.clone(); // 克隆另一个新对象 |
| | | double cycle = (DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee1.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee1.getEndTime()) |
| | | )) ; |
| | | double amount = Double.parseDouble(importRoomFee1.getAmount()); |
| | | importRoomFees = new ArrayList<>(); |
| | | importRoomFee1.setEndTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]),-1) + " 23:59:59"); |
| | | importRoomFee1.setCycle((DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee1.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee1.getEndTime()) |
| | | )) + ""); |
| | | importRoomFee1.setAmount((amount/cycle) * Double.parseDouble(importRoomFee1.getCycle()) + ""); |
| | | importRoomFee2.setStartTime(assetImportLogDetailDto.getTakeTime().split(" ")[0] + " 00:00:00"); |
| | | importRoomFee2.setCycle((DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee2.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee2.getEndTime()) |
| | | )) + ""); |
| | | importRoomFee2.setAmount(Double.parseDouble(importRoomFee2.getAmount()) - Double.parseDouble(importRoomFee1.getAmount()) + ""); |
| | | importRoomFee1.setState("1600"); |
| | | importRoomFee2.setState("1400"); |
| | | |
| | | importRoomFees.add(importRoomFee1); |
| | | importRoomFees.add(importRoomFee2); |
| | | } |
| | | if (DateUtil.getDateFromStringB(data.getString("chargeEnd").split(" ")[0]).getTime() > DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime().split(" ")[0]).getTime() |
| | | && !assetImportLogDetailDto.getState().equals("1100") && !assetImportLogDetailDto.getState().equals("1300")){ |
| | | ImportRoomFee importRoomFeeLast = importRoomFees.get(importRoomFees.size()-1); |
| | | double cycle = Double.parseDouble(importRoomFeeLast.getCycle()); |
| | | double amount = Double.parseDouble(importRoomFeeLast.getAmount()); |
| | | |
| | | ImportRoomFee importRoomFeeEnd = (ImportRoomFee) importRoomFeeLast.clone(); |
| | | |
| | | importRoomFeeLast.setEndTime(assetImportLogDetailDto.getOutTime() + " 23:59:59"); |
| | | double cycle1 = (DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFeeLast.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFeeLast.getEndTime()) |
| | | )); |
| | | double amount1 = amount/cycle * cycle1; |
| | | |
| | | importRoomFeeEnd.setStartTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getOutTime()),1) + " 00:00:00"); |
| | | importRoomFeeEnd.setCycle(DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFeeEnd.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFeeEnd.getEndTime()) |
| | | ) + ""); |
| | | importRoomFeeEnd.setAmount(amount - amount1 + ""); |
| | | importRoomFeeEnd.setState("1900"); |
| | | importRoomFees.add(importRoomFeeEnd); |
| | | } |
| | | importCarFeeDetails2(importCarFees.get(0).getStoreId(), importCarFees.get(0).getUserId(), importRoomFees, importCarFees.get(0).getBatchId()); |
| | | } |
| | | }catch (IllegalStateException e){ |
| | | throw new IllegalArgumentException(e.getMessage()); |
| | | }catch (IllegalArgumentException e){ |
| | | throw new IllegalArgumentException(e.getMessage()); |
| | | } |
| | | catch (Exception e){ |
| | | throw new IllegalArgumentException("未知错误:"+e); |
| | | } |
| | | } |
| | | |
| | | public void importCarFeeDetails2(String storeId, String userId, List<ImportRoomFee> importCarFees, String batchId) { |
| | | |
| | | importCarFees = ownerCarInnerServiceSMOImpl.freshCarIds(importCarFees); |
| | | for (ImportRoomFee importCarFee : importCarFees) { |
| | | try { |
| | | if (StringUtil.isEmpty(importCarFee.getCarNum())) { |
| | | if(importCarFee.getObjType() != null && (importCarFee.getObjType().equals("7777"))){ |
| | | importFeeDetail(importCarFee, storeId, userId, batchId); |
| | | updateImportLogDetailState(importCarFee.getDetailId()); |
| | | } |
| | | } |
| | | else{ |
| | | OwnerCarDto ownerCarDto = new OwnerCarDto(); |
| | | ownerCarDto.setCommunityId(importCarFee.getCommunityId()); |
| | | ownerCarDto.setCarNum(importCarFee.getCarNum()); |
| | | List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto); |
| | | if (ownerCarDtos != null && ownerCarDtos.size() > 0) { |
| | | importCarFee.setCarId(ownerCarDtos.get(0).getCarId()); |
| | | }else{ |
| | | throw new IllegalStateException("车牌号不存在或存在多辆重复车牌号车"); |
| | | } |
| | | importFeeDetail(importCarFee, storeId, userId, batchId); |
| | | updateImportLogDetailState(importCarFee.getDetailId()); |
| | | } |
| | | } catch (Exception e) { |
| | | updateImportLogDetailState(importCarFee.getDetailId(), e); |
| | | throw new IllegalArgumentException(e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void importFeeDetailsByCarInout(List<CarInoutPo> carInoutPos) { |
| | | |
| | | for (CarInoutPo carInoutPo : carInoutPos) { |
| | | try { |
| | | ArrayList<CarInoutPo> carInoutPos1 = new ArrayList<>(); |
| | | carInoutPos1.add(carInoutPo); |
| | | carInoutInnerServiceSMOImpl.batchSaveCarInout2(carInoutPos1); |
| | | updateImportLogDetailState(carInoutPo.getDetailId()); |
| | | }catch (Exception e){ |
| | | updateImportLogDetailState(carInoutPo.getDetailId(),e); |
| | | throw new IllegalArgumentException(e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | private void importFeeDetails(String storeId, String userId, List<ImportRoomFee> importRoomFees, String batchId) { |
| | | |
| | | importRoomFees = roomInnerServiceSMOImpl.freshRoomIds(importRoomFees); |
| | | String endTime = ""; |
| | | for (ImportRoomFee importRoomFee : importRoomFees) { |
| | | |
| | | endTime = importRoomFee.getEndTime(); |
| | | if (!endTime.contains(":")) { |
| | | endTime += " 23:59:59"; |
| | | importRoomFee.setEndTime(endTime); |
| | | } |
| | | |
| | | |
| | | try { |
| | | if (StringUtil.isEmpty(importRoomFee.getRoomId())) { |
| | | continue; |
| | | throw new IllegalArgumentException("房屋号不存在"); |
| | | } |
| | | RoomDto roomDto = new RoomDto(); |
| | | // roomDto.setDoorRoomNum(importRoomFee.getDoorRoomNum()); |
| | | roomDto.setCommunityId(importRoomFee.getCommunityId()); |
| | | if(importRoomFee.getDoorRoomNum()!=null){ |
| | | String[] split = importRoomFee.getDoorRoomNum().split("-"); |
| | | if(split.length < 2){ |
| | | throw new IllegalArgumentException("门室号"+importRoomFee.getDoorRoomNum()+"未遵循x-x-x"); |
| | | }else if(split.length > 2){ |
| | | roomDto.setFloorNum(split[0]); |
| | | roomDto.setUnitNum(split[1]); |
| | | roomDto.setRoomNum(split[2]); |
| | | } |
| | | } |
| | | importFeeDetail(importRoomFee, storeId, userId, batchId); |
| | | // feeDiscountApi |
| | | updateImportLogDetailState(importRoomFee.getDetailId()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | updateImportLogDetailState(importRoomFee.getDetailId(), e); |
| | | throw new IllegalArgumentException(e.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); |
| | | |
| | |
| | | * |
| | | * @param importRoomFee |
| | | */ |
| | | |
| | | |
| | | @Autowired |
| | | private IPayFeeMonth payFeeMonthImpl; |
| | | |
| | | private void importFeeDetail(ImportRoomFee importRoomFee, String storeId, String userId, String batchId) { |
| | | |
| | | FeeConfigDto feeConfigDto = new FeeConfigDto(); |
| | | feeConfigDto.setFeeNameEq(importRoomFee.getFeeName().trim()); |
| | | feeConfigDto.setCommunityId(importRoomFee.getCommunityId()); |
| | | List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto); |
| | | |
| | | if (ListUtil.isNull(feeConfigDtos)) { |
| | | return; |
| | | if (importRoomFee.getState() == null){ |
| | | importRoomFee.setState("1400"); |
| | | } |
| | | |
| | | FeeConfigDto tmpFeeConfigDto = feeConfigDtos.get(0); |
| | | |
| | | FeeDto feeDto = new FeeDto(); |
| | | feeDto.setConfigId(tmpFeeConfigDto.getConfigId()); |
| | | feeDto.setCommunityId(importRoomFee.getCommunityId()); |
| | | feeDto.setPayerObjId(importRoomFee.getRoomId()); |
| | | feeDto.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM); |
| | | // 解析日期字符串 |
| | | LocalDateTime startDate = LocalDateTime.parse(importRoomFee.getStartTime(), formatter); |
| | | LocalDateTime endDate = LocalDateTime.parse(importRoomFee.getEndTime(), formatter); |
| | | importRoomFee.setCycle(String.valueOf(ChronoUnit.MONTHS.between(startDate, endDate))); |
| | | List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | |
| | | List<PayFeePo> payFeePos = null; |
| | | if (ListUtil.isNull(feeDtos)) { |
| | | List<FeeAttrPo> feeAttrsPos = new ArrayList<>(); |
| | | PayFeePo payFeePo = new PayFeePo(); |
| | | payFeePo.setCommunityId(importRoomFee.getCommunityId()); |
| | | payFeePo.setConfigId(feeDto.getConfigId()); |
| | | payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM); |
| | | payFeePo.setStartTime(importRoomFee.getStartTime()); |
| | | payFeePo.setEndTime(DateUtil.getNextSecTime(importRoomFee.getEndTime())); |
| | | payFeePo.setAmount(importRoomFee.getAmount()); |
| | | payFeePo.setFeeFlag(tmpFeeConfigDto.getFeeFlag()); |
| | | payFeePo.setFeeTypeCd(tmpFeeConfigDto.getFeeTypeCd()); |
| | | payFeePo.setIncomeObjId(storeId); |
| | | payFeePo.setBatchId(batchId); |
| | | if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeConfigDto.getFeeFlag())) { |
| | | payFeePo.setState(FeeDto.STATE_FINISH); |
| | | } else { |
| | | payFeePo.setState(FeeDto.STATE_DOING); |
| | | } |
| | | payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId)); |
| | | payFeePo.setPayerObjId(importRoomFee.getRoomId()); |
| | | payFeePo.setUserId(userId); |
| | | payFeePo.setCreateTime(importRoomFee.getCreateTime()); |
| | | payFeePos = new ArrayList<>(); |
| | | payFeePos.add(payFeePo); |
| | | feeInnerServiceSMOImpl.saveFee(payFeePos); |
| | | |
| | | //查询业主信息 |
| | | OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto(); |
| | | ownerRoomRelDto.setRoomId(importRoomFee.getRoomId()); |
| | | List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelV1InnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto); |
| | | if (ownerRoomRelDtos != null && ownerRoomRelDtos.size() > 0) { |
| | | if (!FeeDto.FEE_FLAG_CYCLE.equals(tmpFeeConfigDto.getFeeFlag())) { |
| | | feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME, |
| | | importRoomFee.getEndTime())); |
| | | FeeDto feeDto2 = new FeeDto(); |
| | | feeDto2.setUseFeeName(importRoomFee.getFeeName()); |
| | | if (importRoomFee.getObjType() == null||importRoomFee.getObjType().equals("3333")){ |
| | | RoomDto roomDto = new RoomDto(); |
| | | // roomDto.setDoorRoomNum(importRoomFee.getDoorRoomNum()); |
| | | roomDto.setCommunityId(importRoomFee.getCommunityId()); |
| | | if(importRoomFee.getDoorRoomNum()!=null){ |
| | | String[] split = importRoomFee.getDoorRoomNum().split("-"); |
| | | if(split.length < 2){ |
| | | throw new IllegalArgumentException("门室号"+importRoomFee.getDoorRoomNum()+"未遵循x-x-x"); |
| | | }else if(split.length > 2){ |
| | | roomDto.setFloorNum(split[0]); |
| | | roomDto.setUnitNum(split[1]); |
| | | roomDto.setRoomNum(split[2]); |
| | | } |
| | | feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_ID, ownerRoomRelDtos.get(0).getOwnerId())); |
| | | feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_LINK, ownerRoomRelDtos.get(0).getLink())); |
| | | feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_NAME, ownerRoomRelDtos.get(0).getOwnerName())); |
| | | feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrsPos); |
| | | } |
| | | |
| | | List<RoomDto> roomDtos = iRoomInnerServiceSMOImpl.queryRooms(roomDto); |
| | | try { |
| | | importRoomFee.setRoomId(roomDtos.get(0).getRoomId()); |
| | | }catch (Exception e){ |
| | | throw new IllegalArgumentException("门室号"+importRoomFee.getDoorRoomNum()+"未查询到房屋"); |
| | | } |
| | | feeDto2.setPayerObjId(importRoomFee.getRoomId()); |
| | | importRoomFee.setPayObjId(importRoomFee.getRoomId()); |
| | | }else if (importRoomFee.getObjType().equals("6666")){ |
| | | if (importRoomFee.getCarNum() == null){ |
| | | throw new IllegalArgumentException("车牌号为空"); |
| | | } |
| | | OwnerCarDto ownerCarDto = new OwnerCarDto(); |
| | | ownerCarDto.setCommunityId(importRoomFee.getCommunityId()); |
| | | ownerCarDto.setCarNum(importRoomFee.getCarNum()); |
| | | List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto); |
| | | if (ownerCarDtos != null && ownerCarDtos.size() > 0) { |
| | | feeDto2.setPayerObjId(ownerCarDtos.get(0).getCarId()); |
| | | importRoomFee.setCarId(ownerCarDtos.get(0).getCarId()); |
| | | importRoomFee.setPayObjId(importRoomFee.getCarId()); |
| | | }else{ |
| | | throw new IllegalStateException("车牌号不存在或存在多辆重复车牌号车"); |
| | | } |
| | | }else { |
| | | ContractPartyaDto contractPartyaDto = new ContractPartyaDto(); |
| | | contractPartyaDto.setCommunityId(importRoomFee.getCommunityId()); |
| | | contractPartyaDto.setPartyA(importRoomFee.getDoorRoomNum()); |
| | | List<ContractPartyaDto> contractPartyaDtos = contractPartyaInnerServiceSMOImpl.queryContractPartyas(contractPartyaDto); |
| | | if (contractPartyaDtos != null && contractPartyaDtos.size() > 0) { |
| | | ContractDto contractDto = new ContractDto(); |
| | | contractDto.setCommunityId(importRoomFee.getCommunityId()); |
| | | contractDto.setContractCode(importRoomFee.getContractId()); |
| | | List<ContractDto> contractDtos = contractInnerServiceSMOImpl.queryContracts(contractDto); |
| | | if (contractDtos.size() == 1) { |
| | | importRoomFee.setContractId(contractDtos.get(0).getContractId()); |
| | | feeDto2.setContractFee(contractDtos.get(0).getContractId()); |
| | | } |
| | | feeDto2.setPayerObjId(contractPartyaDtos.get(0).getPartyaId()); |
| | | importRoomFee.setRoomId(contractPartyaDtos.get(0).getPartyaId()); |
| | | importRoomFee.setPayObjId(importRoomFee.getRoomId()); |
| | | } else { |
| | | throw new IllegalArgumentException("导入失败,未查询到该主体"); |
| | | } |
| | | } |
| | | feeDto2.setCommunityId(importRoomFee.getCommunityId()); |
| | | if (importRoomFee.getState().equals("1100") || importRoomFee.getState().equals("1300") || importRoomFee.getState().equals("1600") || importRoomFee.getState().equals("1900")) { |
| | | |
| | | feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | } |
| | | else { |
| | | feeDto2.setStatusCd("0"); |
| | | feeDto2.setUseStart(DateUtil.getDateFromStringA(importRoomFee.getStartTime())); |
| | | feeDto2.setUseEnd(DateUtil.getDateFromStringA(importRoomFee.getEndTime())); |
| | | } |
| | | List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto2); |
| | | if (!(importRoomFee.getFrequency().equals("退费"))) { |
| | | feeDtos.removeIf(feeDto -> "2009001".equals(feeDto.getState())); |
| | | } |
| | | if(feeDtos.size() == 0 && (importRoomFee.getState() == null || !importRoomFee.getState().equals("1600")|| importRoomFee.getState().equals("1900"))){ |
| | | updateImportLogDetailState(importRoomFee.getDetailId(),new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在")); |
| | | |
| | | throw new IllegalArgumentException("费用记录"+importRoomFee.getFeeName()+"不存在"); |
| | | }else if(feeDtos.size() > 1){ |
| | | throw new IllegalArgumentException("存在多条记录"); |
| | | } |
| | | |
| | | for (FeeDto tmpFeeDto : feeDtos) { |
| | | doImportFeeDetail(tmpFeeDto, importRoomFee); |
| | | if(DateUtil.getDateFromStringB(importRoomFee.getEndTime()).getTime() > tmpFeeDto.getMaxEndTime().getTime()){ |
| | | throw new IllegalArgumentException("该费用记录结束时间大于费用记录最大缴费时间"); |
| | | }else { |
| | | doImportFeeDetail(tmpFeeDto, importRoomFee); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | |
| | | PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo(); |
| | | if(importRoomFee.getInvoiceNo() != null){ |
| | | payFeeDetailPo.setInvoiceNo(importRoomFee.getInvoiceNo()); |
| | | payFeeDetailPo.setOpenInvoice("Y"); |
| | | }else{ |
| | | payFeeDetailPo.setOpenInvoice("N"); |
| | | } |
| | | payFeeDetailPo.setCommunityId(importRoomFee.getCommunityId()); |
| | | payFeeDetailPo.setReceivedAmount(importRoomFee.getAmount()); |
| | | payFeeDetailPo.setReceivableAmount(importRoomFee.getAmount()); |
| | | payFeeDetailPo.setCycles(importRoomFee.getCycle()); |
| | | payFeeDetailPo.setPrimeRate("1.0"); |
| | | payFeeDetailPo.setFeeId(tmpFeeDto.getFeeId()); |
| | | payFeeDetailPo.setStartTime(importRoomFee.getStartTime()); |
| | | payFeeDetailPo.setEndTime(importRoomFee.getEndTime()); |
| | | payFeeDetailPo.setRemark(importRoomFee.getRemark()); |
| | | payFeeDetailPo.setCreateTime(importRoomFee.getCreateTime()); |
| | | payFeeDetailPo.setState("1400"); |
| | | payFeeDetailPo.setCashierName(importRoomFee.getStaffName()); |
| | | payFeeDetailPo.setPayableAmount(importRoomFee.getAmount()); |
| | | payFeeDetailPo.setPayOrderId(importRoomFee.getPayObjId()); |
| | | payFeeDetailPo.setB("T"); |
| | | double cycle = 0; |
| | | if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag())){ |
| | | cycle = 1; |
| | | } |
| | | else{ |
| | | cycle = (DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(payFeeDetailPo.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee.getEndTime()) |
| | | )); |
| | | } |
| | | |
| | | if (importRoomFee.getState() != null){ |
| | | payFeeDetailPo.setState(importRoomFee.getState()); |
| | | } |
| | | if (importRoomFee.getState().equals("1300")){ |
| | | cycle = 0 - cycle; |
| | | } |
| | | int count = feeDetailInnerServiceSMOImpl.queryFeeDetailsCountByVo(payFeeDetailPo); |
| | | |
| | | payFeeDetailPo.setPayableAmount(importRoomFee.getAmount()); |
| | | |
| | | |
| | | payFeeDetailPo.setCycles(importRoomFee.getCycle()); |
| | | payFeeDetailPo.setCycles(cycle+""); |
| | | payFeeDetailPo.setEndTime(importRoomFee.getEndTime()); |
| | | if (count > 0) { |
| | | throw new IllegalStateException("重复的缴费记录"); |
| | | } |
| | | |
| | | // if (importRoomFee.getFrequency().equals("退费")) { |
| | | // payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId)); |
| | | // double v = computeFeeByCycle(tmpFeeDto, importRoomFee); |
| | | // if (v > 0) { |
| | | // v = v - 2 * v; |
| | | // } |
| | | // payFeeDetailPo.setReceivableAmount(v+""); |
| | | // payFeeDetailPo.setDiscountAmount("0"); |
| | | // payFeeDetailPo.setState("1300"); |
| | | // int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo); |
| | | // |
| | | // PayFeePo payFeePo = new PayFeePo(); |
| | | // payFeePo.setFeeId(payFeeDetailPo.getFeeId()); |
| | | // payFeePo.setEndTime(importRoomFee.getStartTime()); |
| | | // feeInnerServiceSMOImpl.updateFee(payFeePo); |
| | | // return; |
| | | // } else |
| | | if (importRoomFee.getState() != null && (importRoomFee.getState().equals("1600") || importRoomFee.getState().equals("1900"))){ |
| | | payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId)); |
| | | payFeeDetailPo.setReceivableAmount(computeFeeByCycle(tmpFeeDto,importRoomFee)+""); |
| | | payFeeDetailPo.setDiscountAmount("0"); |
| | | int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo); |
| | | |
| | | payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId()); |
| | | |
| | | payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId()); |
| | | return; |
| | | } |
| | | |
| | | PayFeeDetailDiscountPo payFeeDetailDiscount = new PayFeeDetailDiscountPo(); |
| | | try { |
| | | // Map feePriceAll = computeFeeSMOImpl.getFeePrice(tmpFeeDto); |
| | | FeeDto feeDto = new FeeDto(); |
| | | feeDto.setFeeId(tmpFeeDto.getFeeId()); |
| | | feeDto.setCommunityId(tmpFeeDto.getCommunityId()); |
| | | // List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | payFeeDetailPo.setReceivableAmount(computeFeeByCycle(tmpFeeDto,importRoomFee)+""); |
| | | ResponseEntity<String> resultVo = feeDiscountApi.computeFeeDiscount(tmpFeeDto.getFeeId(), tmpFeeDto.getCommunityId(), 105, importRoomFee.getPayObjId(), |
| | | tmpFeeDto.getPayerObjType(), importRoomFee.getEndTime(), importRoomFee.getEndTime(), importRoomFee.getStartTime(), 1, 20); |
| | | |
| | | // 2. 从 ResultVo 中获取 data 并强转为目标类型 |
| | | if (resultVo != null) { |
| | | // 假设 data 字段存储的是 List<ComputeDiscountDto> |
| | | JSONArray data = (JSONArray) JSONObject.parseObject(resultVo.getBody()).get("data"); |
| | | |
| | | if(data.size() > 0) { |
| | | JSONObject o = (JSONObject) data.get(0); |
| | | String discountPrice = o.get("discountPrice").toString(); |
| | | String discountId = o.get("discountId").toString(); |
| | | payFeeDetailPo.setDiscountAmount(discountPrice); |
| | | |
| | | payFeeDetailDiscount.setDiscountId(discountId); |
| | | payFeeDetailDiscount.setDiscountPrice(discountPrice); |
| | | }else{ |
| | | |
| | | } |
| | | } |
| | | } catch (ParseException e) { |
| | | throw new RuntimeException(e.getMessage()); |
| | | } |
| | | |
| | | |
| | | payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId)); |
| | | if(importRoomFee.getOpenInv() != null){ |
| | | payFeeDetailPo.setOpenInvoice(importRoomFee.getOpenInv()); |
| | | |
| | | if (importRoomFee.getState() != null && importRoomFee.getState().equals("1300")){ |
| | | payFeeDetailPo.setReceivableAmount("-"+payFeeDetailPo.getReceivableAmount()); |
| | | } |
| | | int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo); |
| | | |
| | | |
| | | |
| | | FeeDetailDto feeDetailDto = new FeeDetailDto(); |
| | | feeDetailDto.setDetailId(payFeeDetailPo.getDetailId()); |
| | | |
| | | List<FeeDetailDto> feeDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto); |
| | | |
| | | if (payFeeDetailDiscount.getDiscountId() != null) { |
| | | payFeeDetailDiscount.setDetailId(payFeeDetailPo.getDetailId()); |
| | | payFeeDetailDiscount.setStatusCd("0"); |
| | | payFeeDetailDiscount.setCommunityId(feeDtos.get(0).getCommunityId()); |
| | | payFeeDetailDiscount.setFeeId(feeDtos.get(0).getFeeId()); |
| | | payFeeDetailDiscount.setDetailDiscountId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_discountId)); |
| | | |
| | | payFeeDetailDiscountNewV1InnerServiceSMOImpl.savePayFeeDetailDiscountNew(payFeeDetailDiscount); |
| | | } |
| | | |
| | | if (saved < 1) { |
| | | payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId()); |
| | | |
| | | payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId()); |
| | | return; |
| | | } |
| | | |
| | | FeeDto fee = new FeeDto(); |
| | | fee.setFeeId(tmpFeeDto.getFeeId()); |
| | | FeeDto feeInfo = feeInnerServiceSMOImpl.queryFees(fee).get(0); |
| | |
| | | |
| | | // int i = feeInnerServiceSMOImpl.updateFee(feeInfo); |
| | | |
| | | if (tmpFeeDto.getEndTime().getTime() >= DateUtil.getDateFromStringB(importRoomFee.getEndTime()).getTime()) { |
| | | if (tmpFeeDto.getEndTime().getTime() >= DateUtil.getDateFromStringA(importRoomFee.getEndTime()).getTime() + 2000 || (importRoomFee.getState().equals("1100") || importRoomFee.getState().equals("1300"))) { |
| | | payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId()); |
| | | |
| | | payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId()); |
| | | return; |
| | | } |
| | | |
| | | |
| | | //如果结束时间小于 缴费结束时间则延期 |
| | | PayFeePo payFeePo = new PayFeePo(); |
| | |
| | | payFeePo.setStatusCd(StatusConstant.STATUS_CD_VALID); |
| | | payFeePo.setFeeId(tmpFeeDto.getFeeId()); |
| | | String[] arr = importRoomFee.getEndTime().split(" "); |
| | | if (arr.length >= 2 &&arr[1].equals("23:59:59")){ |
| | | importRoomFee.setEndTime(arr[0] + " 00:00:00"); |
| | | |
| | | if (arr.length >= 2 && arr[1].equals("23:59:59")){ |
| | | payFeePo.setEndTime(DateUtil.getNextSecTime(importRoomFee.getEndTime())); |
| | | if(!(FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag()))){ |
| | | importRoomFee.setCycle((DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee.getEndTime()) |
| | | ))+""); |
| | | payFeeCmd.ifCustomStartEndTimePayFee(importRoomFee.getCycle(), DateUtil.getDateFromStringB(importRoomFee.getStartTime().split(" ")[0]), feeDtos.get(0) , feeInfo, importRoomFee.getStartTime()); |
| | | } |
| | | |
| | | } |
| | | payFeePo.setEndTime(DateUtil.getNextSecTime(importRoomFee.getEndTime())); |
| | | if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag())) { |
| | | payFeePo.setState(FeeDto.STATE_FINISH); |
| | | } |
| | | // if (FeeDto.FEE_FLAG_ONCE.equals(tmpFeeDto.getFeeFlag())) { |
| | | // payFeePo.setState(FeeDto.STATE_FINISH); |
| | | // } |
| | | |
| | | |
| | | // else{ |
| | | // payFeePo.setEndTime(DateUtil.getFormatTimeStringA(feeInfo.getMaxEndTime())); |
| | | // } |
| | | // //状态修改为费用结束 |
| | | // if (computeFee <= 0 && computeFee > -1){// 10为误差 |
| | | // payFeePo.setState(FeeDto.STATE_FINISH); |
| | | // }else{ |
| | | // throw new IllegalArgumentException("异常数据:应缴金额小于实缴金额"); |
| | | // } |
| | | |
| | | feeInnerServiceSMOImpl.updateFee(payFeePo); |
| | | feeInfo = feeInnerServiceSMOImpl.queryFees(fee).get(0); |
| | | if (DateUtil.getFormatTimeStringB(feeInfo.getEndTime()).equals(DateUtil.getFormatTimeStringB(feeInfo.getMaxEndTime()))) { |
| | | PayFeePo payFee = new PayFeePo(); |
| | | payFee.setFeeId(feeInfo.getFeeId()); |
| | | payFee.setState(FeeDto.STATE_FINISH); |
| | | int i = feeInnerServiceSMOImpl.updateFee(payFee); |
| | | if (importRoomFee.getEndTime().split(" ")[0].equals(DateUtil.getFormatTimeStringB(feeInfo.getMaxEndTime()))) { |
| | | // Date deadlineTime = feeInfo.getDeadlineTime(); |
| | | // feeInfo.setDeadlineTime(DateUtil.getDateFromStringA(importRoomFee.getEndTime())); |
| | | // calculateFeeSMOImpl.computeOweFee(feeInfo); |
| | | // feeInfo.setDeadlineTime(deadlineTime); |
| | | // double computeFee = Double.parseDouble(feeInfo.getAmountOwed()); |
| | | double computeFee = computeFee(feeInfo,importRoomFee); |
| | | if(computeFee <= 1 && computeFee >= -1){ |
| | | PayFeePo payFee = new PayFeePo(); |
| | | payFee.setFeeId(feeInfo.getFeeId()); |
| | | payFee.setState(FeeDto.STATE_FINISH); |
| | | payFee.setEndTime(payFee.getMaxTime()); |
| | | int i = feeInnerServiceSMOImpl.updateFee(payFee); |
| | | }else{ |
| | | PayFeePo payFee = new PayFeePo(); |
| | | payFee.setFeeId(feeInfo.getFeeId()); |
| | | payFee.setEndTime(DateUtil.getFormatTimeStringA(feeInfo.getMaxEndTime())); |
| | | int i = feeInnerServiceSMOImpl.updateFee(payFee); |
| | | } |
| | | } |
| | | |
| | | payFeeMonthImpl.doGeneratorFeeMonths(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId()); |
| | | |
| | | payFeeMonthImpl.doGeneratorOweFees(Collections.singletonList(payFeeDetailPo.getFeeId()), payFeeDetailPo.getCommunityId()); |
| | | } |
| | | |
| | | private double computeFee(FeeDto fee,ImportRoomFee importRoomFee) { |
| | | FeeDto feeDto = new FeeDto(); |
| | | feeDto.setFeeId(fee.getFeeId()); |
| | | feeDto.setCommunityId(fee.getCommunityId()); |
| | | List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | if (feeDtos == null || feeDtos.size() != 1) { |
| | | throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "查询费用信息失败,未查到数据或查到多条数据"); |
| | | } |
| | | feeDto = feeDtos.get(0); |
| | | |
| | | double month = (DateUtil.dayCompare( |
| | | fee.getStartTime(), |
| | | DateUtil.getDateFromStringA(DateUtil.getFormatTimeStringB(fee.getMaxEndTime()).split(" ")[0]+" 23:59:59") |
| | | )); |
| | | if(feeDto.getFeeFlag().equals(FeeDto.FEE_FLAG_ONCE)){ |
| | | month = 1; |
| | | } |
| | | Map feePriceAll = computeFeeSMOImpl.getFeePrice(feeDto); |
| | | //todo 计算应收 |
| | | BigDecimal receivableAmount = new BigDecimal(feePriceAll.get("feePrice").toString()); |
| | | BigDecimal cycles = new BigDecimal(month); |
| | | double tmpReceivableAmount = cycles.multiply(receivableAmount).setScale(4, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | tmpReceivableAmount = MoneyUtil.computePriceScale(tmpReceivableAmount, feeDto.getScale(), Integer.parseInt(feeDto.getDecimalPlace())); |
| | | |
| | | |
| | | |
| | | FeeDetailDto feeDetailDto1 = new FeeDetailDto(); |
| | | feeDetailDto1.setFeeId(fee.getFeeId()); |
| | | List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto1); |
| | | double computedFee = 0; |
| | | for (FeeDetailDto feeDetail : feeDetailDtos) { |
| | | computedFee += Double.parseDouble(feeDetail.getReceivedAmount()) + Double.parseDouble(feeDetail.getDiscountAmount()); |
| | | } |
| | | return tmpReceivableAmount - computedFee; |
| | | } |
| | | |
| | | private double computeFeeByCycle(FeeDto fee,ImportRoomFee importRoomFee) { |
| | | FeeDto feeDto = new FeeDto(); |
| | | feeDto.setFeeId(fee.getFeeId()); |
| | | feeDto.setCommunityId(fee.getCommunityId()); |
| | | List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | if (feeDtos == null || feeDtos.size() != 1) { |
| | | throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "查询费用信息失败,未查到数据或查到多条数据"); |
| | | } |
| | | feeDto = feeDtos.get(0); |
| | | |
| | | double month = (DateUtil.dayCompare( |
| | | DateUtil.getDateFromStringA(importRoomFee.getStartTime()), |
| | | DateUtil.getDateFromStringA(importRoomFee.getEndTime().split(" ")[0] + " 23:59:59") |
| | | )); |
| | | if(feeDto.getFeeFlag().equals(FeeDto.FEE_FLAG_ONCE)){ |
| | | month = 1; |
| | | } |
| | | Map feePriceAll = computeFeeSMOImpl.getFeePrice(feeDto); |
| | | // if(feeDto.getFeeFlag().equals(FeeDto.FEE_FLAG_ONCE)){ |
| | | // return Double.parseDouble(feePriceAll.get("feePrice").toString()); |
| | | // } |
| | | //todo 计算应收 |
| | | BigDecimal receivableAmount = new BigDecimal(feePriceAll.get("feePrice").toString()); |
| | | BigDecimal cycles = new BigDecimal(month); |
| | | double tmpReceivableAmount = cycles.multiply(receivableAmount).setScale(4, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | return MoneyUtil.computePriceScale(tmpReceivableAmount, feeDto.getScale(), Integer.parseInt(feeDto.getDecimalPlace())); |
| | | } |
| | | |
| | | } |