Jelajahi Sumber

Merge remote-tracking branch 'origin/test' into test

李进 2 tahun lalu
induk
melakukan
2be3389287

+ 10 - 0
device-api-cloud/src/main/java/com/xy/feign/DeviceDataFeign.java

@@ -0,0 +1,10 @@
+package com.xy.feign;
+
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import com.xy.service.DeviceDataService;
+import org.springframework.cloud.openfeign.FeignClient;
+
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface DeviceDataFeign extends DeviceDataService {
+}

+ 17 - 9
device-api-service-merc-mini/src/main/java/com/xy/controller/MercMiniDeviceController.java

@@ -23,10 +23,7 @@ import com.xy.service.be.MercFeignService;
 import com.xy.service.common.MercLineService;
 import com.xy.service.common.MercPlaceService;
 import com.xy.utils.*;
-import com.xy.utils.enums.DeviceActiveStateEnum;
-import com.xy.utils.enums.DeviceAuthCodeUseStatus;
-import com.xy.utils.enums.DeviceNetSateType;
-import com.xy.utils.enums.DictSonEnum;
+import com.xy.utils.enums.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -75,6 +72,7 @@ public class MercMiniDeviceController {
         return deviceInfoService.mercHomeStatistical(dto);
     }
 
+
     @PostMapping("searchPage")
     @ApiOperation("小程序商户设备搜索")
     public R<PageBean<DeviceInfoDto.MerHomeSearchVO>> mercDeviceSearchPage(@RequestBody DeviceInfoDto.Page page) {
@@ -106,6 +104,16 @@ public class MercMiniDeviceController {
             vo.setDistrictName(CollUtil.isEmpty(districtMap) ? StrUtil.EMPTY : districtMap.get(districtId));
             DeviceStatusDto.Vo deviceStatus = vo.getDeviceStatus();
             vo.setNetStateName(deviceStatus == null ? StrUtil.EMPTY : DeviceNetSateType.getEnumByCode(deviceStatus.getNetState()).getDescription());
+
+            Integer deviceStateL = deviceStatus.getDeviceStateL();
+            Integer deviceStateR = deviceStatus.getDeviceStateR();
+            vo.setDeviceStateL(deviceStateL);
+            vo.setDeviceStateR(deviceStateR);
+            DeviceLockState deviceLockStateL = DeviceLockState.getEnumByCode(deviceStateL);
+            DeviceLockState deviceLockStateR = DeviceLockState.getEnumByCode(deviceStateR);
+            vo.setDeviceStateRName(deviceLockStateR == null ? "未知" : deviceLockStateR.getDescription());
+            vo.setDeviceStateLName(deviceLockStateL == null ? "未知" : deviceLockStateL.getDescription());
+
         }
         return R.ok(vo);
     }
@@ -117,7 +125,7 @@ public class MercMiniDeviceController {
         return deviceInfoService.dataCount(dto);
     }
 
