diff --git a/src/main/java/com/glxp/udidl/admin/controller/device/ProductInfoController.java b/src/main/java/com/glxp/udidl/admin/controller/device/ProductInfoController.java
index c256b8b..a00389f 100644
--- a/src/main/java/com/glxp/udidl/admin/controller/device/ProductInfoController.java
+++ b/src/main/java/com/glxp/udidl/admin/controller/device/ProductInfoController.java
@@ -1,5 +1,6 @@
 package com.glxp.udidl.admin.controller.device;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.github.pagehelper.PageInfo;
 import com.glxp.udidl.admin.annotation.AuthRuleAnnotation;
@@ -13,10 +14,12 @@ import com.glxp.udidl.admin.req.UdiCompanyRequest;
 import com.glxp.udidl.admin.res.BaseResponse;
 import com.glxp.udidl.admin.res.PageSimpleResponse;
 import com.glxp.udidl.admin.res.udid.ProductInfoResponse;
+import com.glxp.udidl.admin.res.udid.VailUdiReponse;
 import com.glxp.udidl.admin.service.inout.ProductInfoService;
 import com.glxp.udidl.admin.service.udi.UdiCompanyService;
 import com.glxp.udidl.admin.util.BeanUtils;
 import com.glxp.udidl.admin.util.FilterUdiUtils;
