瀏覽代碼

finish smart meter

java110 3 年之前
父節點
當前提交
160f168e8a

+ 12 - 2
java110-db/src/main/resources/mapper/common/MeterMachineV1ServiceDaoImplMapper.xml

@@ -144,10 +144,10 @@
         <if test="feeConfigId !=null and feeConfigId != ''">
             , t.fee_config_id= #{feeConfigId}
         </if>
-        <if test="readDay !=null and readDay != ''">
+        <if test="readDay !=null">
             , t.read_day= #{readDay}
         </if>
-        <if test="readHours !=null and readHours != ''">
+        <if test="readHours !=null ">
             , t.read_hours = #{readHours}
         </if>
         where 1=1
@@ -228,5 +228,15 @@
 
 
     </select>
+    <update id="settingMeterMachineRead" parameterType="Map">
+        update meter_machine t set
+             t.read_day= #{readDay},
+            t.read_hours = #{readHours}
+        where 1=1
+            and t.community_id= #{communityId}
+            and t.machine_model= #{machineModel}
+
+    </update>
+
 
 </mapper>

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

@@ -75,4 +75,10 @@ public interface IMeterMachineV1InnerServiceSMO {
      */
     @RequestMapping(value = "/reChargeMeterMachines", method = RequestMethod.POST)
     ResultVo reChargeMeterMachines(@RequestBody MeterMachineDto meterMachineDto);
+
+    @RequestMapping(value = "/requestReads", method = RequestMethod.POST)
+    ResultVo requestReads(@RequestBody List<MeterMachineDto> meterMachineDtos);
+
+    @RequestMapping(value = "/settingMeterMachineRead", method = RequestMethod.POST)
+    int settingMeterMachineRead(@RequestBody MeterMachinePo meterMachinePo);
 }

+ 88 - 0
service-common/src/main/java/com/java110/common/cmd/meterMachine/SettingMeterMachineReadCmd.java

@@ -0,0 +1,88 @@
+/*
+ * Copyright 2017-2020 吴学文 and java110 team.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.java110.common.cmd.meterMachine;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.annotation.Java110Transactional;
+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.intf.common.IMeterMachineSpecV1InnerServiceSMO;
+import com.java110.intf.common.IMeterMachineV1InnerServiceSMO;
+import com.java110.po.meterMachine.MeterMachinePo;
+import com.java110.po.meterMachineSpec.MeterMachineSpecPo;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.vo.ResultVo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * 类表述:设置抄表读表时间
+ * 服务编码:meterMachine.updateMeterMachine
+ * 请求路劲:/app/meterMachine.UpdateMeterMachine
+ * add by 吴学文 at 2023-02-22 22:32:13 mail: 928255095@qq.com
+ * open source address: https://gitee.com/wuxw7/MicroCommunity
+ * 官网:http://www.homecommunity.cn
+ * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
+ * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
+ */
+@Java110Cmd(serviceCode = "meterMachine.settingMeterMachineRead")
+public class SettingMeterMachineReadCmd extends Cmd {
+
+    private static Logger logger = LoggerFactory.getLogger(SettingMeterMachineReadCmd.class);
+
+
+    @Autowired
+    private IMeterMachineV1InnerServiceSMO meterMachineV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IMeterMachineSpecV1InnerServiceSMO meterMachineSpecV1InnerServiceSMOImpl;
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) {
+        Assert.hasKeyAndValue(reqJson, "communityId", "communityId不能为空");
+        Assert.hasKeyAndValue(reqJson, "readDay", "抄表日不能为空");
+        Assert.hasKeyAndValue(reqJson, "readHours", "抄表时不能为空");
+
+
+    }
+
+    @Override
+    @Java110Transactional
+    public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
+
+        MeterMachinePo meterMachinePo = new MeterMachinePo();
+        meterMachinePo.setReadHours(reqJson.getIntValue("readDay"));
+        meterMachinePo.setReadHours(reqJson.getIntValue("readHours"));
+        meterMachinePo.setCommunityId(reqJson.getString("communityId"));
+        meterMachinePo.setMachineModel(MeterMachineDto.MACHINE_MODEL_READ);
+
+        int flag = meterMachineV1InnerServiceSMOImpl.settingMeterMachineRead(meterMachinePo);
+
+        if (flag < 1) {
+            throw new CmdException("更新数据失败");
+        }
+
+        cmdDataFlowContext.setResponseEntity(ResultVo.success());
+    }
+}

