Forráskód Böngészése

优化加入智能水电表厂家

Your Name 3 éve%!(EXTRA string=óta)
szülő
commit
380908e868

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/meterMachine/MeterMachineDto.java

@@ -37,6 +37,8 @@ public class MeterMachineDto extends PageDto implements Serializable {
     private String communityId;
     private String feeConfigId;
 
+    private double rechargeDegree;
+
     private List<MeterMachineSpecDto> specs;
 
 
@@ -221,4 +223,12 @@ public class MeterMachineDto extends PageDto implements Serializable {
     public void setFeeConfigNameLike(String feeConfigNameLike) {
         this.feeConfigNameLike = feeConfigNameLike;
     }
+
+    public double getRechargeDegree() {
+        return rechargeDegree;
+    }
+
+    public void setRechargeDegree(double rechargeDegree) {
+        this.rechargeDegree = rechargeDegree;
+    }
 }

+ 10 - 0
java110-interface/src/main/java/com/java110/intf/common/IMeterMachineV1InnerServiceSMO.java

@@ -18,6 +18,7 @@ package com.java110.intf.common;
 import com.java110.config.feign.FeignConfiguration;
 import com.java110.dto.meterMachine.MeterMachineDto;
 import com.java110.po.meterMachine.MeterMachinePo;
+import com.java110.vo.ResultVo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -65,4 +66,13 @@ public interface IMeterMachineV1InnerServiceSMO {
      */
     @RequestMapping(value = "/queryMeterMachinesCount", method = RequestMethod.POST)
     int queryMeterMachinesCount(@RequestBody MeterMachineDto meterMachineDto);
+
+    /**
+     * 查询<p>小区楼</p>总记录数
+     *
+     * @param meterMachineDto 数据对象分享
+     * @return 小区下的小区楼记录数
+     */
+    @RequestMapping(value = "/reChargeMeterMachines", method = RequestMethod.POST)
+    ResultVo reChargeMeterMachines(@RequestBody MeterMachineDto meterMachineDto);
 }

+ 44 - 0
service-common/src/main/java/com/java110/common/SmartMeter/ISmartMeterFactoryAdapt.java

@@ -0,0 +1,44 @@
+package com.java110.common.SmartMeter;
+
+import com.java110.dto.meterMachine.MeterMachineDto;
+import com.java110.vo.ResultVo;
+
+import java.util.List;
+
+/**
+ * 智能电表 适配器
+ */
+public interface ISmartMeterFactoryAdapt {
+
+    /**
+     * 电表充值
+     *
+     * @param meterMachineDto
+     * @param degree
+     */
+    ResultVo requestRecharge(MeterMachineDto meterMachineDto, double degree);
+
+    /**
+     * 电表读数
+     *
+     * @param meterMachineDto
+     * @return
+     */
+    ResultVo requestRead(MeterMachineDto meterMachineDto);
+
+    /**
+     * 多电表读数
+     *
+     * @param meterMachineDtos
+     * @return
+     */
+    ResultVo requestReads(List<MeterMachineDto> meterMachineDtos);
+
+    /**
+     * 电表通知读取数据
+     *
+     * @param readData
+     * @return
+     */
+    ResultVo notifyReadData(String readData);
+}

+ 36 - 0
service-common/src/main/java/com/java110/common/SmartMeter/factory/common/CommonFactoryAdaptImpl.java

@@ -0,0 +1,36 @@
+package com.java110.common.SmartMeter.factory.common;
+
+import com.java110.common.SmartMeter.ISmartMeterFactoryAdapt;
+import com.java110.dto.meterMachine.MeterMachineDto;
+import com.java110.vo.ResultVo;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/*
+   通用 电表接口类
+
+   推荐其他智能电表实现
+ */
+@Service("commonFactoryAdaptImpl")
+public class CommonFactoryAdaptImpl implements ISmartMeterFactoryAdapt {
+    @Override
+    public ResultVo requestRecharge(MeterMachineDto meterMachineDto, double degree) {
+        return null;
+    }
+
+    @Override
+    public ResultVo requestRead(MeterMachineDto meterMachineDto) {
+        return null;
+    }
+
+    @Override
+    public ResultVo requestReads(List<MeterMachineDto> meterMachineDtos) {
+        return null;
+    }
+
+    @Override
+    public ResultVo notifyReadData(String readData) {
+        return null;
+    }
+}

+ 35 - 0
service-common/src/main/java/com/java110/common/SmartMeter/factory/tqdianbiao/TqDianBiaoFactoryAdaptImpl.java

@@ -0,0 +1,35 @@
+package com.java110.common.SmartMeter.factory.tqdianbiao;
+
+import com.java110.common.SmartMeter.ISmartMeterFactoryAdapt;
+import com.java110.dto.meterMachine.MeterMachineDto;
+import com.java110.vo.ResultVo;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/*
+   拓强智能电表 处理类
+   http://doc-api.tqdianbiao.com/#/api2/6/2/1
+ */
+@Service("tqDianBiaoFactoryAdaptImpl")
+public class TqDianBiaoFactoryAdaptImpl implements ISmartMeterFactoryAdapt {
+    @Override
+    public ResultVo requestRecharge(MeterMachineDto meterMachineDto, double degree) {
+        return null;
+    }
+
+    @Override
+    public ResultVo requestRead(MeterMachineDto meterMachineDto) {
+        return null;
+    }
+
+    @Override
+    public ResultVo requestReads(List<MeterMachineDto> meterMachineDtos) {
+        return null;
+    }
+
+    @Override
+    public ResultVo notifyReadData(String readData) {
+        return null;
+    }
+}

+ 60 - 0
service-common/src/main/java/com/java110/common/cmd/meterMachine/NotifyReadDataCmd.java

@@ -0,0 +1,60 @@
+package com.java110.common.cmd.meterMachine;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.SmartMeter.ISmartMeterFactoryAdapt;
+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.meterMachine.MeterMachineDto;
+import com.java110.dto.meterMachineFactory.MeterMachineFactoryDto;
+import com.java110.intf.common.IMeterMachineFactoryV1InnerServiceSMO;
+import com.java110.intf.common.IMeterMachineV1InnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.text.ParseException;
+import java.util.List;
+
+@Java110Cmd(serviceCode = "meterMachine.notifyReadData")
+public class NotifyReadDataCmd extends Cmd {
+
+    private ISmartMeterFactoryAdapt smartMeterFactoryAdapt;
+
+    @Autowired
+    private IMeterMachineV1InnerServiceSMO meterMachineV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IMeterMachineFactoryV1InnerServiceSMO meterMachineFactoryV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        Assert.hasKeyAndValue(reqJson, "machineId", "未包含设备");
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+
+        MeterMachineDto meterMachineDto = new MeterMachineDto();
+        meterMachineDto.setMachineId(reqJson.getString("machineId"));
+        List<MeterMachineDto> meterMachines = meterMachineV1InnerServiceSMOImpl.queryMeterMachines(meterMachineDto);
+
+        Assert.listOnlyOne(meterMachines,"智能水电表不存在");
+
+
+        MeterMachineFactoryDto meterMachineFactoryDto = new MeterMachineFactoryDto();
+        meterMachineFactoryDto.setFactoryId(meterMachines.get(0).getImplBean());
+        List<MeterMachineFactoryDto> meterMachineFactoryDtos = meterMachineFactoryV1InnerServiceSMOImpl.queryMeterMachineFactorys(meterMachineFactoryDto);
+        Assert.listOnlyOne(meterMachineFactoryDtos,"智能水电表厂家不存在");
+
+        smartMeterFactoryAdapt = ApplicationContextFactory.getBean(meterMachineFactoryDtos.get(0).getBeanImpl(),ISmartMeterFactoryAdapt.class);
+        if(smartMeterFactoryAdapt == null){
+            throw new CmdException("厂家接口未实现");
+        }
+
+        // 通知 厂家适配器数据
+        smartMeterFactoryAdapt.notifyReadData(reqJson.toJSONString());
+    }
+}

