|
|
@@ -0,0 +1,259 @@
|
|
|
+package com.java110.job.importData.adapt;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.java110.core.factory.GenerateCodeFactory;
|
|
|
+import com.java110.dto.contract.ContractRoomDto;
|
|
|
+import com.java110.dto.fee.FeeAttrDto;
|
|
|
+import com.java110.dto.fee.FeeDto;
|
|
|
+import com.java110.dto.log.AssetImportLogDetailDto;
|
|
|
+import com.java110.dto.meter.ImportExportMeterWaterDto;
|
|
|
+import com.java110.dto.meter.MeterWaterDto;
|
|
|
+import com.java110.dto.owner.OwnerDto;
|
|
|
+import com.java110.dto.room.RoomDto;
|
|
|
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
|
|
|
+import com.java110.intf.community.IRoomInnerServiceSMO;
|
|
|
+import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
|
|
|
+import com.java110.intf.fee.IFeeInnerServiceSMO;
|
|
|
+import com.java110.intf.fee.IMeterWaterInnerServiceSMO;
|
|
|
+import com.java110.intf.store.IContractRoomInnerServiceSMO;
|
|
|
+import com.java110.intf.user.IOwnerInnerServiceSMO;
|
|
|
+import com.java110.job.importData.DefaultImportData;
|
|
|
+import com.java110.job.importData.IImportDataAdapt;
|
|
|
+import com.java110.po.fee.FeeAttrPo;
|
|
|
+import com.java110.po.fee.PayFeePo;
|
|
|
+import com.java110.po.meter.MeterWaterPo;
|
|
|
+import com.java110.utils.util.Assert;
|
|
|
+import com.java110.utils.util.BeanConvertUtil;
|
|
|
+import com.java110.vo.ResultVo;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Service("importMeterWaterFeeQueueData")
|
|
|
+public class ImportMeterWaterFeeQueueDataAdapt extends DefaultImportData implements IImportDataAdapt {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IMeterWaterInnerServiceSMO meterWaterInnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IContractRoomInnerServiceSMO contractRoomInnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl;
|
|
|
+
|
|
|
+ // @Autowired
|
|
|
+// private IPayFeeMonth payFeeMonthImpl;
|
|
|
+ @Override
|
|
|
+ public void importData(List<AssetImportLogDetailDto> assetImportLogDetailDtos) {
|
|
|
+
|
|
|
+ for (AssetImportLogDetailDto assetImportLogDetailDto : assetImportLogDetailDtos) {
|
|
|
+
|
|
|
+ try {
|
|
|
+ doImportData(assetImportLogDetailDto);
|
|
|
+ updateImportLogDetailState(assetImportLogDetailDto.getDetailId());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ updateImportLogDetailState(assetImportLogDetailDto.getDetailId(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void doImportData(AssetImportLogDetailDto assetImportLogDetailDto) {
|
|
|
+ JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent());
|
|
|
+ ImportExportMeterWaterDto importExportMeterWaterDto = BeanConvertUtil.covertBean(data, ImportExportMeterWaterDto.class);
|
|
|
+
|
|
|
+ String communityId = importExportMeterWaterDto.getCommunityId();
|
|
|
+ String storeId = importExportMeterWaterDto.getStoreId();
|
|
|
+ String configId = importExportMeterWaterDto.getConfigId();
|
|
|
+ String userId = importExportMeterWaterDto.getUserId();
|
|
|
+ String feeTypeCd = importExportMeterWaterDto.getFeeTypeCd();
|
|
|
+ String batchId = importExportMeterWaterDto.getBatchId();
|
|
|
+ String meterType = importExportMeterWaterDto.getMeterType();
|
|
|
+ JSONObject meteWaterJson = null;
|
|
|
+
|
|
|
+ List<PayFeePo> fees = new ArrayList<>();
|
|
|
+ List<MeterWaterPo> meterWaterPos = new ArrayList<>();
|
|
|
+ List<FeeAttrPo> feeAttrPos = new ArrayList<>();
|
|
|
+
|
|
|
+ dealImportExportMeterWater(importExportMeterWaterDto,
|
|
|
+ communityId,
|
|
|
+ storeId,
|
|
|
+ configId,
|
|
|
+ userId,
|
|
|
+ feeTypeCd,
|
|
|
+ fees,
|
|
|
+ meterWaterPos,
|
|
|
+ feeAttrPos,
|
|
|
+ batchId,
|
|
|
+ meterType
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ if (fees.size() < 1 || meterWaterPos.size() < 1) {
|
|
|
+ throw new IllegalArgumentException("批量抄表失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ feeInnerServiceSMOImpl.saveFee(fees);
|
|
|
+
|
|
|
+ if (feeAttrPos.size() > 0) {
|
|
|
+ feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrPos);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ meterWaterInnerServiceSMOImpl.saveMeterWaters(meterWaterPos);
|
|
|
+
|
|
|
+ // todo 这里异步的方式计算 月数据 和欠费数据
|
|
|
+ List<String> feeIds = new ArrayList<>();
|
|
|
+ for (PayFeePo feePo : fees) {
|
|
|
+ feeIds.add(feePo.getFeeId());
|
|
|
+ }
|
|
|
+ // payFeeMonthImpl.doGeneratorFeeMonths(feeIds, fees.get(0).getCommunityId());
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void dealImportExportMeterWater(ImportExportMeterWaterDto importExportMeterWaterDto, String communityId,
|
|
|
+ String storeId, String configId, String userId, String feeTypeCd,
|
|
|
+ List<PayFeePo> fees, List<MeterWaterPo> meterWaterPos, List<FeeAttrPo> feeAttrPos,
|
|
|
+ String batchId, String meterType) {
|
|
|
+
|
|
|
+ RoomDto roomDto = new RoomDto();
|
|
|
+ roomDto.setCommunityId(communityId);
|
|
|
+ roomDto.setFloorNum(importExportMeterWaterDto.getFloorNum());
|
|
|
+ roomDto.setUnitNum(importExportMeterWaterDto.getUnitNum());
|
|
|
+ roomDto.setRoomNum(importExportMeterWaterDto.getRoomNum());
|
|
|
+ List<RoomDto> roomDtos = roomInnerServiceSMOImpl.queryRooms(roomDto);
|
|
|
+
|
|
|
+ Assert.listOnlyOne(roomDtos, "房屋未找到或找到多条" + importExportMeterWaterDto.getFloorNum() + "-" + importExportMeterWaterDto.getUnitNum() + "-" + importExportMeterWaterDto.getRoomNum());
|
|
|
+
|
|
|
+ String roomName = importExportMeterWaterDto.getFloorNum() + "-" + importExportMeterWaterDto.getUnitNum() + "-" + importExportMeterWaterDto.getRoomNum();
|
|
|
+
|
|
|
+ importExportMeterWaterDto.setMeterType(meterType);
|
|
|
+ //查询房屋是否有合同
|
|
|
+ ContractRoomDto contractRoomDto = new ContractRoomDto();
|
|
|
+
|
|
|
+ contractRoomDto.setRoomId(roomDtos.get(0).getRoomId());
|
|
|
+
|
|
|
+ List<ContractRoomDto> contractRoomDtos = contractRoomInnerServiceSMOImpl.queryContractRooms(contractRoomDto);
|
|
|
+
|
|
|
+
|
|
|
+ PayFeePo payFeePo = new PayFeePo();
|
|
|
+ payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId, true));
|
|
|
+ payFeePo.setIncomeObjId(storeId);
|
|
|
+ payFeePo.setAmount("-1");
|
|
|
+ payFeePo.setStartTime(importExportMeterWaterDto.getPreReadingTime());
|
|
|
+ payFeePo.setEndTime(importExportMeterWaterDto.getPreReadingTime());
|
|
|
+ payFeePo.setPayerObjId(roomDtos.get(0).getRoomId());
|
|
|
+ payFeePo.setBatchId(batchId);
|
|
|
+ //payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
|
|
|
+ payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
|
|
|
+
|
|
|
+ if (contractRoomDtos != null && contractRoomDtos.size() > 0) {
|
|
|
+ payFeePo.setPayerObjId(contractRoomDtos.get(0).getContractId());
|
|
|
+ //payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
|
|
|
+ payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CONTRACT);
|
|
|
+ FeeAttrPo feeAttrPo = new FeeAttrPo();
|
|
|
+ feeAttrPo.setCommunityId(communityId);
|
|
|
+ feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
|
|
|
+ feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_IMPORT_FEE_NAME);
|
|
|
+ String feeName = roomName;
|
|
|
+ if ("1010".equals(importExportMeterWaterDto.getMeterType())) {
|
|
|
+ feeName += "水费";
|
|
|
+ } else if ("2020".equals(importExportMeterWaterDto.getMeterType())) {
|
|
|
+ feeName += "电费";
|
|
|
+ } else {
|
|
|
+ feeName += "燃气费";
|
|
|
+ }
|
|
|
+ feeAttrPo.setValue(feeName);
|
|
|
+ feeAttrPo.setFeeId(payFeePo.getFeeId());
|
|
|
+ feeAttrPos.add(feeAttrPo);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //todo 保存房屋名称
|
|
|
+ FeeAttrPo feeAttrPo = new FeeAttrPo();
|
|
|
+ feeAttrPo.setCommunityId(communityId);
|
|
|
+ feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME);
|
|
|
+ feeAttrPo.setValue(roomName);
|
|
|
+ feeAttrPo.setFeeId(payFeePo.getFeeId());
|
|
|
+ feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
|
|
|
+ feeAttrPos.add(feeAttrPo);
|
|
|
+
|
|
|
+ OwnerDto ownerDto = new OwnerDto();
|
|
|
+ ownerDto.setCommunityId(communityId);
|
|
|
+ ownerDto.setRoomId(roomDtos.get(0).getRoomId());
|
|
|
+ List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwnersByRoom(ownerDto);
|
|
|
+
|
|
|
+ if (ownerDtos != null && ownerDtos.size() > 0) {
|
|
|
+ feeAttrPo = new FeeAttrPo();
|
|
|
+ feeAttrPo.setCommunityId(communityId);
|
|
|
+ feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_ID);
|
|
|
+ feeAttrPo.setValue(ownerDtos.get(0).getOwnerId());
|
|
|
+ feeAttrPo.setFeeId(payFeePo.getFeeId());
|
|
|
+ feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
|
|
|
+ feeAttrPos.add(feeAttrPo);
|
|
|
+
|
|
|
+ feeAttrPo = new FeeAttrPo();
|
|
|
+ feeAttrPo.setCommunityId(communityId);
|
|
|
+ feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_LINK);
|
|
|
+ feeAttrPo.setValue(ownerDtos.get(0).getLink());
|
|
|
+ feeAttrPo.setFeeId(payFeePo.getFeeId());
|
|
|
+ feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
|
|
|
+ feeAttrPos.add(feeAttrPo);
|
|
|
+
|
|
|
+ feeAttrPo = new FeeAttrPo();
|
|
|
+ feeAttrPo.setCommunityId(communityId);
|
|
|
+ feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_OWNER_NAME);
|
|
|
+ feeAttrPo.setValue(ownerDtos.get(0).getName());
|
|
|
+ feeAttrPo.setFeeId(payFeePo.getFeeId());
|
|
|
+ feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId, true));
|
|
|
+ feeAttrPos.add(feeAttrPo);
|
|
|
+
|
|
|
+ }
|
|
|
+ payFeePo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
|
|
|
+ payFeePo.setState(FeeDto.STATE_DOING);
|
|
|
+ //todo 如果 当前读数小于等于上期读数
|
|
|
+ //todo 这里注释,本来想着 方便物业再不用去缴费 读数为0 的,结果物业还习惯不了 总以为读数为0 的没有抄表成功,不会去结束费用中查看
|
|
|
+// if (Double.parseDouble(importExportMeterWaterDto.getCurDegrees()) <= Double.parseDouble(importExportMeterWaterDto.getPreDegrees())) {
|
|
|
+// payFeePo.setState(FeeDto.STATE_FINISH);
|
|
|
+// }
|
|
|
+
|
|
|
+ payFeePo.setUserId(userId);
|
|
|
+ payFeePo.setFeeTypeCd(feeTypeCd);
|
|
|
+ payFeePo.setConfigId(configId);
|
|
|
+ payFeePo.setCommunityId(communityId);
|
|
|
+ fees.add(payFeePo);
|
|
|
+
|
|
|
+
|
|
|
+ MeterWaterPo meterWaterPo = new MeterWaterPo();
|
|
|
+ meterWaterPo.setCommunityId(communityId);
|
|
|
+ meterWaterPo.setCurDegrees(importExportMeterWaterDto.getCurDegrees());
|
|
|
+ meterWaterPo.setCurReadingTime(importExportMeterWaterDto.getCurReadingTime());
|
|
|
+ meterWaterPo.setFeeId(payFeePo.getFeeId());
|
|
|
+ meterWaterPo.setMeterType(importExportMeterWaterDto.getMeterType());
|
|
|
+ meterWaterPo.setObjId(roomDtos.get(0).getRoomId());
|
|
|
+ meterWaterPo.setObjName(importExportMeterWaterDto.getFloorNum() + "-" + importExportMeterWaterDto.getUnitNum() + "-" + importExportMeterWaterDto.getRoomNum());
|
|
|
+ meterWaterPo.setObjType(MeterWaterDto.OBJ_TYPE_ROOM);
|
|
|
+ meterWaterPo.setPreDegrees(importExportMeterWaterDto.getPreDegrees());
|
|
|
+ meterWaterPo.setPreReadingTime(importExportMeterWaterDto.getPreReadingTime());
|
|
|
+ meterWaterPo.setWaterId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_waterId, true));
|
|
|
+ meterWaterPo.setRemark(importExportMeterWaterDto.getRemark());
|
|
|
+ meterWaterPo.setPrice(importExportMeterWaterDto.getPrice());
|
|
|
+ meterWaterPos.add(meterWaterPo);
|
|
|
+ }
|
|
|
+}
|