+ 1 - 0
service-common/src/main/java/com/java110/common/dao/IMeterMachineV1ServiceDao.java

@@ -74,4 +74,5 @@ public interface IMeterMachineV1ServiceDao {
      */
     int queryMeterMachinesCount(Map info);
 
+    int settingMeterMachineRead(Map info);
 }

+ 9 - 0
service-common/src/main/java/com/java110/common/dao/impl/MeterMachineV1ServiceDaoImpl.java

@@ -109,5 +109,14 @@ public class MeterMachineV1ServiceDaoImpl extends BaseServiceDao implements IMet
         return Integer.parseInt(businessMeterMachineInfos.get(0).get("count").toString());
     }
 
+    @Override
+    public int settingMeterMachineRead(Map info) {
+        logger.debug("修改 settingMeterMachineRead 入参 info : {}", info);
+
+        int saveFlag = sqlSessionTemplate.update("meterMachineV1ServiceDaoImpl.settingMeterMachineRead", info);
+
+        return saveFlag;
+    }
+
 
 }

+ 67 - 13
service-common/src/main/java/com/java110/common/smo/impl/MeterMachineV1InnerServiceSMOImpl.java

@@ -18,7 +18,9 @@ package com.java110.common.smo.impl;
 
 import com.java110.common.SmartMeter.ISmartMeterFactoryAdapt;
 import com.java110.common.dao.IMeterMachineV1ServiceDao;
+import com.java110.core.log.LoggerFactory;
 import com.java110.dto.meterMachineFactory.MeterMachineFactoryDto;
+import com.java110.dto.storeOrderCart.StoreOrderCartDto;
 import com.java110.intf.common.IMeterMachineFactoryV1InnerServiceSMO;
 import com.java110.intf.common.IMeterMachineV1InnerServiceSMO;
 import com.java110.dto.meterMachine.MeterMachineDto;
@@ -30,13 +32,17 @@ 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.utils.util.StringUtil;
 import com.java110.vo.ResultVo;