+ 27 - 0
service-common/src/main/java/com/java110/common/smo/impl/MeterMachineV1InnerServiceSMOImpl.java

@@ -16,14 +16,21 @@
 package com.java110.common.smo.impl;
 
 
+import com.java110.common.SmartMeter.ISmartMeterFactoryAdapt;
 import com.java110.common.dao.IMeterMachineV1ServiceDao;
+import com.java110.dto.meterMachineFactory.MeterMachineFactoryDto;
+import com.java110.intf.common.IMeterMachineFactoryV1InnerServiceSMO;
 import com.java110.intf.common.IMeterMachineV1InnerServiceSMO;
 import com.java110.dto.meterMachine.MeterMachineDto;
 import com.java110.po.meterMachine.MeterMachinePo;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
 import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.dto.user.UserDto;
 import com.java110.dto.PageDto;
+import com.java110.vo.ResultVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
@@ -45,6 +52,9 @@ public class MeterMachineV1InnerServiceSMOImpl extends BaseServiceSMO implements
     @Autowired
     private IMeterMachineV1ServiceDao meterMachineV1ServiceDaoImpl;
 
+    @Autowired
+    private IMeterMachineFactoryV1InnerServiceSMO meterMachineFactoryV1InnerServiceSMOImpl;
+
 
     @Override
     public int saveMeterMachine(@RequestBody  MeterMachinePo meterMachinePo) {
@@ -86,4 +96,21 @@ public class MeterMachineV1InnerServiceSMOImpl extends BaseServiceSMO implements
     public int queryMeterMachinesCount(@RequestBody MeterMachineDto meterMachineDto) {
         return meterMachineV1ServiceDaoImpl.queryMeterMachinesCount(BeanConvertUtil.beanCovertMap(meterMachineDto));    }
 
+    @Override
+    public ResultVo reChargeMeterMachines(@RequestBody MeterMachineDto meterMachineDto) {
+
+        MeterMachineFactoryDto meterMachineFactoryDto = new MeterMachineFactoryDto();
+        meterMachineFactoryDto.setFactoryId(meterMachineDto.getImplBean());
+        List<MeterMachineFactoryDto> meterMachineFactoryDtos = meterMachineFactoryV1InnerServiceSMOImpl.queryMeterMachineFactorys(meterMachineFactoryDto);
+        Assert.listOnlyOne(meterMachineFactoryDtos,"智能水电表厂家不存在");
+        ISmartMeterFactoryAdapt smartMeterFactoryAdapt = ApplicationContextFactory.getBean(meterMachineFactoryDtos.get(0).getBeanImpl(), ISmartMeterFactoryAdapt.class);
+        if(smartMeterFactoryAdapt == null){
+            throw new CmdException("厂家接口未实现");
+        }
+
+        // 通知 厂家适配器数据
+        ResultVo resultVo = smartMeterFactoryAdapt.requestRecharge(meterMachineDto,meterMachineDto.getRechargeDegree());
+        return resultVo;
+    }
+
 }

