| | |
| | | package org.jeecg.modules.dry.controller; |
| | | |
| | | |
| | | import ai.djl.modality.Classifications; |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.eclipse.paho.client.mqttv3.MqttException; |
| | | import org.eclipse.paho.client.mqttv3.MqttMessage; |
| | | import org.jeecg.common.api.vo.Result; |
| | | |
| | | import org.jeecg.modules.dry.entity.DryHerbInfo; |
| | | import org.jeecg.common.constant.MqttConstant; |
| | | import org.jeecg.common.util.IpUtils; |
| | | import org.jeecg.common.util.SpringContextUtils; |
| | | import org.jeecg.modules.dry.entity.*; |
| | | import org.jeecg.modules.dry.mqtt.MqttConfig; |
| | | import org.jeecg.modules.dry.mqtt.MqttUtil; |
| | | import org.jeecg.modules.dry.service.*; |
| | | |
| | | //import org.jeecg.modules.dry.util.HerbUtil; |
| | | import org.jeecg.modules.dry.vo.CommandMessageVo; |
| | | import org.jeecg.modules.dry.vo.DryHerbInfoVo; |
| | | import org.jeecg.modules.dry.vo.RealTimeDataVo; |
| | | import org.jeecg.modules.dry.vo.*; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import java.io.InputStream; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.xml.bind.JAXBContext; |
| | | import javax.xml.bind.JAXBException; |
| | | import javax.xml.bind.Marshaller; |
| | | import java.io.StringWriter; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | |
| | | @Api(tags = "实时数据处理控制器") |
| | |
| | | @Autowired |
| | | private IDryRealTimeDataService dryRealTimeDataService; |
| | | |
| | | @Autowired |
| | | private IDryHerbFormulaService dryHerbFormulaService; |
| | | |
| | | @Autowired |
| | | private IDryHerbInfoService dryHerbInfoService; |
| | | |
| | | @Autowired |
| | | private IDryEqpTypeService dryEqpTypeService; |
| | | |
| | | // @Autowired |
| | | // private HerbUtil herbUtil; |
| | | |
| | | @Autowired |
| | | private MqttUtil mqttUtil; |
| | | |
| | | @Autowired |
| | | private MqttConfig mqttConfig; |
| | | |
| | | @Autowired |
| | | private IDryHerbInfoService herbInfoService; |
| | | |
| | | @Autowired |
| | | private IDryHerbFormulaHisService dryHerbFormulaHisService; |
| | | |
| | | @Autowired |
| | | private IDryEquipmentService dryEquipmentService; |
| | | |
| | | |
| | | |
| | | @ApiOperation(value="测试", notes="返回Hello") |
| | |
| | | |
| | | @ApiOperation(value="接收实时数据Json", notes="设备实时数据上传") |
| | | @PostMapping("/sendRealTimeDataJson") |
| | | public Result<?> realTimeDataJson(@RequestBody RealTimeDataVo realTimeDataVo) { |
| | | public Result<?> realTimeDataJson(@RequestBody RealTimeDataVo realTimeDataVo) { |
| | | try { |
| | | if (mqttConfig.isEnable() && "user".equals(mqttConfig.getRole())){ |
| | | MqttMessage mqttMessage = new MqttMessage(); |
| | | mqttMessage.setQos(0); |
| | | mqttMessage.setPayload(JSONObject.toJSONString(realTimeDataVo).getBytes()); |
| | | mqttUtil.getMqttClient().publish(MqttConstant.TENANT_UP_PREFIX_REALTIME_DATA,mqttMessage); |
| | | //处理故障信息 |
| | | dryRealTimeDataService.fitFaultRecord(realTimeDataVo); |
| | | } |
| | | |
| | | if ("user".equals(mqttConfig.getRole())){ |
| | | //处理故障信息 |
| | | dryRealTimeDataService.fitFaultRecord(realTimeDataVo); |
| | | } |
| | | |
| | | } catch (MqttException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return dryRealTimeDataService.realTimeDataHandle(realTimeDataVo); |
| | | } |
| | | |
| | |
| | | // } |
| | | // } |
| | | |
| | | /** |
| | | * 根据设备和租户查询该设备类型的干燥配方,将配方转成xml格式,以字符串方式返回 |
| | | * @param tenantId |
| | | * @param eqpCode |
| | | * @return |
| | | * @throws JAXBException |
| | | */ |
| | | @ApiOperation(value="干燥配方获取", notes="干燥配方下发") |
| | | @GetMapping(value = "/queryFormula") |
| | | public Result<String> queryFormulaByEqpType(Integer tenantId, String eqpCode) throws JAXBException { |
| | | //获取request |
| | | HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); |
| | | // 获取请求主机的IP地址 |
| | | String ip = IpUtils.getIpAddr(request); |
| | | DryEquipment dryEquipment = dryEquipmentService.selectByTenantIdEquipmentId(tenantId+ "", eqpCode); |
| | | if (dryEquipment != null) { |
| | | if (dryEquipment.getIp().equals(ip)) { |
| | | } else { |
| | | return Result.error("设备IP地址未配置:" + ip); |
| | | } |
| | | } else { |
| | | return Result.error("设备不存在"); |
| | | } |
| | | LambdaQueryWrapper<DryHerbFormula> queryWrapper = new LambdaQueryWrapper<DryHerbFormula>(); |
| | | queryWrapper.eq(DryHerbFormula::getEqpType, dryEquipment.getType()) |
| | | .eq(DryHerbFormula::getTenantId, tenantId); |
| | | List<DryHerbFormula> list = dryHerbFormulaService.list(queryWrapper); |
| | | Formulas formulas = new Formulas(); |
| | | list.forEach(item -> { |
| | | DryHerbInfo byId = dryHerbInfoService.getById(item.getHerbId()); |
| | | if (byId!=null) { |
| | | item.setPinyin(byId.getPinyin()); |
| | | item.setName(byId.getName()); |
| | | } |
| | | Formula formula = new Formula(); |
| | | BaseParam baseParam = new BaseParam(); |
| | | WaterParam waterParam = new WaterParam(); |
| | | TypeParam typeParam = new TypeParam(); |
| | | OffsetParam offsetParam = new OffsetParam(); |
| | | baseParam.setCode(item.getCode()); |
| | | baseParam.setIndex(item.getCode()); |
| | | baseParam.setName(item.getName()); |
| | | baseParam.setAb(item.getName()); |
| | | baseParam.setTyp(item.getCategory()); |
| | | waterParam.setDelay(Double.valueOf(item.getDelay())); |
| | | waterParam.setMoisture3(item.getTarget()); |
| | | waterParam.setWeight1(Double.valueOf(item.getFeed())); |
| | | waterParam.setTimes(item.getEt()); |
| | | waterParam.setTemp1(item.getWindTemp()); |
| | | waterParam.setTemp2(item.getEnvTemp()); |
| | | waterParam.setTemp3(item.getEnvHum()); |
| | | waterParam.setTurntime(item.getTurn()); |
| | | typeParam.setMtype(Integer.valueOf(item.getCategory())); |
| | | offsetParam.setMoisoffset(item.getMoisOffset()); |
| | | offsetParam.setColdwind(Double.valueOf(item.getCoolingDuration())); |
| | | |
| | | formula.setBaseParam(baseParam); |
| | | formula.setWaterParam(waterParam); |
| | | formula.setTypeParam(typeParam); |
| | | formula.setOffsetParam(offsetParam); |
| | | formulas.getDryFormulaList().add(formula); |
| | | }); |
| | | // 把vos转换成xml |
| | | // 创建JAXBContext实例 |
| | | JAXBContext jaxbContext = JAXBContext.newInstance(Formulas.class); |
| | | |
| | | // 创建Marshaller实例 |
| | | Marshaller marshaller = jaxbContext.createMarshaller(); |
| | | |
| | | // 设置是否格式化输出 |
| | | marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false); |
| | | |
| | | // 将对象序列化到字符串 |
| | | StringWriter writer = new StringWriter(); |
| | | marshaller.marshal(formulas, writer); |
| | | |
| | | return Result.OK("请求成功",writer.toString()); |
| | | |
| | | |
| | | } |
| | | |
| | | @ApiOperation(value="干燥配方上报", notes="干燥配方记录上报") |
| | | @PostMapping(value = "/sendFormulaHistory") |
| | | public Result<?> sendFormulaHistory(DryHerbFormulaHisVo hisVo) { |
| | | //获取request |
| | | HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); |
| | | // 获取请求主机的IP地址 |
| | | String ip = IpUtils.getIpAddr(request); |
| | | DryHerbFormulaHis his = new DryHerbFormulaHis(); |
| | | BeanUtil.copyProperties(hisVo, his); |
| | | his.setFormulaIndex(hisVo.getIndex()); |
| | | DryEquipment dryEquipment = dryEquipmentService.selectByTenantIdEquipmentId(hisVo.getTenantId() + "", hisVo.getEqp()); |
| | | if (dryEquipment != null) { |
| | | if (dryEquipment.getIp().equals(ip)) { |
| | | his.setEqpId(dryEquipment.getId()); |
| | | } else { |
| | | return Result.error("设备IP地址未配置:" + ip); |
| | | } |
| | | |
| | | } else { |
| | | return Result.error("设备不存在"); |
| | | } |
| | | dryHerbFormulaHisService.save(his); |
| | | return Result.OK("保存成功"); |
| | | } |
| | | |
| | | } |