+import com.glxp.udidl.admin.util.RedisUtil;
 import com.glxp.udidl.admin.util.ResultVOUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -39,12 +42,15 @@ public class ProductInfoController {
     ProductInfoService productInfoService;
     @Resource
     UdiCompanyService udiCompanyService;
+    @Resource
+    RedisUtil redisUtil;
 
     //手持枪扫码查询
     @ApiOperation(value = "手持枪扫码查询", response = ProductInfoEntity.class)
     @AuthRuleAnnotation("udidl/device/findBydi")
     @ApiImplicitParams({@ApiImplicitParam(name = "nameCode", value = "UDI码", required = true)})
     @GetMapping("udidl/device/findBydi")
+
     public BaseResponse findProductInfo(String nameCode) {
         ProductInfoFilterRequest productInfoFilterRequest = new ProductInfoFilterRequest();
         String key = nameCode;
@@ -131,7 +137,7 @@ public class ProductInfoController {
     @GetMapping("udidl/udiwms/syncUdi")
     public BaseResponse syncUdi(SyncUdiRequest syncUdiRequest) {
         ProductInfoFilterRequest productInfoFilterRequest = new ProductInfoFilterRequest();
-        BeanUtils.copyProperties(productInfoFilterRequest, syncUdiRequest);
+        BeanUtils.copyProperties(syncUdiRequest, productInfoFilterRequest);
         if (productInfoFilterRequest.getPage() == null || productInfoFilterRequest.getLimit() == null)
             return ResultVOUtils.error(500, "分页参数不能为空");
         List<ProductInfoEntity> productInfoEntityList = productInfoService.syncDlUdi(productInfoFilterRequest);
@@ -200,6 +206,8 @@ public class ProductInfoController {
     @AuthRuleAnnotation("udidl/device/filterAllUdi")
     @GetMapping("udidl/device/filterAllUdi")
     public BaseResponse filterAllUdi(ProductInfoFilterRequest productInfoFilterRequest) {
+
+
         //过滤--1.参数不能全未空
         if ((productInfoFilterRequest.getYlqxzcrbarmc() == null || productInfoFilterRequest.getYlqxzcrbarmc().equals("")) &&
                 (productInfoFilterRequest.getCpmctymc() == null || productInfoFilterRequest.getCpmctymc().equals("")) &&
@@ -238,11 +246,23 @@ public class ProductInfoController {
             return ResultVOUtils.error(500, "请输入完整的产品通用名称!");
         }
         productInfoFilterRequest.setIsNewest(1);
-        List<ProductInfoEntity> productInfoEntityList = productInfoService.filterUdi(productInfoFilterRequest);
-        PageInfo<ProductInfoEntity> pageInfo;
-        pageInfo = new PageInfo<>(productInfoEntityList);
+
+        String keyCache = productInfoFilterRequest.toCacheKey();
+        if (StrUtil.isEmpty(keyCache)) {
+            return ResultVOUtils.error(500, "查询条件不能为空!");
+        }
+        String totalStr = (String) redisUtil.get(keyCache);
+        long total = 0;
+        if (StrUtil.isEmpty(totalStr)) {
+            total = productInfoService.filterUdiNoPageCount(productInfoFilterRequest);
+            redisUtil.set(keyCache, total + "");
+        } else {
+            total = Long.parseLong(totalStr);
+        }
+
+        List<ProductInfoEntity> productInfoEntityList = productInfoService.filterUdiNoPage(productInfoFilterRequest);
         PageSimpleResponse<ProductInfoEntity> pageSimpleResponse = new PageSimpleResponse<>();
-        pageSimpleResponse.setTotal(pageInfo.getTotal());
+        pageSimpleResponse.setTotal(total);
         pageSimpleResponse.setList(productInfoEntityList);
         return ResultVOUtils.success(pageSimpleResponse);
     }
@@ -287,11 +307,22 @@ public class ProductInfoController {
             return ResultVOUtils.error(500, "请输入完整的产品通用名称!");
         }
         productInfoFilterRequest.setIsNewest(1);
-        List<ProductInfoEntity> productInfoEntityList = productInfoService.filterUdi(productInfoFilterRequest);
-        PageInfo<ProductInfoEntity> pageInfo;
-        pageInfo = new PageInfo<>(productInfoEntityList);
+
+        String keyCache = productInfoFilterRequest.toCacheKey();
+        if (StrUtil.isEmpty(keyCache)) {
+            return ResultVOUtils.error(500, "查询条件不能为空!");
+        }
+        String totalStr = (String) redisUtil.get(keyCache);
+        long total = 0;
+        if (StrUtil.isEmpty(totalStr)) {
+            total = productInfoService.filterUdiNoPageCount(productInfoFilterRequest);
+            redisUtil.set(keyCache, total + "");
+        } else {
+            total = Long.parseLong(totalStr);
+        }
+        List<ProductInfoEntity> productInfoEntityList = productInfoService.filterUdiNoPage(productInfoFilterRequest);
         PageSimpleResponse<ProductInfoEntity> pageSimpleResponse = new PageSimpleResponse<>();
-        pageSimpleResponse.setTotal(pageInfo.getTotal());
+        pageSimpleResponse.setTotal(total);
         pageSimpleResponse.setList(productInfoEntityList);
         return ResultVOUtils.success(pageSimpleResponse);
     }
@@ -327,4 +358,66 @@ public class ProductInfoController {
         return ResultVOUtils.success(productInfoService.findLastVersion(productInfoFilterRequest));
     }
 
+
+    @ApiOperation(value = "校验UDI完整性", response = ProductInfoEntity.class)
+    @ApiImplicitParams({@ApiImplicitParam(name = "code", value = "UDI码", required = true)})
+    @GetMapping("udidl/device/vailUdiCode")
+    public BaseResponse vailUdiCode(String code) {
+
+        if (StrUtil.isEmpty(code)) {
+            return ResultVOUtils.error(500, "查询条件不能为空!");
+        }
+        UdiEntity udiEntity = FilterUdiUtils.getUdi(code);
+        if (udiEntity == null) {
+            return ResultVOUtils.error(500, "UDI码格式错误!");
+        } else {
+            if (StrUtil.isNotEmpty(udiEntity.getUdi())) {
+                ProductInfoFilterRequest productInfoFilterRequest = new ProductInfoFilterRequest();
+                productInfoFilterRequest.setNameCode(udiEntity.getUdi());
+                List<ProductInfoEntity> productInfoEntityList = productInfoService.filterProductInfo(productInfoFilterRequest);
+                if (CollUtil.isEmpty(productInfoEntityList)) {
+                    return ResultVOUtils.error(500, "未查询到该UDI码国家库产品信息!");
+                } else {
+                    ProductInfoEntity productInfoEntity = productInfoEntityList.get(0);
+                    String lostMsg = "";
+                    boolean checkSuccess = true;
+                    if ("是".equals(productInfoEntity.getScbssfbhph()) && StrUtil.isEmpty(udiEntity.getBatchNo())) {
+                        checkSuccess = false;
+                        lostMsg = lostMsg + ",批次号";
+                    }
+                    if ("是".equals(productInfoEntity.getScbssfbhscrq()) && StrUtil.isEmpty(udiEntity.getProduceDate())) {
+                        checkSuccess = false;
+                        lostMsg = lostMsg + ",生产日期";
+                    }
+
+                    if ("是".equals(productInfoEntity.getScbssfbhsxrq()) && StrUtil.isEmpty(udiEntity.getExpireDate())) {
+                        checkSuccess = false;
+                        lostMsg = lostMsg + ",失效日期";
+                    }
+                    if (("是".equals(productInfoEntity.getScbssfbhxlh()) && StrUtil.isEmpty(udiEntity.getSerialNo()))
+                    ) {
+                        checkSuccess = false;
+                        lostMsg = lostMsg + ",序列号";
+                    }
+                    if (StrUtil.isNotEmpty(udiEntity.getSerialNo()) && udiEntity.getSerialNo().length() > 20) {
+                        return ResultVOUtils.error(504, "序列号超出20位!");
+                    }
+                    if (StrUtil.isNotEmpty(udiEntity.getBatchNo()) && udiEntity.getBatchNo().length() > 20) {
+                        return ResultVOUtils.error(504, "批次号超出20位!");
+                    }
+                    if (StrUtil.isEmpty(udiEntity.getSerialNo()) && StrUtil.isEmpty(udiEntity.getBatchNo())) {
+                        checkSuccess = false;
+                    }
+                    if (checkSuccess) {
+                        return ResultVOUtils.success(productInfoEntity);
+                    } else {
+                        return ResultVOUtils.error(500, "UDI码格式错误,缺少"+lostMsg.substring(1));
+                    }
+                }
+            } else {
+                return ResultVOUtils.error(500, "UDI码格式错误!");
+            }
+        }
+
+    }
 }
diff --git a/src/main/java/com/glxp/udidl/admin/controller/device/UdiCompanyController.java b/src/main/java/com/glxp/udidl/admin/controller/device/UdiCompanyController.java
index 5e1a83b..fc13b6a 100644
--- a/src/main/java/com/glxp/udidl/admin/controller/device/UdiCompanyController.java
+++ b/src/main/java/com/glxp/udidl/admin/controller/device/UdiCompanyController.java
@@ -69,7 +69,7 @@ public class UdiCompanyController {
 
         ProductInfoFilterRequest productInfoFilterRequest = new ProductInfoFilterRequest();
         BeanUtils.copyProperties(filterCompanyDiRequest, productInfoFilterRequest);
-        if (StrUtil.isNotEmpty(productInfoFilterRequest.getTyshxydm())) {
+        if (StrUtil.isEmpty(productInfoFilterRequest.getTyshxydm())) {
             return ResultVOUtils.error(500, "统一社会信用代码不能为空!");
         }
         List<ProductInfoEntity> productInfoEntities;
diff --git a/src/main/java/com/glxp/udidl/admin/controller/device/UdidlDeviceController.java b/src/main/java/com/glxp/udidl/admin/controller/device/UdidlDeviceController.java
index c664478..45b6164 100644
--- a/src/main/java/com/glxp/udidl/admin/controller/device/UdidlDeviceController.java
+++ b/src/main/java/com/glxp/udidl/admin/controller/device/UdidlDeviceController.java
@@ -129,6 +129,13 @@ public class UdidlDeviceController {
         return deviceSyncService.searchDlByDi(deviceId);
     }
 
+    @AuthRuleAnnotation("udidl_udidlByUuid_all")
+    @GetMapping("udidl/device/searchDlByUuid")
+    public BaseResponse searchDlByUuid(String uuid) {
+        return deviceSyncService.searchDlByUuid(uuid);
+    }
+
+
     /**
      * 获取产品标识详情
      *
diff --git a/src/main/java/com/glxp/udidl/admin/dao/udi/ProductInfoMapper.java b/src/main/java/com/glxp/udidl/admin/dao/udi/ProductInfoMapper.java
index c5db4b0..dce3bf8 100644
--- a/src/main/java/com/glxp/udidl/admin/dao/udi/ProductInfoMapper.java
+++ b/src/main/java/com/glxp/udidl/admin/dao/udi/ProductInfoMapper.java
@@ -39,6 +39,10 @@ public interface ProductInfoMapper extends BaseMapper<ProductInfoEntity> {
 
     List<ProductInfoEntity> filterUdi(ProductInfoFilterRequest productInfoFilterRequest);
 
+    List<ProductInfoEntity> filterUdiNoPage(ProductInfoFilterRequest productInfoFilterRequest);
+
+    Long filterUdiNoPageCount(ProductInfoFilterRequest productInfoFilterRequest);
+
     List<ProductInfoEntity> syncDlUdi(ProductInfoFilterRequest productInfoFilterRequest);
 
     List<String> filterUuidByCreditNo(ProductInfoFilterRequest productInfoFilterRequest);
diff --git a/src/main/java/com/glxp/udidl/admin/dao/udid/DeviceMapper.java b/src/main/java/com/glxp/udidl/admin/dao/udid/DeviceMapper.java
index c175386..1ab9eed 100644
--- a/src/main/java/com/glxp/udidl/admin/dao/udid/DeviceMapper.java
+++ b/src/main/java/com/glxp/udidl/admin/dao/udid/DeviceMapper.java
@@ -53,6 +53,8 @@ public interface DeviceMapper extends BaseMapper<Device> {
 
     String selectisSame(@Param("deviceRecordKey") String deviceRecordKey, @Param("versionNumber") String versionNumber);
 
+    String selectDiIsSame(@Param("zxxsdycpbs") String zxxsdycpbs, @Param("versionNumber") String versionNumber);
+
     String selectKey(@Param("zxxsdycpbs") String zxxsdycpbs);
 
     List<Device> downloadDevice(DownloadUdiRequest downloadUdiRequest);
diff --git a/src/main/java/com/glxp/udidl/admin/entity/udid/Device.java b/src/main/java/com/glxp/udidl/admin/entity/udid/Device.java
index 10f7178..61a13f4 100644
--- a/src/main/java/com/glxp/udidl/admin/entity/udid/Device.java
+++ b/src/main/java/com/glxp/udidl/admin/entity/udid/Device.java
@@ -2,10 +2,12 @@ package com.glxp.udidl.admin.entity.udid;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.Date;
 
 @ApiModel(value = "医疗器械信息实体")
+@Data
 public class Device {
 
 
diff --git a/src/main/java/com/glxp/udidl/admin/req/ProductInfoFilterRequest.java b/src/main/java/com/glxp/udidl/admin/req/ProductInfoFilterRequest.java
index 47c2aff..151a94f 100644
--- a/src/main/java/com/glxp/udidl/admin/req/ProductInfoFilterRequest.java
+++ b/src/main/java/com/glxp/udidl/admin/req/ProductInfoFilterRequest.java
@@ -43,4 +43,10 @@ public class ProductInfoFilterRequest extends ListPageRequest {
 
     @ApiModelProperty(value = "更新时间")
     private String updateTime;
+
+
+
+    public String toCacheKey() {
+        return nameCode + deviceRecordKey + uuid + cpmctymc + ylqxzcrbarmc + ggxh + tyshxydm + showHis + diType + zczbhhzbapzbh + updateTime;
+    }
 }
diff --git a/src/main/java/com/glxp/udidl/admin/res/udid/VailUdiReponse.java b/src/main/java/com/glxp/udidl/admin/res/udid/VailUdiReponse.java
new file mode 100644
index 0000000..fcac0f6
--- /dev/null
+++ b/src/main/java/com/glxp/udidl/admin/res/udid/VailUdiReponse.java
@@ -0,0 +1,10 @@
+package com.glxp.udidl.admin.res.udid;
+
+import com.glxp.udidl.admin.entity.udi.ProductInfoEntity;
+import lombok.Data;
+
+@Data
+public class VailUdiReponse {
+    private String errMsg;
+    private ProductInfoEntity productInfoEntity;
+}
diff --git a/src/main/java/com/glxp/udidl/admin/service/dataSync/DeviceSaveService.java b/src/main/java/com/glxp/udidl/admin/service/dataSync/DeviceSaveService.java
index 4b7144e..a0a1d57 100644
--- a/src/main/java/com/glxp/udidl/admin/service/dataSync/DeviceSaveService.java
+++ b/src/main/java/com/glxp/udidl/admin/service/dataSync/DeviceSaveService.java
@@ -1,5 +1,6 @@
 package com.glxp.udidl.admin.service.dataSync;
 
+import cn.hutool.core.util.StrUtil;
 import com.glxp.udidl.admin.entity.udid.*;
 import com.glxp.udidl.admin.res.udid.DataSetResult;
 import com.glxp.udidl.admin.service.inout.DeviceService;
@@ -43,7 +44,7 @@ public class DeviceSaveService {
 
             for (DataSetResult.DeviceInfo item : ds.getDeviceInfo()) {
                 //1:判断数据是否存在
-                if (deviceService.selectisSame(item.getDeviceRecordKey(), item.getVersionNumber() + "") != null)
+                if (StrUtil.isNotEmpty(deviceService.selectDiIsSame(item.getZxxsdycpbs(), item.getVersionNumber() + "")))
                     continue;
                 Device device = responseToDevice(item);
                 String uuid = getUUId();
diff --git a/src/main/java/com/glxp/udidl/admin/service/dataSync/DeviceSyncService.java b/src/main/java/com/glxp/udidl/admin/service/dataSync/DeviceSyncService.java
index 0ed9683..fd67560 100644
--- a/src/main/java/com/glxp/udidl/admin/service/dataSync/DeviceSyncService.java
+++ b/src/main/java/com/glxp/udidl/admin/service/dataSync/DeviceSyncService.java
@@ -178,6 +178,14 @@ public class DeviceSyncService {
         return ResultVOUtils.success(productInfoEntityList);
     }
 
+    public BaseResponse searchDlByUuid(String uuid) {
+        ProductInfoFilterRequest productInfoFilterRequest = new ProductInfoFilterRequest();
+        productInfoFilterRequest.setUuid(uuid);
+        List<ProductInfoEntity> productInfoEntityList = productInfoService.findAll(productInfoFilterRequest);
+        return ResultVOUtils.success(productInfoEntityList);
+    }
+
+
     public void dlHistory(DataSetSingleResult result1) {
 
         DataSetSingleHistoryResult result = new DataSetSingleHistoryResult();
diff --git a/src/main/java/com/glxp/udidl/admin/service/inout/DeviceService.java b/src/main/java/com/glxp/udidl/admin/service/inout/DeviceService.java
index 4e7cb86..1a7e632 100644
--- a/src/main/java/com/glxp/udidl/admin/service/inout/DeviceService.java
+++ b/src/main/java/com/glxp/udidl/admin/service/inout/DeviceService.java
@@ -4,6 +4,7 @@ import com.glxp.udidl.admin.entity.udid.*;
 import com.glxp.udidl.admin.req.ListPageRequest;
 import com.glxp.udidl.admin.req.udid.DeviceListRequest;
 import com.glxp.udidl.admin.req.udid.DeviceSearchRequest;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -37,6 +38,8 @@ public interface DeviceService {
 
     String selectisSame(String deviceRecordKey, String versionNumber);
 
+    String selectDiIsSame(String zxxsdycpbs, String versionNumber);
+
     String selectKey(String zxxsdycpbs);
 
     List<String> findAllByZxxscpbs();
diff --git a/src/main/java/com/glxp/udidl/admin/service/inout/ProductInfoService.java b/src/main/java/com/glxp/udidl/admin/service/inout/ProductInfoService.java
index 997d694..bb06627 100644
--- a/src/main/java/com/glxp/udidl/admin/service/inout/ProductInfoService.java
+++ b/src/main/java/com/glxp/udidl/admin/service/inout/ProductInfoService.java
@@ -24,6 +24,11 @@ public interface ProductInfoService {
 
     List<ProductInfoEntity> filterUdi(ProductInfoFilterRequest productInfoFilterRequest);
 
+
+    List<ProductInfoEntity> filterUdiNoPage(ProductInfoFilterRequest productInfoFilterRequest);
+
+    Long filterUdiNoPageCount(ProductInfoFilterRequest productInfoFilterRequest);
+
     List<ProductInfoEntity> selectByUuid(String uuid);
 
     List<ProductInfoEntity> syncDlUdi(ProductInfoFilterRequest productInfoFilterRequest);
diff --git a/src/main/java/com/glxp/udidl/admin/service/inout/impl/DeviceServiceImpl.java b/src/main/java/com/glxp/udidl/admin/service/inout/impl/DeviceServiceImpl.java
index 14fee05..d9db939 100644
--- a/src/main/java/com/glxp/udidl/admin/service/inout/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/glxp/udidl/admin/service/inout/impl/DeviceServiceImpl.java
@@ -189,6 +189,11 @@ public class DeviceServiceImpl implements DeviceService {
         return deviceMapper.selectisSame(deviceRecordKey, versionNumber);
     }
 
+    @Override
+    public String selectDiIsSame(String zxxsdycpbs, String versionNumber) {
+        return deviceMapper.selectDiIsSame(zxxsdycpbs, versionNumber);
+    }
+
     @Override
     public String selectKey(String zxxsdycpbs) {
         return deviceMapper.selectKey(zxxsdycpbs);
diff --git a/src/main/java/com/glxp/udidl/admin/service/inout/impl/ProductInfoServiceImpl.java b/src/main/java/com/glxp/udidl/admin/service/inout/impl/ProductInfoServiceImpl.java
index 83224f3..95db338 100644
--- a/src/main/java/com/glxp/udidl/admin/service/inout/impl/ProductInfoServiceImpl.java
+++ b/src/main/java/com/glxp/udidl/admin/service/inout/impl/ProductInfoServiceImpl.java
@@ -6,6 +6,7 @@ import com.glxp.udidl.admin.dao.udi.ProductInfoMapper;
 import com.glxp.udidl.admin.entity.udi.ProductInfoEntity;
 import com.glxp.udidl.admin.req.ProductInfoFilterRequest;
 import com.glxp.udidl.admin.service.inout.ProductInfoService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -100,6 +101,43 @@ public class ProductInfoServiceImpl implements ProductInfoService {
         return data;
     }
 
+    @Override
+    public List<ProductInfoEntity> filterUdiNoPage(ProductInfoFilterRequest productInfoFilterRequest) {
+        if (productInfoFilterRequest == null) {
+            return Collections.emptyList();
+        }
+        if (productInfoFilterRequest.getPage() != null) {
+            int offset = (productInfoFilterRequest.getPage() - 1) * productInfoFilterRequest.getLimit();
+            if (offset < 0) {
+                offset = 0;
+            }
+            productInfoFilterRequest.setPage(offset);
+            productInfoFilterRequest.setLimit(productInfoFilterRequest.getLimit());
+        } else {
+            productInfoFilterRequest.setPage(1);
+            productInfoFilterRequest.setLimit(10);
+        }
+
+        List<ProductInfoEntity> data = productInfoDao.filterUdiNoPage(productInfoFilterRequest);
+        return data;
+    }
+
+    @Override
+    public Long filterUdiNoPageCount(ProductInfoFilterRequest request) {
+
+
+        ProductInfoFilterRequest productInfoFilterRequest = new ProductInfoFilterRequest();
+        BeanUtils.copyProperties(request, productInfoFilterRequest);
+
+        if (productInfoFilterRequest.getPage() != null) {
+            int offset = (productInfoFilterRequest.getPage() - 1) * productInfoFilterRequest.getLimit();
+            productInfoFilterRequest.setPage(offset);
+            productInfoFilterRequest.setLimit(productInfoFilterRequest.getLimit());
+
+        }
+        return productInfoDao.filterUdiNoPageCount(productInfoFilterRequest);
+    }
+
     @Override
     public List<ProductInfoEntity> selectByUuid(String uuid) {
         List<ProductInfoEntity> data = productInfoDao.selectByUuid(uuid);
diff --git a/src/main/java/com/glxp/udidl/admin/thread/UdiTransferUtils.java b/src/main/java/com/glxp/udidl/admin/thread/UdiTransferUtils.java
index 4e24721..e754119 100644
--- a/src/main/java/com/glxp/udidl/admin/thread/UdiTransferUtils.java
+++ b/src/main/java/com/glxp/udidl/admin/thread/UdiTransferUtils.java
@@ -128,10 +128,10 @@ public class UdiTransferUtils {
             productInfoEntity.setZxxsbzbhsydysl(0);
             productInfoEntity.setDiType(3);
             productInfoEntity.setSjcpbm(deviceEntity.getZxxsdycpbs());
-            productInfoEntity.setNameCode(deviceEntity.getSydycpbs());
+            productInfoEntity.setNameCode(deviceEntity.getBtcpbs());
             productInfoEntity.setUpdateTime(new Date());
             productInfoService.insertProductInfo(productInfoEntity);
-            productInfoEntity.setBhxjcpbm(deviceEntity.getSydycpbs());
+            productInfoEntity.setBhxjcpbm(deviceEntity.getBtcpbs());
             productInfoEntity.setBhxjsl(1);
             productInfoEntity.setPackLevel(2 + "");
             productInfoEntity.setZxxsbzbhsydysl(1);
diff --git a/src/main/java/com/glxp/udidl/admin/util/RedisUtil.java b/src/main/java/com/glxp/udidl/admin/util/RedisUtil.java
index fc3d70f..58a60cd 100644
--- a/src/main/java/com/glxp/udidl/admin/util/RedisUtil.java
+++ b/src/main/java/com/glxp/udidl/admin/util/RedisUtil.java
@@ -1,10 +1,13 @@
 package com.glxp.udidl.admin.util;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.db.nosql.redis.RedisDS;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import redis.clients.jedis.Jedis;
 
+import java.util.Set;
+
 /**
  * redis工具类
  */
@@ -46,4 +49,16 @@ public class RedisUtil {
         return true;
     }
 
+
+    //模糊匹配删除
+    public void deleteByPrex(String prex) {
+        Set<String> keys = jedis.keys(prex);
+        if (CollUtil.isNotEmpty(keys)) {
+            for (String str : keys) {
+                jedis.del(str);
+            }
+        }
+    }
+
+
 }
diff --git a/src/main/java/com/glxp/udidl/admin/util/gs1/Gs1128Utils.java b/src/main/java/com/glxp/udidl/admin/util/gs1/Gs1128Utils.java
index 91566e0..264a5a7 100644
--- a/src/main/java/com/glxp/udidl/admin/util/gs1/Gs1128Utils.java
+++ b/src/main/java/com/glxp/udidl/admin/util/gs1/Gs1128Utils.java
@@ -7,53 +7,55 @@ import java.util.Iterator;
  */
 final class Gs1128Utils {
 
-  public static final String PREFIX = "]C1";
-  public static final char END_AI_VARIED = (char) 29;
-
-  private Gs1128Utils() {
-    super();
-  }
-
-  public static Iterator<Character> iterator(String value) {
-    return value.chars().mapToObj(c -> (char) c).iterator();
-  }
-
-  public static String value(AI ai, Iterator<Character> iterator) {
-    Format format = Format.valueOf(ai.getFormat());
-    if (format.isVaried()) {
-      return variedValue(iterator);
-    } else {
-      return fixedValue(format.getLength(), iterator);
+    public static final String PREFIX = "]C1";
+    public static final char END_AI_VARIED = (char) 29;
+
+    private Gs1128Utils() {
+        super();
+    }
+
+    public static Iterator<Character> iterator(String value) {
+        return value.chars().mapToObj(c -> (char) c).iterator();
     }
-  }
-
-  public static String value(Session session, String value) {
-    Iterator<Character> iterator = iterator(value);
-    if (session.isVaried()) {
-      return variedValue(iterator);
-    } else {
-      return fixedValue(session.getLength(), iterator);
+
+    public static String value(AI ai, Iterator<Character> iterator) {
+        Format format = Format.valueOf(ai.getFormat());
+        if (format.isVaried()) {
+            return variedValue(iterator);
+        } else {
+            return fixedValue(format.getLength(), iterator);
+        }
     }
-  }
 
-  private static String fixedValue(int size, Iterator<Character> iterator) {
-    StringBuilder builder = new StringBuilder();
-    for (int i = 0; i < size; i++) {
-      builder.append(iterator.next());
+    public static String value(Session session, String value) {
+        Iterator<Character> iterator = iterator(value);
+        if (session.isVaried()) {
+            return variedValue(iterator);
+        } else {
+            return fixedValue(session.getLength(), iterator);
+        }
     }
-    return builder.toString();
-  }
-
-  private static String variedValue(Iterator<Character> iterator) {
-    StringBuilder builder = new StringBuilder();
-    while (iterator.hasNext()) {
-      char value = iterator.next();
-      if (value == END_AI_VARIED) {
-        break;
-      }
-      builder.append(value);
+
+    private static String fixedValue(int size, Iterator<Character> iterator) {
+        StringBuilder builder = new StringBuilder();
+        for (int i = 0; i < size; i++) {
+            if (iterator.hasNext()) {
+                builder.append(iterator.next());
+            }
+        }
+        return builder.toString();
+    }
+
+    private static String variedValue(Iterator<Character> iterator) {
+        StringBuilder builder = new StringBuilder();
+        while (iterator.hasNext()) {
+            char value = iterator.next();
+            if (value == END_AI_VARIED) {
+                break;
+            }
+            builder.append(value);
+        }
+        return builder.toString();
     }
-    return builder.toString();
-  }
 
 }
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 122d21b..44d07c6 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,7 +2,7 @@ server:
   port: 9994
 spring:
   profiles:
-    active: dev
+    active: pro
   jmx:
     enabled: false
 
diff --git a/src/main/resources/mybatis/mapper/udi/ProductInfoMapper.xml b/src/main/resources/mybatis/mapper/udi/ProductInfoMapper.xml
index 44f15fc..efa4700 100644
--- a/src/main/resources/mybatis/mapper/udi/ProductInfoMapper.xml
+++ b/src/main/resources/mybatis/mapper/udi/ProductInfoMapper.xml
@@ -230,6 +230,101 @@
             </if>
         </where>
     </select>
+
+    <select id="filterUdiNoPage" parameterType="com.glxp.udidl.admin.req.ProductInfoFilterRequest"
+            resultType="com.glxp.udidl.admin.entity.udi.ProductInfoEntity">
+        select *
+        from productinfo
+        <where>
+            <if test="ylqxzcrbarmc != '' and ylqxzcrbarmc != null">
+                AND ylqxzcrbarmc = #{ylqxzcrbarmc}
+            </if>
+
+            <if test="ylqxzcrbarmc == null and cpmctymc != '' and cpmctymc != null">
+                AND cpmctymc LIKE concat(#{cpmctymc}, '%')
+            </if>
+
+            <if test="ylqxzcrbarmc != '' and ylqxzcrbarmc != null and cpmctymc != '' and cpmctymc != null">
+                AND cpmctymc LIKE concat('%', #{cpmctymc}, '%')
+            </if>
+            <if test="nameCode != '' and nameCode != null">
+                AND nameCode LIKE concat(#{nameCode}, '%')
+            </if>
+            <if test="uuid != '' and uuid != null">
+                AND uuid = #{uuid}
+            </if>
+            <if test="ggxh != '' and ggxh != null">
+                AND ggxh LIKE concat('%', #{ggxh}, '%')
+            </if>
+            <if test="zczbhhzbapzbh != '' and zczbhhzbapzbh != null">
+                AND zczbhhzbapzbh LIKE concat('%', #{zczbhhzbapzbh}, '%')
+            </if>
+
+            <if test="deviceRecordKey != '' and deviceRecordKey != null">
+                AND deviceRecordKey = #{deviceRecordKey}
+            </if>
+            <if test="updateTime != null and updateTime != ''">
+                <![CDATA[
+                and DATE_FORMAT(updateTime, '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT(#{updateTime}, '%Y-%m-%d %H:%i:%S')
+                ]]>
+            </if>
+            <if test="isNewest != null and isNewest != ''">
+                AND isNewest = #{isNewest}
+            </if>
+            <if test="diType != '' and diType != null">
+                AND diType = #{diType}
+            </if>
+        </where>
+        limit #{page},#{limit}
+    </select>
+
+
+    <select id="filterUdiNoPageCount" parameterType="com.glxp.udidl.admin.req.ProductInfoFilterRequest"
+            resultType="java.lang.Long">
+        select count(0)
+        from productinfo
+        <where>
+            <if test="ylqxzcrbarmc != '' and ylqxzcrbarmc != null">
+                AND ylqxzcrbarmc = #{ylqxzcrbarmc}
+            </if>
+
+            <if test="ylqxzcrbarmc == null and cpmctymc != '' and cpmctymc != null">
+                AND cpmctymc LIKE concat(#{cpmctymc}, '%')
+            </if>
+
+            <if test="ylqxzcrbarmc != '' and ylqxzcrbarmc != null and cpmctymc != '' and cpmctymc != null">
+                AND cpmctymc LIKE concat('%', #{cpmctymc}, '%')
+            </if>
+            <if test="nameCode != '' and nameCode != null">
+                AND nameCode LIKE concat(#{nameCode}, '%')
+            </if>
+            <if test="uuid != '' and uuid != null">
+                AND uuid = #{uuid}
+            </if>
+            <if test="ggxh != '' and ggxh != null">
+                AND ggxh LIKE concat('%', #{ggxh}, '%')
+            </if>
+            <if test="zczbhhzbapzbh != '' and zczbhhzbapzbh != null">
+                AND zczbhhzbapzbh LIKE concat('%', #{zczbhhzbapzbh}, '%')
+            </if>
+
+            <if test="deviceRecordKey != '' and deviceRecordKey != null">
+                AND deviceRecordKey = #{deviceRecordKey}
+            </if>
+            <if test="updateTime != null and updateTime != ''">
+                <![CDATA[
+                and DATE_FORMAT(updateTime, '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT(#{updateTime}, '%Y-%m-%d %H:%i:%S')
+                ]]>
+            </if>
+            <if test="isNewest != null and isNewest != ''">
+                AND isNewest = #{isNewest}
+            </if>
+            <if test="diType != '' and diType != null">
+                AND diType = #{diType}
+            </if>
+        </where>
+    </select>
+
     <select id="selectByUpdateTime"
             resultType="com.glxp.udidl.admin.entity.udi.ProductInfoEntity">
         select *
@@ -335,7 +430,8 @@
         #{sfwwjbz},
         #{syqsfxyjxmj},
         #{mjfs},
-        #{qtxxdwzlj},#{categoryName}
+        #{qtxxdwzlj},
+        #{categoryName}
         )
     </insert>
 
diff --git a/src/main/resources/mybatis/mapper/udi/UdiCompanyMapper.xml b/src/main/resources/mybatis/mapper/udi/UdiCompanyMapper.xml
index 92609af..647f3d6 100644
--- a/src/main/resources/mybatis/mapper/udi/UdiCompanyMapper.xml
+++ b/src/main/resources/mybatis/mapper/udi/UdiCompanyMapper.xml
@@ -55,43 +55,44 @@
             </if>
         </where>
         limit #{page}
-                ,#{limit}
+        ,#{limit}
     </select>
 
 
     <select id="searchByName" parameterType="java.lang.String" resultType="java.lang.String">
         select ylqxzcrbarmc
         from udicompany
-        where ylqxzcrbarmc like concat('%', #{name}, '%')
-        limit 50
+        where ylqxzcrbarmc like concat('%', #{name}, '%') limit 50
     </select>
 
     <insert id="insertUdiCompany" keyProperty="id" parameterType="com.glxp.udidl.admin.entity.udi.UdiCompanyEntity">
         REPLACE
-                INTO udicompany
+        INTO udicompany
                 (tyshxydm, ylqxzcrbarmc, ylqxzcrbarywmc, qylxrdh,
                  qylxrcz, qylxryx, updateTime)
-        values (#{tyshxydm},
-                #{ylqxzcrbarmc},
-                #{ylqxzcrbarywmc},
-                #{qylxrdh},
-                #{qylxrcz},
-                #{qylxryx},
-                #{updateTime})
+        values (
+        #{tyshxydm},
+        #{ylqxzcrbarmc},
+        #{ylqxzcrbarywmc},
+        #{qylxrdh},
+        #{qylxrcz},
+        #{qylxryx},
+        #{updateTime}
+        )
     </insert>
 
     <insert id="insertUdiCompanys" keyProperty="id" parameterType="com.glxp.udidl.admin.entity.udi.UdiCompanyEntity">
         replace INTO udicompany(tyshxydm, ylqxzcrbarmc, ylqxzcrbarywmc, qylxrdh,
-                                qylxrcz, qylxryx, updateTime)
-                values
+        qylxrcz, qylxryx, updateTime)
+        values
         <foreach collection="udiCompanyEntities" item="item" index="index"
                  separator=",">
             (#{item.tyshxydm},
-             #{item.ylqxzcrbarmc},
-             #{item.ylqxzcrbarywmc},
-             #{item.qylxrdh},
-             #{item.qylxrcz},
-             #{item.qylxryx}),#{item.updateTime}
+            #{item.ylqxzcrbarmc},
+            #{item.ylqxzcrbarywmc},
+            #{item.qylxrdh},
+            #{item.qylxrcz},
+            #{item.qylxryx}),#{item.updateTime}
         </foreach>
     </insert>
     <delete id="deleteById" parameterType="Map">
diff --git a/src/main/resources/mybatis/mapper/udid/DeviceMapper.xml b/src/main/resources/mybatis/mapper/udid/DeviceMapper.xml
index e68d22f..3e9406f 100644
--- a/src/main/resources/mybatis/mapper/udid/DeviceMapper.xml
+++ b/src/main/resources/mybatis/mapper/udid/DeviceMapper.xml
@@ -169,7 +169,7 @@
                             ylqxzcrbarmc, ylqxzcrbarywmc, zczbhhzbapzbh,
                             zdcfsycs, zxxsdycpbs, bszt,
                             sfyzcbayz, zcbacpbs, zxxsdyzsydydsl,
-                            deviceHistoryRecordKey, bssjzt, lastModifyTime, requestDate,hchzsb,cplx)
+                            deviceHistoryRecordKey, bssjzt, lastModifyTime, requestDate, hchzsb, cplx)
         values (#{uuid,jdbcType=VARCHAR}, #{devicerecordkey,jdbcType=VARCHAR}, #{btcpbs,jdbcType=VARCHAR},
                 #{btcpbsyzxxsdycpbssfyz,jdbcType=VARCHAR}, #{cgzmraqxgxx,jdbcType=VARCHAR},
                 #{cpbsbmtxmc,jdbcType=VARCHAR},
@@ -187,7 +187,7 @@
                 #{zdcfsycs,jdbcType=VARCHAR}, #{zxxsdycpbs,jdbcType=VARCHAR}, #{bszt,jdbcType=VARCHAR},
                 #{sfyzcbayz,jdbcType=VARCHAR}, #{zcbacpbs,jdbcType=VARCHAR}, #{zxxsdyzsydydsl,jdbcType=VARCHAR},
                 #{devicehistoryrecordkey,jdbcType=VARCHAR}, #{bssjzt,jdbcType=VARCHAR},
-                #{lastModifyTime,jdbcType=VARCHAR}, #{requestDate},#{hchzsb},#{cplx})
+                #{lastModifyTime,jdbcType=VARCHAR}, #{requestDate}, #{hchzsb}, #{cplx})
     </insert>
     <insert id="insertSelective" parameterType="com.glxp.udidl.admin.entity.udid.Device">
         insert into device
@@ -890,8 +890,7 @@
             zcbacpbs               = #{zcbacpbs,jdbcType=VARCHAR},
             zxxsdyzsydydsl         = #{zxxsdyzsydydsl,jdbcType=VARCHAR},
             deviceHistoryRecordKey = #{devicehistoryrecordkey,jdbcType=VARCHAR},
-            bssjzt                 = #{bssjzt,jdbcType=VARCHAR}
-            hchzsb                 = #{hchzsb,jdbcType=VARCHAR}
+            bssjzt                 = #{bssjzt,jdbcType=VARCHAR} hchzsb                 = #{hchzsb,jdbcType=VARCHAR}
 
         where uuid = #{uuid,jdbcType=VARCHAR}
     </update>
@@ -990,6 +989,14 @@
           and versionNumber = #{versionNumber} limit 1
     </select>
 
+
+    <select id="selectDiIsSame" parameterType="Map" resultType="java.lang.String">
+        SELECT uuid
+        from device
+        WHERE zxxsdycpbs = #{zxxsdycpbs}
+          and versionNumber = #{versionNumber} limit 1
+    </select>
+
     <select id="selectKey" parameterType="Map" resultType="java.lang.String">
         SELECT uuid
         from device