+ 139 - 0
service-job/src/main/java/com/java110/job/adapt/payment/smartMeter/SmartMeterAdapt.java

@@ -0,0 +1,139 @@
+package com.java110.job.adapt.payment.smartMeter;
+
+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.core.log.LoggerFactory;
+import com.java110.dto.fee.FeeAttrDto;
+import com.java110.dto.fee.FeeDetailDto;
+import com.java110.dto.fee.FeeDto;
+import com.java110.dto.logSystemError.LogSystemErrorDto;
+import com.java110.dto.meterMachine.MeterMachineDto;
+import com.java110.dto.owner.OwnerDto;
+import com.java110.entity.order.Business;
+import com.java110.intf.common.IMeterMachineV1InnerServiceSMO;
+import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
+import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.job.adapt.DatabusAdaptImpl;
+import com.java110.job.adapt.payment.receipt.PayFeeReceiptAdapt;
+import com.java110.po.fee.PayFeeDetailPo;
+import com.java110.po.feeReceipt.FeeReceiptPo;
+import com.java110.po.feeReceiptDetail.FeeReceiptDetailPo;
+import com.java110.po.logSystemError.LogSystemErrorPo;
+import com.java110.service.smo.ISaveSystemErrorSMO;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.ExceptionUtil;
+import com.java110.utils.util.StringUtil;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 智能水电表充值
+ */
+@Component(value = "smartMeterAdapt")
+public class SmartMeterAdapt extends DatabusAdaptImpl {
+    private static Logger logger = LoggerFactory.getLogger(SmartMeterAdapt.class);
+
+    @Autowired
+    private IFeeDetailInnerServiceSMO feeDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IMeterMachineV1InnerServiceSMO meterMachineV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ISaveSystemErrorSMO saveSystemErrorSMOImpl;
+
+    public void execute(Business business, List<Business> businesses) {
+        JSONObject data = business.getData();
+
+        if (data != null) {
+            logger.debug("请求日志:{}", data);
+        }
+        JSONArray businessPayFeeDetails = null;
+        if (data == null) {
+            FeeDetailDto feeDetailDto = new FeeDetailDto();
+            feeDetailDto.setbId(business.getbId());
+            List<FeeDetailDto> 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);
+            }
+        }
+
+        if (businessPayFeeDetails == null) {
+            return;
+        }
+        for (int bPayFeeDetailIndex = 0; bPayFeeDetailIndex < businessPayFeeDetails.size(); bPayFeeDetailIndex++) {
+            JSONObject businessPayFeeDetail = businessPayFeeDetails.getJSONObject(bPayFeeDetailIndex);
+            doPayFeeDetail(business, businessPayFeeDetail);
+        }
+    }
+
+    private void doPayFeeDetail(Business business, JSONObject businessPayFeeDetail) {
+        try {
+            //查询缴费明细
+            PayFeeDetailPo payFeeDetailPo = BeanConvertUtil.covertBean(businessPayFeeDetail, PayFeeDetailPo.class);
+            FeeDto feeDto = new FeeDto();
+            feeDto.setFeeId(payFeeDetailPo.getFeeId());
+            feeDto.setCommunityId(payFeeDetailPo.getCommunityId());
+            List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+
+            Assert.listOnlyOne(feeDtos, "未查询到费用信息");
+
+            feeDto = feeDtos.get(0);
+
+
+            //判断是否有智能水电表
+            MeterMachineDto meterMachineDto = new MeterMachineDto();
+            meterMachineDto.setFeeConfigId(feeDto.getConfigId());
+            meterMachineDto.setRoomId(feeDto.getPayerObjId());
+            meterMachineDto.setCommunityId(payFeeDetailPo.getCommunityId());
+            List<MeterMachineDto> meterMachineDtos = meterMachineV1InnerServiceSMOImpl.queryMeterMachines(meterMachineDto);
+
+            //没有智能电表
+            if (meterMachineDtos == null || meterMachineDtos.size() < 1) {
+                return;
+            }
+
+            String degree = FeeAttrDto.getFeeAttrValue(feeDto, FeeAttrDto.SPEC_CD_PROXY_CONSUMPTION);
+
+            meterMachineDtos.get(0).setRechargeDegree(Double.parseDouble(degree));
+
+            //智能电表充值
+            meterMachineV1InnerServiceSMOImpl.reChargeMeterMachines(meterMachineDtos.get(0));
+
+        } catch (Exception e) {
+            LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo();
+            logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId));
+            logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_NOTICE);
+            logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e));
+            saveSystemErrorSMOImpl.saveLog(logSystemErrorPo);
+            logger.error("通知异常", e);
+        }
+    }
+}