李进 2 rokov pred
rodič
commit
3f56f08a74

+ 6 - 6
device-api-service/src/main/java/com/xy/entity/DeviceQualityValue.java

@@ -34,17 +34,17 @@ public class DeviceQualityValue implements Serializable {
     @ApiModelProperty(value = "质检id")
     private Integer qualityId;
 
-    @ApiModelProperty(value = "交易测试笔数")
-    private Integer tradeStateValue;
+    @ApiModelProperty(value = "交易测试")
+    private String tradeStateValue;
 
-    @ApiModelProperty(value = "门锁次数")
-    private Integer lockerStateValue;
+    @ApiModelProperty(value = "门锁测试值")
+    private String lockerStateValue;
 
     @ApiModelProperty(value = "温度检测值")
     private String tempratureStateValue;
 
-    @ApiModelProperty(value = "模拟批量测试笔数")
-    private Integer imitateTestStateValue;
+    @ApiModelProperty(value = "模拟批量测试")
+    private String imitateTestStateValue;
 
     @ApiModelProperty(value = "软件硬系统值")
     private String systemStateValue;

+ 83 - 10
device-api-service/src/main/java/com/xy/service/DeviceQualityServiceImpl.java

@@ -1,5 +1,8 @@
 package com.xy.service;
 
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -7,12 +10,15 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.collections.list.JArrayList;
 import com.xy.collections.list.JList;
 import com.xy.collections.map.JMap;
+import com.xy.dto.CommandMqtt;
 import com.xy.dto.DeviceQualityDto;
 import com.xy.dto.DeviceQualityValueDto;
+import com.xy.dto.PaterDto;
 import com.xy.entity.DeviceInfo;
 import com.xy.entity.DeviceQuality;
 import com.xy.entity.DeviceQualityValue;
 import com.xy.entity.SysDictRedis;
+import com.xy.error.CommRuntimeException;
 import com.xy.mapper.DeviceInfoMapper;
 import com.xy.mapper.DeviceQualityMapper;
 import com.xy.utils.*;
@@ -22,13 +28,14 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import static com.xy.utils.PlusBeans.*;
 
@@ -49,6 +56,8 @@ public class DeviceQualityServiceImpl extends ServiceImpl<DeviceQualityMapper, D
 
     private DeviceQualityValueServiceImpl deviceQualityValueService;
 
+    private MqttService mqttService;
+
     private void queryDeviceQualityValue(List<DeviceQualityDto.Vo> list) {
         if (Emptys.check(list)) {
             JList<Integer> qualityIds = new JArrayList<>(list).getProperty(DeviceQualityDto.Vo::getQualityId);
@@ -90,7 +99,25 @@ public class DeviceQualityServiceImpl extends ServiceImpl<DeviceQualityMapper, D
         List<DeviceQuality> deviceQualities = list(lambdaQueryWrapper);
         List<DeviceQualityDto.Vo> list = copy(DeviceQualityDto.Vo.class, deviceQualities);
         queryDeviceQualityValue(list);
-        return R.ok(copy(DeviceQualityDto.Vo.class, deviceQualities));
+        return R.ok(list);
+    }
+
+    @PostMapping("obj")
+    @ApiOperation("对象查询")
+    public R<DeviceQualityDto.Vo> obj(@RequestBody DeviceQualityDto.Obj obj) {
+        LambdaQueryWrapper<DeviceQuality> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(obj, DeviceQuality.class).build();
+        List<DeviceQuality> deviceQualities = list(lambdaQueryWrapper);
+        List<DeviceQualityDto.Vo> list = copy(DeviceQualityDto.Vo.class, deviceQualities);
+        if (!Emptys.check(list)) {
+            if (Emptys.check(obj.getDeviceId())) {
+                save(Arrays.asList(new DeviceQualityDto.Save().setDeviceId(obj.getDeviceId())));
+                return obj(obj);
+            }
+            return R.ok();
+        }
+        DeviceQualityDto.Vo vo = copy(DeviceQualityDto.Vo.class, list.get(0));
+        queryDeviceQualityValue(Arrays.asList(vo));
+        return R.ok(vo);
     }
 
     @PostMapping("update")
@@ -114,6 +141,10 @@ public class DeviceQualityServiceImpl extends ServiceImpl<DeviceQualityMapper, D
     @PostMapping("rest")
     @ApiOperation("重置某项质检")
     public R rest(@RequestBody DeviceQualityDto.Rest rest) {
+        SysDictRedis sysDictRedis = SysDictUtils.get(DeviceEnum.MQTT_CMD_TEMPLET_QUALITY.getKey(), rest.getType());
+        if (!Emptys.check(sysDictRedis)) {
+            return R.fail("未配置" + rest.getType() + "指令模板");
+        }
         SysDictRedis sysDictRedis1 = SysDictUtils.get(DeviceEnum.DEVICE_QUALITY_STATUS.getKey(), DeviceSonEnum.DEVICE_QUALITY_STATUS_QUALIFIED.getKey());
         SysDictRedis sysDictRedis2 = SysDictUtils.get(DeviceEnum.DEVICE_FACTORY_STATUS.getKey(), DeviceSonEnum.DEVICE_FACTORY_STATUS_CAN_SHIPPED.getKey());
         DeviceQuality deviceQuality = getById(rest.getQualityId());
@@ -122,8 +153,8 @@ public class DeviceQualityServiceImpl extends ServiceImpl<DeviceQualityMapper, D
         }
         //修改质检
         UpdateWrapper<DeviceQuality> updateWrapper = new UpdateWrapper<DeviceQuality>()
-                .set(rest.getType() + "_begin_time", LocalDateTime.now())
-                .set(rest.getType() + "_end_time", null)
+                .set(rest.getType() + "_state_begin_time", LocalDateTime.now())
+                .set(rest.getType() + "_state_end_time", null)
                 .eq(StringTools.humpToLine(LambdaUtils.getProperty(DeviceQuality::getQualityId)), rest.getQualityId());
         update(updateWrapper);
         //修改质检属性
@@ -131,29 +162,42 @@ public class DeviceQualityServiceImpl extends ServiceImpl<DeviceQualityMapper, D
                 .setType(rest.getType());
         update.setQualityId(rest.getQualityId());
         deviceQualityValueService.update(update);
+        //发送mqtt指令
+        JSONObject obj;
+        try {
+            obj = JSONUtil.parseObj(sysDictRedis.getValue());
+        } catch (Exception e) {
+            return R.ok();
+        }
+        CommandMqtt commandMqtt = new CommandMqtt()
+                .setDeviceId(deviceQuality.getDeviceId())
+                .setTemplet(obj.toString());
+        mqttService.senCommand(Arrays.asList(commandMqtt));
         return R.ok();
     }
 
     @PostMapping("save")
     @ApiOperation("添加")
-    @Transactional(rollbackFor = Exception.class)
-    public R save(@RequestBody List<DeviceQualityDto.Vo> vos) {
+    public R save(@RequestBody List<DeviceQualityDto.Save> deviceQualitySaves) {
         List<DeviceQualityDto.Vo> updates = new ArrayList<>();
         List<DeviceQuality> saves = new ArrayList<>();
-        JList<Long> deviceIds = new JArrayList<>(vos).getProperty(DeviceQualityDto.Vo::getDeviceId);
+        JList<Long> deviceIds = new JArrayList<>(deviceQualitySaves).getProperty(DeviceQualityDto.Save::getDeviceId);
         //获取设备信息
         List<DeviceInfo> deviceInfos = deviceInfoMapper.selectList(new LambdaQueryWrapper<DeviceInfo>().in(DeviceInfo::getDeviceId, deviceIds));
         JMap<Long, DeviceInfo> deviceInfoJMap = new JArrayList<>(deviceInfos).toMap(DeviceInfo::getDeviceId).cover();
         //获取已有质检信息
-        List<DeviceQuality> deviceQualities = list(new LambdaQueryWrapper<DeviceQuality>().in(DeviceQuality::getDeviceId, deviceIds));
+        List<DeviceQuality> deviceQualities = list(new LambdaQueryWrapper<DeviceQuality>()
+                .in(DeviceQuality::getDeviceId, deviceIds)
+                .eq(DeviceQuality::getShowStatus, true)
+        );
         JMap<Long, List<DeviceQuality>> deviceQualitieJMap = new JArrayList<>(deviceQualities).toMap(DeviceQuality::getDeviceId).group();
         LocalDateTime now = LocalDateTime.now();
         //封装修改和添加对象
-        for (DeviceQualityDto.Vo save : vos) {
+        for (DeviceQualityDto.Save save : deviceQualitySaves) {
             DeviceQuality deviceQuality = new DeviceQuality().setDeviceId(save.getDeviceId());
             DeviceInfo deviceInfo = deviceInfoJMap.get(deviceQuality.getDeviceId());
             if (deviceInfo == null) {
-                return R.fail(save.getDeviceId() + "设备不存在");
+                throw new CommRuntimeException(save.getDeviceId() + "设备不存在");
             }
             deviceQuality.setDeviceType(deviceInfo.getDeviceType())
                     .setCreateTime(now)
@@ -182,6 +226,35 @@ public class DeviceQualityServiceImpl extends ServiceImpl<DeviceQualityMapper, D
         List<DeviceQualityValueDto.Vo> deviceQualityValueDtoVos = new ArrayList<>(saves.size());
         saves.forEach(deviceQuality -> deviceQualityValueDtoVos.add(new DeviceQualityValueDto.Vo().setQualityId(deviceQuality.getQualityId())));
         deviceQualityValueService.save(deviceQualityValueDtoVos);
+        //发送mqtt指令
+        Map<String, SysDictRedis> sysDictRedisMap = SysDictUtils.get(DeviceEnum.MQTT_CMD_TEMPLET_QUALITY.getKey());
+        JSONObject jsonObject = new JSONObject();
+        JSONArray jsonArray = new JSONArray();
+        String wkSn = LambdaUtils.getProperty(PaterDto::getWkSn);
+        String actionType = LambdaUtils.getProperty(PaterDto::getActionType);
+        String cmdType = LambdaUtils.getProperty(PaterDto::getCmdType);
+        String data = LambdaUtils.getProperty(PaterDto::getData);
+        sysDictRedisMap.forEach((s, sysDictRedis) -> {
+            JSONObject obj;
+            try {
+                obj = JSONUtil.parseObj(sysDictRedis.getValue());
+            } catch (Exception e) {
+                return;
+            }
+            jsonObject.set(wkSn, obj.get(wkSn))
+                    .set(cmdType, obj.get(cmdType))
+                    .set(actionType, obj.get(actionType));
+            jsonArray.add(obj.get(data));
+        });
+        jsonObject.set(data, jsonArray.toString());
+        List<CommandMqtt> commandMqtts = new ArrayList<>(saves.size());
+        saves.forEach(deviceQuality -> {
+            CommandMqtt commandMqtt = new CommandMqtt()
+                    .setDeviceId(deviceQuality.getDeviceId())
+                    .setTemplet(jsonObject.toString());
+            commandMqtts.add(commandMqtt);
+        });
+        mqttService.senCommand(commandMqtts);
         return R.ok();
     }
 

+ 1 - 1
device-api-service/src/main/java/com/xy/service/DeviceQualityValueServiceImpl.java

@@ -60,7 +60,7 @@ public class DeviceQualityValueServiceImpl extends ServiceImpl<DeviceQualityValu
     public R update(@RequestBody DeviceQualityValueDto.Update update) {
         if (Emptys.check(update.getType())) {
             UpdateWrapper<DeviceQualityValue> updateWrapper = new UpdateWrapper<DeviceQualityValue>()
-                    .set(update.getType() + "_value", null)
+                    .set(update.getType() + "_state_value", null)
                     .eq(StringTools.humpToLine(LambdaUtils.getProperty(DeviceQualityValue::getQualityId)), update.getQualityId());
             update(updateWrapper);
         } else {

+ 29 - 4
device-api-service/src/main/java/com/xy/service/DeviceRegisterServiceImpl.java

@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.collections.list.JArrayList;
+import com.xy.collections.list.JList;
+import com.xy.collections.map.JMap;
 import com.xy.dto.DeviceQualityDto;
 import com.xy.dto.DeviceRegisterDto;
 import com.xy.dto.MqttAclDto;
@@ -94,7 +97,7 @@ public class DeviceRegisterServiceImpl extends ServiceImpl<DeviceRegisterMapper,
         //新增设备-状态
         deviceStatusMapper.insert(new DeviceStatus().setDeviceId(deviceRegister.getDeviceId()));
         //新增设备-质检
-        deviceQualityService.save(Arrays.asList(new DeviceQualityDto.Vo().setDeviceId(deviceRegister.getDeviceId())));
+        deviceQualityService.save(Arrays.asList(new DeviceQualityDto.Save().setDeviceId(deviceRegister.getDeviceId())));
         //新增mqtt信息
         String deviceId = deviceRegister.getDeviceId().toString();
         mqttAclService.save(new MqttAclDto.Save().setClientid(deviceId).setUsername(deviceId));
@@ -110,9 +113,23 @@ public class DeviceRegisterServiceImpl extends ServiceImpl<DeviceRegisterMapper,
                 .le(DeviceRegister::getCreateTime, page.getEndCreateTime())
                 .build()
                 .orderByDesc(!Emptys.check(pageBean.getOrders()), DeviceRegister::getCreateTime);
-        AuthUtils.authByData(lambdaQueryWrapper, DeviceRegister::getCreateUser);
         IPage<DeviceRegister> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
-        return R.ok(toPageBean(DeviceRegisterDto.Vo.class, iPage));
+        PageBean<DeviceRegisterDto.Vo> voPageBean = toPageBean(DeviceRegisterDto.Vo.class, iPage);
+        List<DeviceRegisterDto.Vo> deviceRegisters = voPageBean.getRecords();
+        if (deviceRegisters.size() > 0) {
+            JList<Long> deviceIds = new JArrayList<>(deviceRegisters).getProperty(DeviceRegisterDto.Vo::getDeviceId);
+            List<DeviceQualityDto.Vo> vos = deviceQualityService.list(new DeviceQualityDto.SelectList().setDeviceIds(deviceIds)
+                    .setShowStatus(true)
+            ).getData();
+            JMap<Long, DeviceQualityDto.Vo> map = new JArrayList<>(vos).toMap(DeviceQualityDto.Vo::getDeviceId).cover();
+            for (DeviceRegisterDto.Vo deviceRegister : deviceRegisters) {
+                DeviceQualityDto.Vo vo = map.get(deviceRegister.getDeviceId());
+                if (vo != null) {
+                    deviceRegister.setFactoryState(vo.getFactoryState()).setQualityState(vo.getQualityState());
+                }
+            }
+        }
+        return R.ok(voPageBean);
     }
 
     @PostMapping("obj")
@@ -123,7 +140,15 @@ public class DeviceRegisterServiceImpl extends ServiceImpl<DeviceRegisterMapper,
         if (!Emptys.check(list)) {
             return R.ok();
         }
-        return R.ok(copy(DeviceRegisterDto.Vo.class, list.get(0)));
+        DeviceRegisterDto.Vo deviceRegister = copy(DeviceRegisterDto.Vo.class, list.get(0));
+        DeviceQualityDto.Vo deviceQuality = deviceQualityService.obj(new DeviceQualityDto.Obj()
+                .setDeviceId(deviceRegister.getDeviceId())
+                .setShowStatus(true)
+        ).getData();
+        if (deviceQuality != null) {
+            deviceRegister.setFactoryState(deviceQuality.getFactoryState()).setQualityState(deviceQuality.getQualityState());
+        }
+        return R.ok(deviceRegister);
     }
 
     @PostMapping("list")

+ 2 - 0
device-api-service/src/main/java/com/xy/utils/enums/DeviceEnum.java

@@ -15,6 +15,8 @@ public enum DeviceEnum {
 
     DEVICE_FACTORY_STATUS("device_factory_status", "设备质检-出厂状态"),
 
+    MQTT_CMD_TEMPLET_QUALITY("mqtt_cmd_templet_quality", "mqtt指令-指令模板-质检"),
+
     ;
 
     private String key;

+ 32 - 1
device-api/src/main/java/com/xy/dto/DeviceQualityDto.java

@@ -38,6 +38,9 @@ public class DeviceQualityDto {
         public LocalDateTime getEndUpdateTime() {
             return endUpdateTime == null ? null : endUpdateTime.atTime(23, 59, 59);
         }
+
+        @ApiModelProperty(value = "质检值对象", hidden = true)
+        private DeviceQualityValueDto.Vo deviceQualityValue;
     }
 
     @Data
@@ -58,6 +61,9 @@ public class DeviceQualityDto {
 
         @ApiModelProperty("设备ID")
         private List<Long> deviceIds;
+
+        @ApiModelProperty("显示状态")
+        private Boolean showStatus;
     }
 
     @Data
@@ -69,11 +75,36 @@ public class DeviceQualityDto {
         private Integer qualityId;
 
         @NotBlank(message = "type不能为空")
-        @ApiModelProperty("修改类型")
+        @ApiModelProperty("质检类型")
         private String type;
 
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class Save {
+
+        @ApiModelProperty(value = "设备ID", required = true)
+        private Long deviceId;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Obj {
+
+        @ApiModelProperty("唯一标识")
+        private Integer qualityId;
+
+        @ApiModelProperty("设备ID")
+        private Long deviceId;
+
+        @ApiModelProperty("显示状态")
+        private Boolean showStatus;
+
+        @ApiModelProperty(value = "质检值对象", hidden = true)
+        private DeviceQualityValueDto.Vo deviceQualityValue;
+    }
+
     @Data
     @Accessors(chain = true)
     public static class Vo {

+ 6 - 6
device-api/src/main/java/com/xy/dto/DeviceQualityValueDto.java

@@ -36,17 +36,17 @@ public class DeviceQualityValueDto {
         @ApiModelProperty(value = "质检id")
         private Integer qualityId;
 
-        @ApiModelProperty(value = "交易测试笔数")
-        private Integer tradeStateValue;
+        @ApiModelProperty(value = "交易测试")
+        private String tradeStateValue;
 
-        @ApiModelProperty(value = "门锁次数")
-        private Integer lockerStateValue;
+        @ApiModelProperty(value = "门锁测试值")
+        private String lockerStateValue;
 
         @ApiModelProperty(value = "温度检测值")
         private String tempratureStateValue;
 
-        @ApiModelProperty(value = "模拟批量测试笔数")
-        private Integer imitateTestStateValue;
+        @ApiModelProperty(value = "模拟批量测试")
+        private String imitateTestStateValue;
 
         @ApiModelProperty(value = "软件硬系统值")
         private String systemStateValue;

+ 5 - 2
device-api/src/main/java/com/xy/dto/DeviceRegisterDto.java

@@ -110,8 +110,11 @@ public class DeviceRegisterDto {
         @ApiModelProperty("创建人")
         private Long createUser;
 
-        @ApiModelProperty("设备状态")
-        private Boolean status;
+        @ApiModelProperty("出厂状态")
+        private Integer factoryState;
+
+        @ApiModelProperty("合格状态")
+        private Integer qualityState;
     }
 
 }