-    private R checkDeviceByMerc(DeviceInfo deviceInfo){
+    private R checkDeviceByMerc(DeviceInfo deviceInfo) {
         Long mercId = MercAuthUtils.getMercId();
         //商户是否已通过审核
         MercDto.Vo mercInfo = mercFeignService.obj(new MercDto.ListDTO().setId(mercId)).getData();
@@ -125,7 +133,7 @@ public class MercMiniDeviceController {
             return R.fail("商户未通过审核");
         }
         //设备是否存在
-        if(!Emptys.check(deviceInfo)){
+        if (!Emptys.check(deviceInfo)) {
             return R.fail("机器不存在");
         }
         //机器是否已授权给该商户
@@ -141,7 +149,7 @@ public class MercMiniDeviceController {
 
     @PostMapping("isMerc")
     @ApiOperation("判断设备是否归属商户")
-    public R isMerc(@RequestBody MercMiniDeviceDto.Active active){
+    public R isMerc(@RequestBody MercMiniDeviceDto.Active active) {
         DeviceInfo deviceInfo = deviceInfoService.getById(active.getDeviceId());
         R checkR = this.checkDeviceByMerc(deviceInfo);
         if (checkR.getCode() == R.Enum.SUCCESS.getCode()) {
@@ -171,7 +179,7 @@ public class MercMiniDeviceController {
     @ApiOperation("激活设备")
     public R active(@RequestBody MercMiniDeviceDto.Active active) {
         R activeInfo = this.getActiveInfo(active);
-        if(activeInfo.getCode() == R.Enum.SUCCESS.getCode()){
+        if (activeInfo.getCode() == R.Enum.SUCCESS.getCode()) {
             //激活设备
             DeviceInfo updateDeviceInfo = new DeviceInfo()
                     .setDeviceId(active.getDeviceId())
@@ -181,7 +189,7 @@ public class MercMiniDeviceController {
                     .setShowStatus(true);
             deviceInfoService.updateById(updateDeviceInfo);
             return R.ok();
-        }else{
+        } else {
             return activeInfo;
         }
     }

+ 4 - 0
device-api-service-merc-mini/src/main/java/com/xy/controller/MercMiniDeviceHomePageController.java

@@ -10,6 +10,7 @@ import com.xy.dto.MercMiniDeviceDto;
 import com.xy.dto.OrderRefundDto;
 import com.xy.service.DeviceDataServiceImpl;
 import com.xy.service.OrderRefundService;
+import com.xy.service.OrdersService;
 import com.xy.utils.MercAuthUtils;
 import com.xy.utils.R;
 import io.swagger.annotations.Api;
@@ -35,6 +36,7 @@ public class MercMiniDeviceHomePageController {
 
     private DeviceDataServiceImpl deviceDataService;
     private OrderRefundService refundService;
+    private OrdersService ordersService;
 
     @PostMapping("count")
     @ApiOperation("首页统计")
@@ -73,4 +75,6 @@ public class MercMiniDeviceHomePageController {
         vo.setMonth(month);
         return R.ok(vo);
     }
+
+
 }

+ 5 - 0
device-api-service/src/main/java/com/xy/service/DeviceDataServiceImpl.java

@@ -285,6 +285,11 @@ public class DeviceDataServiceImpl extends ServiceImpl<DeviceDataMapper, DeviceD
         return copy(DeviceDataDto.Vo.class, list);
     }
 
+    @Override
+    public R<List<DeviceDataDto.Vo>> getMercDataOneDay(DeviceDataDto.CountByDay dto) {
+        return R.ok(this.getMercDataOneDay(dto.getMercId(), dto.getDateValue()));
+    }
+
     public static class SaveOrAccum {
 
         public R saveOrAccum(DeviceDataDto.SaveOrAccum saveOrAccum, DeviceDataServiceImpl deviceDataService) {

+ 41 - 33
device-api-service/src/main/java/com/xy/service/DeviceInfoServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.text.StrBuilder;
 import cn.hutool.core.util.BooleanUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -28,10 +29,7 @@ import com.xy.mapper.DeviceInfoMapper;
 import com.xy.mapper.entity.DeviceInfoQueryPage;
 import com.xy.util.ExcelUtils;
 import com.xy.utils.*;
-import com.xy.utils.enums.DeviceActiveStateEnum;
-import com.xy.utils.enums.DeviceNetSateType;
-import com.xy.utils.enums.DictEnum;
-import com.xy.utils.enums.DictSonEnum;
+import com.xy.utils.enums.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import jodd.introspector.MapperFunction;
@@ -531,20 +529,16 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
         mercHomeStatisticalVO.setOnlineNum(onlineNum);
         mercHomeStatisticalVO.setOfflineNum(offlineNum);
 
-
-        //运营、停业
-        Map<Integer, Long> countBusyStateMap = mercDevices.stream().collect(Collectors
-                .groupingBy(DeviceInfo::getBusyState, Collectors.counting()));
-        Integer busyState1 = SysDictUtils.getValue(DictEnum.DEVICE_BUSY_STATUS.getKey(), DictSonEnum.DEVICE_BUSY_STATUS1.getKey(), Integer.class);
-        Integer busyState2 = SysDictUtils.getValue(DictEnum.DEVICE_BUSY_STATUS.getKey(), DictSonEnum.DEVICE_BUSY_STATUS2.getKey(), Integer.class);
-        int operatingNum = countBusyStateMap.get(busyState1) == null ? 0 : countBusyStateMap.get(busyState1).intValue();
-        int closedNum = countBusyStateMap.get(busyState2) == null ? 0 : countBusyStateMap.get(busyState2).intValue();
-        mercHomeStatisticalVO.setOperatingNum(operatingNum);
-        mercHomeStatisticalVO.setClosedNum(closedNum);
-
+        //锁机、未锁机
+        Map<Integer, Long> countLockLstateMap = deviceStatuses.stream().collect(Collectors
+                .groupingBy(DeviceStatus::getLockStateL, Collectors.counting()));
+        int lockLStateNum = countLockLstateMap.get(DeviceLockState.LOCK.getCode()).intValue();
+        int unLockLStateNum = countLockLstateMap.get(DeviceLockState.UN_LOCK.getCode()).intValue();
+        mercHomeStatisticalVO.setOperatingNum(unLockLStateNum);
+        mercHomeStatisticalVO.setClosedNum(lockLStateNum);
         //待补货
-        //TODO: 此逻辑需要确认
-
+        Integer deviceNum = R.feignCheckData(goodsDeviceService.countOutOfStockDevice(new GoodsDeviceDto.CountOutOfStockDevice().setMercId(mercId)));
+        mercHomeStatisticalVO.setNeedToFillNum(deviceNum);
         return R.ok(mercHomeStatisticalVO);
     }
 
@@ -673,7 +667,7 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
         //小程序独有查询字段 缺货状态:stockStatus ,是否查故障设备:fault
         Boolean fault = page.getFault();
         Long mercId = page.getMercId();
-        List<Long> myDeviceIds = page.getDeviceIdList();
+        List<Long> myDeviceIds = page.getMyDeviceIds();
         if (CollUtil.isEmpty(myDeviceIds)) {
             //无设备
             return R.ok(pageData);
@@ -698,32 +692,46 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
             return R.ok(pageData);
         }
         List<DeviceInfoDto.MerHomeSearchVO> merHomeSearchRecords = new ArrayList<>();
-        List<Long> deviceIds = records.stream().map(DeviceInfoDto.Vo2::getDeviceId).collect(Collectors.toList());
-        String type = SysDictUtils.getValue(DictEnum.DEVICE_DATA_TYPE.getKey(), DictSonEnum.DEVICE_DATA_TYPE_DAY.getKey(), String.class);
-        String todayDate = DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN);
-        //查询当天
-        DeviceDataDto.ListDTO dto = new DeviceDataDto.ListDTO()
-                .setDeviceIds(deviceIds).setType(type).setDateValue(Integer.valueOf(todayDate)).setMercId(mercId);
+
         BeanUtil.copyProperties(pageBean, pageData);
-        List<DeviceDataDto.Vo> deviceDataList = deviceDataService.list(dto);
-        if (CollUtil.isNotEmpty(deviceDataList)) {
+        if (CollUtil.isNotEmpty(records)) {
+            List<Long> deviceIds = records.stream().map(DeviceInfoDto.Vo2::getDeviceId).collect(Collectors.toList());
+            String type = SysDictUtils.getValue(DictEnum.DEVICE_DATA_TYPE.getKey(), DictSonEnum.DEVICE_DATA_TYPE_DAY.getKey(), String.class);
+            String todayDate = DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN);
+            //查询当天
+            DeviceDataDto.ListDTO dto = new DeviceDataDto.ListDTO()
+                    .setDeviceIds(deviceIds).setType(type).setDateValue(Integer.valueOf(todayDate)).setMercId(mercId);
+            List<DeviceDataDto.Vo> deviceDataList = deviceDataService.list(dto);
+            Map<Long, DeviceDataDto.Vo> dataMap = MapUtil.newHashMap();
             //统计数据反显
-            Map<Long, DeviceDataDto.Vo> dataMap = deviceDataList.stream().collect(Collectors.toMap(DeviceDataDto.Vo::getDeviceId, d -> d));
-            records.forEach(v -> {
+            if (CollUtil.isNotEmpty(deviceDataList)) {
+                dataMap = deviceDataList.stream().collect(Collectors.toMap(DeviceDataDto.Vo::getDeviceId, d -> d));
+            }
+            for (DeviceInfoDto.Vo2 v : records) {
                 DeviceInfoDto.MerHomeSearchVO merHomeSearchVO = new DeviceInfoDto.MerHomeSearchVO();
                 Long deviceId = v.getDeviceId();
                 DeviceDataDto.Vo vo = dataMap.get(deviceId);
-                //今日订单数
-                v.setDayOrderNum(vo != null ? vo.getSalesCount() : 0);
-                v.setDaySalesPrice(vo != null ? vo.getSalesMoney() : 0);
+                if (vo != null) {
+                    //今日订单数
+                    v.setDayOrderNum(vo != null ? vo.getSalesCount() : 0);
+                    v.setDaySalesPrice(vo != null ? vo.getSalesMoney() : 0);
+                    BeanUtil.copyProperties(vo, merHomeSearchVO);
+                }
                 DeviceSysinfoDto.Vo deviceSysinfo = v.getDeviceSysinfo();
                 DeviceStatusDto.Vo deviceStatus = v.getDeviceStatus();
-                BeanUtil.copyProperties(vo, merHomeSearchVO);
                 merHomeSearchVO.setAppUpmVersion(deviceSysinfo.getAppUpmVersion());
                 merHomeSearchVO.setTempValue(deviceStatus.getTempValue());
                 merHomeSearchVO.setNetDbm(deviceStatus.getNetDbm());
+                Integer deviceStateL = deviceStatus.getDeviceStateL();
+                Integer deviceStateR = deviceStatus.getDeviceStateR();
+                merHomeSearchVO.setDeviceStateL(deviceStateL);
+                merHomeSearchVO.setDeviceStateR(deviceStateR);
+                DeviceLockState deviceLockStateL = DeviceLockState.getEnumByCode(deviceStateL);
+                DeviceLockState deviceLockStateR = DeviceLockState.getEnumByCode(deviceStateR);
+                merHomeSearchVO.setDeviceStateRName(deviceLockStateR == null ? "未知" : deviceLockStateR.getDescription());
+                merHomeSearchVO.setDeviceStateLName(deviceLockStateL == null ? "未知" : deviceLockStateL.getDescription());
                 merHomeSearchRecords.add(merHomeSearchVO);
-            });
+            }
             pageData.setRecords(merHomeSearchRecords);
         }
         return R.ok(pageData);

+ 1 - 1
device-api-service/src/main/resources/mapper/DeviceInfoMapper.xml

@@ -164,7 +164,7 @@
             and LOCATE(#{queryPage.deviceId}, info.device_id) > 0
         </if>
         <if test="queryPage.deviceIdList != null">
-            and device_id IN
+            and info.device_id IN
             <foreach collection="queryPage.deviceIdList" item="deviceId" open="(" close=")" separator=",">
                 #{deviceId}
             </foreach>

+ 29 - 10
device-api/src/main/java/com/xy/dto/DeviceDataDto.java

@@ -25,7 +25,7 @@ public class DeviceDataDto {
 
     @Data
     @Accessors(chain = true)
-    public static class SumCountVo{
+    public static class SumCountVo {
         @ApiModelProperty(value = "营业额;单位分")
         private Integer salesMoney;
 
@@ -47,22 +47,23 @@ public class DeviceDataDto {
         @ApiModelProperty(value = "0元订单笔数")
         private Integer zeroCount;
     }
+
     @Data
     @Accessors(chain = true)
-    public static class SumCountDto{
-        @ApiModelProperty(value = "商户ID",required = true)
+    public static class SumCountDto {
+        @ApiModelProperty(value = "商户ID", required = true)
         private Long mercId;
 
         @NotNull(message = "统计类型不能为空")
-        @ApiModelProperty(value = "统计类型",required = true)
+        @ApiModelProperty(value = "统计类型", required = true)
         private String type;
 
         @NotNull(message = "排序字段不能为空")
-        @ApiModelProperty(value = "排序字段",required = true)
+        @ApiModelProperty(value = "排序字段", required = true)
         private String orderByKey;
 
         @NotNull(message = "排序方式不能为空")
-        @ApiModelProperty(value = "排序方式",required = true)
+        @ApiModelProperty(value = "排序方式", required = true)
         private String orderBy;
 
         @ApiModelProperty("开始时间")
@@ -72,18 +73,19 @@ public class DeviceDataDto {
         private String endDate;
 
         public String getBeginDate() {
-            return StrUtil.replace(beginDate,"-","");
+            return StrUtil.replace(beginDate, "-", "");
         }
+
         public String getEndDate() {
-            return StrUtil.replace(endDate,"-","");
+            return StrUtil.replace(endDate, "-", "");
         }
     }
 
     @Data
     @Accessors(chain = true)
-    public static class SumPageDto extends SumCountDto{
+    public static class SumPageDto extends SumCountDto {
         @NotNull(message = "分页信息不能为空")
-        @ApiModelProperty(value = "分页信息",required = true)
+        @ApiModelProperty(value = "分页信息", required = true)
         private PageBean page;
     }
 
@@ -117,6 +119,7 @@ public class DeviceDataDto {
         @ApiModelProperty(value = "0元订单笔数")
         private Integer zeroCount;
     }
+
     @Data
     @Accessors(chain = true)
     public static class Page extends Vo {
@@ -274,5 +277,21 @@ public class DeviceDataDto {
 
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class CountByDay {
+
+        @ApiModelProperty(value = "设备ID")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+        @ApiModelProperty(value = "日期")
+        private String dateValue;
+
+
+    }
+
 
 }

+ 29 - 2
device-api/src/main/java/com/xy/dto/DeviceInfoDto.java

@@ -238,6 +238,18 @@ public class DeviceInfoDto {
     @Accessors(chain = true)
     public static class Vo {
 
+        @ApiModelProperty("左门锁机状态名称")
+        private String deviceStateLName;
+
+        @ApiModelProperty("右门锁机状态名称")
+        private String deviceStateRName;
+
+        @ApiModelProperty("左门锁机状态,字典类型:devcie_lock_status")
+        private Integer deviceStateL;
+
+
+        @ApiModelProperty("右门锁机状态,字典类型:devcie_lock_status")
+        private Integer deviceStateR;
 
         @ApiModelProperty("设备id")
         private Long deviceId;
@@ -400,6 +412,21 @@ public class DeviceInfoDto {
         private Integer busyState;
 
 
+        @ApiModelProperty("左门锁机状态,字典类型:devcie_lock_status")
+        private Integer deviceStateL;
+
+
+        @ApiModelProperty("右门锁机状态,字典类型:devcie_lock_status")
+        private Integer deviceStateR;
+
+
+        @ApiModelProperty("左门锁机状态名称")
+        private String deviceStateLName;
+
+        @ApiModelProperty("右门锁机状态名称")
+        private String deviceStateRName;
+
+
         @DictFormat(DictConsts.DEVICE_FAULT_LEVEL)
         @ApiModelProperty("故障等级")
         private Integer faultLevel;
@@ -556,10 +583,10 @@ public class DeviceInfoDto {
         @ApiModelProperty(value = "离线设备数")
         private Integer offlineNum;
 
-        @ApiModelProperty(value = "运营设备数")
+        @ApiModelProperty(value = "锁机设备数")
         private Integer operatingNum;
 
-        @ApiModelProperty(value = "停业设备数")
+        @ApiModelProperty(value = "未锁机设备数")
         private Integer closedNum;
 
         @ApiModelProperty(value = "待补货设备数")

+ 50 - 0
device-api/src/main/java/com/xy/dto/MercMiniDeviceDto.java

@@ -1,5 +1,7 @@
 package com.xy.dto;
 
+import cn.hutool.core.date.DateTime;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
@@ -71,6 +73,54 @@ public class MercMiniDeviceDto {
 
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class HomePageDayDTO {
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        private DateTime date;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class HomePageDayVO {
+        @ApiModelProperty(value = "今日收款")
+        private Integer todayReceivedMoney;
+        @ApiModelProperty(value = "今日补收-金额")
+        private Integer todayFillMoney;
+        @ApiModelProperty(value = "今日补收-数量")
+        private Integer todayFillOrderNum;
+
+        @ApiModelProperty(value = "今日补退-金额")
+        private Integer todayHisRefundMoney;
+
+        @ApiModelProperty(value = "今日补退-数量")
+        private Integer todayHisOrderRefundNum;
+
+        @ApiModelProperty(value = "今日退款-金额")
+        private Integer todayOrderRefundMoney;
+
+        @ApiModelProperty(value = "今日退款-数量")
+        private Integer todayOrderRefundNum;
+
+        @ApiModelProperty(value = "今日销售-订单金额")
+        private Integer todayOrderTotalMoney;
+
+        @ApiModelProperty(value = "今日销售-到账金额")
+        private Integer todayOrderRealMoney;
+        @ApiModelProperty(value = "今日销售-数量")
+        private Integer todayOrderNum;
+
+        @ApiModelProperty(value = "风险单-待处理数量")
+        private Integer toDoRiskOrderCount;
+
+        @ApiModelProperty(value = "风险单-今日处理数量")
+        private Integer toDayHandleRiskOrderCount;
+        @ApiModelProperty(value = "风险单-今日新增数量")
+        private Integer toDayNewRiskOrderCount;
+
+
+    }
+
     @Data
     @Accessors(chain = true)
     public static class DayCountVO {

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

@@ -1,6 +1,13 @@
 package com.xy.service;
 
 import com.xy.annotate.RestMappingController;
+import com.xy.dto.DeviceDataDto;
+import com.xy.utils.R;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,6 +19,13 @@ import com.xy.annotate.RestMappingController;
  */
 @RestMappingController("/device-data")
 public interface DeviceDataService {
-
+    /**
+     * 指定查询商户所有设备某天数据
+     *
+     * @param dto
+     * @return
+     */
+    @PostMapping("getByDay")
+    R<List<DeviceDataDto.Vo>> getMercDataOneDay(@RequestBody @Validated DeviceDataDto.CountByDay dto);
 
 }

+ 48 - 0
device-api/src/main/java/com/xy/utils/enums/DeviceLockState.java

@@ -0,0 +1,48 @@
+package com.xy.utils.enums;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.ToString;
+
+/**
+ * 锁机状态 1 未锁机 2 已锁机
+ *
+ * @author 谭斌
+ */
+@Getter
+@ToString
+@AllArgsConstructor
+public enum DeviceLockState {
+
+
+    UN_LOCK(1, "未锁机"),
+    LOCK(2, "已锁机");
+
+    /**
+     * 编码值
+     */
+    private Integer code;
+
+    /**
+     * 描述
+     */
+    private String description;
+
+
+    /**
+     * 通过code获取enum
+     *
+     * @param code
+     * @return
+     */
+    public static DeviceLockState getEnumByCode(Integer code) {
+        DeviceLockState[] values = values();
+        for (DeviceLockState value : values) {
+            if (value.getCode().equals(code)) {
+                return value;
+            }
+        }
+        return null;
+    }
+}