+import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 类表述: 服务之前调用的接口实现类,不对外提供接口能力 只用于接口建调用
@@ -49,6 +55,8 @@ import java.util.List;
 @RestController
 public class MeterMachineV1InnerServiceSMOImpl extends BaseServiceSMO implements IMeterMachineV1InnerServiceSMO {
 
+   private Logger logger = LoggerFactory.getLogger(MeterMachineV1InnerServiceSMOImpl.class);
+
     @Autowired
     private IMeterMachineV1ServiceDao meterMachineV1ServiceDaoImpl;
 
@@ -57,26 +65,26 @@ public class MeterMachineV1InnerServiceSMOImpl extends BaseServiceSMO implements
 
 
     @Override
-    public int saveMeterMachine(@RequestBody  MeterMachinePo meterMachinePo) {
+    public int saveMeterMachine(@RequestBody MeterMachinePo meterMachinePo) {
         int saveFlag = meterMachineV1ServiceDaoImpl.saveMeterMachineInfo(BeanConvertUtil.beanCovertMap(meterMachinePo));
         return saveFlag;
     }
 
-     @Override
-    public int updateMeterMachine(@RequestBody  MeterMachinePo meterMachinePo) {
+    @Override
+    public int updateMeterMachine(@RequestBody MeterMachinePo meterMachinePo) {
         int saveFlag = meterMachineV1ServiceDaoImpl.updateMeterMachineInfo(BeanConvertUtil.beanCovertMap(meterMachinePo));
         return saveFlag;
     }
 
-     @Override
-    public int deleteMeterMachine(@RequestBody  MeterMachinePo meterMachinePo) {
-       meterMachinePo.setStatusCd("1");
-       int saveFlag = meterMachineV1ServiceDaoImpl.updateMeterMachineInfo(BeanConvertUtil.beanCovertMap(meterMachinePo));
-       return saveFlag;
+    @Override
+    public int deleteMeterMachine(@RequestBody MeterMachinePo meterMachinePo) {
+        meterMachinePo.setStatusCd("1");
+        int saveFlag = meterMachineV1ServiceDaoImpl.updateMeterMachineInfo(BeanConvertUtil.beanCovertMap(meterMachinePo));
+        return saveFlag;
     }
 
     @Override
-    public List<MeterMachineDto> queryMeterMachines(@RequestBody  MeterMachineDto meterMachineDto) {
+    public List<MeterMachineDto> queryMeterMachines(@RequestBody MeterMachineDto meterMachineDto) {
 
         //校验是否传了 分页信息
 
@@ -94,7 +102,8 @@ public class MeterMachineV1InnerServiceSMOImpl extends BaseServiceSMO implements
 
     @Override
     public int queryMeterMachinesCount(@RequestBody MeterMachineDto meterMachineDto) {
-        return meterMachineV1ServiceDaoImpl.queryMeterMachinesCount(BeanConvertUtil.beanCovertMap(meterMachineDto));    }
+        return meterMachineV1ServiceDaoImpl.queryMeterMachinesCount(BeanConvertUtil.beanCovertMap(meterMachineDto));
+    }
 
     @Override
     public ResultVo reChargeMeterMachines(@RequestBody MeterMachineDto meterMachineDto) {
@@ -102,15 +111,60 @@ public class MeterMachineV1InnerServiceSMOImpl extends BaseServiceSMO implements
         MeterMachineFactoryDto meterMachineFactoryDto = new MeterMachineFactoryDto();
         meterMachineFactoryDto.setFactoryId(meterMachineDto.getImplBean());
         List<MeterMachineFactoryDto> meterMachineFactoryDtos = meterMachineFactoryV1InnerServiceSMOImpl.queryMeterMachineFactorys(meterMachineFactoryDto);
-        Assert.listOnlyOne(meterMachineFactoryDtos,"智能水电表厂家不存在");
+        Assert.listOnlyOne(meterMachineFactoryDtos, "智能水电表厂家不存在");
         ISmartMeterFactoryAdapt smartMeterFactoryAdapt = ApplicationContextFactory.getBean(meterMachineFactoryDtos.get(0).getBeanImpl(), ISmartMeterFactoryAdapt.class);
-        if(smartMeterFactoryAdapt == null){
+        if (smartMeterFactoryAdapt == null) {
             throw new CmdException("厂家接口未实现");
         }
 
         // 通知 厂家适配器数据
-        ResultVo resultVo = smartMeterFactoryAdapt.requestRecharge(meterMachineDto,meterMachineDto.getRechargeDegree());
+        ResultVo resultVo = smartMeterFactoryAdapt.requestRecharge(meterMachineDto, meterMachineDto.getRechargeDegree());
         return resultVo;
     }
 
+    @Override
+    public ResultVo requestReads(@RequestBody List<MeterMachineDto> meterMachineDtos) {
+
+        Map<String, List<MeterMachineDto>> maps = new HashMap<>();
+
+        List<MeterMachineDto> tmpMeterMachineDtos = null;
+
+        for (MeterMachineDto meterMachineDto : meterMachineDtos) {
+            if (StringUtil.isEmpty(meterMachineDto.getImplBean())) {
+                continue;
+            }
+            if (maps.containsKey(meterMachineDto.getImplBean())) {
+                tmpMeterMachineDtos = maps.get(meterMachineDto.getImplBean());
+                tmpMeterMachineDtos.add(meterMachineDto);
+                continue;
+            }
+            tmpMeterMachineDtos = new ArrayList<>();
+            tmpMeterMachineDtos.add(meterMachineDto);
+            maps.put(meterMachineDto.getImplBean(), tmpMeterMachineDtos);
+        }
+
+        for (String implBean : maps.keySet()) {
+
+            MeterMachineFactoryDto meterMachineFactoryDto = new MeterMachineFactoryDto();
+            meterMachineFactoryDto.setFactoryId(implBean);
+            List<MeterMachineFactoryDto> meterMachineFactoryDtos = meterMachineFactoryV1InnerServiceSMOImpl.queryMeterMachineFactorys(meterMachineFactoryDto);
+            Assert.listOnlyOne(meterMachineFactoryDtos, "智能水电表厂家不存在");
+            ISmartMeterFactoryAdapt smartMeterFactoryAdapt = ApplicationContextFactory.getBean(meterMachineFactoryDtos.get(0).getBeanImpl(), ISmartMeterFactoryAdapt.class);
+            if (smartMeterFactoryAdapt == null) {
+                continue;
+            }
+            ResultVo resultVo = smartMeterFactoryAdapt.requestReads(maps.get(implBean));
+            logger.debug("抄表返回,{}",resultVo.toString());
+        }
+
+        return new ResultVo(ResultVo.CODE_OK,ResultVo.MSG_OK);
+    }
+
+    @Override
+    public int settingMeterMachineRead(@RequestBody MeterMachinePo meterMachinePo) {
+        int saveFlag = meterMachineV1ServiceDaoImpl.settingMeterMachineRead(BeanConvertUtil.beanCovertMap(meterMachinePo));
+        return saveFlag;
+    }
+
+
 }

+ 110 - 0
service-job/src/main/java/com/java110/job/task/smartWeter/SmartWeterReadDegreeTaskTemplate.java

@@ -0,0 +1,110 @@
+package com.java110.job.task.smartWeter;
+
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.attendanceClasses.AttendanceClassesDto;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDetailDto;
+import com.java110.dto.attendanceClasses.AttendanceClassesTaskDto;
+import com.java110.dto.attendanceClassesStaff.AttendanceClassesStaffDto;
+import com.java110.dto.community.CommunityDto;
+import com.java110.dto.meterMachine.MeterMachineDto;
+import com.java110.dto.scheduleClassesStaff.ScheduleClassesStaffDto;
+import com.java110.dto.scheduleClassesTime.ScheduleClassesTimeDto;
+import com.java110.dto.store.StoreDto;
+import com.java110.dto.task.TaskDto;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.common.IAttendanceClassesInnerServiceSMO;
+import com.java110.intf.common.IAttendanceClassesTaskDetailInnerServiceSMO;
+import com.java110.intf.common.IAttendanceClassesTaskInnerServiceSMO;
+import com.java110.intf.common.IMeterMachineV1InnerServiceSMO;
+import com.java110.intf.store.IOrgStaffRelV1InnerServiceSMO;
+import com.java110.intf.store.IScheduleClassesStaffV1InnerServiceSMO;
+import com.java110.intf.store.IStoreV1InnerServiceSMO;
+import com.java110.intf.user.IAttendanceClassesStaffV1InnerServiceSMO;
+import com.java110.intf.user.IUserV1InnerServiceSMO;
+import com.java110.job.quartz.TaskSystemQuartz;
+import com.java110.po.attendanceClassesTask.AttendanceClassesTaskPo;
+import com.java110.po.attendanceClassesTaskDetail.AttendanceClassesTaskDetailPo;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import io.micrometer.core.instrument.Meter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.net.SocketTimeoutException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * 智能电表远程抄表
+ * <p>
+ * 执行最小单位不能小于一个小时
+ */
+@Component
+public class SmartWeterReadDegreeTaskTemplate extends TaskSystemQuartz {
+
+    @Autowired
+    private IMeterMachineV1InnerServiceSMO meterMachineV1InnerServiceSMOImpl;
+
+
+    @Override
+    protected void process(TaskDto taskDto) throws Exception {
+        // 获取小区
+        List<CommunityDto> communityDtos = getAllCommunity();
+
+        for (CommunityDto communityDto : communityDtos) {
+            try {
+                doReadDegree(taskDto, communityDto);
+            } catch (Exception e) {
+                logger.error("生成月报表 失败", e);
+            }
+        }
+
+    }
+
+    /**
+     * 考勤任务
+     *
+     * @param taskDto
+     */
+    private void doReadDegree(TaskDto taskDto, CommunityDto communityDto) {
+
+        MeterMachineDto meterMachineDto = new MeterMachineDto();
+        meterMachineDto.setCommunityId(communityDto.getCommunityId());
+        List<MeterMachineDto> meterMachineDtos = meterMachineV1InnerServiceSMOImpl.queryMeterMachines(meterMachineDto);
+
+        if (meterMachineDtos == null || meterMachineDtos.size() < 1) {
+            return;
+        }
+
+        List<MeterMachineDto> tmpMeterMachineDtos = new ArrayList<>();
+        Calendar calendar = Calendar.getInstance();
+        int day = calendar.get(Calendar.DAY_OF_MONTH);
+
+        int hours = calendar.get(Calendar.HOUR);
+
+        for (MeterMachineDto tmpMeterMachineDto : meterMachineDtos) {
+            if (MeterMachineDto.MACHINE_MODEL_READ.equals(tmpMeterMachineDto.getMachineModel())) {
+                tmpMeterMachineDtos.add(tmpMeterMachineDto);
+                continue;
+            }
+
+            if (day == tmpMeterMachineDto.getReadDay() && hours == tmpMeterMachineDto.getReadHours()) {
+                tmpMeterMachineDtos.add(tmpMeterMachineDto);
+            }
+        }
+
+        if (tmpMeterMachineDtos.size() < 1) {
+            return;
+        }
+
+        try {
+            meterMachineV1InnerServiceSMOImpl.requestReads(tmpMeterMachineDtos);
+        } catch (Exception e) {
+            logger.error("抄表失败", e);
+
+        }
+    }
+}