From 47a751cb301d05276ae5d75145d57b2d090fe4e1 Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期一, 01 七月 2024 10:58:35 +0800
Subject: [PATCH] change

---
 src/main/java/com/nanometer/smartlab/service/SysSequenceServiceImpl.java              |   33 
 src/main/webapp/WEB-INF/spring-db.xml                                                 |    3 
 src/main/java/com/nanometer/smartlab/controller/LaboratoryContainerMngController.java |   21 
 src/sql/update.sql                                                                    |  724 ++
 src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.java                        |    2 
 src/main/java/com/nanometer/smartlab/controller/SupplierInfoMngController.java        |    3 
 src/main/java/com/nanometer/smartlab/model/MenuModel.java                             |   93 
 src/main/java/com/nanometer/smartlab/api/schedule/ReagentSyncSchedule.java            |  192 
 src/main/java/com/nanometer/smartlab/entity/SysFile.java                              |   88 
 src/main/java/com/nanometer/smartlab/entity/HazardousWaste.java                       |  167 
 src/main/java/com/nanometer/smartlab/service/InterfaceServiceImpl.java                |  260 
 src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java               |   26 
 src/main/java/com/nanometer/smartlab/controller/LaboratoryMngController.java          |   35 
 src/main/java/com/nanometer/smartlab/entity/BaseMetaGroup.java                        |   62 
 src/main/java/com/nanometer/smartlab/entity/OpeApply.java                             |  408 -
 src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java                      |  210 
 src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerServiceImpl.java    |   24 
 src/main/java/com/nanometer/smartlab/service/DangerousEncodeServiceImpl.java          |    4 
 src/main/webapp/warehouse_container_mng.xhtml                                         |  176 
 src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java      |  449 -
 src/main/java/com/nanometer/smartlab/dao/EncodeReplaceDictMapper.xml                  |   12 
 src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java                     |   34 
 src/main/java/com/nanometer/smartlab/dao/SysFileDao.java                              |    4 
 src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml                      |  115 
 src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.xml                    |   29 
 src/main/java/com/nanometer/smartlab/dao/SysControllerDao.java                        |    4 
 src/main/java/com/nanometer/smartlab/entity/enumtype/ReagentTypeFlag.java             |   50 
 src/main/webapp/laboratory_container_mng1.xhtml                                       |  200 
 src/main/webapp/WEB-INF/gslab/gslab.properties                                        |    8 
 src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java                 |  212 
 src/main/java/com/nanometer/smartlab/controller/BaseMetaController.java               |   25 
 src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.java                             |    2 
 src/main/webapp/WEB-INF/levena/levena.properties                                      |   25 
 src/main/java/com/nanometer/smartlab/entity/OpeLaboratoryReserve.java                 |   89 
 src/main/java/com/nanometer/smartlab/service/DangerousEncodeService.java              |    2 
 src/main/webapp/laboratory_container_mng.xhtml                                        |   29 
 src/main/java/com/nanometer/smartlab/util/StringToolUtils.java                        |   18 
 src/main/java/com/nanometer/smartlab/dao/SysWarningDao.java                           |    2 
 src/main/java/com/nanometer/smartlab/service/HazardousWasteServiceImpl.java           |   24 
 src/main/webapp/warehouse_reagent_use.xhtml                                           |  112 
 src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml                   |   12 
 src/main/java/com/nanometer/smartlab/controller/RoleMngController.java                |    3 
 src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.java                 |    4 
 src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.xml                  |   15 
 src/main/java/com/nanometer/smartlab/service/SysControllerService.java                |    4 
 src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.java                   |    2 
 src/main/java/com/nanometer/smartlab/service/BaseMetaGroupServiceImpl.java            |    5 
 pom.xml                                                                               |  154 
 src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveServiceImpl.java     |    8 
 src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.java                          |    2 
 src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerServiceImpl.java   |   36 
 src/main/webapp/base_meta_data.xhtml                                                  |   10 
 src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.xml                              |    2 
 src/main/java/com/nanometer/smartlab/util/ExcelUtils.java                             |   19 
 src/main/java/com/nanometer/smartlab/entity/OpeApplyOrder.java                        |   38 
 src/main/webapp/project_mng.xhtml                                                     |    6 
 src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveService.java         |    7 
 src/main/webapp/laboratory_mng.xhtml                                                  |   15 
 src/main/java/com/nanometer/smartlab/entity/SysContainerSensors.java                  |  146 
 src/main/java/com/nanometer/smartlab/entity/dto/HazardousWasteUser.java               |   83 
 src/main/java/com/nanometer/smartlab/entity/SysWarehouseStatus.java                   |   94 
 src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java         |  256 
 src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.xml                              |   23 
 src/main/java/com/nanometer/smartlab/service/SysProjectServiceImpl.java               |   67 
 src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java               |    2 
 src/main/java/com/nanometer/smartlab/service/BaseRolePageService.java                 |    6 
 src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.xml                           |   10 
 src/main/webapp/resources/images/levena_biopharma.jpg                                 |    0 
 src/main/java/com/nanometer/smartlab/service/BaseMetaServiceImpl.java                 |  101 
 src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.xml                        |    2 
 src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml                              |  511 +
 src/main/java/com/nanometer/smartlab/entity/SysProject.java                           |  101 
 src/main/java/com/nanometer/smartlab/controller/ApprovalMngController.java            |  120 
 src/main/java/com/nanometer/smartlab/controller/PriceMngController.java               |   44 
 src/main/java/com/nanometer/smartlab/controller/SysFileMngController.java             |    3 
 src/main/java/com/nanometer/smartlab/dao/SysProjectDao.xml                            |   66 
 src/main/java/com/nanometer/smartlab/controller/SysWarningsController.java            |    3 
 src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.xml                          |   20 
 src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.java                        |    2 
 src/main/java/com/nanometer/smartlab/entity/SysSupplier.java                          |   70 
 src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.java                         |    4 
 src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.java                          |    2 
 src/main/java/com/nanometer/smartlab/dao/OpeReagentCodeDao.java                       |   65 
 src/main/java/com/nanometer/smartlab/service/SysFileService.java                      |    2 
 src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java             |   68 
 src/main/webapp/WEB-INF/spring-menu.xml                                               |  169 
 src/main/java/com/nanometer/smartlab/service/BaseRoleServiceImpl.java                 |   43 
 src/main/webapp/view_order_mng_1.xhtml                                                |  297 +
 src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java       |  202 
 src/main/java/com/nanometer/smartlab/dao/SysUserDao.java                              |   16 
 src/main/java/com/nanometer/smartlab/entity/SysAlarmPerson.java                       |   98 
 src/main/java/com/nanometer/smartlab/entity/SysController.java                        |   74 
 src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java                  |    8 
 src/main/java/com/nanometer/smartlab/entity/dto/ReagentReceivingDto.java              |   44 
 src/main/java/com/nanometer/smartlab/service/HazardousWasteService.java               |   12 
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java                   |   38 
 src/main/webapp/warehouse_reagent_use_person.xhtml                                    |  175 
 src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.xml                |   46 
 src/main/java/com/nanometer/smartlab/controller/HazardousWasteController.java         |  184 
 src/main/java/com/nanometer/smartlab/entity/DangerousEncodeVo.java                    |   13 
 src/main/java/com/nanometer/smartlab/entity/EmailStatus.java                          |   91 
 src/main/java/com/nanometer/smartlab/entity/EncodeReplaceDict.java                    |   85 
 src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java                           |   24 
 src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.java               |    9 
 src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.java                             |    8 
 src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.xml                           |   21 
 src/main/java/com/nanometer/smartlab/dao/SysWarehouseStatusDao.xml                    |    2 
 src/main/webapp/supplier_require_mng.xhtml                                            |   18 
 src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java         |   44 
 src/main/webapp/warehouse_stock_mng.xhtml                                             |  198 
 src/main/java/com/nanometer/smartlab/controller/WarehouseMngController.java           |    5 
 src/main/java/com/nanometer/smartlab/controller/EncodeReplaceDictController.java      |   10 
 src/main/webapp/view_order_mng.xhtml                                                  |  106 
 src/main/java/com/nanometer/smartlab/service/SysControllerServiceImpl.java            |    6 
 src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java             |  225 
 src/main/webapp/WEB-INF/config-mybatis.xml                                            |    1 
 src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java                           |   16 
 src/main/webapp/resources/css/default.css                                             |   10 
 src/main/java/com/nanometer/smartlab/service/OpeOrderService.java                     |   23 
 src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerService.java        |    8 
 src/main/java/com/nanometer/smartlab/service/SysWarehouseService.java                 |    4 
 src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml                            |  142 
 src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.java                          |    8 
 src/main/webapp/reagent_user_flow_info.xhtml                                          |    4 
 src/main/java/com/nanometer/smartlab/entity/BaseRolePage.java                         |   34 
 src/main/webapp/price_mng.xhtml                                                       |   16 
 src/main/webapp/laboratory_reagent_reserve.xhtml                                      |    6 
 src/main/java/com/nanometer/smartlab/entity/OpeOrder.java                             |  140 
 src/main/java/com/nanometer/smartlab/dao/BasePageDao.xml                              |    2 
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java               |  183 
 src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java             |   72 
 src/main/java/com/nanometer/smartlab/entity/DangerousEncode.java                      |  162 
 src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.xml                 |   18 
 src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java                     |    4 
 src/main/java/com/nanometer/smartlab/entity/SysWarning.java                           |  142 
 src/main/java/com/nanometer/smartlab/dao/SysFileDao.xml                               |   10 
 src/main/webapp/resources/css/mybootstrap.css                                         |    2 
 src/main/java/com/nanometer/smartlab/service/SysProjectService.java                   |   21 
 src/main/webapp/order_mng_ruku.xhtml                                                  |   63 
 src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.java                         |    2 
 src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java               |   70 
 src/main/java/com/nanometer/smartlab/entity/OpeReagentCode.java                       |   95 
 src/main/java/com/nanometer/smartlab/controller/BaseController.java                   |    8 
 src/main/webapp/order_mng.xhtml                                                       |   19 
 src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.xml                              |   21 
 src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.java                        |   18 
 src/main/java/com/nanometer/smartlab/controller/BarcodeMngController.java             |  248 
 src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.java                             |    6 
 src/main/webapp/barcode_mng.xhtml                                                     |  181 
 src/main/java/com/nanometer/smartlab/controller/LaboratoryStockMngController.java     |   33 
 src/main/java/com/nanometer/smartlab/entity/SysSequence.java                          |   71 
 src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml                               |  100 
 src/main/java/com/nanometer/smartlab/entity/SysWarehouseContainer.java                |  154 
 src/main/webapp/require_mng_new.xhtml                                                 |    6 
 src/main/webapp/WEB-INF/web.xml                                                       |    2 
 src/main/webapp/supplier_order_mng.xhtml                                              |    1 
 src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java                  |  197 
 src/main/java/com/nanometer/smartlab/entity/SysWarehouse.java                         |  130 
 src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.java                |    4 
 src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.xml                              |    8 
 src/main/java/com/nanometer/smartlab/dao/OpeReagentCodeDao.xml                        |   64 
 src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java                             |   51 
 src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.java                             |    6 
 src/main/java/com/nanometer/smartlab/realm/ShiroDbRealm.java                          |    2 
 src/main/java/com/nanometer/smartlab/dao/HazardousWasteMapper.xml                     |  104 
 src/main/webapp/confirm_order_mng.xhtml                                               |    4 
 src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java               |   90 
 src/main/java/com/nanometer/smartlab/service/InterfaceService.java                    |   52 
 src/main/java/com/nanometer/smartlab/dao/SysControllerDao.xml                         |    8 
 src/main/java/com/nanometer/smartlab/service/BaseRolePageServiceImpl.java             |   33 
 src/main/java/com/nanometer/smartlab/service/SysWarningService.java                   |    2 
 src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.xml                           |    6 
 src/main/java/com/nanometer/smartlab/entity/LaboratoryReagentReserve.java             |   70 
 src/main/java/com/nanometer/smartlab/entity/dto/InWarehouseInfoDto.java               |   52 
 src/main/java/com/nanometer/smartlab/entity/BasePage.java                             |   73 
 src/main/java/com/nanometer/smartlab/controller/RequireMngController.java             |   22 
 src/main/java/com/nanometer/smartlab/entity/SysAlarm.java                             |  100 
 src/main/java/com/nanometer/smartlab/controller/DangerousEncodeController.java        |    2 
 src/main/java/com/nanometer/smartlab/util/SpringUtil.java                             |    1 
 src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.java                       |    2 
 src/main/java/com/nanometer/smartlab/entity/TempSensors.java                          |  125 
 src/main/java/com/nanometer/smartlab/controller/OrderMngController.java               |  133 
 src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml                            |  351 
 src/main/webapp/reagent_mng.xhtml                                                     |  133 
 src/main/java/com/nanometer/smartlab/service/BaseRoleService.java                     |    6 
 src/main/webapp/apply_mng.xhtml                                                       |   16 
 src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.xml                         |    8 
 src/main/webapp/approval_mng.xhtml                                                    |   16 
 src/main/java/com/nanometer/smartlab/entity/OpeReagentStatus.java                     |  227 
 src/main/java/com/nanometer/smartlab/service/SysReagentService.java                   |   32 
 src/main/webapp/cancel_order_mng.xhtml                                                |    4 
 src/main/webapp/sys_hazardous_waste.xhtml                                             |  112 
 src/main/webapp/user_mng.xhtml                                                        |   13 
 src/main/java/com/nanometer/smartlab/dao/SysProjectDao.java                           |   14 
 src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.xml                          |   10 
 src/main/webapp/order_mng_chanege_code.xhtml                                          |    6 
 src/main/java/com/nanometer/smartlab/service/SysSupplierServiceImpl.java              |   18 
 src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.xml                         |   54 
 src/main/webapp/personal_use_info.xhtml                                               |    4 
 src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java                           |  285 
 src/main/java/com/nanometer/smartlab/service/OpeApplyOrderService.java                |    6 
 src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.xml                         |   14 
 src/main/java/com/nanometer/smartlab/entity/SysLaboratory.java                        |  136 
 src/main/java/com/nanometer/smartlab/service/BaseMetaGroupService.java                |    2 
 src/main/java/com/nanometer/smartlab/controller/UserMngController.java                |   95 
 src/main/java/com/nanometer/smartlab/service/SysLaboratoryServiceImpl.java            |   66 
 src/main/java/com/nanometer/smartlab/realm/AuthorizationRealm.java                    |    2 
 src/main/java/com/nanometer/smartlab/service/SysSupplierService.java                  |    6 
 src/main/java/com/nanometer/smartlab/entity/SysUser.java                              |  214 
 src/main/java/com/nanometer/smartlab/entity/BaseMeta.java                             |   81 
 src/main/java/com/nanometer/smartlab/dao/SysContainerSensorsDao.xml                   |   12 
 src/main/java/com/nanometer/smartlab/controller/SysControllerMngController.java       |    4 
 src/main/java/com/nanometer/smartlab/entity/BaseRole.java                             |   88 
 src/main/java/com/nanometer/smartlab/entity/SupplierOrder.java                        |  151 
 src/main/java/com/nanometer/smartlab/service/OpeApplyService.java                     |   96 
 src/main/java/com/nanometer/smartlab/service/OpeApplyOrderServiceImpl.java            |   22 
 src/main/java/com/nanometer/smartlab/service/SysUserService.java                      |   28 
 src/main/java/com/nanometer/smartlab/service/SysWarningServiceImpl.java               |    6 
 src/main/webapp/apply_mng_new.xhtml                                                   |   76 
 src/main/java/com/nanometer/smartlab/service/SysLaboratoryService.java                |   23 
 src/main/java/com/nanometer/smartlab/entity/SysLaboratoryContainer.java               |  170 
 src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java                 |  369 
 src/main/java/com/nanometer/smartlab/controller/WarehouseContainerMngController.java  |    5 
 src/main/java/com/nanometer/smartlab/service/SysContainerSensorsServiceImpl.java      |    2 
 src/main/java/com/nanometer/smartlab/controller/ProjectMngController.java             |   53 
 src/main/java/com/nanometer/smartlab/entity/SysReagent.java                           |  304 -
 src/main/java/com/nanometer/smartlab/api/ApiAction.java                               |  406 
 src/main/webapp/require_mng.xhtml                                                     |   18 
 src/main/java/com/nanometer/smartlab/controller/MenuController.java                   |   10 
 src/main/webapp/warehouse_reagent_direct_store.xhtml                                  |    2 
 src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java        |   13 
 src/main/java/com/nanometer/smartlab/service/SysFileServiceImpl.java                  |    6 
 src/main/java/com/nanometer/smartlab/dao/SysWarningDao.xml                            |    6 
 src/main/webapp/order_input_warehouse.xhtml                                           |   56 
 src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerService.java       |   14 
 src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java                  |   64 
 src/main/java/com/nanometer/smartlab/dao/TempSensorsDao.xml                           |    6 
 /dev/null                                                                             |   18 
 src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java          |   44 
 src/main/java/com/nanometer/smartlab/service/BaseMetaService.java                     |   20 
 src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java      |  231 
 241 files changed, 7,281 insertions(+), 8,900 deletions(-)

diff --git a/pom.xml b/pom.xml
index eb0598b..ad316d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.nanometer</groupId>
-  <artifactId>smartlab</artifactId>
+  <artifactId>smartlab_promote</artifactId>
   <packaging>war</packaging>
   <version>1.0-SNAPSHOT</version>
   <name>smartlab Maven Webapp</name>
@@ -208,14 +208,14 @@
     <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis</artifactId>
-      <version>3.2.8</version>
+      <version>3.5.2</version>
     </dependency>
 
     <!--mybatis spring 插件 -->
     <dependency>
       <groupId>org.mybatis</groupId>
       <artifactId>mybatis-spring</artifactId>
-      <version>1.2.2</version>
+      <version>2.1.2</version>
     </dependency>
     <dependency>
       <groupId>cglib</groupId>
@@ -244,7 +244,7 @@
     <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid</artifactId>
-      <version>1.0.12</version>
+      <version>1.2.1</version>
     </dependency>
 
     <dependency>
@@ -389,141 +389,43 @@
       <artifactId>commons-compress</artifactId>
       <version>1.20</version>
     </dependency>
+
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+      <version>1.18.30</version>
+    </dependency>
+
+    <dependency>
+      <groupId>cn.hutool</groupId>
+      <artifactId>hutool-all</artifactId>
+      <version>5.8.9</version>
+    </dependency>
+    <dependency>
+      <groupId>com.google.zxing</groupId>
+      <artifactId>core</artifactId>
+      <version>3.3.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.google.zxing</groupId>
+      <artifactId>javase</artifactId>
+      <version>3.3.3</version>
+    </dependency>
   </dependencies>
 
   <profiles>
     <profile>
       <id>test</id>
       <properties>
-        <profile.active>gslab</profile.active>
+        <profile.active>levena</profile.active>
       </properties>
       <activation>
         <activeByDefault>true</activeByDefault>
       </activation>
     </profile>
-    <profile>
-      <id>sds</id>
-      <properties>
-        <profile.active>sds</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>lhs</id>
-      <properties>
-        <profile.active>lhs</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>sin</id>
-      <properties>
-        <profile.active>sin</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>twt</id>
-      <properties>
-        <profile.active>twt</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>hws</id>
-      <properties>
-        <profile.active>hws</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>gcs</id>
-      <properties>
-        <profile.active>gcs</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>lzhws</id>
-      <properties>
-        <profile.active>lzhws</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>qhyhs</id>
-      <properties>
-        <profile.active>qhyhs</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>szygs</id>
-      <properties>
-        <profile.active>szygs</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>zkysh</id>
-      <properties>
-        <profile.active>zkysh</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>shgjs</id>
-      <properties>
-        <profile.active>shgjs</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>zkyshs</id>
-      <properties>
-        <profile.active>zkyshs</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>gslab</id>
-      <properties>
-        <profile.active>gslab</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>zkdsz</id>
-      <properties>
-        <profile.active>zkdsz</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>xjdx</id>
-      <properties>
-        <profile.active>xjdx</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>aky</id>
-      <properties>
-        <profile.active>aky</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>silkroad</id>
-      <properties>
-        <profile.active>silkroad</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>guotai</id>
-      <properties>
-        <profile.active>guotai</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>cq</id>
-      <properties>
-        <profile.active>cq</profile.active>
-      </properties>
-    </profile>
-    <profile>
-      <id>sdy</id>
-      <properties>
-        <profile.active>sdy</profile.active>
-      </properties>
-    </profile>
   </profiles>
   <build>
-    <finalName>smartlab</finalName>
+    <finalName>smartlab_promote</finalName>
     <filters>
       <filter>src/main/webapp/WEB-INF/${profile.active}/${profile.active}.properties</filter>
     </filters>
diff --git a/src/main/java/com/nanometer/smartlab/api/ApiAction.java b/src/main/java/com/nanometer/smartlab/api/ApiAction.java
index 993fe6b..6a0e601 100644
--- a/src/main/java/com/nanometer/smartlab/api/ApiAction.java
+++ b/src/main/java/com/nanometer/smartlab/api/ApiAction.java
@@ -9,6 +9,7 @@
 import com.nanometer.smartlab.controller.MenuController;
 import com.nanometer.smartlab.dao.OpeReagentStatusDao;
 import com.nanometer.smartlab.dao.SysLaboratoryContainerDao;
+import com.nanometer.smartlab.dao.SysLaboratoryDao;
 import com.nanometer.smartlab.dao.SysWarehouseContainerDao;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.dto.*;
@@ -80,6 +81,12 @@
     @Lazy
     @Resource
     private SysLaboratoryContainerDao sysLaboratoryContainerDao;
+
+    @Lazy
+    @Resource
+    private SysLaboratoryDao sysLaboratoryDao;
+
+
     @Lazy
     @Resource
     private SysWarehouseContainerDao sysWarehouseContainerDao;
@@ -121,7 +128,7 @@
         }
 
         logger.info("registerTestCabinet" + data);
-        String userId = request.getHeader("userId");
+        Long userId = Long.valueOf(request.getHeader("userId"));
         JSONObject retJSON = new JSONObject();
         try {
             interfaceService.registerTestCabinet(userId, JSONObject.parseObject(data));
@@ -158,7 +165,7 @@
         }
 
         logger.info("AutheTestCabinet" + data);
-        String userId = request.getHeader("userId");
+        Long userId = Long.valueOf(request.getHeader("userId"));
         JSONObject retJSON = new JSONObject();
         try {
             interfaceService.AutheTestCabinet(userId, JSONObject.parseObject(data));
@@ -192,7 +199,7 @@
             data += str;
         }
         logger.info("logoutTestCabinet" + data);
-        String userId = request.getHeader("userId");
+        Long userId = Long.valueOf(request.getHeader("userId"));
         JSONObject retJSON = new JSONObject();
         try {
             interfaceService.logoutTestCabinet(userId, JSONObject.parseObject(data));
@@ -227,7 +234,7 @@
             data += str;
         }
         logger.info("updateTestCabinet" + data);
-        String userId = request.getHeader("userId");
+        Long userId = Long.valueOf(request.getHeader("userId"));
         JSONObject retJSON = new JSONObject();
         try {
             interfaceService.updateTestCabinet(userId, JSONObject.parseObject(data));
@@ -262,7 +269,7 @@
             data += str;
         }
         logger.info("openCabinetDoor" + data);
-        String userId = request.getHeader("userId");
+        Long userId = Long.valueOf(request.getHeader("userId"));
         JSONObject retJSON = new JSONObject();
         try {
             String returndata = interfaceService.openCabinetDoor(userId, JSONObject.parseObject(data));
@@ -385,7 +392,7 @@
 //    操作状态	10	仓库入库
     @ResponseBody
     @RequestMapping(value = "/cabinetData")
-    public String cabinetData(HttpServletRequest request) throws IOException {
+    public String cabinetData(HttpServletRequest request) throws Exception {
         BufferedReader br = request.getReader();
         String str, data = "";
         while((str = br.readLine()) != null){
@@ -393,24 +400,22 @@
         }
         JSONObject retJSON = new JSONObject();
         logger.info("cabinetData" + data);
-        String userId = request.getHeader("userId");
-
+        Long userId = StringUtils.isNotBlank(request.getHeader("userId"))?Long.valueOf(request.getHeader("userId")):null;
+        if(userId==null){
+            throw new ApiException(ApiStatus.SYS_ERR,"传参用户ID为空");
+        }
         // Body参数
         JSONObject bodyJSONObject = new JSONObject();
         bodyJSONObject = JSONObject.parseObject(data);
 
-        // 主控条码
-        String controllerCode = bodyJSONObject.getString("controllerCode");
 
         try {
             // 数据
             String dataStr = bodyJSONObject.getString("data");
             JSONArray dataJSONArray = JSONArray.parseArray(dataStr);
             logger.info("dataJSONArray: " + dataJSONArray);
-
-
             if(	dataJSONArray.size() !=0 ){
-                interfaceService.cabinetData(dataJSONArray);
+                interfaceService.cabinetData(dataJSONArray,userId);
             }
 
             retJSON.put("code", ApiStatus.OK.getRetCode());
@@ -544,7 +549,7 @@
     @RequestMapping(value = "/reagentInfo")
     public Object getReagentInfo(@RequestParam String startTime, @RequestParam String endTime, @RequestParam String containerCode, @RequestParam String status) {
         logger.info("getReagentInfo start...");
-        String containerid = null;
+        Long containerid = null;
 
         SysLaboratoryContainer laboratoryContainer = sysLaboratoryContainerDao
 				.getSysLaboratoryContainerByContainerCode(containerCode);
@@ -595,7 +600,7 @@
         logger.info("getUserInfo start...");
 
         List<SysUser> userList = sysUserService.getSysUserInfoList(startTime, endTime);
-        List<SysLaboratoryContainer> allLaboratoryContainerList = sysLaboratoryContainerService.getSysLaboratoryContainerList(null,null,null,null,null,null,null);
+        List<SysLaboratoryContainer> allLaboratoryContainerList = sysLaboratoryContainerService.getSysLaboratoryContainerList(null,null,null,null,null,null);
         List<SysWarehouseContainer> allWarehouseContainerList = sysWarehouseContainerService.getSysWarehouseContainerList(null,null,null,null,null);
 
         List<String> containerCodeList = new ArrayList<String>();
@@ -636,35 +641,41 @@
     }
 
 
-
-
-
+    /**
+     * 入实验室库操作
+     * @param request
+     * @param reagentCode
+     * @return
+     */
     @RequestMapping(value = "/putInLaboratory", produces = {"application/json;charset=UTF-8"}, method = RequestMethod.POST)
     @ResponseBody
-    public String putInLaboratory(HttpServletRequest request, String reagentCode, String barCode, String containerCode) {
+    public String putInLaboratory(HttpServletRequest request, String reagentCode, Long labId, Long labContainerId) {
         try {
             logger.info("PutInLaboratory start...");
-            logger.info("Params : reagentCode[" + reagentCode + "], barCode[" + barCode + "], containerCode[" + containerCode + "]");
 
             // 检查用户
-            String idCard = this.getIdCardFromHeader(request);
-            if (StringUtils.isBlank(idCard)) {
-                throw new BusinessException(ExceptionEnumCode.PARAM_NULL, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NULL.getCode(), "用户卡号"));
+            Long userId = StringUtils.isNotBlank(request.getHeader("userId"))?Long.valueOf(request.getHeader("userId")):null;
+            if(userId==null){
+                throw new ApiException(ApiStatus.SYS_ERR,"传参用户ID为空");
             }
-            SysUser sysUser = this.sysUserService.getSysUserByIdCard(idCard);
-
-            if (sysUser == null) {
-                if(idCard.length()==20){//截取长度为8的卡号再次查询
-                    idCard=idCard.substring(10,18);
-                    sysUser = this.sysUserService.getSysUserByIdCard(idCard);
-                    if(sysUser==null){
-                        throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "用户卡号", idCard));
-                    }
-                }else {
-                    throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "用户卡号", idCard));
-                }
-
-            }
+//            String idCard = this.getIdCardFromHeader(request);
+//            if (StringUtils.isBlank(idCard)) {
+//                throw new BusinessException(ExceptionEnumCode.PARAM_NULL, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NULL.getCode(), "用户卡号"));
+//            }
+//            SysUser sysUser = this.sysUserService.getSysUserByIdCard(idCard);
+//
+//            if (sysUser == null) {
+//                if(idCard.length()==20){//截取长度为8的卡号再次查询
+//                    idCard=idCard.substring(10,18);
+//                    sysUser = this.sysUserService.getSysUserByIdCard(idCard);
+//                    if(sysUser==null){
+//                        throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "用户卡号", idCard));
+//                    }
+//                }else {
+//                    throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "用户卡号", idCard));
+//                }
+//
+//            }
 
             // 检查试剂条码
             if (StringUtils.isBlank(reagentCode)) {
@@ -672,16 +683,16 @@
             }
 
             // 检查地点条码
-            if (StringUtils.isBlank(barCode)) {
-                throw new BusinessException(ExceptionEnumCode.PARAM_NULL, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NULL.getCode(), "地点条码"));
+            if (labId==null) {
+                throw new BusinessException(ExceptionEnumCode.PARAM_NULL, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NULL.getCode(), "地点id"));
             }
 
             // 检查货柜条码
-            if (StringUtils.isBlank(containerCode)) {
-                throw new BusinessException(ExceptionEnumCode.PARAM_NULL, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NULL.getCode(), "货柜条码"));
+            if (labContainerId==null) {
+                throw new BusinessException(ExceptionEnumCode.PARAM_NULL, MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NULL.getCode(), "货柜id"));
             }
 
-            this.opeReagentStatusService.putReagentInLaboratory(reagentCode, barCode, containerCode, sysUser);
+            this.opeReagentStatusService.putReagentInLaboratory(reagentCode, labId, labContainerId, userId);
 
             return this.getOkResponseString();
         } catch (BusinessException e) {
@@ -695,91 +706,6 @@
         }
     }
 
-//
-//
-//    @RequestMapping(value = "/setWarning", produces = {"application/json;charset=UTF-8"}, method = RequestMethod.POST)
-//    @ResponseBody
-//    public String setWarning(HttpServletRequest request) throws ParseException, IOException, ApiException {
-//        BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
-//        String str = "";
-//        String inputLine;
-//        try {
-//            while ((inputLine = reader.readLine()) != null) {
-//                str += inputLine;
-//            }
-//            reader.close();
-//        } catch (IOException e) {
-//            System.out.println("IOException: " + e);
-//        }
-//        JSONObject jsonObject = JSON.parseObject(str);
-//        SysWarning sysWarning = new SysWarning();
-//        if (!jsonObject.containsKey("controllerCode")
-//                || ! jsonObject.containsKey("data")) {
-//            throw new ApiException(ApiStatus.PARAM_NO_EXIST);
-//        }
-//
-//        String controllerCode = jsonObject.getString("controllerCode");
-//
-//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-//        String dataStr = jsonObject.getString("data");
-//
-//
-//        JSONObject dataJson = JSON.parseObject(dataStr);
-//
-//            if (!dataJson.containsKey("warningId")
-//                    || !dataJson.containsKey("userId")
-//                    || !dataJson.containsKey("warningTime")
-//                    || !dataJson.containsKey("warningLevel")
-//                    || !dataJson.containsKey("containerCode")
-//                    || !dataJson.containsKey("warningPoint")) {
-//                throw new ApiException(ApiStatus.PARAM_NO_EXIST);
-//            }
-//
-//            String containerCode = dataJson.getString("containerCode");
-//            String warningId = dataJson.getString("warningId");
-//            String userId = dataJson.getString("userId");
-//            String warningTimeStr = dataJson.getString("warningTime");
-//            Integer warningLevelInt = dataJson.getInteger("warningLevel");
-//            Integer warningPoint = dataJson.getInteger("warningPoint");
-//
-//            sysWarning.setUserId(userId);
-//            sysWarning.setWarningTime(sdf.parse(warningTimeStr));
-//            sysWarning.setWarningPoint(warningPoint);
-//            sysWarning.setWarningLevel(warningLevelInt);
-//            sysWarning.setWarningId(warningId);
-//            sysWarning.setId(IDUtils.uuid());
-//
-//
-//        SysLaboratoryContainer laboratoryContainer = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(containerCode);
-//        if (Objects.isNull(laboratoryContainer)) {
-//            SysWarehouseContainer warehouseContainer = sysWarehouseContainerDao.getSysWarehouseContainerByContainerCode(containerCode);
-//            if (Objects.isNull(warehouseContainer)) {
-//                logger.error("The containerCode:"+containerCode+" has not been exists!");
-//            } else {
-//                sysWarning.setContainerId(warehouseContainer.getId());
-//                }
-//            } else {
-//                sysWarning.setContainerId(laboratoryContainer.getId());
-//            }
-//            JSONObject retJSON = new JSONObject();
-//            try {
-//                sysWarningService.insert(sysWarning);
-//                retJSON.put("code", ApiStatus.OK.getRetCode());
-//                retJSON.put("message", ApiStatus.OK.getRetMsg());
-//            } catch (Exception e) {
-//                retJSON.put("code", ApiStatus.SYS_ERR.getRetCode());
-//                StackTraceElement[] stackTraceElements = e.getStackTrace();
-//
-//                StringBuilder sb = new StringBuilder();
-//                sb.append(e.toString());
-//                for (StackTraceElement stackTraceElement : stackTraceElements) {
-//                    sb.append("\n");
-//                    sb.append(stackTraceElement.toString());
-//                }
-//                retJSON.put("message", ApiStatus.SYS_ERR.getRetMsg() + "--" + sb.toString());
-//            }
-//            return retJSON.toJSONString();
-//    }
 
 
     // 智能柜温度,湿度,气体浓度数据接口
@@ -827,7 +753,7 @@
         	e.printStackTrace();
         }
         int type = 0;
-        String containerId = null;
+        Long containerId = null;
         logger.info("The containerCode:" + containerCode + " finding!");
 		// 查找货柜条码对应货柜信息
 		SysLaboratoryContainer laboratoryContainer = sysLaboratoryContainerDao
@@ -886,16 +812,16 @@
             }
 
 			SysContainerSensors sysContainerSensors = new SysContainerSensors();
-			sysContainerSensors.setContainerId(containerCode);
+			sysContainerSensors.setContainerId(Long.valueOf(containerCode));
 			TempSensors tempSensors = new TempSensors();
-			tempSensors.setContainerId(containerCode);
+			tempSensors.setContainerId(Long.valueOf(containerCode));
 			/* tempSensors.setFlag(flag); */
 			tempSensors.setTemp(temp);
 			tempSensors.setHumidity(humidity);
 			tempSensors.setVoc1(voc1);
 			tempSensors.setFlag(flag);
 			tempSensors.setUpdateTime(sdf.parse(updateTime));
-			tempSensors.setId(IDUtils.uuid());
+			//tempSensors.setId(IDUtils.uuid());
 			tempSensors.setType(type);
 			tempSensors.setContainerId(containerId);
 
@@ -1019,7 +945,7 @@
     }
     @ResponseBody
     @RequestMapping(value = "/downloadFile")
-    public HttpServletResponse downloadFile(HttpServletRequest request, String id, HttpServletResponse response){
+    public HttpServletResponse downloadFile(HttpServletRequest request, Long id, HttpServletResponse response){
         SysFile sysFile=this.sysFileService.getSysFileById(id);
         try {
                    // path是指欲下载的文件的路径。
@@ -1113,7 +1039,7 @@
             map.put("unit", user.getCompany());
             map.put("Arp", user.getArp());
             map.put("departmentName", user.getDepartment());
-            map.put("project", user.getProject());
+            map.put("projectId", user.getProjectId());
 
         }
         logger.info("getUserInfo end...");
@@ -1125,21 +1051,21 @@
     @ResponseBody
     @RequestMapping(value = "/dangerousEncodeInfo")
     public Object getDangerousEncodeInfo(@RequestParam String reagentName, @RequestParam String cas) {
-        List<DangerousEncodeVo> datalist = new ArrayList<>();
+        List<DangerousEncode> datalist = new ArrayList<>();
         if (StringUtils.isNotBlank(reagentName) || StringUtils.isNotBlank(cas)){
             datalist = dangerousEncodeService.selectByReagentName(reagentName,cas);
-            for (DangerousEncodeVo dangerousEncodeVo : datalist){
-                if (StringUtils.isNotBlank(dangerousEncodeVo.getContainerNumber())){
-                    if (dangerousEncodeVo.getContainerNumber().startsWith("0")){
-                        dangerousEncodeVo.setContainerName("普通型");
-                    }else if (dangerousEncodeVo.getContainerNumber().startsWith("1")){
-                        dangerousEncodeVo.setContainerName("阻燃型");
-                    }else if (dangerousEncodeVo.getContainerNumber().startsWith("2")){
-                        dangerousEncodeVo.setContainerName("抗腐蚀型");
-                    }else if (dangerousEncodeVo.getContainerNumber().startsWith("3")){
-                        dangerousEncodeVo.setContainerName("防爆型");
-                    }else if (dangerousEncodeVo.getContainerNumber().startsWith("4")){
-                        dangerousEncodeVo.setContainerName("有毒称重型");
+            for (DangerousEncode dangerousEncode : datalist){
+                if (StringUtils.isNotBlank(dangerousEncode.getContainerNumber())){
+                    if (dangerousEncode.getContainerNumber().startsWith("0")){
+                        dangerousEncode.setContainerName("普通型");
+                    }else if (dangerousEncode.getContainerNumber().startsWith("1")){
+                        dangerousEncode.setContainerName("阻燃型");
+                    }else if (dangerousEncode.getContainerNumber().startsWith("2")){
+                        dangerousEncode.setContainerName("抗腐蚀型");
+                    }else if (dangerousEncode.getContainerNumber().startsWith("3")){
+                        dangerousEncode.setContainerName("防爆型");
+                    }else if (dangerousEncode.getContainerNumber().startsWith("4")){
+                        dangerousEncode.setContainerName("有毒称重型");
                     }
                 }
             }
@@ -1335,28 +1261,28 @@
                         return ResponseModel.getErrInstance("该试剂危化品编码已存在");
                     }
                 }
-
-                //3.如果是入智能柜,则该智能柜下需要存在对应的实验室和实验室柜子
-                SysWarehouseContainer sysWarehouseContainer = sysWarehouseContainerService.getSysWarehouseContainer(inWarehouseInfo.getContainerId());
-                if(this.baseMetaService.getBaseMetaKey(sysWarehouseContainer.getType()).equals("200")) {
-                    reagentReceivingDtos.setReagentCode(inWarehouseInfo.getReagentCode());
-                    reagentReceivingDtos.setApplyUserId(inWarehouseInfo.getUser());
-                    SysLaboratoryContainer sysLaboratoryContainer = sysLaboratoryContainerService.getSysLaboratoryContainerByContainerCode(sysWarehouseContainer.getContainerCode());
-                    if (null != sysLaboratoryContainer){
-                        reagentReceivingDtos.setLabId(sysLaboratoryContainer.getLaboratoryId());
-                        reagentReceivingDtos.setLabContainerId(sysLaboratoryContainer.getId());
-                    }else {
-                        return ResponseModel.getErrInstance("该仓库货柜为智能柜,但是未创建相同货柜条码的实验室临时存储柜");
-                    }
-                }
+//
+//                //3.如果是入智能柜,则该智能柜下需要存在对应的实验室和实验室柜子
+//                SysWarehouseContainer sysWarehouseContainer = sysWarehouseContainerService.getSysWarehouseContainer(inWarehouseInfo.getContainerId());
+//                if(this.baseMetaService.getBaseMetaKey(sysWarehouseContainer.getType()).equals("200")) {
+//                    reagentReceivingDtos.setReagentCode(inWarehouseInfo.getReagentCode());
+//                    reagentReceivingDtos.setApplyUserId(inWarehouseInfo.getUser());
+//                    SysLaboratoryContainer sysLaboratoryContainer = sysLaboratoryContainerService.getSysLaboratoryContainerByContainerCode(sysWarehouseContainer.getContainerCode());
+//                    if (null != sysLaboratoryContainer){
+//                        reagentReceivingDtos.setLabId(sysLaboratoryContainer.getLaboratoryId());
+//                        reagentReceivingDtos.setLabContainerId(sysLaboratoryContainer.getId());
+//                    }else {
+//                        return ResponseModel.getErrInstance("该仓库货柜为智能柜,但是未创建相同货柜条码的实验室临时存储柜");
+//                    }
+//                }
 
                 //4.入库
                 sysWarehouseService.putInWarehouse(inWarehouseInfo);
 
                 //5.如果是入智能柜,则需再领用到智能柜里
-                if (StringUtils.isNotBlank(reagentReceivingDtos.getLabContainerId())){
-                    sysWarehouseService.reagentReceiving(reagentReceivingDtos);
-                }
+//                if (reagentReceivingDtos.getLabContainerId()!=null){
+//                    sysWarehouseService.reagentReceiving(reagentReceivingDtos);
+//                }
 
                 return ResponseModel.getOkInstence("入库成功");
             } else {
@@ -1379,23 +1305,26 @@
     @RequestMapping("reagentReceiving")
     public Object reagentReceiving(@RequestBody ReagentReceivingDto reagentReceiving) {
         try {
-            if (reagentReceiving.getReagentCode() != null && reagentReceiving.getReagentCode().size() > 0) {
-
-                //1.校验仓库是否有该试剂
-                for (int i = 0; i < reagentReceiving.getReagentCode().size(); i++) {
-                    String reagentCode = reagentReceiving.getReagentCode().get(i);
-                    //去试剂状态查找 是否有此试剂条码
-                    OpeReagentStatus ors = opeReagentStatusService.getOpeReagentStatusByReagentCode(reagentCode);
-                    if (ors == null || ors.getStatus() != ArrivalStatus.WAREHOUSE){
-                        return ResponseModel.getErrInstance("仓库无此试剂");
-                    }
-                }
-                //2.领用
-                sysWarehouseService.reagentReceiving(reagentReceiving);
-                return ResponseModel.getOkInstence("领用成功");
-            } else {
+            if (reagentReceiving.getReagentCode() == null || reagentReceiving.getReagentCode().size() == 0) {
                 return ResponseModel.getErrInstance("无效试剂条码");
             }
+            if(reagentReceiving.getLabId()==null||reagentReceiving.getLabContainerId()==null||reagentReceiving.getApplyUserId()==null){
+                return ResponseModel.getErrInstance("传参错误");
+            }
+            //1.校验仓库是否有该试剂
+            for (int i = 0; i < reagentReceiving.getReagentCode().size(); i++) {
+                String reagentCode = reagentReceiving.getReagentCode().get(i);
+                //去试剂状态查找 是否有此试剂条码
+                OpeReagentStatus ors = opeReagentStatusService.getOpeReagentStatusByReagentCode(reagentCode);
+                if (ors == null || ors.getStatus() != ArrivalStatus.WAREHOUSE.getKey()){
+                    return ResponseModel.getErrInstance("仓库无此试剂");
+                }
+            }
+
+            //2.领用
+            sysWarehouseService.reagentReceiving(reagentReceiving);
+            return ResponseModel.getOkInstence("领用成功");
+
         } catch (Exception e) {
             e.printStackTrace();
             logger.info(e);
@@ -1417,8 +1346,8 @@
             if (reagentReceiving.getReagentCode() == null || reagentReceiving.getReagentCode().size() == 0) {
                 return  ResponseModel.getErrInstance("请选择申领试剂");
             }
-            if (StringUtils.isBlank(reagentReceiving.getApplyUserId())|| StringUtils.isBlank(reagentReceiving.getLabContainerId())
-            || StringUtils.isBlank(reagentReceiving.getLabId())){
+            if (reagentReceiving.getApplyUserId()!=null|| reagentReceiving.getLabContainerId()!=null
+            || reagentReceiving.getLabId()!=null){
                 FacesUtils.warn("请选择申领人、实验室、货柜");
             }
             for (String reagentCode : reagentReceiving.getReagentCode()) {
@@ -1443,7 +1372,7 @@
                 lr.setValidFlag(ValidFlag.VALID);
                 opeLaboratoryReserveService.insert(lr);
 
-                opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+                opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
                 opeReagentStatus.setUserId(reagentReceiving.getApplyUserId());
                 opeReagentStatus.setHouseId(reagentReceiving.getLabId());
                 opeReagentStatus.setContainerId(reagentReceiving.getLabContainerId());
@@ -1457,10 +1386,9 @@
                 opeUseFlow.setContainerId(opeReagentStatus.getContainerId());
                 opeUseFlow.setUserId(opeReagentStatus.getUserId());
                 opeUseFlow.setPlace(opeReagentStatus.getPlace());
-                opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+                opeUseFlow.setStoreType(StoreType.DIRECTSTORE.getKey());
                 opeUseFlow.setRemainder(opeUseFlowExist.getRemainder());
-                BaseMeta baseMeta = baseMetaService.getBaseMeta("operate_status",String.valueOf(OperateStatus.TRANSFER.getKey()),"转移");
-                opeUseFlow.setOperateState(baseMeta.getId());
+                opeUseFlow.setOperateState(OperateStatus.TRANSFER.getKey());
                 opeUseFlow.setReceiptNumber(number);
                 opeUseFlowService.insertOpeUseFlow(opeUseFlow);
             }
@@ -1489,11 +1417,12 @@
                 return  ResponseModel.getErrInstance("账户名不存在");
             }else{
                 if (sysUser.getPassword().equals(MD5Utils.encode(user.getPassword()))){
-                    if (sysUser.getAdminFlag() != 0){
-                        user = sysUser;
-                    }else{
-                        return ResponseModel.getErrInstance("用户不属于危废处理人员");
-                    }
+//                    if (sysUser.getAdminFlag() != 0){
+//                        user = sysUser;
+//                    }else{
+//                        return ResponseModel.getErrInstance("用户不属于危废处理人员");
+//                    }
+                    user = sysUser;
                     return ResponseModel.getOkInstence(user);
                 }else{
                     return ResponseModel.getErrInstance("密码错误");
@@ -1551,14 +1480,14 @@
      */
     @ResponseBody
     @RequestMapping("hazardousWaste/getLabAndUser")
-    public Object getLabAndUser(@RequestParam(required=true) String project){
+    public Object getLabAndUser(@RequestParam(required=true) Long projectId){
         try {
-            if (StringUtils.isBlank(project)){
-                return  ResponseModel.getErrInstance("课题组不能为空");
+            if (projectId==null){
+                return  ResponseModel.getErrInstance("课题组id不能为空");
             }
             LaboratoryVo laboratoryVo = new LaboratoryVo();
-            List<LaboratoryVo.Laboratory> laboratoryList = sysLaboratoryService.getLaboratoryByProject(project);
-            List<LaboratoryVo.LaboratoryUser> laboratoryUserList = sysUserService.getUserByProject(project);
+            List<LaboratoryVo.Laboratory> laboratoryList = sysLaboratoryService.getLaboratoryByProject(projectId);
+            List<LaboratoryVo.LaboratoryUser> laboratoryUserList = sysUserService.getUserByProject(projectId);
             laboratoryVo.setLaboratoryList(laboratoryList);
             laboratoryVo.setLaboratoryUsers(laboratoryUserList);
             return ResponseModel.getOkInstence(laboratoryVo);
@@ -1577,8 +1506,8 @@
     @RequestMapping("hazardousWaste/putWasteInfo")
     public Object putWasteInfo(@RequestBody HazardousWaste hazardousWaste){
         try {
-            if (StringUtils.isBlank(hazardousWaste.getDepartment()) || StringUtils.isBlank(hazardousWaste.getApplyPerson())
-            || StringUtils.isBlank(hazardousWaste.getProject()) || StringUtils.isBlank(hazardousWaste.getCreator())){
+            if (StringUtils.isBlank(hazardousWaste.getDepartment()) || hazardousWaste.getApplyPerson()!=null
+            || hazardousWaste.getProjectId()==null || StringUtils.isBlank(hazardousWaste.getCreator())){
                 return  ResponseModel.getErrInstance("部门、课题组、确认者、创建者、不能为空");
             }
             SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
@@ -1908,5 +1837,90 @@
         }
     }
 
+
+    /**
+     * 根据用户id查询实验室列表和实验室临时存储库列表
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/labAndContainerList",method = RequestMethod.GET)
+    public Object getLabAndContainerList(HttpServletRequest request){
+        try {
+            Long userId = StringUtils.isNotBlank(request.getHeader("userId"))?Long.valueOf(request.getHeader("userId")):null;
+            if(userId==null){
+                throw new ApiException(ApiStatus.SYS_ERR,"传参用户ID为空");
+            }
+            return ResponseModel.getOkInstence(interfaceService.getLabAndContainerByUserId(userId));
+        }catch (ApiException e) {
+            return ResponseModel.getErrInstance(e.getErrorMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseModel.getErrInstance("系统内部错误");
+        }
+    }
+
+
+    /**
+     * 根据试剂编码查询流向
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/reagentUseFlowList",method = RequestMethod.GET)
+    public Object getReagentUseFlowList(@RequestParam(required=true) String reagentCode){
+        try {
+            return ResponseModel.getOkInstence(interfaceService.getReagentUseFlowList(reagentCode));
+        }catch (ApiException e) {
+            return ResponseModel.getErrInstance(e.getErrorMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseModel.getErrInstance("系统内部错误");
+        }
+    }
+
+    /**
+     * 根据用户id查询所属实验室信息
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/userLabList",method = RequestMethod.GET)
+    public Object getUserLabList(HttpServletRequest request){
+        try {
+            Long userId = StringUtils.isNotBlank(request.getHeader("userId"))?Long.valueOf(request.getHeader("userId")):null;
+            if(userId==null){
+                throw new ApiException(ApiStatus.SYS_ERR,"传参用户ID为空");
+            }
+            return ResponseModel.getOkInstence(interfaceService.getLaboratoryByUserId(userId));
+        }catch (ApiException e) {
+            return ResponseModel.getErrInstance(e.getErrorMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseModel.getErrInstance("系统内部错误");
+        }
+    }
+
+    /**
+     * 根据用户id查询试剂流向信息
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/personUserFlowList",method = RequestMethod.GET)
+    public Object getPersonUserFlowList(HttpServletRequest request,@RequestParam(required=false,defaultValue = "1") Integer pageNum,@RequestParam(required=false,defaultValue = "10") Integer pageSize,Integer operatestate,String startDate,String endDate){
+        try {
+            Long userId = StringUtils.isNotBlank(request.getHeader("userId"))?Long.valueOf(request.getHeader("userId")):null;
+            if(userId==null){
+                throw new ApiException(ApiStatus.SYS_ERR,"传参用户ID为空");
+            }
+            return ResponseModel.getOkInstence(interfaceService.getOpeUseFlowByUserId(pageNum,pageSize,userId,operatestate,startDate,endDate));
+        }catch (ApiException e) {
+            return ResponseModel.getErrInstance(e.getErrorMessage());
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResponseModel.getErrInstance("系统内部错误");
+        }
+    }
+
+
+
+
 }
 
diff --git a/src/main/java/com/nanometer/smartlab/api/schedule/ReagentSyncSchedule.java b/src/main/java/com/nanometer/smartlab/api/schedule/ReagentSyncSchedule.java
index 347d7e2..8f94594 100644
--- a/src/main/java/com/nanometer/smartlab/api/schedule/ReagentSyncSchedule.java
+++ b/src/main/java/com/nanometer/smartlab/api/schedule/ReagentSyncSchedule.java
@@ -61,100 +61,100 @@
     private static String reagentFlowLastdate = null;
 
     //@Scheduled(fixedDelayString = "${reagent.status.schedule.delay}")
-    public void syncReagentStatus(){
-        Date current = new Date();
-        BaseMeta baseMeta = null;
-		baseMeta = baseMetaService.getBaseMeta("syncreagentstatuslastdata");
-        if(reagentStatusLastdate == null) {
-            reagentStatusLastdate = baseMeta.getMetaValue();
-        }
-
-        RestTemplate client = new RestTemplate();
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-        MultiValueMap<String, String> varParams= new LinkedMultiValueMap<String, String>();
-        varParams.add("startTime",reagentStatusLastdate);
-        String lastDate = DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS);
-        varParams.add("endTime",lastDate);
-
-		logger.info("startTime: "+reagentStatusLastdate+"lastDate "+lastDate);
-
-        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(varParams, headers);
-        ResponseEntity<LinkedHashMap> response = client.postForEntity(reagentStatusUrl, requestEntity , LinkedHashMap.class );
-        List<LinkedHashMap> data = (ArrayList)response.getBody().get("data");
-        if(CollectionUtils.isEmpty(data)==false){
-            logger.info("result data: "+ JSON.toJSONString(data));
-            reagentStatusService.syncOpeReagentStatus(data);
-        }
-        reagentStatusLastdate = lastDate;
-        baseMeta.setMetaValue(reagentStatusLastdate);
-        baseMetaService.updateBaseMeta(baseMeta);
-    }
-
-    //@Scheduled(fixedDelayString = "${reagent.flow.schedule.delay}")
-    public void syncReagentFlow() throws ParseException{
-        Date current = new Date();
-        BaseMeta baseMeta = null;
-		baseMeta = baseMetaService.getBaseMeta("syncreagentflowlastdata");
-        if(reagentFlowLastdate == null) {
-            reagentFlowLastdate = baseMeta.getMetaValue();
-        }
-
-        RestTemplate client = new RestTemplate();
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-        MultiValueMap<String, String> varParams= new LinkedMultiValueMap<String, String>();
-        varParams.add("startTime",reagentFlowLastdate);
-        String lastDate = DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS);
-        varParams.add("endTime",lastDate);
-
-		logger.info("startTime: "+reagentStatusLastdate+"lastDate "+lastDate);
-
-        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(varParams, headers);
-        ResponseEntity<LinkedHashMap> response = client.postForEntity(reagentFlowUrl, requestEntity , LinkedHashMap.class );
-        List<LinkedHashMap> data = (ArrayList)response.getBody().get("data");
-        if(CollectionUtils.isEmpty(data)==false){
-            opeUseFlowService.syncReagentFlow(data);
-            //[{"status":1,"containerCode":"c1000-001","updateTime":"2018-04-15 11:23:49","reagentCode":"r2010-0001","idcard":"u001"}....]
-            logger.info("result data: "+JSON.toJSONString(data));
-        }
-        baseMeta.setMetaValue(lastDate);
-        reagentFlowLastdate = lastDate;
-        baseMetaService.updateBaseMeta(baseMeta);
-    }
-
-    //@Scheduled(fixedDelayString = "${sensors.schedule.delay}")
-    public void syncSensors() {
-        Date current = new Date();
-        BaseMeta baseMeta = baseMetaService.getBaseMeta("syncsensorslastdata");
-        RestTemplate client = new RestTemplate();
-        HttpHeaders headers = new HttpHeaders();
-        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-        MultiValueMap<String, String> varParams= new LinkedMultiValueMap<String, String>();
-        varParams.add("startTime",baseMeta.getMetaValue());
-        varParams.add("endTime",DateFormatUtils.format(current,Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS));
-        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(varParams, headers);
-        ResponseEntity<LinkedHashMap> response = client.postForEntity(reagentSensorsUrl, requestEntity , LinkedHashMap.class );
-        LinkedHashMap body = response.getBody();
-        List<LinkedHashMap> data = body == null ? null : (ArrayList) body.get("data");
-        if(!CollectionUtils.isEmpty(data)){
-            try {
-                logger.info("result data: " + JSON.toJSONString(data));
-                sysContainerSensorsService.syncSysContainerSensors(data);
-                //{"data": [{"containerCode": "c1000-003", "Temp": 28.0, "Flag": 16, "Humidity": 58, "updateTime": "2018-04-18 13:37:46", "voc1": 20}], "func": "sensors", "method": "POST", "message": "OK", "code": 0}
-                baseMeta.setMetaValue(DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS));
-                baseMetaService.updateBaseMeta(baseMeta);
-            }catch (Exception e){
-                logger.error("error occured.", e);
-            }
-        }
-    }
-
-
-    @Scheduled(cron = "0 0 2 1 * ?")
-    public void updateUserPoint() {
-        logger.debug("updateUserPoint start,and now is "+new Date());
-        sysUserService.updateUserPointBySelective(20,null);
-        logger.debug("updateUserPoint end");
-    }
+//    public void syncReagentStatus(){
+//        Date current = new Date();
+//        BaseMeta baseMeta = null;
+//		baseMeta = baseMetaService.getBaseMeta("syncreagentstatuslastdata");
+//        if(reagentStatusLastdate == null) {
+//            reagentStatusLastdate = baseMeta.getMetaValue();
+//        }
+//
+//        RestTemplate client = new RestTemplate();
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+//        MultiValueMap<String, String> varParams= new LinkedMultiValueMap<String, String>();
+//        varParams.add("startTime",reagentStatusLastdate);
+//        String lastDate = DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS);
+//        varParams.add("endTime",lastDate);
+//
+//		logger.info("startTime: "+reagentStatusLastdate+"lastDate "+lastDate);
+//
+//        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(varParams, headers);
+//        ResponseEntity<LinkedHashMap> response = client.postForEntity(reagentStatusUrl, requestEntity , LinkedHashMap.class );
+//        List<LinkedHashMap> data = (ArrayList)response.getBody().get("data");
+//        if(CollectionUtils.isEmpty(data)==false){
+//            logger.info("result data: "+ JSON.toJSONString(data));
+//            reagentStatusService.syncOpeReagentStatus(data);
+//        }
+//        reagentStatusLastdate = lastDate;
+//        baseMeta.setMetaValue(reagentStatusLastdate);
+//        baseMetaService.updateBaseMeta(baseMeta);
+//    }
+//
+//    //@Scheduled(fixedDelayString = "${reagent.flow.schedule.delay}")
+//    public void syncReagentFlow() throws ParseException{
+//        Date current = new Date();
+//        BaseMeta baseMeta = null;
+//		baseMeta = baseMetaService.getBaseMeta("syncreagentflowlastdata");
+//        if(reagentFlowLastdate == null) {
+//            reagentFlowLastdate = baseMeta.getMetaValue();
+//        }
+//
+//        RestTemplate client = new RestTemplate();
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+//        MultiValueMap<String, String> varParams= new LinkedMultiValueMap<String, String>();
+//        varParams.add("startTime",reagentFlowLastdate);
+//        String lastDate = DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS);
+//        varParams.add("endTime",lastDate);
+//
+//		logger.info("startTime: "+reagentStatusLastdate+"lastDate "+lastDate);
+//
+//        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(varParams, headers);
+//        ResponseEntity<LinkedHashMap> response = client.postForEntity(reagentFlowUrl, requestEntity , LinkedHashMap.class );
+//        List<LinkedHashMap> data = (ArrayList)response.getBody().get("data");
+//        if(CollectionUtils.isEmpty(data)==false){
+//            opeUseFlowService.syncReagentFlow(data);
+//            //[{"status":1,"containerCode":"c1000-001","updateTime":"2018-04-15 11:23:49","reagentCode":"r2010-0001","idcard":"u001"}....]
+//            logger.info("result data: "+JSON.toJSONString(data));
+//        }
+//        baseMeta.setMetaValue(lastDate);
+//        reagentFlowLastdate = lastDate;
+//        baseMetaService.updateBaseMeta(baseMeta);
+//    }
+//
+//    //@Scheduled(fixedDelayString = "${sensors.schedule.delay}")
+//    public void syncSensors() {
+//        Date current = new Date();
+//        BaseMeta baseMeta = baseMetaService.getBaseMeta("syncsensorslastdata");
+//        RestTemplate client = new RestTemplate();
+//        HttpHeaders headers = new HttpHeaders();
+//        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+//        MultiValueMap<String, String> varParams= new LinkedMultiValueMap<String, String>();
+//        varParams.add("startTime",baseMeta.getMetaValue());
+//        varParams.add("endTime",DateFormatUtils.format(current,Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS));
+//        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<MultiValueMap<String, String>>(varParams, headers);
+//        ResponseEntity<LinkedHashMap> response = client.postForEntity(reagentSensorsUrl, requestEntity , LinkedHashMap.class );
+//        LinkedHashMap body = response.getBody();
+//        List<LinkedHashMap> data = body == null ? null : (ArrayList) body.get("data");
+//        if(!CollectionUtils.isEmpty(data)){
+//            try {
+//                logger.info("result data: " + JSON.toJSONString(data));
+//                sysContainerSensorsService.syncSysContainerSensors(data);
+//                //{"data": [{"containerCode": "c1000-003", "Temp": 28.0, "Flag": 16, "Humidity": 58, "updateTime": "2018-04-18 13:37:46", "voc1": 20}], "func": "sensors", "method": "POST", "message": "OK", "code": 0}
+//                baseMeta.setMetaValue(DateFormatUtils.format(current, Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS));
+//                baseMetaService.updateBaseMeta(baseMeta);
+//            }catch (Exception e){
+//                logger.error("error occured.", e);
+//            }
+//        }
+//    }
+//
+//
+//    @Scheduled(cron = "0 0 2 1 * ?")
+//    public void updateUserPoint() {
+//        logger.debug("updateUserPoint start,and now is "+new Date());
+//        sysUserService.updateUserPointBySelective(20,null);
+//        logger.debug("updateUserPoint end");
+//    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java b/src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java
index 4eece79..0f8fe6f 100644
--- a/src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java
@@ -121,7 +121,7 @@
     }
 
     private List<SysUser> approveUserSelectList;
-    private SysReagent sysReagent;
+    private SysReagent sysReagent=new SysReagent();
 
     private LazyDataModel<OpeApply> applyHistoryDataModel;
 
@@ -333,22 +333,21 @@
             titlerRow.createCell(i).setCellValue(headerList.get(i));
         }
         for (int i = 0; i < dataList.size(); i++) {
-            System.out.println(dataList.get(i));
             HSSFRow dataRow = sheet.createRow(i + 1);
             dataRow.createCell(0).setCellValue(dataList.get(i).getApplyCode()== null ? "": String.valueOf(dataList.get(i).getApplyCode()));
             dataRow.createCell(1).setCellValue(dataList.get(i).getReagent().getProductSn()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductSn()));
             dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getName()== null ? "": String.valueOf(dataList.get(i).getReagent().getName()));
-            dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getControlProducts())));
-            dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentFormat())));
-            dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentUnit()));
+            dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(dataList.get(i).getReagent().getControlProducts()));
+            dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentFormat()));
+            dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+dataList.get(i).getReagent().getReagentUnit());
             dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
             dataRow.createCell(7).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
-            dataRow.createCell(8).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentCharacter())));
+            dataRow.createCell(8).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentCharacter()));
             dataRow.createCell(9).setCellValue(dataList.get(i).getReagent().getSupplierName()== null ? "": String.valueOf(dataList.get(i).getReagent().getSupplierName()));
 
 
-            dataRow.createCell(10).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
-            dataRow.createCell(11).setCellValue(dataList.get(i).getReagent().getReagentType()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentType())));
+            dataRow.createCell(10).setCellValue(dataList.get(i).getReagent().getProductHome()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductHome()));
+            dataRow.createCell(11).setCellValue(dataList.get(i).getReagent().getReagentType()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentType()));
             dataRow.createCell(12).setCellValue(String.valueOf(dataList.get(i).getNum()));
             dataRow.createCell(13).setCellValue(String.valueOf(dataList.get(i).getApplyUserName()));
             dataRow.createCell(14).setCellValue(dataList.get(i).getApplyUserProject() == null?"":String.valueOf(dataList.get(i).getApplyUserProject()));
@@ -358,7 +357,7 @@
             dataRow.createCell(16).setCellValue(String.valueOf(dataList.get(i).getCreateTime()));
            // SysUser u=sysUserService.getSysUser(dataList.get(i).getApproveUserId());
             dataRow.createCell(17).setCellValue(String.valueOf(dataList.get(i).getFirName()));
-            if(dataList.get(i).getBeforeApproveUserId()!=null && !dataList.get(i).getBeforeApproveUserId().equals("")){
+            if(dataList.get(i).getBeforeApproveUserId()!=null){
                 //u=sysUserService.getSysUser(dataList.get(i).getBeforeApproveUserId());
                 dataRow.createCell(18).setCellValue(String.valueOf(dataList.get(i).getApproveUserName()));
             }
@@ -413,7 +412,7 @@
                     return;
                 }
                 if (this.opeApply.getReagent() == null
-                        || StringUtils.isBlank(this.opeApply.getReagent().getId())) {
+                        || this.opeApply.getReagent().getId()!=null) {
                     FacesUtils.warn("请选择申购产品。");
                     return;
                 }
@@ -442,7 +441,7 @@
                     return;
                 }
                 if (this.opeApply.getReagent() == null
-                        || StringUtils.isBlank(this.opeApply.getReagent().getId())) {
+                        || this.opeApply.getReagent().getId()!=null) {
                     FacesUtils.warn("请选择申购产品。");
                     return;
                 }
@@ -481,8 +480,6 @@
                 FacesUtils.warn("新建对象为空。");
                 return;
             }
-
-            this.sysReagent.setId(IDUtils.uuid());
             this.sysReagentService.insertSysReagent(this.sysReagent);
 
             FacesUtils.info("新建成功。");
@@ -554,7 +551,8 @@
 //                            }
 //                        }
 //                    }
-                    return opeApplyService.getOpeApply(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return opeApplyService.getOpeApply(id);
                 }
             };
         }
@@ -592,7 +590,8 @@
 //                            }
 //                        }
 //                    }
-                    return sysReagentService.getRowData(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return sysReagentService.getRowData(id);
                 }
             };
         }
@@ -631,7 +630,8 @@
 //                            }
 //                        }
 //                    }
-                    return sysReagentService.getRowData(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return sysReagentService.getRowData(id);
                 }
             };
         }
@@ -646,9 +646,9 @@
                 public List<OpeApply> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
                     List<OpeApply> list = null;
                     try {
-                        String applyUserId = getUserId();
+                        Long applyUserId = getUserId();
                         int count = 0;
-                        if (StringUtils.isNotBlank(applyUserId)) {
+                        if (applyUserId!=null) {
                             count = opeApplyService.getOpeApplyTotalCount(null, null, null,null, null, applyUserId, null, null,applyCode,null,(byte)1);
                         }
                         this.setRowCount(count);
@@ -674,7 +674,8 @@
 //                            }
 //                        }
 //                    }
-                    return opeApplyService.getOpeApply(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return opeApplyService.getOpeApply(id);
                 }
             };
         }
@@ -720,7 +721,7 @@
             return;
         }
 
-        List<String> selectedIds = new ArrayList<String>();
+        List<Long> selectedIds = new ArrayList<Long>();
 
         for (OpeApply oa : this.applyNewSelectedList) {
             selectedIds.add(oa.getReagent().getId());
@@ -759,8 +760,6 @@
                 return;
             }
 
-            //申请一个申购编号
-            String applyCode = this.sysSequenceService.getApplyCode();
             for (OpeApply opeApply : this.applyNewList) {
                 if (opeApply.getReagent().getValidFlag() == null
                         ||opeApply.getReagent().getValidFlag().equals(ValidFlag.INVALID)){
@@ -773,15 +772,11 @@
                     FacesUtils.warn(opeApply.getReagent().getName()+",该试剂供应商已删除,请选择其他试剂");
                     return;
                 }
-                opeApply.setId(IDUtils.uuid());
+                //申请一个申购编号
+                String applyCode = this.sysSequenceService.getApplyCode();
                 opeApply.setApplyCode(applyCode);
                 opeApply.setApplyUserId(applyUser.getId());
-                if(getActiveEnv().equalsIgnoreCase("gslab")){//姑苏实验室先进入待审批状态,然后再进入价格确认状态
-                    opeApply.setStatus(ApplyStatus.PENDING_APPROVAL);
-                }else{
-                    opeApply.setStatus(ApplyStatus.Price_CONFIRM);
-                }
-
+                opeApply.setStatus(ApplyStatus.Price_CONFIRM);
             }
 
             this.opeApplyService.insertOpeApplyList(this.applyNewList);
@@ -809,7 +804,7 @@
     public void onSaveBtnClickNew() {
 
         if (this.opeApply.getReagent() == null
-                || StringUtils.isBlank(this.opeApply.getReagent().getId())) {
+                || this.opeApply.getReagent().getId()==null) {
             FacesUtils.warn("请选择申购产品。");
             RequestContext.getCurrentInstance().execute("PF('applyDialog').hide()");
             return;
@@ -870,10 +865,21 @@
         return "";
     }
 
-    public String getProjectName(String projectId) {
+//    public String getProjectName(String projectId) {
+//        String projectName = null;
+//        if (!CollectionUtils.isEmpty(this.sysProjectList)) {
+//            Optional<SysProject> first = this.sysProjectList.parallelStream().filter(sysProject -> StringUtils.isNotBlank(projectId) && StringUtils.isNotBlank(sysProject.getProjectId()) && projectId.equals(sysProject.getProjectId())).findFirst();
+//            if (first.isPresent()) {
+//                projectName = first.get().getProjectName();
+//            }
+//        }
+//        return projectName;
+//    }
+
+    public String getProjectName(Long projectId) {
         String projectName = null;
         if (!CollectionUtils.isEmpty(this.sysProjectList)) {
-            Optional<SysProject> first = this.sysProjectList.parallelStream().filter(sysProject -> StringUtils.isNotBlank(projectId) && StringUtils.isNotBlank(sysProject.getProjectId()) && projectId.equals(sysProject.getProjectId())).findFirst();
+            Optional<SysProject> first = this.sysProjectList.parallelStream().filter(sysProject -> projectId!=null && sysProject.getId()!=null && projectId.equals(sysProject.getId())).findFirst();
             if (first.isPresent()) {
                 projectName = first.get().getProjectName();
             }
diff --git a/src/main/java/com/nanometer/smartlab/controller/ApprovalMngController.java b/src/main/java/com/nanometer/smartlab/controller/ApprovalMngController.java
index 09f5862..9ca0591 100644
--- a/src/main/java/com/nanometer/smartlab/controller/ApprovalMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/ApprovalMngController.java
@@ -90,7 +90,7 @@
     private Boolean approvalFlag;
 
     public Boolean getApprovalFlag() {
-        String id=getUserId();
+        Long id=getUserId();
         SysUser sysUser = sysUserService.getSysUser(id);
         // 不是管理员时
         if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
@@ -128,7 +128,7 @@
         this.approvalUserList = approvalUserList;
     }
 
-    private String adminApproveUserId;
+    private Long adminApproveUserId;
 
     private List<SysUser> adminApproveUserIdSelectList;
 
@@ -149,24 +149,16 @@
 
         SysUser first = null;
         for (SysUser sysUser : applyUserSelectList) {
-            if ("15fc90a1f7bf43bda01313904b543195".equalsIgnoreCase(sysUser.getRoleId())) {
-                if (sysUser.getName().equals("连悦")) {
-                    first = sysUser;
-                } else if (!sysUser.getAccount().equals("admin")){
-                    adminApproveUserIdSelectList.add(sysUser);
-                }
+            if (sysUser.getRoleId()==1L) {
+//                if (!sysUser.getAccount().equals("admin")){
+//                    adminApproveUserIdSelectList.add(sysUser);
+//                }
+                adminApproveUserIdSelectList.add(sysUser);
             }
         }
         if (first != null) {
             adminApproveUserIdSelectList.add(0, first);
         }
-
-        /*for(SysUser sysUser : adminApproveUserIdSelectList){
-            if(sysUser.getName().equals("admin")){
-                adminApproveUserIdSelectList.remove(sysUser);
-            }
-        }*/
-
     }
 
     public void onApprovalBtnClick() {
@@ -184,8 +176,8 @@
                 FacesUtils.warn("只有待审批状态的数据可以审批。");
                 return;
             }
-            String currentUserId = getUserId();
-            if(StringUtils.isNotBlank(opeApply.getBeforeApproveUserId())&&!opeApply.getApproveUserId().equalsIgnoreCase(currentUserId)){
+            Long currentUserId = getUserId();
+            if(opeApply.getBeforeApproveUserId()!=null&&!opeApply.getApproveUserId().equals(currentUserId)){
                 FacesUtils.warn("提示您已审批完成,请等待二级审批者审批");
                 return;
             }
@@ -194,25 +186,12 @@
                     dangerousFlag = true;
                 }
             }*/
-            if(getActiveEnv().equalsIgnoreCase("gslab")){//姑苏实验室打开二级审批
-                if(StringUtils.isBlank(opeApply.getBeforeApproveUserId())){
-                    dangerousFlag = true;
-                }
-            }else{//其他情形:管制品打开二级审批
-                String controlProducts = opeApply.getReagent().getControlProducts();
-                if (StringUtils.isNotBlank(controlProducts)) {
-                    String baseMetaValue = baseMetaService.getBaseMetaValue(controlProducts);
-                    if (StringUtils.isNotBlank(baseMetaValue) &&StringUtils.isBlank(opeApply.getBeforeApproveUserId())) {
-                        dangerousFlag = true;
-                    }
-                    if(StringUtils.isNotBlank(baseMetaValue)) {
-                        checkMap.put(1, 1);
-                    }else{
-                        checkMap.put(0, 1);
-                    }
-                }else{
-                    checkMap.put(0,1);
-                }
+            String controlProducts = opeApply.getReagent().getControlProducts();
+            if (StringUtils.isNotBlank(controlProducts)) {
+                dangerousFlag = true;
+                checkMap.put(1, 1);
+            }else{
+                checkMap.put(0,1);
             }
 
         }
@@ -234,31 +213,23 @@
                 return;
             }
 
-            if (this.dangerousFlag &&(this.adminApproveUserId == null || "".equalsIgnoreCase(this.adminApproveUserId))) {
+            if (this.dangerousFlag &&this.adminApproveUserId == null) {
                    FacesUtils.warn("请选择系统管理员审批。");
                    return;
             }
 
-            String currentUserId = getUserId();
-            List<String> applyIds = new ArrayList<>();
-            List<String> adminApplyIds = new ArrayList<>();
-            List<String> firstUserIds = new ArrayList<>();
+            Long currentUserId = getUserId();
+            List<Long> applyIds = new ArrayList<>();
+            List<Long> adminApplyIds = new ArrayList<>();
+            List<Long> firstUserIds = new ArrayList<>();
             for (OpeApply opeApply : this.selectedList) {
-/*                if (DangerousFlag.DANGEROUS == opeApply.getReagent().getDangerousFlag()) {
-                    adminApplyIds.add(opeApply.getId());
-                } else {
-                    applyIds.add(opeApply.getId());
-                }*/
-
-                String baseMetaValue = baseMetaService.getBaseMetaValue(opeApply.getReagent().getControlProducts());
-                //if (this.dangerousFlag && StringUtils.isNotBlank(baseMetaValue)) {
-                if (this.dangerousFlag&& StringUtils.isBlank(opeApply.getBeforeApproveUserId())) {
+                if (this.dangerousFlag&&opeApply.getBeforeApproveUserId()==null) {
                     adminApplyIds.add(opeApply.getId());
                     firstUserIds.add(opeApply.getApproveUserId());
                 } else {
                     applyIds.add(opeApply.getId());
                 }
-                if(StringUtils.isNotBlank(opeApply.getBeforeApproveUserId())&&!opeApply.getApproveUserId().equalsIgnoreCase(currentUserId)){
+                if(opeApply.getBeforeApproveUserId()!=null&&!opeApply.getApproveUserId().equals(currentUserId)){
                     FacesUtils.warn("提示您已审批完成,请等待二级审批者审批");
                     return;
                 }
@@ -285,11 +256,11 @@
                 FacesUtils.warn("请将拒绝理由输入在批注中。");
                 return;
             }
-            String currentUserId = getUserId();
-            List<String> applyIds = new ArrayList<String>();
+            Long currentUserId = getUserId();
+            List<Long> applyIds = new ArrayList<Long>();
             for (OpeApply opeApply : this.selectedList) {
                 applyIds.add(opeApply.getId());
-                if(StringUtils.isNotBlank(opeApply.getBeforeApproveUserId())&&!opeApply.getApproveUserId().equalsIgnoreCase(currentUserId)){
+                if(opeApply.getBeforeApproveUserId()!=null&&!opeApply.getApproveUserId().equals(currentUserId)){
                     FacesUtils.warn("二级审批无权限");
                     return;
                 }
@@ -329,7 +300,7 @@
             Map<String, Integer> tempMap = new HashMap<String,Integer>();
             List<OpeApply> realDataList = new ArrayList<>();
             //map=null;
-            String approveUserId = getUserId();
+            Long approveUserId = getUserId();
             if(selectedList!=null&selectedList.size()>0){
                 realDataList=selectedList;
             }else {
@@ -407,15 +378,15 @@
             dataRow.createCell(0).setCellValue(dataList.get(i).getApplyCode()== null ? "": String.valueOf(dataList.get(i).getApplyCode()));
             dataRow.createCell(1).setCellValue(dataList.get(i).getReagent().getProductSn()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductSn()));
             dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getName()== null ? "": String.valueOf(dataList.get(i).getReagent().getName()));
-            dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getControlProducts())));
-            dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentFormat())));
-            dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentUnit()));
+            dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(dataList.get(i).getReagent().getControlProducts()));
+            dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentFormat()));
+            dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+dataList.get(i).getReagent().getReagentUnit());
             dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
             dataRow.createCell(7).setCellValue(String.valueOf(dataList.get(i).getNum()));
             dataRow.createCell(8).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
-            dataRow.createCell(9).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentCharacter())));
+            dataRow.createCell(9).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentCharacter()));
             dataRow.createCell(10).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
-            dataRow.createCell(11).setCellValue(dataList.get(i).getReagent().getReagentType()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentType())));
+            dataRow.createCell(11).setCellValue(dataList.get(i).getReagent().getReagentType()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentType()));
 
             dataRow.createCell(12).setCellValue(String.valueOf(dataList.get(i).getApplyUserName()));
             dataRow.createCell(13).setCellValue(String.valueOf(dataList.get(i).getCreateTime()));
@@ -429,7 +400,7 @@
                 dataRow.createCell(15).setCellValue(String.valueOf(dataList.get(i).getApproveUserName()));
             }
             dataRow.createCell(16).setCellValue(String.valueOf(dataList.get(i).getStatus().getText()));
-            SysProject project = sysProjectService.getProjectByProId(dataList.get(i).getObjective());
+            SysProject project = sysProjectService.getSysProject(dataList.get(i).getProjectId());
             dataRow.createCell(17).setCellValue(project.getProjectName()==null ?"":String.valueOf(project.getProjectName()));
         }
 
@@ -469,9 +440,9 @@
                 public List<OpeApply> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
                     List<OpeApply> list = null;
                     //try {
-                        String approveUserId = getUserId();
+                        Long approveUserId = getUserId();
                         int count = 0;
-                        if (StringUtils.isNotBlank(approveUserId)) {
+                        if (approveUserId!=null) {
                             count = opeApplyService.getOpeApplyTotalCountForApproval(applyUserName,approvaUserName,reagentName, startDeadline, endDeadline, status, null, approveUserId, null, null,null);
                         }
                         this.setRowCount(count);
@@ -483,7 +454,7 @@
                                     list.get(i).setApproveUserName(list.get(i).getSecondUserName());
                                     list.get(i).setSecondUserName(name);
                                 }*/
-                                if(list.get(i).getBeforeApproveUserId()!=null&&!list.get(i).getBeforeApproveUserId().equals("")){
+                                if(list.get(i).getBeforeApproveUserId()!=null){
                                     String name=list.get(i).getApproveUserName();
                                     list.get(i).setFirst(list.get(i).getFirName());
                                     list.get(i).setSecond(name);
@@ -512,7 +483,8 @@
 //                            }
 //                        }
 //                    }
-                    return opeApplyService.getOpeApply(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return opeApplyService.getOpeApply(id);
                 }
             };
         }
@@ -597,17 +569,13 @@
     /**
      * 审批者名称取得
      */
-    public String getUserName(String approveUserId) {
-        if (!StringUtils.isEmpty(approveUserId)) {
-
-            for (SysUser user : this.getApplyUserSelectList()) {
-
-                if (user.getId().equals(approveUserId)) {
-                    return user.getName();
-                }
+    public String getUserName(Long approveUserId) {
+        if (approveUserId!=null) {
+            SysUser user=this.sysUserService.getSysUser(approveUserId);
+            if(user!=null){
+                return user.getName();
             }
         }
-
         return "";
     }
 
@@ -619,11 +587,11 @@
         this.memo = memo;
     }
 
-    public String getAdminApproveUserId() {
+    public Long getAdminApproveUserId() {
         return adminApproveUserId;
     }
 
-    public void setAdminApproveUserId(String adminApproveUserId) {
+    public void setAdminApproveUserId(Long adminApproveUserId) {
         this.adminApproveUserId = adminApproveUserId;
     }
 
diff --git a/src/main/java/com/nanometer/smartlab/controller/BarcodeMngController.java b/src/main/java/com/nanometer/smartlab/controller/BarcodeMngController.java
new file mode 100644
index 0000000..5b36d10
--- /dev/null
+++ b/src/main/java/com/nanometer/smartlab/controller/BarcodeMngController.java
@@ -0,0 +1,248 @@
+package com.nanometer.smartlab.controller;
+
+import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.extra.qrcode.QrConfig;
+import com.nanometer.smartlab.dao.OpeApplyDao;
+import com.nanometer.smartlab.dao.OpeReagentCodeDao;
+import com.nanometer.smartlab.entity.*;
+import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
+import com.nanometer.smartlab.exception.BusinessException;
+import com.nanometer.smartlab.service.*;
+import com.nanometer.smartlab.util.Constants;
+import com.nanometer.smartlab.util.FacesUtils;
+import com.nanometer.smartlab.util.StringToolUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.primefaces.context.RequestContext;
+import org.primefaces.model.LazyDataModel;
+import org.primefaces.model.SortOrder;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Controller;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.*;
+
+/**
+ * 标签打印
+ */
+@Controller
+@Scope("session")
+public class BarcodeMngController extends BaseController {
+
+    private static Logger logger = Logger.getLogger(BarcodeMngController.class);
+
+
+    @Resource
+    private BaseMetaService baseMetaService;
+    @Resource
+    private SysUserService sysUserService;
+
+    private LazyDataModel<OpeApply> dataModel;
+    private OpeOrder opeOrder;
+    private List<OpeApply> selectedViewList;
+    private String orderCode;
+    private String orderName;
+    private String applyCode;
+    private Integer orderStatus;
+
+
+    private List<OpeReagentCode> reagentCodeList;
+
+    @Resource
+    private OpeReagentCodeDao opeReagentCodeDao;
+    @Resource
+    private OpeApplyService opeApplyService;
+
+    private List<Map> viewReagentCodeList;
+
+    public void onPrintBarcodeClick(){
+        if (this.selectedViewList == null
+                || this.selectedViewList.size() == 0) {
+            FacesUtils.warn("请选择数据。");
+            return;
+        }
+        if (this.selectedViewList.size() > 1) {
+            FacesUtils.warn("只能选择一个数据进行打印。");
+            return;
+        }
+        List<OpeReagentCode> reagentCodes=this.opeReagentCodeDao.getReagentCodeByApplyId(this.selectedViewList.get(0).getId());
+        if(reagentCodes.size()==0){
+            FacesUtils.warn("未生成标签编码");
+            return;
+        }
+        //生成标签
+        for(OpeReagentCode opeReagentCode:reagentCodes){
+            List<String> rCodes=new ArrayList<>();
+            int startCode=opeReagentCode.getStartCode();
+            int endCode=opeReagentCode.getEndCode();
+            for(int i=startCode;i<=endCode;i++){
+                String lastCode= StringToolUtils.addZeroForNum(String.valueOf(i),4);
+                String rcode=String.format("%s%s",opeReagentCode.getCodePrex(),lastCode);
+                rCodes.add(rcode);
+            }
+            opeReagentCode.setReagentCodes(rCodes);
+            //获取试剂信息
+            opeReagentCode.setReagent(opeApplyService.getReagentByApplyId(opeReagentCode.getApplyId()));
+        }
+        this.reagentCodeList=reagentCodes;
+        RequestContext.getCurrentInstance().execute("PF('dialogPrintReagentCode').show()");
+    }
+    public void onPrintSingleBarcodeClick(String reagentCode){
+        List<OpeReagentCode>tmpList=this.reagentCodeList;
+        List<String> rCodes=new ArrayList<>();
+        rCodes.add(reagentCode);
+        tmpList.get(0).setReagentCodes(rCodes);
+        this.reagentCodeList=tmpList;
+        RequestContext.getCurrentInstance().execute("PF('dialogPrintReagentCode').show()");
+    }
+
+    public void onViewBarcodeClick(){
+        if (this.selectedViewList == null
+                || this.selectedViewList.size() == 0) {
+            FacesUtils.warn("请选择数据。");
+            return;
+        }
+        if (this.selectedViewList.size() > 1) {
+            FacesUtils.warn("只能选择一个数据进行打印。");
+            return;
+        }
+        List<OpeReagentCode> reagentCodes=this.opeReagentCodeDao.getReagentCodeByApplyId(this.selectedViewList.get(0).getId());
+        if(reagentCodes.size()==0){
+            FacesUtils.warn("未生成标签编码");
+            return;
+        }
+        List<Map> reagentCodeList=new ArrayList<>();
+
+        for(OpeReagentCode opeReagentCode:reagentCodes) {
+            //获取试剂信息
+            SysReagent reagent=opeApplyService.getReagentByApplyId(opeReagentCode.getApplyId());
+            //生成标签
+            List<String> rCodes=new ArrayList<>();
+            int startCode=opeReagentCode.getStartCode();
+            int endCode=opeReagentCode.getEndCode();
+            for (int i = startCode; i <= endCode; i++) {
+                Map reagentMap = new HashMap();
+                String lastCode = StringToolUtils.addZeroForNum(String.valueOf(i), 4);
+                String rcode = String.format("%s%s", opeReagentCode.getCodePrex(), lastCode);
+                rCodes.add(rcode);
+                reagentMap.put("applyId", opeReagentCode.getApplyId());
+                reagentMap.put("reagentCode", rcode);
+                reagentMap.put("name", reagent.getName());
+                reagentMap.put("cas", reagent.getCas());
+                reagentMap.put("reagentCharacter", reagent.getReagentCharacter());
+                reagentCodeList.add(reagentMap);
+            }
+            opeReagentCode.setReagentCodes(rCodes);
+            //获取试剂信息
+            opeReagentCode.setReagent(reagent);
+        }
+        this.viewReagentCodeList=reagentCodeList;
+        this.reagentCodeList=reagentCodes;
+        RequestContext.getCurrentInstance().execute("PF('viewPrintReagentCodeList').show()");
+    }
+
+    public String getQrcode(String reagentCode){
+        QrConfig qrConfig=new QrConfig(50,50);
+        //设置边距,即二维码和边框的距离
+        qrConfig.setMargin(1);
+//		qrConfig.setForeColor(Color.WHITE.getRGB());
+//		qrConfig.setBackColor(Color.BLACK.getRGB());
+        byte[] image= QrCodeUtil.generatePng(reagentCode,qrConfig);
+        String base64Image= Base64.getEncoder().encodeToString(image);
+        return base64Image;
+
+    }
+
+
+    public LazyDataModel<OpeApply> getDataModel() {
+        if (this.dataModel == null) {
+            this.dataModel = new LazyDataModel<OpeApply>() {
+                @Override
+                public List<OpeApply> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
+                    List<OpeApply> list = null;
+                    try {
+                        int count = opeApplyService.getOpeApplyCountWithOrder(applyCode,orderCode, orderName);
+                        this.setRowCount(count);
+                        if (count > 0) {
+                            list = opeApplyService.getOpeApplyListWithOrder(applyCode,orderCode, orderName,  first, pageSize);
+                        }
+                    } catch (Exception e) {
+                        logger.error(e);
+                    }
+                    selectedViewList = null;
+                    return list;
+                }
+
+                @Override
+                public OpeApply getRowData(String rowKey) {
+                    Long id=Long.valueOf(rowKey);
+                    Iterator<OpeApply> iterator = this.iterator();
+                    if (iterator != null) {
+                        OpeApply opeApply = null;
+                        while (iterator.hasNext()) {
+                            opeApply = iterator.next();
+                            if (id.equals(opeApply.getId())) {
+                                return opeApply;
+                            }
+                        }
+                    }
+                    return null;
+                }
+            };
+        }
+        return dataModel;
+    }
+
+
+
+
+    public OpeOrder getOpeOrder() {
+        return opeOrder;
+    }
+
+    public void setOpeOrder(OpeOrder opeOrder) {
+        this.opeOrder = opeOrder;
+    }
+
+    public String getOrderCode() {
+        return orderCode;
+    }
+
+    public void setOrderCode(String orderCode) {
+        this.orderCode = orderCode;
+    }
+
+    public String getOrderName() {
+        return orderName;
+    }
+
+    public void setOrderName(String orderName) {
+        this.orderName = orderName;
+    }
+
+    public String getApplyCode(){
+        return applyCode;
+    }
+
+    public void setApplyCode(String applyCode){
+        this.applyCode=applyCode;
+    }
+
+    public List<OpeApply> getSelectedViewList(){
+        return  selectedViewList;
+    }
+
+    public void setSelectedViewList(List<OpeApply> selectedViewList){
+        this.selectedViewList=selectedViewList;
+    }
+    public List<OpeReagentCode> getReagentCodeList() {
+        return reagentCodeList;
+    }
+
+    public List<Map> getViewReagentCodeList() {
+        return viewReagentCodeList;
+    }
+
+}
diff --git a/src/main/java/com/nanometer/smartlab/controller/BaseController.java b/src/main/java/com/nanometer/smartlab/controller/BaseController.java
index 6dda207..b61151c 100644
--- a/src/main/java/com/nanometer/smartlab/controller/BaseController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/BaseController.java
@@ -54,7 +54,7 @@
         return "";
     }
 
-    public String getUserId() {
+    public Long getUserId() {
         SysUser user = this.getUser();
         if (user != null) {
             return user.getId();
@@ -62,7 +62,7 @@
         return null;
     }
 
-    public String getUserDepartment() {
+    public Long getUserDepartment() {
         SysUser user = this.getUser();
         if (user != null) {
             return user.getDepartment();
@@ -70,10 +70,10 @@
         return null;
     }
 
-    public String getUserProject() {
+    public Long getUserProject() {
         SysUser user = this.getUser();
         if (user != null) {
-            return user.getProject();
+            return user.getProjectId();
         }
         return null;
     }
diff --git a/src/main/java/com/nanometer/smartlab/controller/BaseMetaController.java b/src/main/java/com/nanometer/smartlab/controller/BaseMetaController.java
index c68aade..bdd6fb6 100644
--- a/src/main/java/com/nanometer/smartlab/controller/BaseMetaController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/BaseMetaController.java
@@ -29,10 +29,10 @@
     @Resource
     private BaseMetaService baseMetaService;
 
-    private String groupId;
+    private String groupCode;
     private String keyword;
     private LazyDataModel<BaseMeta> dataModel;
-    private BaseMeta baseMeta;
+    private BaseMeta baseMeta=new BaseMeta();
     private List<BaseMeta> selectedList;
 
     private int action;
@@ -66,7 +66,7 @@
                     return;
                 }
 
-                if (this.baseMetaService.isBaseMetaExist(this.baseMeta.getGroupId(), this.baseMeta.getMetaKey(), null)) {
+                if (this.baseMetaService.isBaseMetaExist(this.baseMeta.getGroupCode(), this.baseMeta.getMetaKey(), null)) {
                     FacesUtils.warn("种类下存在相同的字典编码。");
                     return;
                 }
@@ -82,7 +82,7 @@
                     return;
                 }
 
-                if (this.baseMetaService.isBaseMetaExist(this.baseMeta.getGroupId(), this.baseMeta.getMetaKey(), this.baseMeta.getId())) {
+                if (this.baseMetaService.isBaseMetaExist(this.baseMeta.getGroupCode(), this.baseMeta.getMetaKey(), this.baseMeta.getId())) {
                     FacesUtils.warn("种类下存在相同的字典编码。");
                     return;
                 }
@@ -105,7 +105,7 @@
                 FacesUtils.warn("请选择数据。");
                 return;
             }
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (BaseMeta bm : this.selectedList) {
                 ids.add(bm.getId());
             }
@@ -126,10 +126,10 @@
                 public List<BaseMeta> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
                     List<BaseMeta> list = null;
                     try {
-                        int count = baseMetaService.getBaseMetaTotalCount(groupId, keyword);
+                        int count = baseMetaService.getBaseMetaTotalCount(groupCode, keyword);
                         this.setRowCount(count);
                         if (count > 0) {
-                            list = baseMetaService.getBaseMetaList(groupId, keyword, first, pageSize);
+                            list = baseMetaService.getBaseMetaList(groupCode, keyword, first, pageSize);
                         }
                         selectedList = new ArrayList<>();
                     } catch (Exception e) {
@@ -150,19 +150,20 @@
 //                            }
 //                        }
 //                    }
-                    return baseMetaService.getBaseMeta(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return baseMetaService.getBaseMeta(id);
                 }
             };
         }
         return dataModel;
     }
 
-    public String getGroupId() {
-        return groupId;
+    public String getGroupCode() {
+        return groupCode;
     }
 
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
+    public void setGroupCode(String groupCode) {
+        this.groupCode = groupCode;
     }
 
     public String getKeyword() {
diff --git a/src/main/java/com/nanometer/smartlab/controller/DangerousEncodeController.java b/src/main/java/com/nanometer/smartlab/controller/DangerousEncodeController.java
index c10672e..0d7a196 100644
--- a/src/main/java/com/nanometer/smartlab/controller/DangerousEncodeController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/DangerousEncodeController.java
@@ -90,7 +90,7 @@
             //插入
             if (dangerousEncode.getId() == null) {
                 //设置 id,创建者和更新时间
-                dangerousEncode.setCreator(getUser().getId());
+                dangerousEncode.setCreator(getUser().getName());
                 dangerousEncode.setUpdateTime(new Date());
 
                 if (StringUtils.isBlank(dangerousEncode.getReagentCode())){
diff --git a/src/main/java/com/nanometer/smartlab/controller/EncodeReplaceDictController.java b/src/main/java/com/nanometer/smartlab/controller/EncodeReplaceDictController.java
index f16b7ca..a8269eb 100644
--- a/src/main/java/com/nanometer/smartlab/controller/EncodeReplaceDictController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/EncodeReplaceDictController.java
@@ -126,8 +126,8 @@
                 baseMeta.setMetaKey(encodeReplaceDict.getNumber());
                 baseMeta.setMetaValue(encodeReplaceDict.getInfo());
                 ReplaceDictType type = encodeReplaceDict.getType();
-                String groupId = "encode_replace_" + type.getKey();
-                baseMeta.setGroupId(groupId);
+                String groupCode = "encode_replace_" + type.getKey();
+                baseMeta.setGroupCode(groupCode);
                 baseMetaService.insertBaseMeta(baseMeta);
 
             } else {
@@ -137,11 +137,11 @@
                 //更新前拿出baseMeta
                 EncodeReplaceDict originData = encodeReplaceDictService.getOne(encodeReplaceDict.getId());
                 ReplaceDictType type = originData.getType();
-                String groupId = "encode_replace_" + type.getKey();
-                BaseMeta baseMeta = baseMetaService.getBaseMeta(groupId, originData.getNumber(),null);
+                String groupCode = "encode_replace_" + type.getKey();
+                BaseMeta baseMeta = baseMetaService.getBaseMeta(groupCode, originData.getNumber(),null);
                 baseMeta.setMetaKey(encodeReplaceDict.getNumber());
                 baseMeta.setMetaValue(encodeReplaceDict.getInfo());
-                baseMeta.setGroupId("encode_replace_" + encodeReplaceDict.getType().getKey());
+                baseMeta.setGroupCode("encode_replace_" + encodeReplaceDict.getType().getKey());
                 baseMeta.setValidFlag(ValidFlag.VALID);
                 baseMetaService.updateBaseMeta(baseMeta);
                 encodeReplaceDictService.updateOne(encodeReplaceDict);
diff --git a/src/main/java/com/nanometer/smartlab/controller/HazardousWasteController.java b/src/main/java/com/nanometer/smartlab/controller/HazardousWasteController.java
index 92b6237..71eff66 100644
--- a/src/main/java/com/nanometer/smartlab/controller/HazardousWasteController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/HazardousWasteController.java
@@ -2,19 +2,26 @@
 
 
 import com.nanometer.smartlab.entity.HazardousWaste;
+import com.nanometer.smartlab.entity.SysLaboratory;
+import com.nanometer.smartlab.entity.SysUser;
 import com.nanometer.smartlab.entity.dto.HazardousWasteUser;
 import com.nanometer.smartlab.entity.enumtype.Waster;
 import com.nanometer.smartlab.service.HazardousWasteService;
+import com.nanometer.smartlab.service.SysUserService;
+import com.nanometer.smartlab.util.Constants;
 import com.nanometer.smartlab.util.FacesUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
+import org.primefaces.context.RequestContext;
 import org.primefaces.model.LazyDataModel;
 import org.primefaces.model.SortOrder;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Controller;
 
 import javax.annotation.Resource;
 import javax.faces.event.ActionListener;
+import java.text.SimpleDateFormat;
 import java.util.*;
 
 @Controller
@@ -29,7 +36,7 @@
     private Date endTime;
     private String status;
     private String applyPerson;
-    private String project;
+    private Long projectId;
     private String department;
     private String tid;
     private List<String> statusList = new ArrayList<> ();
@@ -37,9 +44,86 @@
     private boolean isAnalysSearch = false;
     private LazyDataModel<HazardousWaste> analysisDataModel;
     private HazardousWaste selectedOne;
+    /**
+     * 选中的list
+     */
+    private List<HazardousWaste> selectedList;
+
+    private HazardousWaste hazardousWaste=new HazardousWaste();
+
+    private int action;
+    @Autowired
+    private SysUserService sysUserService;
+
+    private List<SysUser> userSelectList;
 
     @Resource
     private HazardousWasteService hazardousWasteService;
+
+    public List<SysUser> getUserSelectList() {
+        if (userSelectList == null) {
+            this.initUserSelectList();
+        }
+        return userSelectList;
+    }
+
+    private void initUserSelectList() {
+        this.setUserSelectList(this.sysUserService.getSysUserList(null, null, null, null, null,null,null));
+    }
+
+    public SysUser getSelectedUserById(Long userId) {
+        SysUser sysUser=this.sysUserService.getSysUser(userId);
+        if(sysUser==null){
+            return new SysUser();
+        }
+        return sysUser;
+    }
+
+    public void addHazardousWaste(){
+        this.hazardousWaste = new HazardousWaste();
+        this.action = Constants.ACTION_ADD;
+        RequestContext.getCurrentInstance().execute("PF('wastedialog').show()");
+    }
+
+    public void editHazardousWaste(){
+        if (this.selectedList == null || this.selectedList.size() == 0) {
+            FacesUtils.warn("请选择数据。");
+            return;
+        }
+        if (this.selectedList.size() > 1) {
+            FacesUtils.warn("只能选择一个数据进行修改。");
+            return;
+        }
+        this.hazardousWaste=this.hazardousWasteService.selectById(this.selectedList.get(0).getId());
+        this.action = Constants.ACTION_EDIT;
+        RequestContext.getCurrentInstance().execute("PF('wastedialog').show()");
+    }
+
+    public void onSaveBtnClick(){
+        try {
+            Long userId = this.hazardousWaste.getApplyPerson();
+            SysUser sysUser = sysUserService.getSysUser(userId);
+            this.hazardousWaste.setUnit(sysUser.getCompany());
+            String userName = getUserName();
+            if (this.action == Constants.ACTION_ADD) {
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+                this.hazardousWaste.setCreator(userName);
+                this.hazardousWaste.setTid(sdf.format(new Date()));
+                this.hazardousWaste.setStatus("待确认");
+                hazardousWasteService.insertInfo(this.hazardousWaste);
+                FacesUtils.info("新建成功。");
+                RequestContext.getCurrentInstance().execute("PF('wastedialog').hide()");
+            } else {
+                this.hazardousWaste.setUpdator(userName);
+                hazardousWasteService.updateWaste(this.hazardousWaste);
+                FacesUtils.info("修改成功。");
+                RequestContext.getCurrentInstance().execute("PF('wastedialog').hide()");
+            }
+        }catch (Exception e){
+            logger.error("操作失败。", e);
+            FacesUtils.warn("操作失败。");
+        }
+    }
 
     public LazyDataModel<HazardousWaste> getDataModel() {
         if (this.dataModel == null) {
@@ -52,15 +136,15 @@
                     try {
                         if (getUser().getWaster() != null){
                             if (getUser().getWaster().equals(Waster.MANAGE)){
-                                int pageCount = hazardousWasteService.countAll(startTime,endTime,status,applyPerson,project,department,tid);
+                                int pageCount = hazardousWasteService.countAll(startTime,endTime,status,applyPerson,projectId,department,tid);
                                 this.setRowCount(pageCount);
                                 if (pageCount > 0)
-                                    list = hazardousWasteService.selectAll(startTime,endTime,status,applyPerson,project,department,tid,first, pageSize);
-                            }else if (StringUtils.isNotBlank(getUser().getProject())){
-                                int pageCount = hazardousWasteService.countAll(startTime,endTime,status,applyPerson,getUser().getProject(),department,tid);
+                                    list = hazardousWasteService.selectAll(startTime,endTime,status,applyPerson,projectId,department,tid,first, pageSize);
+                            }else if (getUser().getProjectId()!=null){
+                                int pageCount = hazardousWasteService.countAll(startTime,endTime,status,applyPerson,getUser().getProjectId(),department,tid);
                                 this.setRowCount(pageCount);
                                 if (pageCount > 0)
-                                    list = hazardousWasteService.selectAll(startTime,endTime,status,applyPerson,getUser().getProject(),department,tid,first, pageSize);
+                                    list = hazardousWasteService.selectAll(startTime,endTime,status,applyPerson,getUser().getProjectId(),department,tid,first, pageSize);
                             }
                         }else {
                             this.setRowCount(0);
@@ -112,15 +196,15 @@
                     try {
                         if (getUser().getWaster() != null){
                             if (getUser().getWaster().equals(Waster.MANAGE)){
-                                int pageCount = hazardousWasteService.countStatistics(startTime,endTime,status,applyPerson,project,department);
+                                int pageCount = hazardousWasteService.countStatistics(startTime,endTime,status,applyPerson,projectId,department);
                                 this.setRowCount(pageCount);
                                 if (pageCount > 0)
-                                    list = hazardousWasteService.selectStatistics(startTime,endTime,status,applyPerson,project,department,first, pageSize);
-                            }else if (StringUtils.isNotBlank(getUser().getProject())){
-                                int pageCount = hazardousWasteService.countStatistics(startTime,endTime,status,applyPerson,getUser().getProject(),department);
+                                    list = hazardousWasteService.selectStatistics(startTime,endTime,status,applyPerson,projectId,department,first, pageSize);
+                            }else if (getUser().getProjectId()!=null){
+                                int pageCount = hazardousWasteService.countStatistics(startTime,endTime,status,applyPerson,getUser().getProjectId(),department);
                                 this.setRowCount(pageCount);
                                 if (pageCount > 0)
-                                    list = hazardousWasteService.selectStatistics(startTime,endTime,status,applyPerson,getUser().getProject(),department,first, pageSize);
+                                    list = hazardousWasteService.selectStatistics(startTime,endTime,status,applyPerson,getUser().getProjectId(),department,first, pageSize);
                             }
                         }else {
                             this.setRowCount(0);
@@ -201,12 +285,12 @@
         this.applyPerson = applyPerson;
     }
 
-    public String getProject() {
-        return project;
+    public Long getProjectId() {
+        return projectId;
     }
 
-    public void setProject(String project) {
-        this.project = project;
+    public void setProject(Long projectId) {
+        this.projectId = projectId;
     }
 
     public String getDepartment() {
@@ -232,9 +316,9 @@
         List<Map> list = new ArrayList<>();
         if (getUser().getWaster() != null){
             if (getUser().getWaster().equals(Waster.MANAGE)){
-                list = hazardousWasteService.exportList(startTime,endTime,status,applyPerson,project,department,tid);
-            }else if (StringUtils.isNotBlank(getUser().getProject())){
-                list = hazardousWasteService.exportList(startTime,endTime,status,applyPerson,getUser().getProject(),department,tid);
+                list = hazardousWasteService.exportList(startTime,endTime,status,applyPerson,projectId,department,tid);
+            }else if (getUser().getProjectId()!=null){
+                list = hazardousWasteService.exportList(startTime,endTime,status,applyPerson,getUser().getProjectId(),department,tid);
             }
         }
 
@@ -250,9 +334,9 @@
         List<Map> list = new ArrayList<>();
         if (getUser().getWaster() != null){
             if (getUser().getWaster().equals(Waster.MANAGE)){
-                list = hazardousWasteService.exportStatisticsList(startTime,endTime,status,applyPerson,project,department);
-            }else if (StringUtils.isNotBlank(getUser().getProject())){
-                list = hazardousWasteService.exportStatisticsList(startTime,endTime,status,applyPerson,getUser().getProject(),department);
+                list = hazardousWasteService.exportStatisticsList(startTime,endTime,status,applyPerson,projectId,department);
+            }else if (getUser().getProjectId()!=null){
+                list = hazardousWasteService.exportStatisticsList(startTime,endTime,status,applyPerson,getUser().getProjectId(),department);
             }
         }
         try{
@@ -265,17 +349,22 @@
 
     public void cancelOne(){
         //待确认状态的才能取消
-        if (this.selectedOne == null) {
-            FacesUtils.warn("请选择");
+        if (this.selectedList == null || this.selectedList.size() == 0) {
+            FacesUtils.warn("请选择数据。");
             return;
         }
-        if (!"待确认".equals(this.selectedOne.getStatus())) {
+        if (this.selectedList.size() > 1) {
+            FacesUtils.warn("只能选择一个数据进行修改。");
+            return;
+        }
+        HazardousWaste hwaste=this.selectedList.get(0);
+        if (!"待确认".equals(hwaste.getStatus())) {
             FacesUtils.warn("非待确认不能取消");
             return;
         }
         try {
-            this.selectedOne.setStatus("已取消");
-            hazardousWasteService.updateWaste(this.selectedOne);
+            hwaste.setStatus("已取消");
+            hazardousWasteService.updateWaste(hwaste);
             FacesUtils.warn("操作成功");
         } catch (Exception e) {
             e.printStackTrace();
@@ -284,17 +373,22 @@
     }
 
     public void recoverOne(){
-        if (this.selectedOne == null) {
-            FacesUtils.warn("请选择");
+        if (this.selectedList == null || this.selectedList.size() == 0) {
+            FacesUtils.warn("请选择数据。");
             return;
         }
-        if (!"已取消".equals(this.selectedOne.getStatus())) {
+        if (this.selectedList.size() > 1) {
+            FacesUtils.warn("只能选择一个数据进行修改。");
+            return;
+        }
+        HazardousWaste hwaste=this.selectedList.get(0);
+        if (!"已取消".equals(hwaste.getStatus())) {
             FacesUtils.warn("非已取消不能恢复");
             return;
         }
         try {
-            this.selectedOne.setStatus("待确认");
-            hazardousWasteService.updateWaste(this.selectedOne);
+            hwaste.setStatus("待确认");
+            hazardousWasteService.updateWaste(hwaste);
             FacesUtils.warn("操作成功");
         } catch (Exception e) {
             e.printStackTrace();
@@ -317,4 +411,32 @@
     public void setSelectedOne(HazardousWaste selectedOne) {
         this.selectedOne = selectedOne;
     }
+
+    public List<HazardousWaste> getSelectedList() {
+        return selectedList;
+    }
+
+    public void setSelectedList(List<HazardousWaste> selectedList) {
+        this.selectedList = selectedList;
+    }
+
+    public HazardousWaste getHazardousWaste() {
+        return hazardousWaste;
+    }
+
+    public void setHazardousWaste(HazardousWaste hazardousWaste) {
+        this.hazardousWaste = hazardousWaste;
+    }
+
+    public int getAction() {
+        return action;
+    }
+
+    public void setAction(int action) {
+        this.action = action;
+    }
+
+    public void setUserSelectList(List<SysUser> userSelectList) {
+        this.userSelectList = userSelectList;
+    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/controller/LaboratoryContainerMngController.java b/src/main/java/com/nanometer/smartlab/controller/LaboratoryContainerMngController.java
index 2650e7a..967f163 100644
--- a/src/main/java/com/nanometer/smartlab/controller/LaboratoryContainerMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/LaboratoryContainerMngController.java
@@ -58,7 +58,7 @@
 	/**
 	 * 数据模型
 	 */
-	private SysLaboratoryContainer sysLaboratoryContainer;
+	private SysLaboratoryContainer sysLaboratoryContainer=new SysLaboratoryContainer();
 	/**
 	 * 选中的list
 	 */
@@ -209,8 +209,8 @@
 					return;
 				}
 
-				sysLaboratoryContainer.setProject(null);
-				sysLaboratoryContainer.getProject();
+//				sysLaboratoryContainer.setProject(null);
+//				sysLaboratoryContainer.getProject();
 
 				this.sysLaboratoryContainerService.updateSysLaboratoryContainer(sysLaboratoryContainer);
 
@@ -329,8 +329,8 @@
 		}
 	}
 
-	public String getBaseMetaId(List<BaseMeta> list,String name){
-		String id="";
+	public Long getBaseMetaId(List<BaseMeta> list,String name){
+		Long id=null;
 		for(int i=0;i<list.size();i++){
 			if(name.equals(list.get(i).getMetaValue())){
 				id=list.get(i).getId();
@@ -339,8 +339,8 @@
 		return  id;
 	}
 
-	public String getLabId(List<SysLaboratory> list,String name){
-		String id="";
+	public Long getLabId(List<SysLaboratory> list,String name){
+		Long id=null;
 		for(int i=0;i<list.size();i++){
 			if(list.get(i).getName().equals(name)){
 				id=list.get(i).getId();
@@ -398,11 +398,11 @@
 					List<SysLaboratoryContainer> list = null;
 					try {
 						int count = sysLaboratoryContainerService.getSysLaboratoryContainerTotalCount(laboratoryType,
-								laboratoryName,null,project,controllerName);
+								laboratoryName,null,project);
 						this.setRowCount(count);
 						if (count > 0) {
 							list = sysLaboratoryContainerService.getSysLaboratoryContainerList(laboratoryType,
-									laboratoryName,null,project,controllerName, first, pageSize);
+									laboratoryName,null,project, first, pageSize);
 						}
 						selectedList = new ArrayList<> ();
 					} catch (Exception e) {
@@ -423,7 +423,8 @@
 //							}
 //						}
 //					}
-					return sysLaboratoryContainerService.getSysLaboratoryContainer(rowKey);
+					Long id=Long.valueOf(rowKey);
+					return sysLaboratoryContainerService.getSysLaboratoryContainer(id);
 				}
 			};
 		}
diff --git a/src/main/java/com/nanometer/smartlab/controller/LaboratoryMngController.java b/src/main/java/com/nanometer/smartlab/controller/LaboratoryMngController.java
index aa97f57..dce2411 100644
--- a/src/main/java/com/nanometer/smartlab/controller/LaboratoryMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/LaboratoryMngController.java
@@ -3,14 +3,17 @@
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
 import com.nanometer.smartlab.entity.BaseMeta;
+import com.nanometer.smartlab.entity.SysProject;
 import com.nanometer.smartlab.entity.SysReagent;
 import com.nanometer.smartlab.service.BaseMetaService;
 import com.nanometer.smartlab.service.SysLaboratoryContainerService;
 import com.nanometer.smartlab.service.SysProjectService;
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Row;
@@ -56,7 +59,7 @@
 	/**
 	 * 数据模型
 	 */
-	private SysLaboratory sysLaboratory;
+	private SysLaboratory sysLaboratory=new SysLaboratory();
 	/**
 	 * 选中的list
 	 */
@@ -86,9 +89,22 @@
 		RequestContext.getCurrentInstance().execute("PF('dialog').show()");
 	}
 
+	public String getProjectName(String project){
+		if(StringUtils.isBlank(project)){
+			return "";
+		}
+		List<String> idstrs = Arrays.asList(project.split(","));
+		List<Long> ids=idstrs.stream().map(item -> Long.valueOf(item)).collect(Collectors.toList());
+		List<SysProject> projects=this.sysProjectService.getProjectByIds(ids);
+		if(projects==null||projects.size()==0){
+			return "";
+		}
+		List<String> projectNames=projects.stream().map(SysProject::getProjectName).collect(Collectors.toList());
+		return String.join(",",projectNames);
+	}
 	public void exportLab2Excel(){
 		try {
-			List<Map> list = sysLaboratoryService.exportLabList(type, name,project);
+			List<SysLaboratory> list = sysLaboratoryService.exportLabList(type, name,project);
 			sysLaboratoryService.exportLab2Excel(list);
 			FacesUtils.info("导出成功");
 		}catch (Exception e){
@@ -189,8 +205,8 @@
 		}
 	}
 
-	public String returnTypeId(List<BaseMeta> list,String name){
-		String id="";
+	public Long returnTypeId(List<BaseMeta> list,String name){
+		Long id=null;
 		for(int i=0;i<list.size();i++){
 			if(name.equals(list.get(i).getMetaValue())){
 				id=list.get(i).getId();
@@ -199,8 +215,8 @@
 		return  id;
 	}
 
-	public String returnDepartId(List<BaseMeta> list,String name){
-		String id="";
+	public Long returnDepartId(List<BaseMeta> list,String name){
+		Long id=null;
 		for(int i=0;i<list.size();i++){
 			if(name.equals(list.get(i).getMetaValue())){
 				id=list.get(i).getId();
@@ -243,8 +259,8 @@
 				}
 
 				//实体类重新获取项目组信息
-				sysLaboratory.setProject(null);
-				sysLaboratory.getProject();
+//				sysLaboratory.setProject(null);
+//				sysLaboratory.getProject();
 				this.sysLaboratoryService.updateSysLaboratory(sysLaboratory);
 
 				FacesUtils.info("修改成功。");
@@ -306,7 +322,8 @@
 //							}
 //						}
 //					}
-					return sysLaboratoryService.getSysLaboratory(rowKey);
+					Long id=Long.valueOf(rowKey);
+					return sysLaboratoryService.getSysLaboratory(id);
 				}
 			};
 		}
diff --git a/src/main/java/com/nanometer/smartlab/controller/LaboratoryStockMngController.java b/src/main/java/com/nanometer/smartlab/controller/LaboratoryStockMngController.java
index 13743de..9200464 100644
--- a/src/main/java/com/nanometer/smartlab/controller/LaboratoryStockMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/LaboratoryStockMngController.java
@@ -52,7 +52,7 @@
 	 */
 	private LazyDataModel<OpeReagentStatus> reagentStoreDataModel;
 
-	private String reagentId;
+	private Long reagentId;
 	private List<SysReagent> reagentSelectList;
 	private List<OpeReagentStatus> selectedStoreList;
 
@@ -64,8 +64,8 @@
 	/**
 	 * 数据模型
 	 */
-	private String laboratoryId;
-	private String laboratoryContainerId;
+	private Long laboratoryId;
+	private Long laboratoryContainerId;
 
 	/**
 	 * SpringMenu中初始化
@@ -93,11 +93,11 @@
 					List<OpeReagentStatus> list = null;
 					System.out.println(reagentId);
 					try {
-						int count = opeReagentStatusService.getOpeReagentStatusTotalCountForLab(reagentId, null,
+						int count = opeReagentStatusService.getOpeReagentStatusTotalCountForLab(reagentId,null, null,
 								ArrivalStatus.LABORATORY.getKey(), reagentCode, getUserId(),labName);
 						this.setRowCount(count);
 						if (count > 0) {
-							list = opeReagentStatusService.getOpeReagentStatusListForLab(reagentId, null,
+							list = opeReagentStatusService.getOpeReagentStatusListForLab(reagentId,null, null,
 									ArrivalStatus.LABORATORY.getKey(), reagentCode, getUserId(),labName, first, pageSize);
 						}
 					} catch (Exception e) {
@@ -160,7 +160,8 @@
 //							}
 //						}
 //					}
-					return opeReagentStatusService.getOpeReagentStatus(rowKey);
+					Long id=Long.valueOf(rowKey);
+					return opeReagentStatusService.getOpeReagentStatusById(id);
 				}
 			};
 		}
@@ -170,7 +171,7 @@
 
 	public void exportLabStock() {
 		try {
-			List<Map> list = opeReagentStatusService.selectExportList(reagentId, null,
+			List<Map> list = opeReagentStatusService.selectExportList(null, null,
 					ArrivalStatus.LABORATORY.getKey(), reagentCode, getUserId(),labName);
 			opeReagentStatusService.exportLabStock2Excel(list);
 			FacesUtils.info("导出成功");
@@ -195,11 +196,11 @@
 		this.reagentSelectList = reagentSelectList;
 	}
 
-	public String getReagentId() {
+	public Long getReagentId() {
 		return reagentId;
 	}
 
-	public void setReagentId(String reagentId) {
+	public void setReagentId(Long reagentId) {
 		this.reagentId = reagentId;
 	}
 
@@ -211,19 +212,19 @@
 		this.reagentCode = reagentCode;
 	}
 
-	public String getLaboratoryId() {
+	public Long getLaboratoryId() {
 		return laboratoryId;
 	}
 
-	public void setLaboratoryId(String laboratoryId) {
+	public void setLaboratoryId(Long laboratoryId) {
 		this.laboratoryId = laboratoryId;
 	}
 
-	public String getLaboratoryContainerId() {
+	public Long getLaboratoryContainerId() {
 		return laboratoryContainerId;
 	}
 
-	public void setLaboratoryContainerId(String laboratoryContainerId) {
+	public void setLaboratoryContainerId(Long laboratoryContainerId) {
 		this.laboratoryContainerId = laboratoryContainerId;
 	}
 
@@ -236,11 +237,11 @@
 	// 是试剂柜入库,还是错误入库
 	// 暂定是试剂柜入库
 	public void onSaveBtnClick() {
-		if (StringUtils.isBlank(laboratoryId)) {
+		if (laboratoryId==null) {
 			FacesUtils.warn("请选择实验室。");
 			return;
 		}
-		if (StringUtils.isBlank(laboratoryContainerId)) {
+		if (laboratoryContainerId==null) {
 			FacesUtils.warn("请选择临时存储库。");
 			return;
 		}
@@ -250,7 +251,7 @@
 		}
 
 		for (OpeReagentStatus opeReagentStatus : selectedStoreList) {
-			if (opeReagentStatus.getStatus().getKey() != ArrivalStatus.PERSONAL.getKey()) {
+			if (opeReagentStatus.getStatus() != ArrivalStatus.PERSONAL.getKey()) {
 				FacesUtils.warn("只能存放个人领用中的试剂。");
 				return;
 			}
diff --git a/src/main/java/com/nanometer/smartlab/controller/MenuController.java b/src/main/java/com/nanometer/smartlab/controller/MenuController.java
index 2b15bc8..e1ba206 100644
--- a/src/main/java/com/nanometer/smartlab/controller/MenuController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/MenuController.java
@@ -73,16 +73,6 @@
                     }
                 }
             }
-            /**
-             * 姑苏实验室 价格管理需要放在审批管理后面
-             */
-            if(this.getActiveEnv().equalsIgnoreCase("gslab")){
-                MenuModel menuModel=this.menuList.get(0);
-                List<MenuModel> subMenuModels=menuModel.getSubMenu();
-                if(!subMenuModels.get(1).getId().equalsIgnoreCase("approval_mng")){
-                    swap(subMenuModels,1,2);
-                }
-            }
         }
 
     }
diff --git a/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java b/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
index 03dd8aa..09c47e2 100644
--- a/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
@@ -5,8 +5,11 @@
 
 import javax.annotation.Resource;
 
+import com.nanometer.smartlab.dao.OpeReagentStatusDao;
+import com.nanometer.smartlab.entity.OpeReagentStatus;
 import com.nanometer.smartlab.entity.SysUser;
 import com.nanometer.smartlab.entity.dto.ApplyListDto;
+import com.nanometer.smartlab.entity.enumtype.OperateStatus;
 import com.nanometer.smartlab.exception.BusinessException;
 import com.nanometer.smartlab.service.SysUserService;
 import com.nanometer.smartlab.util.FacesUtils;
@@ -39,7 +42,7 @@
 
 	private LazyDataModel<OpeUseFlow> dataModel;
 
-	private String reagentId;
+	private Long reagentId;
 
 	private String reagentCode;
 	private String houseName;
@@ -52,7 +55,7 @@
 
 	private String containerCode;
 
-	private String operatestate;
+	private Integer operatestate;
 
 	public String getHouseName() {
 		return houseName;
@@ -73,8 +76,8 @@
 
 	@Resource
 	private SysUserService sysUserService;
-
-
+    @Resource
+	private OpeReagentStatusDao opeReagentStatusDao;
 	private List<SysReagent> reagentSelectList;
 
 	private OpeUseFlow selectedOne;
@@ -153,11 +156,11 @@
 		}
 	}
 
-	public String getReagentId() {
+	public Long getReagentId() {
 		return reagentId;
 	}
 
-	public void setReagentId(String reagentId) {
+	public void setReagentId(Long reagentId) {
 		this.reagentId = reagentId;
 	}
 
@@ -176,14 +179,14 @@
 		String receiptNumber = ouf.getReceiptNumber();
 		String code = ouf.getReagentCode();
 		//id:个数
-		Map<String, Integer> printInfo = opeUseFlowService.getRegentInfoFromReceiptNumber(receiptNumber);
+		Map<Long, Integer> printInfo = opeUseFlowService.getRegentInfoFromReceiptNumber(receiptNumber);
 		//无法得到当时的领用单的领用人,试剂状态表没有存入,userId会随时变化
 		printTable = null;
 		Integer sum = 0;
 		printTable = new Hashtable();
 		List<ApplyListDto> applyList = new ArrayList<>();
 		//获取当时操作状态为领取的人员
-		Map<String,String>  info= opeUseFlowService.getApplyUserByReagentCode(code);
+		Map<String,Long>  info= opeUseFlowService.getApplyUserByReagentCode(code);
 		SysUser applyPersonInfo = sysUserService.getUser(info.get("user_id"));
 		printTable.put("head", instituteName);
 		printTable.put("title", "领用单");
@@ -194,12 +197,12 @@
 		if (StringUtils.isNotBlank(applyPersonInfo.getPhone())){
 			printTable.put("phone", applyPersonInfo.getPhone());
 		}
-		if (StringUtils.isNotBlank(applyPersonInfo.getProject())){
-			printTable.put("project", applyPersonInfo.getProject());
+		if (applyPersonInfo.getProjectId()!=null){
+			printTable.put("project", applyPersonInfo.getProjectId());
 		}
 
 		printTable.put("receiptNumber", receiptNumber);
-		for (Map.Entry<String, Integer> map  : printInfo.entrySet()) {
+		for (Map.Entry<Long, Integer> map  : printInfo.entrySet()) {
 			ApplyListDto lis = new ApplyListDto();
 			Map reagentDetail = sysReagentService.getReagentDetail(map.getKey());
 			lis.setNum(map.getValue().toString()); //数量
@@ -236,7 +239,16 @@
 		}
 		try {
 			String reagentCode = this.selectedOne.getReagentCode();
-			String reagentId = this.selectedOne.getReagent().getId();
+			if (StringUtils.isBlank(reagentCode)) {
+				FacesUtils.warn("试剂条码为空");
+				return;
+			}
+			OpeReagentStatus opeReagentStatusByCode = this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(reagentCode);
+			if (opeReagentStatusByCode==null) {
+				FacesUtils.warn("试剂条码不存在");
+				return;
+			}
+			Long reagentId = opeReagentStatusByCode.getReagentId();
 			opeUseFlowService.scrapReagent(reagentId, reagentCode, getUserId());
 			FacesUtils.warn("操作成功");
 		} catch (BusinessException e) {
@@ -246,6 +258,10 @@
 			FacesUtils.warn("操作失败");
 		}
 
+	}
+
+	public List<Map<String,Object>>getOperatestateList(){
+		return OperateStatus.getOperateStatusList();
 	}
 
 	public void setStartDate(Date startDate) {
@@ -289,11 +305,11 @@
 		this.selectedOne = selectedOne;
 	}
 
-	public void setOperatestate(String operatestate) {
+	public void setOperatestate(Integer operatestate) {
 		this.operatestate = operatestate;
 	}
 
-	public String getOperatestate(){
+	public Integer getOperatestate(){
 		return operatestate;
 	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/controller/OrderMngController.java b/src/main/java/com/nanometer/smartlab/controller/OrderMngController.java
index 1621593..26b2046 100644
--- a/src/main/java/com/nanometer/smartlab/controller/OrderMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/OrderMngController.java
@@ -58,9 +58,9 @@
     private List<SysWarehouse> warehouseList;
     private List<SysWarehouseContainer> warehouseContainerList;
     private List<BaseMeta> warehouseContainerPlaceList;
-    private Map<String, String> warehouseNameMap;
-    private Map<String, SysWarehouseContainer> warehouseContainerMap;
-    private Map<String, List<SysWarehouseContainer>> warehouseIdContainerMap;
+    private Map<Long, String> warehouseNameMap;
+    private Map<Long, SysWarehouseContainer> warehouseContainerMap;
+    private Map<Long, List<SysWarehouseContainer>> warehouseIdContainerMap;
 
     public void initRukuPage() {
         this.userSelectList = this.sysUserService.getSysUserList(null, null, null, null, null,null,null);
@@ -71,15 +71,15 @@
             }
         }
         this.warehouseList = this.sysWarehouseService.getSysWarehouseList(null, null, null, null);
-        this.warehouseNameMap = new HashMap<String, String>();
+        this.warehouseNameMap = new HashMap<Long, String>();
         if (this.warehouseList != null && this.warehouseList.size() > 0) {
             for (SysWarehouse house : this.warehouseList) {
                 this.warehouseNameMap.put(house.getId(), house.getName());
             }
         }
 
-        this.warehouseContainerMap = new HashMap<String, SysWarehouseContainer>();
-        this.warehouseIdContainerMap = new HashMap<String, List<SysWarehouseContainer>>();
+        this.warehouseContainerMap = new HashMap<Long, SysWarehouseContainer>();
+        this.warehouseIdContainerMap = new HashMap<Long, List<SysWarehouseContainer>>();
         List<SysWarehouseContainer> warehouseContainerList = this.sysWarehouseContainerService.getSysWarehouseContainerList(null, null, null, null, null);
         if (warehouseContainerList != null && warehouseContainerList.size() > 0) {
             for (SysWarehouseContainer container : warehouseContainerList) {
@@ -206,49 +206,23 @@
                     FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的到货数量不能为空,且要大于0。");
                     return;
                 }
-//                // 检查货号
-//                if (StringUtils.isBlank(opeApply.getArticleNumber())) {
-//                    FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的货号不能为空。");
-//                    return;
-//                }
-//                // 检查条形码开始
-//                if (StringUtils.isBlank(opeApply.getStartReagentCode())) {
-//                    FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的条形码开始不能为空。");
-//                    return;
-//                }
-//                // 检查条形码结束
-//                if (StringUtils.isBlank(opeApply.getEndReagentCode())) {
-//                    FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的条形码结束不能为空。");
-//                    return;
-//                }
-                if (StringUtils.isNotBlank(opeApply.getStartReagentCode()) && StringUtils.isNotBlank(opeApply.getEndReagentCode())) {
-                    startReagentCode = new BigDecimal(opeApply.getStartReagentCode());
-                    endReagentCode = new BigDecimal(opeApply.getEndReagentCode());
-                    // 检查条形码结束要大于条形码开始
-                    if (endReagentCode.compareTo(startReagentCode) == -1) {
-                        FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的条形码开始必须小于条形码结束。");
-                        return;
-                    }
-
-                    // 检查条形码和到货数量是否匹配
-                    if (endReagentCode.subtract(startReagentCode).intValue() != (opeApply.getArrivalNum() - 1)) {
-                        FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的条形码数量和到货数量不一致。");
-                        return;
-                    }
+                if (StringUtils.isBlank(opeApply.getStartReagentCode()) || StringUtils.isBlank(opeApply.getEndReagentCode())) {
+                    FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的条形码未自动生成");
+                    return;
                 }
 
                 // 检查仓库名
-                if (StringUtils.isBlank(opeApply.getHouseId())) {
+                if (opeApply.getHouseId()==null) {
                     FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的仓库名不能为空。");
                     return;
                 }
                 // 检查货柜名
-                if (StringUtils.isBlank(opeApply.getContainerId())) {
+                if (opeApply.getContainerId()==null) {
                     FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的货柜名不能为空。");
                     return;
                 }
                 // 检查货柜位置
-                if (StringUtils.isBlank(opeApply.getPlaceId())) {
+                if (StringUtils.isBlank(opeApply.getPlace())) {
                     FacesUtils.warn("申购编号:" + opeApply.getApplyCode() + "的货柜位置不能为空。");
                     return;
                 }
@@ -305,7 +279,8 @@
 //                            }
 //                        }
 //                    }
-                    return opeOrderService.getOpeOrder(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return opeOrderService.getOpeOrder(id);
                 }
             };
         }
@@ -313,27 +288,6 @@
         return dataModel;
     }
 
-    public void onChangeCodeBtnClick() {
-        if (this.selectedList == null
-                || this.selectedList.size() == 0) {
-            FacesUtils.warn("请选择数据。");
-            return;
-        }
-        if (this.selectedList.size() > 1) {
-            FacesUtils.warn("只能选择一个数据进行入库。");
-            return;
-        }
-
-        this.opeOrder = this.opeOrderService.getOpeOrder(this.selectedList.get(0).getId());
-        if (!(this.opeOrder.getStatus().getKey() == ApplyStatus.STORAGE.getKey() || this.opeOrder.getStatus().getKey() == ApplyStatus.UNCOMPLETED.getKey())) {
-            FacesUtils.warn("只有已入库和未完成状态的订单才能进行变更。");
-            return;
-        }
-
-        this.opeOrderApplyList = this.opeOrderService.getOpeApplyListByOrder(this.selectedList.get(0).getId());
-
-        this.menuController.goToPage(Constants.PAGE_ORDER_MNG_CHANEGE_CODE, Constants.PAGE_ORDER_MNG);
-    }
 
 
     public void onChangeCodePageSaveBtnClick() {
@@ -512,63 +466,72 @@
         return userSelectList;
     }
 
-    public String formatWarehouseName(String id) {
-        if (StringUtils.isNotBlank(id)
-                && this.warehouseNameMap != null) {
-            return warehouseNameMap.get(id);
+    public String formatWarehouseName(Long id) {
+        if(id==null){
+            return "";
         }
-
-        return "";
-    }
-    public String formatWarehouseContainerName(String id) {
-        if (StringUtils.isNotBlank(id)
-                && this.warehouseContainerMap != null) {
-            if (this.warehouseContainerMap.get(id) != null) {
-                return this.warehouseContainerMap.get(id).getContainerCode();
+        String name=warehouseNameMap.get(id);
+        if(StringUtils.isBlank(name)){
+            SysWarehouse warehouse=this.sysWarehouseService.getSysWarehouse(id);
+            if(warehouse!=null){
+                warehouseNameMap.put(warehouse.getId(),warehouse.getName());
+                name=warehouse.getName();
             }
         }
-
-        return "";
+        return name;
     }
-    public String formatWarehouseContainerPlaceName(String id) {
-        if (StringUtils.isNotBlank(id)) {
+    public String formatWarehouseContainerName(Long id) {
+        if(id==null){
+            return "";
+        }
+        String containerCode=this.warehouseContainerMap.get(id).getContainerCode();
+        if(StringUtils.isBlank(containerCode)){
+            SysWarehouseContainer sysWarehouseContainer = this.sysWarehouseContainerService.getSysWarehouseContainer(id);
+            if(sysWarehouseContainer!=null){
+                this.warehouseContainerMap.put(sysWarehouseContainer.getId(),sysWarehouseContainer);
+                containerCode=sysWarehouseContainer.getContainerCode();
+            }
+        }
+        return containerCode;
+    }
+    public String formatWarehouseContainerPlaceName(Long id) {
+        if (id!=null) {
             return this.baseMetaService.getBaseMetaValue(id);
         }
-
         return "";
     }
 
-    public void onWarehouseSelectChange(String warehouseId) {
+    public void onWarehouseSelectChange(Long warehouseId) {
         this.warehouseContainerList = null;
         this.warehouseContainerPlaceList = null;
         this.changeWarehouseContainerList(warehouseId);
         this.changeWarehouseContainerPlaceList(null);
     }
 
-    public void onWarehouseContainerSelectChange(String warehouseContainerId) {
+    public void onWarehouseContainerSelectChange(Long warehouseContainerId) {
         this.warehouseContainerPlaceList = null;
         this.changeWarehouseContainerPlaceList(warehouseContainerId);
     }
 
-    private void changeWarehouseContainerList(String warehouseId) {
-        if (StringUtils.isBlank(warehouseId)) {
+    private void changeWarehouseContainerList(Long warehouseId) {
+        if (warehouseId==null) {
             if (this.warehouseList != null && this.warehouseList.size() > 0) {
                 warehouseId = this.warehouseList.get(0).getId();
             }
         }
 
-        if (StringUtils.isNotBlank(warehouseId)) {
+        if (warehouseId!=null) {
             this.warehouseContainerList = warehouseIdContainerMap.get(warehouseId);
         }
     }
-    private void changeWarehouseContainerPlaceList(String warehouseContainerId) {
-        if (StringUtils.isBlank(warehouseContainerId)) {
+    private void changeWarehouseContainerPlaceList(Long warehouseContainerId) {
+        if (warehouseContainerId==null) {
             if (this.warehouseContainerList != null && this.warehouseContainerList.size() > 0) {
                 warehouseContainerId = this.warehouseContainerList.get(0).getId();
             }
         }
 
-        if (StringUtils.isNotBlank(warehouseContainerId)) {
+        if (warehouseContainerId==null) {
             SysWarehouseContainer container = this.warehouseContainerMap.get(warehouseContainerId);
             BaseMeta baseMeta = null;
             if (container != null
diff --git a/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java b/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
index 91bfc1b..0547cd1 100644
--- a/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
@@ -13,6 +13,7 @@
 import com.nanometer.smartlab.service.SysLaboratoryService;
 import com.nanometer.smartlab.util.FacesUtils;
 import com.nanometer.smartlab.util.Utils;
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.primefaces.context.RequestContext;
 import org.primefaces.model.LazyDataModel;
@@ -54,7 +55,7 @@
 	 * 数据源
 	 */
 	private LazyDataModel<OpeReagentStatus> dataModel;
-	private String reagentId;
+	private Long reagentId;
     private String reagentName;
 	private String reagentCode;
 	private String applyPerson;
@@ -126,7 +127,7 @@
 			//判断单子下的试剂是否全部 为 领用待入库-1,不是就不能取消领用
 			List<PersonUseDetail> applyList = opeUseFlowService.getApplyInfo(selectOne.getReceiptNumber());
 			boolean flag = applyList.stream().allMatch(pu ->
-						opeReagentStatusService.getOpeReagentStatusByReagentCode(pu.getReagentCode() ).getStatus()== ArrivalStatus.NOREGISTER);
+						opeReagentStatusService.getOpeReagentStatusByReagentCode(pu.getReagentCode() ).getStatus()== ArrivalStatus.NOREGISTER.getKey());
 			if (!flag) {
 				FacesUtils.warn("试剂当前状态不可以取消领用");
 				return;
@@ -165,9 +166,9 @@
 		printTable.put("department", selectOne.getDepartment());
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
 		printTable.put("date", dateFormat.format(selectOne.getCreateTime()));
-		printTable.put("phone", selectOne.getPhone());
+		printTable.put("phone", StringUtils.isBlank(selectOne.getPhone())?"":selectOne.getPhone());
 		printTable.put("receiptNumber", selectOne.getReceiptNumber());
-		printTable.put("project", selectOne.getProject());
+		printTable.put("project", selectOne.getProjectName());
 
 		SysLaboratory sysLaboratory = sysLaboratoryService.getSysLaboratorySimpleInfo(selectOne.getHouseId());
 		printTable.put("lab", sysLaboratory.getName());
@@ -317,11 +318,11 @@
 		return dataModel2;
 	}
 
-	public String getReagentId() {
+	public Long getReagentId() {
 		return reagentId;
 	}
 
-	public void setReagentId(String reagentId) {
+	public void setReagentId(Long reagentId) {
 		this.reagentId = reagentId;
 	}
 
diff --git a/src/main/java/com/nanometer/smartlab/controller/PriceMngController.java b/src/main/java/com/nanometer/smartlab/controller/PriceMngController.java
index ad2586b..560ebc5 100644
--- a/src/main/java/com/nanometer/smartlab/controller/PriceMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/PriceMngController.java
@@ -88,7 +88,7 @@
     private Boolean approvalFlag;
 
     public Boolean getApprovalFlag() {
-        String id=getUserId();
+        Long id=getUserId();
         SysUser sysUser = sysUserService.getSysUser(id);
         // 不是管理员时
         if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
@@ -153,11 +153,11 @@
             }
 
             String controlProducts = opeApply.getReagent().getControlProducts();
-            if (StringUtils.isNotBlank(controlProducts)) {
-                String baseMetaValue = baseMetaService.getBaseMetaValue(controlProducts);
-                if (StringUtils.isNotBlank(baseMetaValue) && !"15fc90a1f7bf43bda01313904b543195".equals(this.getUser().getRoleId())) {
-                    dangerousFlag = true;
-                }
+            if (controlProducts!=null) {
+//                String baseMetaValue = baseMetaService.getBaseMetaValue(controlProducts);
+//                if (StringUtils.isNotBlank(baseMetaValue) && this.getUser().getRoleId()!=1l) {
+//                    dangerousFlag = true;
+//                }
             }
         }
 
@@ -217,7 +217,7 @@
             Map<String, Integer> tempMap = new HashMap<String,Integer>();
             List<OpeApply> realDataList = new ArrayList<>();
             //map=null;
-            String approveUserId = getUserId();
+            Long approveUserId = getUserId();
             if(selectedList!=null&selectedList.size()>0){
                 realDataList=selectedList;
             }else {
@@ -295,15 +295,15 @@
             dataRow.createCell(0).setCellValue(dataList.get(i).getApplyCode()== null ? "": String.valueOf(dataList.get(i).getApplyCode()));
             dataRow.createCell(1).setCellValue(dataList.get(i).getReagent().getProductSn()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductSn()));
             dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getName()== null ? "": String.valueOf(dataList.get(i).getReagent().getName()));
-            dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getControlProducts())));
-            dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentFormat())));
-            dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentUnit()));
+            dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(dataList.get(i).getReagent().getControlProducts()));
+            dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentFormat()));
+            dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+dataList.get(i).getReagent().getReagentUnit());
             dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
             dataRow.createCell(7).setCellValue(String.valueOf(dataList.get(i).getNum()));
             dataRow.createCell(8).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
-            dataRow.createCell(9).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentCharacter())));
-            dataRow.createCell(10).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
-            dataRow.createCell(11).setCellValue(dataList.get(i).getReagent().getReagentType()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentType())));
+            dataRow.createCell(9).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentCharacter()));
+            dataRow.createCell(10).setCellValue(dataList.get(i).getReagent().getProductHome()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductHome()));
+            dataRow.createCell(11).setCellValue(dataList.get(i).getReagent().getReagentType()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentType()));
 
             dataRow.createCell(12).setCellValue(String.valueOf(dataList.get(i).getApplyUserName()));
             dataRow.createCell(13).setCellValue(String.valueOf(dataList.get(i).getCreateTime()));
@@ -317,8 +317,8 @@
                 dataRow.createCell(15).setCellValue(String.valueOf(dataList.get(i).getApproveUserName()));
             }
             dataRow.createCell(16).setCellValue(String.valueOf(dataList.get(i).getStatus().getText()));
-            SysProject project = sysProjectService.getProjectByProId(dataList.get(i).getObjective());
-            dataRow.createCell(17).setCellValue(project.getProjectName()==null ?"":String.valueOf(project.getProjectName()));
+           // SysProject project = sysProjectService.getSysProject(dataList.get(i).getProjectId());
+            dataRow.createCell(17).setCellValue(dataList.get(i).getApplyUserProject()==null ?"":String.valueOf(dataList.get(i).getApplyUserProject()));
         }
 
         return hssfWorkbook;
@@ -339,12 +339,7 @@
             }
 
             for (OpeApply oa : this.selectedList) {
-                if("gslab".equalsIgnoreCase(this.getActiveEnv())){
-                    oa.setStatus(ApplyStatus.APPROVED);
-                }else{
-                    oa.setStatus(ApplyStatus.PENDING_APPROVAL);
-                }
-
+                oa.setStatus(ApplyStatus.PENDING_APPROVAL);
                 this.opeApplyService.updateOpeApply(oa);
             }
 
@@ -362,9 +357,9 @@
                 public List<OpeApply> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
                     List<OpeApply> list = null;
                     //try {
-                        String approveUserId = getUserId();
+                        Long approveUserId = getUserId();
                         int count = 0;
-                        if (StringUtils.isNotBlank(approveUserId)) {
+                        if (approveUserId!=null) {
                             count = opeApplyService.getOpeApplyTotalCountForApproval(applyUserName,approvaUserName,reagentName, startDeadline, endDeadline, status, null, approveUserId, null, null,null);
                         }
                         this.setRowCount(count);
@@ -405,7 +400,8 @@
 //                            }
 //                        }
 //                    }
-                    return opeApplyService.getOpeApply(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return opeApplyService.getOpeApply(id);
                 }
             };
         }
diff --git a/src/main/java/com/nanometer/smartlab/controller/ProjectMngController.java b/src/main/java/com/nanometer/smartlab/controller/ProjectMngController.java
index c3fc2b5..6894d13 100644
--- a/src/main/java/com/nanometer/smartlab/controller/ProjectMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/ProjectMngController.java
@@ -41,11 +41,11 @@
     private List<SysProject> selectedList;
     private List<BasePage> basePageList;
     private List<SysUser> sameDptUserList;
-    private Map<String, String> userIdNameMap;
+    private Map<Long, String> userIdNameMap;
     private List<SysUser> userSelectList;
     private int action;
 
-    private String projectId;
+    private String projectNo;
     private String projectName;
     private String sysUserName;
 
@@ -60,14 +60,12 @@
         return userSelectList;
     }
 
-    public SysUser getSelectedUserById(String userId) {
-        System.out.println(userId);
-       List<SysUser> userList= userSelectList.stream().filter(u -> u.getId().equals(userId)).collect(Collectors.toList());
-       if(userList.size()>0){
-            return userList.get(0);
-       }else{
-           return new SysUser();
-       }
+    public SysUser getSelectedUserById(Long userId) {
+        SysUser sysUser=this.sysUserService.getSysUser(userId);
+        if(sysUser==null){
+            return new SysUser();
+        }
+        return sysUser;
     }
 
     public List<SysUser> getUserSelectList(String keyword) {
@@ -87,12 +85,12 @@
         ProjectMngController.logger = logger;
     }
 
-    public String getProjectId() {
-        return projectId;
+    public String getProjectNo() {
+        return projectNo;
     }
 
-    public void setProjectId(String projectId) {
-        this.projectId = projectId;
+    public void setProjectNo(String projectNo) {
+        this.projectNo = projectNo;
     }
 
     public String getProjectName() {
@@ -142,16 +140,16 @@
                     return;
                 }
 
-                if (this.sysProject.getSysUserId() == null || this.sysProject.getSysUserId()=="") {
+                if (this.sysProject.getSysUserId() == null) {
                     FacesUtils.warn("请选择课题负责人。");
                     return;
                 }
 
-                if (this.sysProject.getProjectId() == null || this.sysProject.getProjectId()=="") {
+                if (this.sysProject.getProjectNo() == null || this.sysProject.getProjectNo()=="") {
                     FacesUtils.warn("请输入课题编号。");
                     return;
                 }else {
-                    if(sysProjectService.getProjectByProId(this.sysProject.getProjectId())!=null){
+                    if(sysProjectService.getProjectByProNo(this.sysProject.getProjectNo())!=null){
                         FacesUtils.warn("课题编号已存在,请重新输入。");
                         return;
                     }
@@ -170,15 +168,15 @@
                     return;
                 }
 
-                if (StringUtils.isBlank(this.sysProject.getSysUserId())) {
+                if (this.sysProject.getSysUserId()==null) {
                     FacesUtils.warn("请选择课题负责人。");
                     return;
                 }
-                if (this.sysProject.getProjectId() == null || this.sysProject.getProjectId()=="") {
+                if (this.sysProject.getProjectNo() == null || this.sysProject.getProjectNo()=="") {
                     FacesUtils.warn("请输入课题编号。");
                     return;
                 }else {
-                    SysProject sp=this.sysProjectService.getProjectByProId(this.sysProject.getProjectId());
+                    SysProject sp=this.sysProjectService.getProjectByProNo(this.sysProject.getProjectNo());
                     if(sp!=null){
                         if(!sp.getId().equals(this.sysProject.getId())){
                             FacesUtils.warn("课题编号已存在,请重新输入。");
@@ -186,11 +184,7 @@
                         }
                     }
                 }
-                SysProject pro=this.sysProjectService.getSysProject(this.sysProject.getId());
                 this.sysProjectService.updateSysProject(this.sysProject);
-                this.opeApplyService.updateOpeApplyProject(this.sysProject.getProjectId(),pro.getProjectId());
-
-
                 FacesUtils.info("修改成功。");
                 RequestContext.getCurrentInstance().execute("PF('dialog').hide()");
             }
@@ -237,10 +231,10 @@
                     List<SysProject> list = null;
                     initUserSelectList();
                     try {
-                        int count = sysProjectService.getSysProjectTotalCountUpdate(getUserId(),projectId,projectName,sysUserName);
+                        int count = sysProjectService.getSysProjectTotalCountUpdate(getUserId(),projectNo,projectName,sysUserName);
                         this.setRowCount(count);
                         if (count > 0) {
-                            list = sysProjectService.getSysProjectListUpdate(first, pageSize,getUserId(),projectId,projectName,sysUserName);
+                            list = sysProjectService.getSysProjectListUpdate(first, pageSize,getUserId(),projectNo,projectName,sysUserName);
                         }
                         selectedList = new ArrayList<>();
                     } catch (Exception e) {
@@ -261,7 +255,8 @@
 //                            }
 //                        }
 //                    }
-                    return sysProjectService.getSysProject(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return sysProjectService.getSysProject(id);
                 }
             };
         }
@@ -310,11 +305,11 @@
         this.sameDptUserList = sameDptUserList;
     }
 
-    public Map<String, String> getUserIdNameMap() {
+    public Map<Long, String> getUserIdNameMap() {
         return userIdNameMap;
     }
 
-    public void setUserIdNameMap(Map<String, String> userIdNameMap) {
+    public void setUserIdNameMap(Map<Long, String> userIdNameMap) {
         this.userIdNameMap = userIdNameMap;
     }
 }
diff --git a/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java b/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java
index 75989d8..ad5261d 100644
--- a/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java
@@ -2,6 +2,7 @@
 
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.enumtype.DangerousFlag;
+import com.nanometer.smartlab.entity.enumtype.ReagentTypeFlag;
 import com.nanometer.smartlab.entity.enumtype.Type;
 import com.nanometer.smartlab.service.*;
 import com.nanometer.smartlab.util.Constants;
@@ -65,7 +66,7 @@
     private SysReagent sysReagent;
     private List<SysReagent> selectedList;
     private String name;
-    private String supplierId;
+    private Long supplierId;
     private String cas;
     private List<SysSupplier> supplierSelectList;
     private List<Type> typeList;
@@ -86,10 +87,11 @@
     private List<BaseMeta> codeList;
     private List<SysSupplier> sysSupplierList;
     private List<DangerousFlag> dangerousFlagSelectList;
+    private List<ReagentTypeFlag> reagentTypeFlagList;
     private Integer type;
 
     public Integer getType() {
-        return type == null?0:type;
+        return type;
     }
 
     public void setType(Integer type) {
@@ -136,11 +138,11 @@
         for (int i=0;i<list.size();i++) {
             System.out.println("i=========="+i);
             SysReagent re=list.get(i);
-            BaseMeta baseMeta=baseMetaService.getBaseMeta(re.getReagentUnit());
-            String value="";
-            if(baseMeta!=null){
-                value=baseMeta.getMetaValue().toUpperCase();
-            }
+           // BaseMeta baseMeta=baseMetaService.getBaseMeta(re.getReagentUnit());
+            String value=re.getReagentUnit();
+//            if(baseMeta!=null){
+//                value=baseMeta.getMetaValue().toUpperCase();
+//            }
             if(re.getCas()!=null && !re.getCas().equals("")){
                 String key=re.getCas()+re.getMainMetering()+value+re.getReagentFormat()+re.getProductHome();
                 System.out.println("value================="+map.get(key));
@@ -301,26 +303,7 @@
     }
 
     public static void main(String[] args){
-        Map<String,SysReagent> map=new HashMap<>();
-        SysReagent s1=new SysReagent();
-        s1.setCas("1");
-        s1.setMainMetering(new BigDecimal(1));
-        s1.setReagentUnit("0ae7ecb85f2940499680a0baa2cfc201");
-        s1.setProductHome("e9cda39ea42149158e5a36618ef0bde7");
-        s1.setReagentFormat("b2790196662c40529c28e616244c6d65");
-        SysReagent s2=new SysReagent();
-        s2.setCas("1");
-        s2.setMainMetering(new BigDecimal(1));
-        s2.setReagentUnit("0ae7ecb85f2940499680a0baa2cfc201");
-        s2.setProductHome("e9cda39ea42149158e5a36618ef0bde7");
-        s2.setReagentFormat("b2790196662c40529c28e616244c6d65");
-        String key=s1.getCas()+s1.getMainMetering()+s1.getReagentUnit()+s1.getReagentFormat()+s1.getProductHome();
-        map.put(key,s1);
-        String key2=s2.getCas()+s2.getMainMetering()+s2.getReagentUnit()+s2.getReagentFormat()+s2.getProductHome();
-        map.put(key2,s2);
-        System.out.println(map.size());
-        System.out.println(map.get(key));
-        System.out.println(map.get(key2));
+
     }
 
     public void onNewBtnClick() {
@@ -421,9 +404,6 @@
                     return;
                 }
                 this.sysReagent.setType(1);
-                if(this.sysReagent.getControlProducts().equals("")){
-                    this.sysReagent.setControlProducts(null);
-                }
                 this.sysReagentService.insertSysReagent(this.sysReagent);
 
                 FacesUtils.info("新建成功。");
@@ -466,12 +446,11 @@
     }
 
     //判断字典表里是否存在这组键值对
-    public String getId(String groupId,String metaValue){
-        String id="";
+    public Long getId(String groupCode,String metaValue){
+        Long  id=null;
         if(this.codeList.size()>0){
             for (BaseMeta bm:this.codeList){
-
-                if(bm.getGroupId().equals(groupId)&&bm.getMetaValue().equals(metaValue)){
+                if(bm.getGroupCode().equals(groupCode)&&bm.getMetaValue().equals(metaValue)){
                     id=bm.getId();
                 }
             }
@@ -479,12 +458,12 @@
         return id;
     }
     //判断字典表里计量单位是否存在这组键值对,忽略大小写
-    public String getIdForUnit(String groupId,String metaValue){
-        String id="";
+    public Long getIdForUnit(String groupCode,String metaValue){
+        Long  id=null;
         if(this.codeList.size()>0){
             for (BaseMeta bm:this.codeList){
 
-                if(bm.getGroupId().equals(groupId)&&bm.getMetaValue().toUpperCase().equals(metaValue.toUpperCase())){
+                if(bm.getGroupCode().equals(groupCode)&&bm.getMetaValue().toUpperCase().equals(metaValue.toUpperCase())){
                     id=bm.getId();
                 }
             }
@@ -494,8 +473,8 @@
 
 
     //判断是否存在改供应商
-    public String getSysSupplierId(String name){
-        String id="";
+    public Long getSysSupplierId(String name){
+        Long  id=null;
         for (SysSupplier sup:this.sysSupplierList) {
             if(sup.getName().equals(name)){
                 id=sup.getId();
@@ -533,7 +512,7 @@
             }
             for (int i = 1; i < totalRows; i++) {
                 SysReagent sysReagent = new SysReagent();
-                List<String> valuesList=new ArrayList<String>();
+                List<Object> valuesList=new ArrayList<Object>();
                 row=sheet.getRow(i);
 
               //  totalCells= row.getLastCellNum();
@@ -543,7 +522,7 @@
 //                }
                 for (int t = 0; t < totalCells; t++) {
                     String cellInfo="";
-                    String groupId = "";
+                    String groupCode = "";
                     if (row.getCell(t) != null) {
                         if (row.getCell(t).getCellTypeEnum().toString().equals("NUMERIC")) {
                             cellInfo = String.valueOf(row.getCell(t).getNumericCellValue());
@@ -551,21 +530,7 @@
                             cellInfo = row.getCell(t).getStringCellValue();
                         }
                     }
-                    if(t == 1 ){
-                        groupId = "product_name";
-                        String id=getId(groupId,cellInfo);
-                        if(id == "" && cellInfo!=null && cellInfo!="" ) {
-                            BaseMeta baseMeta = new BaseMeta();
-                            baseMeta.setId(IDUtils.uuid());
-                            baseMeta.setGroupId(groupId);
-                            baseMeta.setMetaValue(cellInfo);
-                            baseMeta.setMetaKey(cellInfo);
-                            baseMetaService.insertBaseMeta(baseMeta);
-                            id = baseMeta.getId();
-                            this.codeList.add(baseMeta);
-                        }
-                        valuesList.add(id);
-                    }else if(t==3){
+                    if(t==3){
                         String numberStr = "";
                         String ChartStr = "";
                         char[] strArr = cellInfo.toCharArray();
@@ -578,34 +543,10 @@
                         }
                         numberStr=cellInfo.substring(0,index);
                         ChartStr=cellInfo.substring(index,cellInfo.length());
-                        System.out.println("ChartStr========"+ChartStr);
-                        /*for (char string : strArr) {
-                            // 判断是否为字母
-                            if ((string+"").matches("^[a-zA-Z\\u4e00-\\u9fa5]+$")||(string+"").equals("/")){
-                                ChartStr += string;
-                            }
-                            // 判断是否为数字
-                            if ((string+"").matches("[0-9]")){
-                                numberStr += string;
-                            }
-
-                        }*/
                         valuesList.add(numberStr);
-                        groupId = "reagent_unit";
-                        String id=getIdForUnit(groupId,ChartStr);
-                        if(id == "" && cellInfo!=null && cellInfo!="") {
-                            BaseMeta baseMeta = new BaseMeta();
-                            baseMeta.setId(IDUtils.uuid());
-                            baseMeta.setGroupId(groupId);
-                            baseMeta.setMetaValue(ChartStr.toUpperCase());
-                            baseMeta.setMetaKey(ChartStr.toUpperCase());
-                            baseMetaService.insertBaseMeta(baseMeta);
-                            id = baseMeta.getId();
-                            this.codeList.add(baseMeta);
-                        }
-                        valuesList.add(id);
+                        valuesList.add(ChartStr.toUpperCase());
                     }else if(t==5){
-                        String id="";
+                        Long id=null;
                         if(!StringUtils.isBlank(cellInfo)){
                             SysSupplier sysSupplier=sysSupplierService.getSysSupplierByName(cellInfo);
                             if(sysSupplier==null){//新建供应商
@@ -613,23 +554,6 @@
                                 return;
                             }
                             id=sysSupplier.getId();
-                        }
-                        valuesList.add(id);
-                    }else if(t==6){
-                        String id="";
-                        if(!StringUtils.isBlank(cellInfo)){
-                            groupId = "reagent_format";
-                            id=getId(groupId,cellInfo);
-                            if(StringUtils.isBlank(id)){
-                                BaseMeta baseMeta = new BaseMeta();
-                                baseMeta.setId(IDUtils.uuid());
-                                baseMeta.setGroupId(groupId);
-                                baseMeta.setMetaValue(cellInfo);
-                                baseMeta.setMetaKey(cellInfo);
-                                baseMetaService.insertBaseMeta(baseMeta);
-                                id = baseMeta.getId();
-                                this.codeList.add(baseMeta);
-                            }
                         }
                         valuesList.add(id);
                     }else {
@@ -642,22 +566,22 @@
                     return;
                 }
                 System.out.println("value :     "+valuesList);
-                sysReagent.setName(valuesList.get(0));//试剂名称
-                sysReagent.setProductHome(valuesList.get(1));//厂家
-                sysReagent.setProductSn(valuesList.get(2));//产品编号
-                sysReagent.setCas(valuesList.get(2));//产品编号
+                sysReagent.setName(valuesList.get(0).toString());//试剂名称
+                sysReagent.setProductHome(valuesList.get(1).toString());//厂家
+                sysReagent.setProductSn(valuesList.get(2).toString());//产品编号
+                sysReagent.setCas(valuesList.get(2).toString());//产品编号
                 if(!valuesList.get(3).equals("")){
-                    sysReagent.setMainMetering(new BigDecimal(valuesList.get(3)));//包装(数值)
+                    sysReagent.setMainMetering(new BigDecimal(valuesList.get(3).toString()));//包装(数值)
                 }
-                sysReagent.setReagentUnit(valuesList.get(4));//包装(单位)
+                sysReagent.setReagentUnit(valuesList.get(4).toString());//包装(单位)
                 if(!valuesList.get(5).equals("")){
-                    sysReagent.setPrice(BigDecimal.valueOf(Double.parseDouble(valuesList.get(5))));//含税单价
+                    sysReagent.setPrice(BigDecimal.valueOf(Double.parseDouble(valuesList.get(5).toString())));//含税单价
                 }
-                if(StringUtils.isNotBlank(valuesList.get(6))){
-                    sysReagent.setSupplierId(valuesList.get(6));//供应商id
+                if(StringUtils.isNotBlank(valuesList.get(6).toString())){
+                    sysReagent.setSupplierId(Long.valueOf(valuesList.get(6).toString()));//供应商id
                 }
-                if(StringUtils.isNotBlank(valuesList.get(7))){
-                    sysReagent.setReagentFormat(valuesList.get(7));//规格id
+                if(StringUtils.isNotBlank(valuesList.get(7).toString())){
+                    sysReagent.setReagentFormat(valuesList.get(7).toString());//规格
                 }
                 DangerousFlag d;
                 d = DangerousFlag.NORMAL;
@@ -712,7 +636,7 @@
                 for (int t = 0; t <= totalCells; t++) {
                     //System.out.println(row.getCell(t));
                     String cellInfo="";
-                    String groupId = "";
+                    String groupCode = "";
 
 					if (row.getCell(t) != null) {
 
@@ -722,33 +646,7 @@
 							cellInfo = row.getCell(t).getStringCellValue();
 						}
 					}
-                    if(t == 2 || t == 3 || t == 7 || t == 10 || t == 9){
-                        if( t == 2){
-                            groupId = "control_products";
-                        }else if(t == 3){
-                            groupId = "reagent_format";
-                        }else if (t==7){
-                            groupId = "reagent_character";
-                            dangours = cellInfo;
-                        }else if(t == 10){
-                            groupId = "reagent_type";
-                        }else if(t == 9){
-                            groupId = "product_name";
-                        }
-                        //String id = sysSupplierService.getSysSupplierId(cellInfo,groupId);
-                        String id=getId(groupId,cellInfo);
-                       if(id == "" && cellInfo!=null && cellInfo!="" ) {
-                            BaseMeta baseMeta = new BaseMeta();
-                            baseMeta.setId(IDUtils.uuid());
-                            baseMeta.setGroupId(groupId);
-                            baseMeta.setMetaValue(cellInfo);
-                            baseMeta.setMetaKey(cellInfo);
-                            baseMetaService.insertBaseMeta(baseMeta);
-                            id = baseMeta.getId();
-                            this.codeList.add(baseMeta);
-                        }
-                        valuesList.add(id);
-                    }else if(t == 4){
+                    if(t == 4){
                         String numberStr = "";
                         String ChartStr = "";
                         char[] strArr = cellInfo.toCharArray();
@@ -757,31 +655,15 @@
                             if ((string+"").matches("^[a-zA-Z\\u4e00-\\u9fa5]|[μ]+$")||(string+"").equals("/")){
                                 ChartStr += string;
                             }
-
                         }
                         numberStr = cellInfo.replace(ChartStr, "");
-
                         valuesList.add(numberStr);
-                        groupId = "reagent_unit";
-                        //String id = sysSupplierService.getSysSupplierId(ChartStr,groupId);
-                        String id=getIdForUnit(groupId,ChartStr.toUpperCase());
-                       if(id == "" && cellInfo!=null && cellInfo!="") {
-                            BaseMeta baseMeta = new BaseMeta();
-                            baseMeta.setId(IDUtils.uuid());
-                            baseMeta.setGroupId(groupId);
-                            baseMeta.setMetaValue(ChartStr.toUpperCase());
-                            baseMeta.setMetaKey(ChartStr.toUpperCase());
-                            baseMetaService.insertBaseMeta(baseMeta);
-                            id = baseMeta.getId();
-                            this.codeList.add(baseMeta);
-                        }
-                       //System.out.println(getId(groupId,cellInfo));
-                        valuesList.add(id);
+                        valuesList.add(ChartStr.toUpperCase());
                     }else if(t == 11){
-                        String id=getSysSupplierId(cellInfo);
-                        if(id == "" && cellInfo!=null && cellInfo!="") {
+                        Long id=getSysSupplierId(cellInfo);
+                        if(id == null && cellInfo!=null && cellInfo!="") {
                             SysSupplier sup=new SysSupplier();
-                            sup.setId(IDUtils.uuid());
+                        //    sup.setId(IDUtils.uuid());
                             sup.setName(cellInfo);
                             sup.setPersonName("");
                             sup.setPhone("");
@@ -791,11 +673,11 @@
                             this.sysSupplierList.add(sup);
                             this.supplierSelectList.add(sup);
                         }
-                        valuesList.add(id);
+                        valuesList.add(String.valueOf(id));
                     }/*else if(t == 9){
                         valuesList.add(sysSupplierService.getSysSupplierIdByname(cellInfo));
                     }*/else{
-                    	if(cellInfo!=null)
+                    	//if(cellInfo!=null)
                     		valuesList.add(cellInfo);
                     }
                 }
@@ -821,7 +703,7 @@
                 }
                 sysReagent.setProductHome(valuesList.get(10));//厂家
                 sysReagent.setReagentType(valuesList.get(11));//试剂类型
-                sysReagent.setSupplierId(valuesList.get(12));//供应商
+                sysReagent.setSupplierId(Long.valueOf(valuesList.get(12)));//供应商
                 DangerousFlag d;
                 if(dangours.equals("普货")){
                     d = DangerousFlag.NORMAL;
@@ -872,8 +754,8 @@
 //                            }
 //                        }
 //                    }
-
-                    return sysReagentService.getSysReagent(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return sysReagentService.getSysReagent(id);
                 }
             };
         }
@@ -904,7 +786,7 @@
     }
 
     public List<SysReagent> getSelectedList() {
-        return selectedList;
+        return this.selectedList;
     }
 
     public void setSelectedList(List<SysReagent> selectedList) {
@@ -919,11 +801,11 @@
         this.name = name;
     }
 
-    public String getSupplierId() {
+    public Long getSupplierId() {
         return supplierId;
     }
 
-    public void setSupplierId(String supplierId) {
+    public void setSupplierId(Long supplierId) {
         this.supplierId = supplierId;
     }
 
@@ -960,6 +842,17 @@
         return dangerousFlagSelectList;
     }
 
+    public List<ReagentTypeFlag> getReagentTypeFlagList() {
+        if (this.reagentTypeFlagList == null) {
+            this.reagentTypeFlagList = Arrays.asList(ReagentTypeFlag.values());
+        }
+
+        return reagentTypeFlagList;
+    }
+
+
+
+
     public void setDangerousFlagSelectList(List<DangerousFlag> dangerousFlagSelectList) {
         this.dangerousFlagSelectList = dangerousFlagSelectList;
     }
diff --git a/src/main/java/com/nanometer/smartlab/controller/RequireMngController.java b/src/main/java/com/nanometer/smartlab/controller/RequireMngController.java
index 02d6601..196fe11 100644
--- a/src/main/java/com/nanometer/smartlab/controller/RequireMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/RequireMngController.java
@@ -1,7 +1,9 @@
 package com.nanometer.smartlab.controller;
 
+import com.nanometer.smartlab.dao.SysProjectDao;
 import com.nanometer.smartlab.entity.OpeApply;
 import com.nanometer.smartlab.entity.OpeOrder;
+import com.nanometer.smartlab.entity.SysProject;
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.service.OpeApplyService;
 import com.nanometer.smartlab.service.OpeOrderService;
@@ -34,6 +36,8 @@
     private MenuController menuController;
     @Resource
     private OpeOrderService opeOrderService;
+    @Resource
+    private SysProjectDao sysProjectDao;
 
     private LazyDataModel<OpeApply> dataModel;
     private LazyDataModel<OpeApply> supplerRequireMngDataModel;
@@ -51,7 +55,7 @@
             return;
         }
 
-        Set<String> results = new HashSet<>();
+        Set<Long> results = new HashSet<>();
         for(OpeApply item : selectedList)
         {
         		results.add(item.getReagent().getSupplierId());
@@ -133,7 +137,7 @@
             this.menuController.backToPage();
         } catch (Exception e) {
             logger.error("操作失败。", e);
-            FacesUtils.warn("操作失败。");
+            FacesUtils.warn("操作失败,message="+e.getMessage());
         }
     }
 
@@ -168,7 +172,8 @@
 //                            }
 //                        }
 //                    }
-                    return opeApplyService.getOpeApply(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return opeApplyService.getOpeApply(id);
                 }
             };
         }
@@ -195,11 +200,20 @@
 
             @Override
             public OpeApply getRowData(String rowKey) {
-                return opeApplyService.getOpeApply(rowKey);
+                Long id=Long.valueOf(rowKey);
+                return opeApplyService.getOpeApply(id);
             }
         };
     }
 
+    public String getProjectName(Long projectId){
+        if(projectId==null){
+            return "";
+        }
+        SysProject project= this.sysProjectDao.getSysProject(projectId);
+        return project!=null?project.getProjectName():"";
+    }
+
     public OpeOrder getOpeOrder() {
         return opeOrder;
     }
diff --git a/src/main/java/com/nanometer/smartlab/controller/RoleMngController.java b/src/main/java/com/nanometer/smartlab/controller/RoleMngController.java
index a19fb88..2fe14e7 100644
--- a/src/main/java/com/nanometer/smartlab/controller/RoleMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/RoleMngController.java
@@ -241,7 +241,8 @@
 //                            }
 //                        }
 //                    }
-                    return baseRoleService.getBaseRole(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return baseRoleService.getBaseRole(id);
                 }
             };
         }
diff --git a/src/main/java/com/nanometer/smartlab/controller/SupplierInfoMngController.java b/src/main/java/com/nanometer/smartlab/controller/SupplierInfoMngController.java
index 7a19d61..7edc0b1 100644
--- a/src/main/java/com/nanometer/smartlab/controller/SupplierInfoMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/SupplierInfoMngController.java
@@ -136,7 +136,8 @@
 //                            }
 //                        }
 //                    }
-                    return sysSupplierService.getSysSupplier(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return sysSupplierService.getSysSupplier(id);
                 }
             };
         }
diff --git a/src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java b/src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java
index f845f17..bc010cf 100644
--- a/src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/SupplierOrderMngController.java
@@ -1,30 +1,39 @@
 package com.nanometer.smartlab.controller;
 
+import cn.hutool.extra.qrcode.QrCodeUtil;
+import cn.hutool.extra.qrcode.QrConfig;
+import com.nanometer.smartlab.dao.OpeReagentCodeDao;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.service.*;
 import com.nanometer.smartlab.util.Constants;
 import com.nanometer.smartlab.util.ExcelUtil;
 import com.nanometer.smartlab.util.FacesUtils;
+import com.nanometer.smartlab.util.StringToolUtils;
 import org.apache.log4j.Logger;
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.primefaces.context.RequestContext;
 import org.primefaces.model.LazyDataModel;
 import org.primefaces.model.SortOrder;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Controller;
-import org.primefaces.context.RequestContext;
+
 import javax.annotation.Resource;
 import javax.faces.context.FacesContext;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.List;
 
 /**
  * Created by nph on 18/04/30.
@@ -117,19 +126,19 @@
 		this.status = status;
 	}
 
-	public String getReagentId() {
+	public Long getReagentId() {
 		return reagentId;
 	}
 
-	public void setReagentId(String reagentId) {
+	public void setReagentId(Long reagentId) {
 		this.reagentId = reagentId;
 	}
 
-	public Map<String, Integer> getMap() {
+	public Map<Long, Integer> getMap() {
 		return map;
 	}
 
-	public void setMap(Map<String, Integer> map) {
+	public void setMap(Map<Long, Integer> map) {
 		this.map = map;
 	}
 
@@ -230,11 +239,19 @@
 
     private Integer status;
 
-    private String reagentId;
+    private Long reagentId;
 
-    private Map<String,Integer> map;//键是试剂id,值是申购数量
+    private Map<Long,Integer> map;//键是试剂id,值是申购数量
 
     private List<ApplyStatus> orderStatusSelectList;
+
+	private List<OpeReagentCode> reagentCodeList;
+
+	private List<Map> viewReagentCodeList;
+
+	@Resource
+	private OpeReagentCodeDao opeReagentCodeDao;
+
 
     public Timestamp getOrderEndTime() {
 		return orderEndTime;
@@ -247,8 +264,8 @@
 	public void initOpeOrder()
     {
     		SysUser user = sysUserService.getSysUser(getUserId());
-    		String roleId = user.getRoleId();
-    		if(!roleId.equalsIgnoreCase("15fc90a1f7bf43bda01313904b543195") && !roleId.equalsIgnoreCase("b2f15b6f57984f1ca36cdb82812d559b"))
+    		Long roleId = user.getRoleId();
+    		if(roleId!=1l && roleId!=4l)
     		{
     			allOpeOrder = new ArrayList<OpeOrder>();
     			return;
@@ -290,7 +307,7 @@
 										Double a=0.00;
 										BigDecimal total=BigDecimal.valueOf(a);
 										for (int j=0;j<ids.size();j++) {
-											OpeApply app=opeApplyService.getOpeApply(ids.get(j).toString());
+											OpeApply app=opeApplyService.getOpeApply(Long.valueOf(ids.get(j).toString()));
 											if(app.getStockFlag()!=0){//判断申购试剂是否缺货
 												if(app.getApplyPrice()!=null){//判断试剂是否有实际售价
 													BigDecimal b=app.getApplyPrice().multiply(BigDecimal.valueOf(app.getNum()));
@@ -331,7 +348,7 @@
 							Double a=0.00;
 							BigDecimal total=BigDecimal.valueOf(a);
 							for (int j=0;j<ids.size();j++) {
-								OpeApply app=opeApplyService.getOpeApply(ids.get(j).toString());
+								OpeApply app=opeApplyService.getOpeApply(Long.valueOf(ids.get(j).toString()));
 								if(app.getStockFlag()!=0){//判断申购试剂是否缺货
 									if(app.getApplyPrice()!=null){//判断试剂是否有实际售价
 										BigDecimal b=app.getApplyPrice().multiply(BigDecimal.valueOf(app.getNum()));
@@ -358,7 +375,7 @@
 			if(allOpeOrder != null && allOpeOrder.size() > 0)
 			{
 				int count = allOpeOrder.size();
-				List<String> opeApplyIds = new ArrayList<String>();
+				List<Long> opeApplyIds = new ArrayList<Long>();
 				for(int i=0;i<count;i++)
 				{
 					SupplierOrder order = new SupplierOrder();
@@ -449,9 +466,9 @@
 				dataRow.createCell(1).setCellValue(String.valueOf(dataList.get(i).getCreateTime()));
                 dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getProductSn()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductSn()));
 				dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getName()== null ? "": String.valueOf(dataList.get(i).getReagent().getName()));
-                dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getControlProducts())));
-                dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentFormat())));
-                dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentUnit()));
+                dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(dataList.get(i).getReagent().getControlProducts()));
+                dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentFormat()));
+                dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+dataList.get(i).getReagent().getReagentUnit());
                 total = dataList.get(i).getNum();//getReagentNum(dataList.get(i).getReagent().getId());
                 dataRow.createCell(7).setCellValue(String.valueOf(total));
                 dataRow.createCell(8).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
@@ -459,10 +476,10 @@
                 dataRow.createCell(10).setCellValue(dataList.get(i).getApplyPrice()==null ? String.valueOf(dataList.get(i).getReagent().getPrice()):String.valueOf(dataList.get(i).getApplyPrice()));
                 dataRow.createCell(11).setCellValue(dataList.get(i).getApplyPrice()==null?String.valueOf(dataList.get(i).getReagent().getPrice().multiply(new BigDecimal(total))):String.valueOf(dataList.get(i).getApplyPrice().multiply(new BigDecimal(total))));
                 dataRow.createCell(12).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
-                dataRow.createCell(13).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentCharacter())));
+                dataRow.createCell(13).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentCharacter()));
                 dataRow.createCell(14).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
                 dataRow.createCell(15).setCellValue(dataList.get(i).getReagent().getSupplierName()== null ? "":String.valueOf(dataList.get(i).getReagent().getSupplierName()));
-                dataRow.createCell(16).setCellValue(dataList.get(i).getReagent().getReagentType()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentType())));
+                dataRow.createCell(16).setCellValue(dataList.get(i).getReagent().getReagentType()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentType()));
                 dataRow.createCell(17).setCellValue(String.valueOf(dataList.get(i).getProjectOwner()));
                 dataRow.createCell(18).setCellValue(String.valueOf(dataList.get(i).getProjectId()));
                 dataRow.createCell(19).setCellValue(String.valueOf(dataList.get(i).getProjectName()));
@@ -494,6 +511,115 @@
 		}
 		this.viewOpeApply=this.opeApplyService.getOpeApply(this.selectedViewList.get(0).getId());
 		RequestContext.getCurrentInstance().execute("PF('dialogStock').show()");
+	}
+
+	public void onPrintBarcodeClick(){
+		if (this.selectedViewList == null
+				|| this.selectedViewList.size() == 0) {
+			FacesUtils.warn("请选择数据。");
+			return;
+		}
+		if (this.selectedViewList.size() > 1) {
+			FacesUtils.warn("只能选择一个数据进行打印。");
+			return;
+		}
+		List<OpeReagentCode> reagentCodes=this.opeReagentCodeDao.getReagentCodeByApplyId(this.selectedViewList.get(0).getId());
+		if(reagentCodes.size()==0){
+			FacesUtils.warn("未生成标签编码");
+			return;
+		}
+		//生成标签
+		for(OpeReagentCode opeReagentCode:reagentCodes){
+			List<String> rCodes=new ArrayList<>();
+			int startCode=opeReagentCode.getStartCode();
+			int endCode=opeReagentCode.getEndCode();
+			for(int i=startCode;i<=endCode;i++){
+				String lastCode= StringToolUtils.addZeroForNum(String.valueOf(i),4);
+				String rcode=String.format("%s%s",opeReagentCode.getCodePrex(),lastCode);
+				rCodes.add(rcode);
+			}
+			opeReagentCode.setReagentCodes(rCodes);
+			//获取试剂信息
+			opeReagentCode.setReagent(opeApplyService.getReagentByApplyId(opeReagentCode.getApplyId()));
+		}
+		this.reagentCodeList=reagentCodes;
+		RequestContext.getCurrentInstance().execute("PF('dialogReagentCode').show()");
+	}
+	public void onPrintSingleBarcodeClick(String reagentCode){
+		List<OpeReagentCode>tmpList=this.reagentCodeList;
+		List<String> rCodes=new ArrayList<>();
+		rCodes.add(reagentCode);
+		tmpList.get(0).setReagentCodes(rCodes);
+		this.reagentCodeList=tmpList;
+		RequestContext.getCurrentInstance().execute("PF('dialogReagentCode').show()");
+	}
+
+	public void onViewBarcodeClick(){
+		if (this.selectedViewList == null
+				|| this.selectedViewList.size() == 0) {
+			FacesUtils.warn("请选择数据。");
+			return;
+		}
+		if (this.selectedViewList.size() > 1) {
+			FacesUtils.warn("只能选择一个数据进行打印。");
+			return;
+		}
+		List<OpeReagentCode> reagentCodes=this.opeReagentCodeDao.getReagentCodeByApplyId(this.selectedViewList.get(0).getId());
+		if(reagentCodes.size()==0){
+			FacesUtils.warn("未生成标签编码");
+			return;
+		}
+		List<Map> reagentCodeList=new ArrayList<>();
+
+		for(OpeReagentCode opeReagentCode:reagentCodes) {
+			//获取试剂信息
+			SysReagent reagent=opeApplyService.getReagentByApplyId(opeReagentCode.getApplyId());
+			//生成标签
+			List<String> rCodes=new ArrayList<>();
+			int startCode=opeReagentCode.getStartCode();
+			int endCode=opeReagentCode.getEndCode();
+			for (int i = startCode; i <= endCode; i++) {
+				Map reagentMap = new HashMap();
+				String lastCode = StringToolUtils.addZeroForNum(String.valueOf(i), 4);
+				String rcode = String.format("%s%s", opeReagentCode.getCodePrex(), lastCode);
+				rCodes.add(rcode);
+				reagentMap.put("applyId", opeReagentCode.getApplyId());
+				reagentMap.put("reagentCode", rcode);
+				reagentMap.put("name", reagent.getName());
+				reagentMap.put("cas", reagent.getCas());
+				reagentMap.put("reagentCharacter", reagent.getReagentCharacter());
+				reagentCodeList.add(reagentMap);
+			}
+			opeReagentCode.setReagentCodes(rCodes);
+			//获取试剂信息
+			opeReagentCode.setReagent(reagent);
+		}
+		this.viewReagentCodeList=reagentCodeList;
+		this.reagentCodeList=reagentCodes;
+		RequestContext.getCurrentInstance().execute("PF('viewReagentCodeList').show()");
+	}
+
+	public String getQrcode(String reagentCode){
+		QrConfig qrConfig=new QrConfig(50,50);
+		//设置边距,即二维码和边框的距离
+		qrConfig.setMargin(1);
+//		qrConfig.setForeColor(Color.WHITE.getRGB());
+//		qrConfig.setBackColor(Color.BLACK.getRGB());
+		byte[] image= QrCodeUtil.generatePng(reagentCode,qrConfig);
+		String base64Image= Base64.getEncoder().encodeToString(image);
+		return base64Image;
+
+	}
+
+	public void onCancelPrintBtnClick(){
+		this.reagentCodeList = new ArrayList<>();
+		RequestContext.getCurrentInstance().execute("PF('dialogReagentCode').hide()");
+	}
+
+	public void onPrintClick(){
+		//打印条码
+		this.reagentCodeList = new ArrayList<>();
+		RequestContext.getCurrentInstance().execute("PF('dialogReagentCode').hide()");
 	}
 
 	public void onOutOfStock(){
@@ -559,13 +685,14 @@
 		List<SysReagent> tempReagents = new ArrayList<SysReagent>();
 		List<OpeApply> opeApplyList1 = new ArrayList<>();
 		map=null;
-		Map<String, Integer> tempMap = new HashMap<String,Integer>();
+		Map<Long, Integer> tempMap = new HashMap<Long,Integer>();
 
 		for(SupplierOrder order :selectedList)
 		{
-			for(String applyId : order.getApplyIds())
+			for(Object applyId : order.getApplyIds())
 			{
-				OpeApply apply = opeApplyService.getOpeApply(applyId);
+
+				OpeApply apply = opeApplyService.getOpeApply(Long.valueOf((String) applyId));
 				if(apply.getApplyPrice()!=null){
 
 				}else {
@@ -768,7 +895,7 @@
 			//Map<String,List<OpeApply>> realDataMap = new HashMap<>();
 
 
-            Map<String, Integer> tempMap = new HashMap<String,Integer>();
+            Map<Long, Integer> tempMap = new HashMap<Long,Integer>();
             List<OpeApply> realDataList = new ArrayList<>();
             map=null;
             List<SysProject> projects = null;
@@ -785,10 +912,10 @@
 					List ids = Arrays.asList(order.getIds().split(","));
 					order.setApplyIds(ids);
 				}
-                for(String applyId : order.getApplyIds())
+                for(Long applyId : order.getApplyIds())
                 {
                 		opeApply = opeApplyService.getOpeApply(applyId);
-                		System.out.println("objective==========="+opeApply.getObjective());
+                		System.out.println("projectId==========="+opeApply.getProjectId());
                 		System.out.println(opeApply.getReagent().getName()+"           "+opeApply.getReagent().getControlProducts());
                     if( opeApply != null)
                     {
@@ -802,8 +929,8 @@
 							//opeApply.setOwnerDepartment(user1.getDepartment());
 							//System projectUser=
 							opeApply.setOwnerDepartment(sysUserService.getSysUserForSuppllier(opeApply.getApplyUserId()).getDepartment());
-							opeApply.setProjectId(opeApply.getObjective());
-							projects = sysProjectService.getSysProjectListByProjectId(opeApply.getObjective());
+							opeApply.setProjectId(opeApply.getProjectId());
+							projects = sysProjectService.getSysProjectListByProjectNo("opeApply.getProjectId()");
 							if(projects != null && !projects.isEmpty())
 							{
 								opeApply.setProjectOwner(projects.get(0).getUsername());
@@ -932,11 +1059,11 @@
     	    	List<SysReagent> tempReagents = new ArrayList<SysReagent>();
                 List<OpeApply> opeApplyList1 = new ArrayList<>();
 
-    	    Map<String, Integer> tempMap = new HashMap<String,Integer>();
+    	    Map<Long, Integer> tempMap = new HashMap<Long,Integer>();
 
 		for(SupplierOrder order :selectedList)
 		{
-			for(String applyId : order.getApplyIds())
+			for(Long applyId : order.getApplyIds())
 			{
 				OpeApply apply = opeApplyService.getOpeApply(applyId);
 				if(apply.getApplyPrice()!=null){
@@ -971,11 +1098,11 @@
     {
     	    	List<SysReagent> tempReagents = new ArrayList<SysReagent>();
 
-    	    Map<String, Integer> tempMap = new HashMap<String,Integer>();
+    	    Map<Long, Integer> tempMap = new HashMap<Long,Integer>();
 
 		for(SupplierOrder order :selectedList)
 		{
-			for(String applyId : order.getApplyIds())
+			for(Long applyId : order.getApplyIds())
 			{
 				OpeApply apply = opeApplyService.getOpeApply(applyId);
 				tempReagents.add(apply.getReagent());
@@ -1019,7 +1146,7 @@
     		this.menuController.goToPage(Constants.PAGE_CANCEL_ORDER_MNG, Constants.PAGE_SUPPLIER_ORDER_MNG);
     }
 
-    public Integer getReagentNum(String key)
+    public Integer getReagentNum(Long key)
     {
     		if(map == null)
     		{
@@ -1034,9 +1161,9 @@
 		for(SupplierOrder order :selectedList)
 		{
 			OpeOrder temp = opeOrderService.getOpeOrder(order.getId());
-			for(String id : order.getApplyIds())
+			for(Object id : order.getApplyIds())
 			{
-				opeApply = opeApplyService.getOpeApply(id);
+				opeApply = opeApplyService.getOpeApply(Long.valueOf((String)id));
 				if(opeApply != null)
 				{
 					opeApply.setStatus(ApplyStatus.SUPPLIER_CONFIRM);
@@ -1067,4 +1194,15 @@
     {
     		this.menuController.backToPage();
     }
+
+	public List<OpeReagentCode> getReagentCodeList() {
+		return reagentCodeList;
+	}
+
+	public List<Map> getViewReagentCodeList() {
+		return viewReagentCodeList;
+	}
+	public void setReagentCodeList(List<OpeReagentCode> reagentCodeList) {
+		this.reagentCodeList = reagentCodeList;
+	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/controller/SysControllerMngController.java b/src/main/java/com/nanometer/smartlab/controller/SysControllerMngController.java
index 2f9e897..e923100 100644
--- a/src/main/java/com/nanometer/smartlab/controller/SysControllerMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/SysControllerMngController.java
@@ -111,7 +111,7 @@
                 FacesUtils.warn("请选择数据。");
                 return;
             }
-            List<Integer> ids = new ArrayList<>();
+            List<Long> ids = new ArrayList<>();
             for(SysController controller : this.selectedList)
             {
             	 	ids.add(controller.getId());
@@ -175,7 +175,7 @@
 //                            }
 //                        }
 //                    }
-                    return sysControllerService.getSysController(Integer.parseInt(rowKey));
+                    return sysControllerService.getSysController(Long.valueOf(rowKey));
                 }
             };
         }
diff --git a/src/main/java/com/nanometer/smartlab/controller/SysFileMngController.java b/src/main/java/com/nanometer/smartlab/controller/SysFileMngController.java
index fe9dcb5..b50d6dd 100644
--- a/src/main/java/com/nanometer/smartlab/controller/SysFileMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/SysFileMngController.java
@@ -275,7 +275,8 @@
 //                            }
 //                        }
 //                    }
-                    return sysFileService.getSysFileById(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return sysFileService.getSysFileById(id);
                 }
             };
         }
diff --git a/src/main/java/com/nanometer/smartlab/controller/SysWarningsController.java b/src/main/java/com/nanometer/smartlab/controller/SysWarningsController.java
index 5d421b8..0cb8683 100644
--- a/src/main/java/com/nanometer/smartlab/controller/SysWarningsController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/SysWarningsController.java
@@ -82,7 +82,8 @@
 //                            }
 //                        }
 //                    }
-                    return sysWarningService.getSysWarning(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return sysWarningService.getSysWarning(id);
                 }
             };
         }
diff --git a/src/main/java/com/nanometer/smartlab/controller/UserMngController.java b/src/main/java/com/nanometer/smartlab/controller/UserMngController.java
index d8dfaf3..8fd8c58 100644
--- a/src/main/java/com/nanometer/smartlab/controller/UserMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/UserMngController.java
@@ -3,6 +3,7 @@
 import com.alibaba.druid.util.StringUtils;
 import com.nanometer.smartlab.entity.BaseMeta;
 import com.nanometer.smartlab.entity.BaseRole;
+import com.nanometer.smartlab.entity.SysProject;
 import com.nanometer.smartlab.entity.SysUser;
 import com.nanometer.smartlab.entity.enumtype.ApproverFlag;
 import com.nanometer.smartlab.entity.enumtype.SeeFlag;
@@ -76,7 +77,8 @@
     private List<BaseMeta> codeList;
     private List<BaseRole> roleList;
     private List<Waster> wasterSelectList;
-    private String project;
+    private String projectName;
+    private Long projectId;
     private String company;
     private BaseRole role;
 
@@ -155,7 +157,7 @@
                 List<String> valuesList=new ArrayList<String>();
                 for (int t = 0; t < totalCells; t++) {
                     String cellInfo="";
-                    String groupId = "";
+                    String groupCode = "";
 
                     if (row.getCell(t) != null) {
 
@@ -167,31 +169,31 @@
                     }
                     if(t == 0 || t == 1){
                         if( t == 0){
-                            groupId = "user_company";
+                            groupCode = "user_company";
                         }else if(t == 1){
-                            groupId = "user_department";
+                            groupCode = "user_department";
                         }
-                        String id=getId(groupId,cellInfo);
-                        if(id == "" && cellInfo!=null && cellInfo!="" ) {
+                        Long id=getId(groupCode,cellInfo);
+                        if(id == null && cellInfo!=null && cellInfo!="" ) {
                             BaseMeta baseMeta = new BaseMeta();
-                            baseMeta.setId(IDUtils.uuid());
-                            baseMeta.setGroupId(groupId);
+                         //   baseMeta.setId(IDUtils.uuid());
+                            baseMeta.setGroupCode(groupCode);
                             baseMeta.setMetaValue(cellInfo);
                             baseMeta.setMetaKey(cellInfo);
                             baseMetaService.insertBaseMeta(baseMeta);
                             id = baseMeta.getId();
                             this.codeList.add(baseMeta);
                         }
-                        valuesList.add(id);
+                        valuesList.add(String.valueOf(id));
                     }else if(t==10){
-                        String id=getRoleId(cellInfo);
-                        if(id == "" && cellInfo!=null && cellInfo!="" ){
+                        Long id=getRoleId(cellInfo);
+                        if(id == null && cellInfo!=null && cellInfo!="" ){
                             BaseRole role=new BaseRole();
-                            role.setId(IDUtils.uuid());
+                            //role.setId(IDUtils.uuid());
                             role.setName(cellInfo);
                             role.setValidFlag(ValidFlag.VALID);
                         }
-                        valuesList.add(id);
+                        valuesList.add(String.valueOf(id));
                     }else if(t==6){
                         if (!StringUtils.isEmpty(cellInfo)){
                             cellInfo=new BigDecimal(""+cellInfo).toString();
@@ -207,13 +209,13 @@
 
                 SysUser sysUser=new SysUser();
                 if (valuesList.get(0) != null && !StringUtils.isEmpty(valuesList.get(0))){
-                    sysUser.setCompany(valuesList.get(0));//单位
+                    sysUser.setCompany(Long.valueOf(valuesList.get(0)));//单位
                 }else {
                     errorMsg += "第"+i+"行,单位不能为空";
                     continue;
                 }
                 if (valuesList.get(1) != null && !StringUtils.isEmpty(valuesList.get(1))){
-                    sysUser.setDepartment(valuesList.get(1));//部门
+                    sysUser.setDepartment(Long.valueOf(valuesList.get(1)));//部门
                 }else {
                     errorMsg += "第"+i+"行,部门不能为空";
                     continue;
@@ -290,7 +292,7 @@
                     continue;
                 }
                 if (valuesList.get(10) != null){
-                    sysUser.setRoleId(valuesList.get(10));//角色
+                    sysUser.setRoleId(Long.valueOf(valuesList.get(10)));//角色
                 }else {
                     errorMsg += "第"+i+"行,角色不能为空";
                     continue;
@@ -317,19 +319,14 @@
                     sysUser.setSeeFlag(SeeFlag.LEADING);
                 }
 
-                if (valuesList.size() > 13 && !valuesList.get(13).replace(" ","").isEmpty()){
-                    String[] projects = valuesList.get(13).split(",");
-                    for (String project : projects) {
-                        //不存再就直接推出
-                        if (!sysProjectService.isExistProject(project)) {
-                            errorMsg += ("课题组不存在,(" + i  + "行)");
-                            continue;
-                        }
+                if (valuesList.size() > 13 && valuesList.get(13).trim()!=""){
+                    SysProject project=sysProjectService.getProjectByName(valuesList.get(13));
+                    if (project==null) {
+                        errorMsg += ("课题组不存在,(" + i  + "行)");
+                        continue;
                     }
                     //都存在就设置
-                    sysUser.setProject(valuesList.get(13).replace(" ",""));
-                }else{
-                    sysUser.setProject(null);
+                    sysUser.setProjectId(project.getId());
                 }
 
                 sysUser.setValidFlag(ValidFlag.VALID);
@@ -349,8 +346,8 @@
         }
     }
 
-    public String getRoleId(String name){
-        String id="";
+    public Long getRoleId(String name){
+        Long  id=null;
         for (int i=0;i<this.roleList.size();i++){
             if(this.roleList.get(i).getName().equals(name)){
                 id=this.roleList.get(i).getId();
@@ -360,8 +357,8 @@
     }
 
     //判断字典表里是否存在这组键值对
-    public String getId(String groupId,String metaValue){
-        String id="";
+    public Long getId(String groupId,String metaValue){
+        Long id= null;
         if(this.codeList.size()>0){
             for (BaseMeta bm:this.codeList){
 
@@ -467,9 +464,7 @@
                     FacesUtils.warn("ID卡号已存在。");
                     return;
                 }
-                if(!org.apache.commons.lang.StringUtils.isNotBlank(sysUser.getProject())){
-                    sysUser.setProject(null);
-                }
+
 
                 String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
                 if (!sysUser.getPassword().matches(PW_PATTERN)){
@@ -653,18 +648,18 @@
                             this.setRowCount(1);
 
                         }else if (userPermission.contains("课题组")){
-                            project = sysUser.getProject();
-                            int count = sysUserService.getUserCountInProject(arp, name,departmentName,project,company);
+                            projectId = sysUser.getProjectId();
+                            int count = sysUserService.getUserCountInProject(arp, name,departmentName,projectName,company);
                             this.setRowCount(count);
                             if (count > 0) {
-                                list = sysUserService.getUserInProject(arp, name,departmentName,project,company, first, pageSize);
+                                list = sysUserService.getUserInProject(arp, name,departmentName,projectName,company, first, pageSize);
                             }
 
                         }else{
-                            int count = sysUserService.getSysUserTotalCount(arp, name,departmentName,project,company);
+                            int count = sysUserService.getSysUserTotalCount(arp, name,departmentName,projectName,company);
                             this.setRowCount(count);
                             if (count > 0) {
-                                list = sysUserService.getSysUserList(arp, name,departmentName,project,company, first, pageSize);
+                                list = sysUserService.getSysUserList(arp, name,departmentName,projectName,company, first, pageSize);
                             }
                         }
 
@@ -687,7 +682,8 @@
 //                            }
 //                        }
 //                    }
-                    return sysUserService.getSysUser(rowKey);
+                    Long id=Long.valueOf(rowKey);
+                    return sysUserService.getSysUser(id);
                 }
             };
         }
@@ -696,7 +692,7 @@
 
     public void exportLab2Excel(){
         try {
-            List<Map> list = sysUserService.getExportUserList(arp, name,departmentName,project,company);
+            List<Map> list = sysUserService.getExportUserList(arp, name,departmentName,projectId,company);
             sysUserService.exportUser2Excel(list);
             FacesUtils.info("导出成功");
         }catch (Exception e){
@@ -805,14 +801,23 @@
         this.departmentName = departmentName;
     }
 
-    public String getProject() {
-        return project;
+    public Long getProjectId() {
+        return projectId;
     }
 
-    public void setProject(String project) {
-        this.project = project;
+    public void setProject(Long projectId) {
+        this.projectId = projectId;
     }
 
+    public String getProjectName(){
+        return this.projectName;
+    }
+
+    public void setProjectName(String projectName){
+        this.projectName=projectName;
+    }
+
+
     public String getCompany() {
         return company;
     }
diff --git a/src/main/java/com/nanometer/smartlab/controller/WarehouseContainerMngController.java b/src/main/java/com/nanometer/smartlab/controller/WarehouseContainerMngController.java
index 007fe8f..fb0ddc7 100644
--- a/src/main/java/com/nanometer/smartlab/controller/WarehouseContainerMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/WarehouseContainerMngController.java
@@ -47,7 +47,7 @@
 	/**
 	 * 数据模型
 	 */
-	private SysWarehouseContainer sysWarehouseContainer;
+	private SysWarehouseContainer sysWarehouseContainer=new SysWarehouseContainer();
 	/**
 	 * 选中的list
 	 */
@@ -265,7 +265,8 @@
 //							}
 //						}
 //					}
-					return sysWarehouseContainerService.getSysWarehouseContainer(rowKey);
+					Long id=Long.valueOf(rowKey);
+					return sysWarehouseContainerService.getSysWarehouseContainer(id);
 				}
 			};
 		}
diff --git a/src/main/java/com/nanometer/smartlab/controller/WarehouseMngController.java b/src/main/java/com/nanometer/smartlab/controller/WarehouseMngController.java
index e5c2a21..eea1130 100644
--- a/src/main/java/com/nanometer/smartlab/controller/WarehouseMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/WarehouseMngController.java
@@ -55,7 +55,7 @@
 	/**
 	 * 数据模型
 	 */
-	private SysWarehouse sysWarehouse;
+	private SysWarehouse sysWarehouse=new SysWarehouse();
 	/**
 	 * 选中的list
 	 */
@@ -190,7 +190,8 @@
 //							}
 //						}
 //					}
-					return sysWarehouseService.getSysWarehouse(rowKey);
+					Long id=Long.valueOf(rowKey);
+					return sysWarehouseService.getSysWarehouse(id);
 				}
 			};
 		}
diff --git a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
index 53c5a7d..a16737d 100644
--- a/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/WarehouseStockMngController.java
@@ -1,9 +1,6 @@
 package com.nanometer.smartlab.controller;
 
-import com.nanometer.smartlab.dao.BaseMetaDao;
-import com.nanometer.smartlab.dao.OpeApplyDao;
-import com.nanometer.smartlab.dao.OpeReagentStatusDao;
-import com.nanometer.smartlab.dao.OpeWarehouseReserveDao;
+import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.dto.ApplyListDto;
 import com.nanometer.smartlab.entity.enumtype.*;
@@ -59,6 +56,8 @@
 
     @Resource
     private OpeApplyService opeApplyService;
+	@Resource
+	private SysProjectDao sysProjectDao;
 
 	@Resource
 	private OpeWarehouseReserveService opeWarehouseReserveService;
@@ -100,7 +99,7 @@
 	OpeApplyDao opeApplyDao;
 
     @Resource
-	OpeLaboratoryReserveService opeLaboratoryReserveService;
+	OpeLaboratoryReserveDao opeLaboratoryReserveDao;
 	/**
 	 * 数据源
 	 */
@@ -127,7 +126,7 @@
 	/**
 	 *打开条形码对话框用
 	 */
-	private Map<String,Map<String,OpeWarehouseReserve>> warehouseReserveUseTmp=new HashMap<>();
+	private Map<Long,Map<Long,OpeWarehouseReserve>> warehouseReserveUseTmp=new HashMap<>();
 	/**
 	 * 打开条形码对话框用
 	 */
@@ -147,17 +146,17 @@
 		this.reagentStatusSelectListForPerson = reagentStatusSelectListForPerson;
 	}
 
-	private String reagentId;
-	private String reagentLogId;
+	private String reagentName;
+	private Long reagentLogId;
 
 	private String userName;
 	private Integer tabValue = 0;
 
 	private List<SysReagent> reagentSelectList;
 	private List<String> showCodes;
-	private String userId;
-	private String projectNum;
-	private String userLogId;
+	private Long userId;
+	private Long projectId;
+	private Long userLogId;
 	private String reagentCode;
 	private Integer useNum;
 	private String startReagentCode;
@@ -218,7 +217,7 @@
 
 	private List<SysUser> userSelectList;
 	private List<SysUser> applyUserSelectList;
-	private String supplierId;
+	private Long supplierId;
 	private List<SysSupplier> supplierSelectList;
 	//private boolean flag = false;
 	//领用单号
@@ -245,14 +244,14 @@
     private List<SysWarehouse> warehouseList;
     private List<SysWarehouseContainer> warehouseContainerList;
     private List<BaseMeta> warehouseContainerPlaceList;
-    private Map<String, String> warehouseNameMap;
-    private Map<String, SysWarehouseContainer> warehouseContainerMap;
-    private Map<String, List<SysWarehouseContainer>> warehouseIdContainerMap;
+    private Map<Long, String> warehouseNameMap;
+    private Map<Long, SysWarehouseContainer> warehouseContainerMap;
+    private Map<Long, List<SysWarehouseContainer>> warehouseIdContainerMap;
 
-    private String laboratoryId;
-    private String oriLaboratoryId;
+    private Long laboratoryId;
+    private Long oriLaboratoryId;
     private List<SysLaboratory> laboratory;
-    private String laboratoryContainerId;
+    private Long laboratoryContainerId;
     private List<SysLaboratoryContainer> laboratoryContainers;
 
 	/**
@@ -281,7 +280,7 @@
 	//到货时间
 	private Timestamp arrivalTime;
 	//收货人
-	private String consigneeId;
+	private Long consigneeId;
 	//OpeApply
 	private List<OpeApplyReserve> opeApplyList;
 	/**
@@ -313,7 +312,14 @@
 		this.initUserSelectList();
 	}
 
-
+	/**
+	 * 获取已领用数量
+	 * @param applyCode
+	 * @return
+	 */
+	public Integer getUsedCount(String applyCode){
+		return this.opeReagentStatusDao.getReagentStatusCountByApplyCode(applyCode);
+	}
 
 
 
@@ -323,15 +329,15 @@
 		this.initUserSelectList();
 
         this.warehouseList = this.sysWarehouseService.getSysWarehouseList(null, null, null, null);
-        this.warehouseNameMap = new HashMap<String, String>();
+        this.warehouseNameMap = new HashMap<Long, String>();
         if (this.warehouseList != null && this.warehouseList.size() > 0) {
             for (SysWarehouse house : this.warehouseList) {
                 this.warehouseNameMap.put(house.getId(), house.getName());
             }
         }
 
-        this.warehouseContainerMap = new HashMap<String, SysWarehouseContainer>();
-        this.warehouseIdContainerMap = new HashMap<String, List<SysWarehouseContainer>>();
+        this.warehouseContainerMap = new HashMap<Long, SysWarehouseContainer>();
+        this.warehouseIdContainerMap = new HashMap<Long, List<SysWarehouseContainer>>();
         List<SysWarehouseContainer> warehouseContainerList = this.sysWarehouseContainerService.getSysWarehouseContainerList(null, null, null, null, null);
         if (warehouseContainerList != null && warehouseContainerList.size() > 0) {
             for (SysWarehouseContainer container : warehouseContainerList) {
@@ -351,14 +357,14 @@
 	public void initInputWarehouse() {
 		logger.info("WarehouseStockMngController initInputWarehouse start");
 		this.warehouseList = this.sysWarehouseService.getSysWarehouseList(null, null, null, null);
-		this.warehouseNameMap = new HashMap<String, String>();
+		this.warehouseNameMap = new HashMap<Long, String>();
 		if (this.warehouseList != null && this.warehouseList.size() > 0) {
 			for (SysWarehouse house : this.warehouseList) {
 				this.warehouseNameMap.put(house.getId(), house.getName());
 			}
 		}
-		this.warehouseContainerMap = new HashMap<String, SysWarehouseContainer>();
-		this.warehouseIdContainerMap = new HashMap<String, List<SysWarehouseContainer>>();
+		this.warehouseContainerMap = new HashMap<Long, SysWarehouseContainer>();
+		this.warehouseIdContainerMap = new HashMap<Long, List<SysWarehouseContainer>>();
 		List<SysWarehouseContainer> warehouseContainerList = this.sysWarehouseContainerService.getSysWarehouseContainerList(null, null, null, null, null);
 		if (warehouseContainerList != null && warehouseContainerList.size() > 0) {
 			for (SysWarehouseContainer container : warehouseContainerList) {
@@ -398,11 +404,11 @@
 	private void initReagentStatusSelectList() {
 		logger.info("WarehouseStockMngController initReagentStatusSelectList start");
 		if (selectedOpeWarehouseReserve != null) {
-			String reagentId = selectedOpeWarehouseReserve.getReagentId();
+			Long reagentId = selectedOpeWarehouseReserve.getReagentId();
 			String articleNumber = selectedOpeWarehouseReserve.getArticleNumber();
 
 			this.setReagentStatusSelectList(opeReagentStatusService.getOpeReagentStatusList22(reagentId, articleNumber,
-					ArrivalStatus.WAREHOUSE.getKey(), reagentCode, null, null, null));
+					ArrivalStatus.WAREHOUSE.getKey(), reagentCode, null, null,null, null));
 
 //			System.out.print("this.getReagentStatusSelectList().size(): " + this.reagentStatusSelectList.size());
 //			System.out.print("this.getReagentStatusSelectList().get(0): " + this.reagentStatusSelectList.get(0).getReagentCode());
@@ -415,13 +421,10 @@
 	private void initReagentStatusSelectListForPerson() {
 		logger.info("WarehouseStockMngController initReagentStatusSelectListForPerson start");
 		if (selectedOpeApplyReserve != null) {
-			String reagentId = selectedOpeApplyReserve.getReagent().getId();
+			Long reagentId = selectedOpeApplyReserve.getReagent().getId();
 			String articleNumber = selectedOpeApplyReserve.getArticleNumber();
-			System.out.println(reagentId);
-			System.out.println(articleNumber);
-			System.out.println(reagentCode);
 			this.setReagentStatusSelectListForPerson(opeReagentStatusService.getOpeReagentStatusList22(reagentId, articleNumber,
-					ArrivalStatus.WAREHOUSE.getKey(), reagentCode, null, null, null));
+					ArrivalStatus.WAREHOUSE.getKey(), reagentCode, null, selectedOpeApplyReserve.getApplyCode(),null, null));
 
 		}
 	}
@@ -503,7 +506,7 @@
 		}
 		//1.判断非状态为确认的申购单不能入库
 		for (OpeApplyReserve opeApplyReserve : this.selectedListForPerson) {
-			if (opeApplyReserve.getStatus() != ApplyStatus.SUPPLIER_CONFIRM) {
+			if (opeApplyReserve.getStatus() != ApplyStatus.SUPPLIER_CONFIRM && opeApplyReserve.getStatus() != ApplyStatus.UNCOMPLETED) {
 				FacesUtils.warn("非已确认的数据不能入库。");
 				return;
 			}
@@ -663,9 +666,9 @@
 
 
 		//相同的试剂不能再多选
-		Set<String> checkTable = new HashSet<>();
+		Set<Long> checkTable = new HashSet<>();
 		for (OpeApplyReserve oar : selectedTmpOrderList) {
-			String reagentId = oar.getReagent().getId();
+			Long reagentId = oar.getReagent().getId();
 			if (!checkTable.contains(reagentId)) {
 				checkTable.add(reagentId);
 			}else{
@@ -675,7 +678,7 @@
 		}
 		checkTable = null;
 		//
-		this.userId = selectedTmpOrderList.get(0).getApplyUser();
+		this.userId = selectedTmpOrderList.get(0).getApplyUserId();
 		SysUser sysUser = sysUserService.getSysUser(this.userId);
 		if (sysUser == null){
 			FacesUtils.info("申领人不存在");
@@ -753,8 +756,8 @@
 		}
 		if (warehouseReserveUseTmp.get(selectedOpeApplyReserve.getReagent().getId()) == null) {
 			//初始化库中领用和大小,
-			reagentCodeSelectedList = selectedOpeApplyReserve.getReagentCode();
-			useNum = selectedOpeApplyReserve.getReagentCode() == null?0: selectedOpeApplyReserve.getReagentCode().size();
+			reagentCodeSelectedList = selectedOpeApplyReserve.getReagentCodes();
+			useNum = selectedOpeApplyReserve.getReagentCodes() == null?0: selectedOpeApplyReserve.getReagentCodes().size();
 			this.endReagentCodeForPerson = null;
 			this.startReagentCodeForPerson = null;
 		}
@@ -764,7 +767,7 @@
 	/**
 	* 变换库存
 	*/
-	public void selectChangeReserve(String  id) {
+	public void selectChangeReserve(Long  id) {
 		if (warehouseReserveList.size() > 0) {
 			warehouseReserveList.forEach(owr -> {
 				if (owr.getWarehouseId().equals(id)){
@@ -802,7 +805,7 @@
 		owr.setReagentId(opeWarehouseReserve.getReagentId());
 		owr.setUseNum(useNum);
 		if (warehouseReserveUseTmp.get(owr.getReagentId()) == null) {
-			Map<String, OpeWarehouseReserve> tmp = new HashMap<>();
+			Map<Long, OpeWarehouseReserve> tmp = new HashMap<>();
 			tmp.put(owr.getWarehouseId(), owr);
 			warehouseReserveUseTmp.put(owr.getReagentId(), tmp);
 		}else{
@@ -831,13 +834,13 @@
 		List<OpeWarehouseReserve> list = new ArrayList<>();
 
 
-		Map<String, OpeWarehouseReserve> dataMap = warehouseReserveUseTmp.
+		Map<Long, OpeWarehouseReserve> dataMap = warehouseReserveUseTmp.
 				get(opeWarehouseReserve.getReagentId());
 		if (dataMap ==null) {
 			return list;
 		}
-		Set<Map.Entry<String, OpeWarehouseReserve>> entries = dataMap.entrySet();
-		for (Map.Entry<String, OpeWarehouseReserve> e : entries) {
+		Set<Map.Entry<Long, OpeWarehouseReserve>> entries = dataMap.entrySet();
+		for (Map.Entry<Long, OpeWarehouseReserve> e : entries) {
 			list.add(e.getValue());
 		}
 		return list;
@@ -930,7 +933,7 @@
 					opeApplyReserve.setSelectNum(useNum);
 					if(this.reagentCodeSelectedList != null)
 					{
-						opeApplyReserve.setReagentCode(this.reagentCodeSelectedList);
+						opeApplyReserve.setReagentCodes(this.reagentCodeSelectedList);
 					}
 					opeApplyReserve.setFlag(1);
 					//删除前面部分的补贴条码领用显示
@@ -977,7 +980,7 @@
 					opeApplyReserve.setSelectNum(distance);
 					opeApplyReserve.setStartReagentCode2(this.startReagentCodeForPerson);
 					opeApplyReserve.setEndReagentCode2(this.endReagentCodeForPerson);
-					opeApplyReserve.setReagentCode(codeList);
+					opeApplyReserve.setReagentCodes(codeList);
 					opeApplyReserve.setCacheUpdateList(getDataTmp());
 					opeApplyReserve.setFlag(0);
 					reagentCodeSelectedList = null;
@@ -1141,10 +1144,10 @@
 				//扣库存 对象中的reagentCode存的是id
 
 				for(OpeApplyReserve app:list){
-					List<String> reagentCode=app.getReagentCode();
-					if(reagentCode!=null && reagentCode.size()>0){
-						for(String opeReagentStatusId:reagentCode){
-							OpeReagentStatus opeReagentStatus=this.opeReagentStatusService.getOpeReagentStatus(opeReagentStatusId);
+					List<String> reagentCodes=app.getReagentCodes();
+					if(reagentCodes!=null && reagentCodes.size()>0){
+						for(String reagentCode:reagentCodes){
+							OpeReagentStatus opeReagentStatus=this.opeReagentStatusService.getOpeReagentStatusByCode(reagentCode);
 							if (!this.opeReagentStatusService.isAllowWarehouseUse(opeReagentStatus)) {
 								FacesUtils.warn("只能申领在仓库的试剂。");
 								return;
@@ -1153,7 +1156,7 @@
 					}
 				}
 
-				this.opeWarehouseReserveService.claimForPerson(list, userId,projectNum,laboratoryId,laboratoryContainerId,receiptNum);
+				this.opeWarehouseReserveService.claimForPerson(list, userId,projectId,laboratoryId,laboratoryContainerId,receiptNum);
 			}
 
 			//补贴条码
@@ -1167,7 +1170,7 @@
 					opeApply.setReagent(list2.get(i).getReagent());
 					opeApply.setStartReagentCode(list2.get(i).getStartReagentCode2());
 					opeApply.setEndReagentCode(list2.get(i).getEndReagentCode2());
-					opeApply.setReagentCodeList(list2.get(i).getReagentCode());
+					opeApply.setReagentCodeList(list2.get(i).getReagentCodes());
 					opeApply.setId(list2.get(i).getId());
 					opeList.add(opeApply);
 					OpeLaboratoryReserve lr=new OpeLaboratoryReserve();
@@ -1177,7 +1180,7 @@
 					lr.setReserve(list2.get(i).getSelectNum());
 					lr.setUserId(userId);
 					lr.setValidFlag(ValidFlag.VALID);
-					this.opeLaboratoryReserveService.insert(lr);
+					this.opeLaboratoryReserveDao.insertOpeLaboratoryReserve(lr);
 				}
 				this.opeWarehouseReserveService.reagentDStore3(opeList,userId);
 
@@ -1199,7 +1202,7 @@
 				if (oar.getStatus() == ApplyStatus.SUPPLIER_CONFIRM) {
 					//领用完 就改成已经入库
 					if (oar.getNum() == oar.getUsed() + oar.getSelectNum()) {
-						opeApplyService.updateOpeApplyInfo(ApplyStatus.STORAGE,null,null, oar.getId());
+						opeApplyService.updateOpeApplyInfo(ApplyStatus.STORAGE,null,null, oar.getId(),null);
 						//2.2更改订单状态
 						OpeOrder oo = opeOrderService.getOrder(oar.getId());
 						List<OpeApply> oas = opeOrderService.getOpeApplyListByOrder(oo.getId());
@@ -1232,15 +1235,18 @@
 			printTable.put("head", instituteName);
 			printTable.put("title", "领用单");
 			printTable.put("applyPerson", applyPersonInfo.getName());
-			printTable.put("department", applyPersonInfo.getDepartment());
+			printTable.put("department", applyPersonInfo.getDepartmentName());
 			printTable.put("date", Utils.now("yyyy-MM-dd"));
 
 			printTable.put("receiptNumber", receiptNum);
 			if (StringUtils.isNotBlank(applyPersonInfo.getPhone())){
 				printTable.put("phone", applyPersonInfo.getPhone());
 			}
-			if (StringUtils.isNotBlank(applyPersonInfo.getProject())){
-				printTable.put("project", applyPersonInfo.getProject());
+			if (applyPersonInfo.getProjectId()!=null){
+				SysProject sysProject=this.sysProjectDao.getSysProject(applyPersonInfo.getProjectId());
+				if(sysProject!=null){
+					printTable.put("project", sysProject.getProjectName());
+				}
 			}
 			SysLaboratory lab = sysLaboratoryService.getSysLaboratory(laboratoryId);
 			printTable.put("lab", lab.getName());
@@ -1353,7 +1359,7 @@
 		for (OpeApplyReserve oar : list) {
 			List<String> codeList = opeReagentStatusService
 					.checkReagentCode(oar.getStartReagentCode2(), oar.getEndReagentCode2(), oar.getSelectNum());
-			oar.setReagentCode(codeList);
+			oar.setReagentCodes(codeList);
 			if (codeList != null && codeList.size() > 0) {
 				for (String code:codeList) {
 					if (!checkSet.contains(code)) {
@@ -1519,13 +1525,16 @@
 			printTable.put("head", instituteName);
 			printTable.put("title", "领用单");
 			printTable.put("applyPerson", applyPersonInfo.getName());
-			printTable.put("department", applyPersonInfo.getDepartment());
+			printTable.put("department", applyPersonInfo.getDepartmentName());
 			printTable.put("date", Utils.now("yyyy-MM-dd"));
 			if (StringUtils.isNotBlank(applyPersonInfo.getPhone())){
 				printTable.put("phone", applyPersonInfo.getPhone());
 			}
-			if (StringUtils.isNotBlank(applyPersonInfo.getProject())){
-				printTable.put("project", applyPersonInfo.getProject());
+			if (applyPersonInfo.getProjectId()!=null){
+				SysProject sysProject=this.sysProjectDao.getSysProject(applyPersonInfo.getProjectId());
+				if(sysProject!=null){
+					printTable.put("project", sysProject.getProjectName());
+				}
 			}
 			SysLaboratory lab = sysLaboratoryService.getSysLaboratorySimpleInfo(laboratoryId);
 			String receiptNum = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
@@ -1536,40 +1545,9 @@
 			//int size = 0;
 			int sum = 0;
 			List<OpeWarehouseReserve> list=new ArrayList<>();
-			List<OpeWarehouseReserve> list2=new ArrayList<>();
 			for (OpeWarehouseReserve selectWarehouseReserve : this.selectedTmpList) {
-				if(selectWarehouseReserve.getFlag()==1){
-					list.add(selectWarehouseReserve);
-				}else{
-					if (selectWarehouseReserve.getWarehouseId() == null) {
-						FacesUtils.warn("仓库不存在。");
-						return;
-					}
-					list2.add(selectWarehouseReserve);
-				}
+				list.add(selectWarehouseReserve);
 			}
-
-			//list2为补贴条码,检查条码重复
-			ArrayList<String> checkList = new ArrayList<>();
-			if (list2.size() > 0) {
-				for (OpeWarehouseReserve owr : list2) {
-					checkList.addAll(owr.getReagentCodes());
-				}
-			}
-
-			Set<String> checkTable = new HashSet<>();
-			if (checkList.size() > 0) {
-				for (String reagentCode : checkList) {
-					if (checkTable.contains(reagentCode)) {
-						throw new BusinessException(ExceptionEnumCode.PARAM_EXIST, "当前订单条码重复," + reagentCode);
-					} else {
-						checkTable.add(reagentCode);
-					}
-				}
-			}
-			checkTable = null;
-			checkList = null;
-
 
 			if(list.size()>0&&list!=null){
 				for (OpeWarehouseReserve selectWarehouseReserve : list) {
@@ -1577,31 +1555,6 @@
 					if (reagentDetail == null) {
 						throw new Exception("试剂有误,请联系管理员");
 					}
-					List<String> reagentCodes = selectWarehouseReserve.getReagentCodes();
-					if (reagentCodes != null && reagentCodes.size() > 0)
-						for (String opeReagentStatusId : reagentCodes) {
-							OpeReagentStatus opeReagentStatus = this.opeReagentStatusService
-									.getOpeReagentStatus(opeReagentStatusId);
-							if (!this.opeReagentStatusService.isAllowWarehouseUse(opeReagentStatus)) {
-								FacesUtils.warn("只能申领在仓库的试剂。");
-								return;
-							}else {
-								opeReagentStatus.setHouseId(laboratoryId);
-								opeReagentStatus.setContainerId(laboratoryContainerId);
-								this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);//更新试剂状态表
-								OpeLaboratoryReserve lr=new OpeLaboratoryReserve();
-								lr.setReagentId(selectWarehouseReserve.getReagentId());
-								lr.setHouseId(laboratoryId);
-								lr.setContainerId(laboratoryContainerId);
-								lr.setReserve(selectWarehouseReserve.getSelectNum());
-								lr.setUserId(userId);
-								lr.setValidFlag(ValidFlag.VALID);
-								this.opeLaboratoryReserveService.insert(lr);
-							}
-							//else {
-							//size++;
-							//}
-						}
 					ApplyListDto lis = new ApplyListDto();
 					lis.setNum(String.valueOf(selectWarehouseReserve.getSelectNum())); //数量
 					lis.setMainMetering(String.format("%s%s", reagentDetail.get("main_metering"), reagentDetail.get("unit")));
@@ -1614,93 +1567,10 @@
 					sum += selectWarehouseReserve.getSelectNum();
 				}
 
-				//if (size == 0) {
-				//FacesUtils.warn("未选择一个条形码。");
-				//return;
-				//}
-				this.opeWarehouseReserveService.claim(list, userId,projectNum,receiptNumber);
+				this.opeWarehouseReserveService.claim(list, userId,projectId,laboratoryId,laboratoryContainerId,receiptNum);
 			}
 
-			if(list2.size()>0&&list2!=null){
-				List<OpeApply> opeList=new ArrayList<>();
-				//this.opeApplyService.getOpeApplyList(null,null,null,null,null)
-				for(int i=0;i<list2.size();i++){
-					Map reagentDetail = sysReagentService.getReagentDetail(list2.get(i).getReagentId());
-					if (reagentDetail == null) {
-						throw new Exception("试剂有误,请联系管理员");
-					}
-					OpeApply opeApply=new OpeApply();
-					opeApply.setArticleNumber(list2.get(i).getArticleNumber());
-					opeApply.setHouseId(laboratoryId);
-					opeApply.setContainerId(laboratoryContainerId);
-					opeApply.setReagent(this.sysReagentService.getSysReagent(list2.get(i).getReagentId()));
-					opeApply.setStartReagentCode(list2.get(i).getStartReagentCode2());
-					opeApply.setEndReagentCode(list2.get(i).getEndReagentCode2());
-					opeApply.setReagentCodeList(list2.get(i).getReagentCodes());
-					opeList.add(opeApply);
-					OpeLaboratoryReserve lr=new OpeLaboratoryReserve();
-					lr.setReagentId(list2.get(i).getReagentId());
-					lr.setHouseId(laboratoryId);
-					lr.setContainerId(laboratoryContainerId);
-					lr.setReserve(list2.get(i).getSelectNum());
-					lr.setUserId(userId);
-					lr.setValidFlag(ValidFlag.VALID);
-					this.opeLaboratoryReserveService.insert(lr);
-					//opeList.add(this.opeApplyService.getOpeApply(list2.get(i).getId()));
-					ApplyListDto lis = new ApplyListDto();
 
-					lis.setNum(String.valueOf(list2.get(i).getSelectNum())); //数量
-					lis.setMainMetering(String.format("%s%s", reagentDetail.get("main_metering"), reagentDetail.get("unit")));
-					lis.setControlProducts((String) reagentDetail.get("controlProducts"));
-					lis.setProductName((String) reagentDetail.get("name"));
-					lis.setReagentFormat((String) reagentDetail.get("reagentFormat"));
-					lis.setProductCode((String)reagentDetail.get("productCode"));
-					lis.setMemo((String)reagentDetail.get("memo"));
-					applyList.add(lis);
-
-					sum += list2.get(i).getSelectNum();
-				}
-				this.opeWarehouseReserveService.reagentDStore4(opeList,userId,receiptNum);
-				for(int i=0;i<list2.size();i++){
-
-					List<String> reagentCodes = opeReagentStatusService
-							.generateReagentCode(list2.get(i).getStartReagentCode2(), list2.get(i).getEndReagentCode2());
-					Integer selectNum = list2.get(i).getSelectNum();
-					for (int j = 0;j<selectNum;j++){
-						// 试剂使用情况入库insert
-						OpeUseFlow opeUseFlow = new OpeUseFlow();
-						opeUseFlow.setReagentCode(reagentCodes.get(0));
-						opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE);
-						//仓库信息
-						List<OpeWarehouseReserve> warehouseReserveInfo = opeWarehouseReserveService
-								.selectWarehouseByRidAndArticleNumberAndWarehouse(list2.get(i).getReagent().getId()
-										, list2.get(i).getArticleNumber()
-										, list2.get(i).getWarehouseId());
-						opeUseFlow.setHouseId(list2.get(i).getWarehouseId());
-						opeUseFlow.setContainerId(warehouseReserveInfo.get(0).getContainerId());
-						opeUseFlow.setCreateTime(warehouseReserveInfo.get(0).getUpdateTime());
-						opeUseFlow.setUserId(warehouseReserveInfo.get(0).getUserId());
-						opeUseFlow.setRemainder(list2.get(i).getReagent().getMainMetering()!=null?list2.get(i).getReagent().getMainMetering():new BigDecimal(0));
-						opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
-
-						Map<String, String> metaMap = new HashMap<>();
-						metaMap.put("groupId", "operate_status");
-						metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-						List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-						opeUseFlow.setOperateState(baseMetaList.get(0).getId());
-						this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
-						reagentCodes.remove(0);
-					}
-
-					list2.get(i).setReserve(list2.get(i).getReserve()-list2.get(i).getSelectNum());
-					opeWarehouseReserveDao.updateOpeWarehouseReserve2(list2.get(i));
-				}
-
-
-				//opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve()-opeWarehouseReserve.getSelectNum());
-				//opeWarehouseReserveDao.updateOpeWarehouseReserve(opeWarehouseReserve);
-				//this.opeWarehouseReserveService.claim(list2, userId,projectNum);
-			}
 
 			//领用票最后一行
 			applyList.add(new ApplyListDto("合计", "", "", "", "", String.valueOf(sum), ""));
@@ -1786,16 +1656,17 @@
 						Map<String, Object> filters) {
 					List<OpeWarehouseReserve> list = null;
 					try {
-						int count = opeWarehouseReserveService.getOpeWarehouseReserveTotalCountByName(reagentId, supplierId,productSn,warehouseName);
+						int count = opeWarehouseReserveService.getOpeWarehouseReserveTotalCountByName(reagentName, supplierId,productSn,warehouseName);
 						this.setRowCount(count);
 						if (count > 0) {
-							list = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentId, supplierId, first,
+							list = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentName, supplierId, first,
 									pageSize,productSn,warehouseName);
 						}
 					} catch (Exception e) {
 						logger.error(e);
 					}
 					selectedList = null;
+					selectedTmpList=null;
 					return list;
 				}
 
@@ -1811,7 +1682,8 @@
 //							}
 //						}
 //					}
-					return opeWarehouseReserveService.getRowData(rowKey);
+					Long id=Long.valueOf(rowKey);
+					return opeWarehouseReserveService.getRowData(id);
 				}
 			};
 		}
@@ -1828,7 +1700,7 @@
 						Map<String, Object> filters) {
 					List<OpeApplyReserve> list = null;
 					SysUser loginUser = getUser();
-					String id="";
+					Long id=null;
 					if(loginUser.getSeeFlag()==SeeFlag.MANAGE||loginUser.getSeeFlag() ==SeeFlag.LEADING){
 
 					}else {
@@ -1837,16 +1709,17 @@
 					}
 
 					try {
-						int count = opeApplyService.getOpeApplyReserveTotalCountByNameFor(id, reagentId, userName, productSn, applyCode, status, isAllApply,isExpired);
+						int count = opeApplyService.getOpeApplyReserveTotalCountByNameFor(id, null, userName, productSn, applyCode, status, isAllApply,isExpired);
 						this.setRowCount(count);
 						if (count > 0) {
-							list = opeApplyService.getOpeApplyReserveListByNameFor(id, reagentId, userName, first,
+							list = opeApplyService.getOpeApplyReserveListByNameFor(id, null, userName, first,
 									pageSize, productSn, applyCode, status, isAllApply,isExpired);
 						}
 					} catch (Exception e) {
 						logger.error(e);
 					}
 					selectedListForPerson = null;
+					selectedTmpOrderList=null;
 					return list;
 				}
 
@@ -1862,7 +1735,8 @@
 //							}
 //						}
 //					}
-					return opeApplyService.getOpeApplyReserveListByNameForRowData(rowKey);
+					Long id=Long.valueOf(rowKey);
+					return opeApplyService.getOpeApplyReserveListByNameForRowData(id);
 				}
 			};
 		}
@@ -1936,7 +1810,7 @@
 			List<OpeApplyReserve> realDataList = new ArrayList<>();
 			//map=null;
 			SysUser loginUser = getUser();
-			String id="";
+			Long id=null;
 			if(loginUser.getSeeFlag()==SeeFlag.MANAGE||loginUser.getSeeFlag() == SeeFlag.LEADING){
 
 			}else {
@@ -1946,7 +1820,7 @@
 			if(selectedListForPerson!=null&&selectedListForPerson.size()>0){
 				realDataList=selectedListForPerson;
 			}else {
-				realDataList = opeApplyService.getOpeApplyReserveListByNameFor(id,reagentId, userName, null,
+				realDataList = opeApplyService.getOpeApplyReserveListByNameFor(id,null, userName, null,
 						null,productSn,applyCode,status,isAllApply,isExpired);
 			}
 			List<String> headerList = new ArrayList<>();
@@ -2021,16 +1895,16 @@
 			dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getName()== null ? "": String.valueOf(dataList.get(i).getReagent().getName()));
 			dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getControlProducts()== null ? "": String.valueOf(dataList.get(i).getReagent().getControlProducts()));
 			dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentFormat()));
-			dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering()));
+			dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+dataList.get(i).getReagent().getReagentUnit());
 			dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
 			dataRow.createCell(7).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
 			dataRow.createCell(8).setCellValue(dataList.get(i).getReagent().getReagentCharacter()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentCharacter()));
-			dataRow.createCell(9).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
+			dataRow.createCell(9).setCellValue(dataList.get(i).getReagent().getProductHome()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHome()));
 			dataRow.createCell(10).setCellValue(dataList.get(i).getNum()== null ? "": String.valueOf(dataList.get(i).getNum()));
 			dataRow.createCell(11).setCellValue(dataList.get(i).getUsed()== null ? "": String.valueOf(dataList.get(i).getUsed()));
 			dataRow.createCell(12).setCellValue(dataList.get(i).getApplyUserId()== null ? "": String.valueOf(dataList.get(i).getApplyUserId()));
 			dataRow.createCell(13).setCellValue(dataList.get(i).getStatus()== null ? "": String.valueOf(dataList.get(i).getStatus().getText()));
-			dataRow.createCell(14).setCellValue(dataList.get(i).getProject()== null ? "": String.valueOf(dataList.get(i).getProject()));
+			dataRow.createCell(14).setCellValue(dataList.get(i).getProjectName()== null ? "": String.valueOf(dataList.get(i).getProjectName()));
 			dataRow.createCell(15).setCellValue(dataList.get(i).getProjectManage()== null ? "": String.valueOf(dataList.get(i).getProjectManage()));
 			dataRow.createCell(16).setCellValue(dataList.get(i).getArrivalTime()== null ? "": String.valueOf(dataList.get(i).getArrivalTime()));
 		}
@@ -2063,7 +1937,7 @@
 			if(selectedList!=null&&selectedList.size()>0){
 				realDataList=selectedList;
 			}else {
-				realDataList = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentId, supplierId, null,
+				realDataList = opeWarehouseReserveService.getOpeWarehouseReserveListByName(reagentName, supplierId, null,
 						null,productSn,warehouseName);
 			}
 				List<String> headerList = new ArrayList<>();
@@ -2139,10 +2013,10 @@
 			dataRow.createCell(0).setCellValue(dataList.get(i).getReagent().getName()== null ? "": String.valueOf(dataList.get(i).getReagent().getName()));
 			dataRow.createCell(1).setCellValue(dataList.get(i).getReagent().getProductSn()== null ? "": String.valueOf(dataList.get(i).getReagent().getProductSn()));
 			dataRow.createCell(2).setCellValue(dataList.get(i).getReagent().getCas()== null ? "": String.valueOf(dataList.get(i).getReagent().getCas()));
-			dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getProductHomeName()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHomeName()));
+			dataRow.createCell(3).setCellValue(dataList.get(i).getReagent().getProductHome()== null ? "":  String.valueOf(dataList.get(i).getReagent().getProductHome()));
 			dataRow.createCell(4).setCellValue(dataList.get(i).getReagent().getSupplierName()== null ? "": String.valueOf(dataList.get(i).getReagent().getSupplierName()));
-			dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentFormat())));
-			dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+baseMetaService.getBaseMetaValue(dataList.get(i).getReagent().getReagentUnit()));
+			dataRow.createCell(5).setCellValue(dataList.get(i).getReagent().getReagentFormat()== null ? "": String.valueOf(dataList.get(i).getReagent().getReagentFormat()));
+			dataRow.createCell(6).setCellValue(dataList.get(i).getReagent().getMainMetering()== null ? "": String.valueOf(dataList.get(i).getReagent().getMainMetering())+dataList.get(i).getReagent().getReagentUnit());
 			dataRow.createCell(7).setCellValue(dataList.get(i).getReagent().getPrice()== null ? "": String.valueOf(dataList.get(i).getReagent().getPrice()));
 			dataRow.createCell(8).setCellValue(dataList.get(i).getArticleNumber()== null ? "": String.valueOf(dataList.get(i).getArticleNumber()));
 			dataRow.createCell(9).setCellValue(dataList.get(i).getReserve()== null ? "": String.valueOf(dataList.get(i).getReserve()));
@@ -2197,7 +2071,7 @@
             return;
         }
 
-        List<String> selectedIds = new ArrayList<String>();
+        List<Long> selectedIds = new ArrayList<Long>();
 
         for (OpeApply oa : this.reagentDStoreSelectedList) {
         	selectedIds.add(oa.getReagent().getId());
@@ -2265,7 +2139,7 @@
     public void onSaveBtnClickNew() {
 
         if (this.reagentDStore.getReagent() == null
-                || StringUtils.isBlank(this.reagentDStore.getReagent().getId())) {
+                || this.reagentDStore.getReagent().getId()==null) {
             FacesUtils.warn("请选择入库试剂。");
     		RequestContext.getCurrentInstance().execute("PF('reagentDStoreDialog').hide()");
             return;
@@ -2292,17 +2166,17 @@
         }*/
 
         // 检查仓库名
-        if (StringUtils.isBlank(this.reagentDStore.getHouseId())) {
+        if (this.reagentDStore.getHouseId()==null) {
             FacesUtils.warn("仓库名不能为空。");
             return;
         }
         // 检查货柜名
-        if (StringUtils.isBlank(this.reagentDStore.getContainerId())) {
+        if (this.reagentDStore.getContainerId()==null) {
             FacesUtils.warn("货柜名不能为空。");
             return;
         }
         // 检查货柜位置
-        if (StringUtils.isBlank(this.reagentDStore.getPlaceId())) {
+        if (this.reagentDStore.getPlace()==null) {
             FacesUtils.warn("货柜位置不能为空。");
             return;
         }
@@ -2329,7 +2203,7 @@
                                 && apply.getEndReagentCode().equals(this.reagentDStore.getEndReagentCode())).count() > 0) {
                     FacesUtils.warn("该试剂已被增加!");
                 }else {
-                    this.reagentDStore.setId(IDUtils.uuid());
+                 //   this.reagentDStore.setId(IDUtils.uuid());
                     this.reagentDStoreList.add(this.reagentDStore);
                     FacesUtils.info("增加成功。");
                 }
@@ -2345,7 +2219,7 @@
                                 && apply.getEndReagentCode().equals(this.reagentDStore.getEndReagentCode())).count() > 0) {
                     FacesUtils.warn("该试剂已被增加!");
                 }else {
-                    this.reagentDStore.setId(IDUtils.uuid());
+                  //  this.reagentDStore.setId(IDUtils.uuid());
                     this.reagentDStoreList.add(this.reagentDStore);
                     FacesUtils.info("增加成功。");
                 }
@@ -2366,38 +2240,38 @@
     	RequestContext.getCurrentInstance().execute("PF('reagentDStoreDialog').show()");
     }
 
-    public void onWarehouseSelectChange(String warehouseId) {
+    public void onWarehouseSelectChange(Long warehouseId) {
         this.warehouseContainerList = null;
         this.warehouseContainerPlaceList = null;
         this.changeWarehouseContainerList(warehouseId);
         this.changeWarehouseContainerPlaceList(null);
     }
 
-	public void onWarehouseContainerSelectChange(String warehouseContainerId) {
+	public void onWarehouseContainerSelectChange(Long warehouseContainerId) {
 		this.warehouseContainerPlaceList = null;
 		this.changeWarehouseContainerPlaceList(warehouseContainerId);
 	}
 
-    private void changeWarehouseContainerList(String warehouseId) {
-        if (StringUtils.isBlank(warehouseId)) {
+    private void changeWarehouseContainerList(Long warehouseId) {
+        if (warehouseId==null) {
             if (this.warehouseList != null && this.warehouseList.size() > 0) {
                 warehouseId = this.warehouseList.get(0).getId();
             }
         }
 
-        if (StringUtils.isNotBlank(warehouseId)) {
+        if (warehouseId!=null) {
             this.warehouseContainerList = warehouseIdContainerMap.get(warehouseId);
         }
     }
 
-    private void changeWarehouseContainerPlaceList(String warehouseContainerId) {
-        if (StringUtils.isBlank(warehouseContainerId)) {
+    private void changeWarehouseContainerPlaceList(Long warehouseContainerId) {
+        if (warehouseContainerId==null) {
             if (this.warehouseContainerList != null && this.warehouseContainerList.size() > 0) {
                 warehouseContainerId = this.warehouseContainerList.get(0).getId();
             }
         }
 
-        if (StringUtils.isNotBlank(warehouseContainerId)) {
+        if (warehouseContainerId!=null) {
             SysWarehouseContainer container = this.warehouseContainerMap.get(warehouseContainerId);
             BaseMeta baseMeta = null;
             if (container != null
@@ -2407,26 +2281,36 @@
         }
     }
 
-    public String formatWarehouseName(String id) {
-        if (StringUtils.isNotBlank(id)
-                && this.warehouseNameMap != null) {
-            return warehouseNameMap.get(id);
-        }
-
-        return "";
+    public String formatWarehouseName(Long id) {
+		if(id==null){
+			return "";
+		}
+		String name=warehouseNameMap.get(id);
+		if(StringUtils.isBlank(name)){
+			SysWarehouse warehouse=this.sysWarehouseService.getSysWarehouse(id);
+			if(warehouse!=null){
+				warehouseNameMap.put(warehouse.getId(),warehouse.getName());
+				name=warehouse.getName();
+			}
+		}
+		return name;
     }
-    public String formatWarehouseContainerName(String id) {
-        if (StringUtils.isNotBlank(id)
-                && this.warehouseContainerMap != null) {
-            if (this.warehouseContainerMap.get(id) != null) {
-                return this.warehouseContainerMap.get(id).getContainerCode();
-            }
-        }
-
-        return "";
+    public String formatWarehouseContainerName(Long id) {
+		if(id==null){
+			return "";
+		}
+		String containerCode=this.warehouseContainerMap.get(id).getContainerCode();
+		if(StringUtils.isBlank(containerCode)){
+			SysWarehouseContainer sysWarehouseContainer = this.sysWarehouseContainerService.getSysWarehouseContainer(id);
+			if(sysWarehouseContainer!=null){
+				this.warehouseContainerMap.put(sysWarehouseContainer.getId(),sysWarehouseContainer);
+				containerCode=sysWarehouseContainer.getContainerCode();
+			}
+		}
+		return containerCode;
     }
-    public String formatWarehouseContainerPlaceName(String id) {
-        if (StringUtils.isNotBlank(id)) {
+    public String formatWarehouseContainerPlaceName(Long id) {
+        if (id!=null) {
             return this.baseMetaService.getBaseMetaValue(id);
         }
 
@@ -2448,12 +2332,12 @@
 		this.reagentSelectList = reagentSelectList;
 	}
 
-	public String getReagentId() {
-		return reagentId;
+	public String getReagentName() {
+		return reagentName;
 	}
 
-	public void setReagentId(String reagentId) {
-		this.reagentId = reagentId;
+	public void setReagentName(String reagentName) {
+		this.reagentName = reagentName;
 	}
 
 	public List<SysUser> getUserSelectList() {
@@ -2463,7 +2347,7 @@
 		return userSelectList;
 	}
 
-	public SysUser getSelectedUserById(String userId) {
+	public SysUser getSelectedUserById(Long userId) {
 		return userSelectList.stream().filter(u->u.getId().equals(userId)).findFirst().get();
 	}
 
@@ -2478,28 +2362,28 @@
 		this.userSelectList = userSelectList;
 	}
 
-	public String getUserId() {
+	public Long getUserId() {
 		return userId;
 	}
 
-	public void setUserId(String userId) {
+	public void setUserId(Long userId) {
 		this.userId = userId;
 	}
 
 
-	public String getProjectNum() {
-		return projectNum;
+	public Long getProjectId() {
+		return projectId;
 	}
 
-	public void setProjectNum(String projectNum) {
-		this.projectNum = projectNum;
+	public void setProjectId(Long projectId) {
+		this.projectId = projectId;
 	}
 
-	public String getSupplierId() {
+	public Long getSupplierId() {
 		return supplierId;
 	}
 
-	public void setSupplierId(String supplierId) {
+	public void setSupplierId(Long supplierId) {
 		this.supplierId = supplierId;
 	}
 
@@ -2547,19 +2431,19 @@
 		this.reagentCodeSelectedList = reagentCodeSelectedList;
 	}
 
-	public String getReagentLogId() {
+	public Long getReagentLogId() {
 		return reagentLogId;
 	}
 
-	public void setReagentLogId(String reagentLogId) {
+	public void setReagentLogId(Long reagentLogId) {
 		this.reagentLogId = reagentLogId;
 	}
 
-	public String getUserLogId() {
+	public Long getUserLogId() {
 		return userLogId;
 	}
 
-	public void setUserLogId(String userLogId) {
+	public void setUserLogId(Long userLogId) {
 		this.userLogId = userLogId;
 	}
 
@@ -2731,7 +2615,8 @@
 //                            }
 //                        }
 //                    }
-                    return sysReagentService.getSysReagentListNewRowData(rowKey);
+					Long id=Long.valueOf(rowKey);
+                    return sysReagentService.getSysReagentListNewRowData(id);
                 }
             };
         }
@@ -2808,11 +2693,11 @@
 		this.useNum = useNum;
 	}
 
-	public String getOriLaboratoryId() {
+	public Long getOriLaboratoryId() {
 		return oriLaboratoryId;
 	}
 
-	public void setOriLaboratoryId(String oriLaboratoryId) {
+	public void setOriLaboratoryId(Long oriLaboratoryId) {
 		this.oriLaboratoryId = oriLaboratoryId;
 	}
 
@@ -2831,7 +2716,7 @@
 		//getLaboratoryContainers();
 	}
 	public List<SysLaboratory> getLaboratory() {
- 		if(userId != null && userId.trim().length() > 0)
+ 		if(userId != null)
 		{
 
 			//Todo 修改申领人的实验室显示信息
@@ -2839,7 +2724,7 @@
 			if(this.laboratory != null && this.laboratory.size() > 0)
 			{
 				//flag =true;
-				if(laboratoryId != null && laboratoryId.trim().length() > 0)
+				if(laboratoryId != null)
 				{
 					this.oriLaboratoryId = this.laboratoryId;
 				}else
@@ -2867,7 +2752,7 @@
 	}
 
 	public List<SysLaboratoryContainer> getLaboratoryContainers() {
- 		if(laboratoryId != null && laboratoryId.trim().length() > 0)
+ 		if(laboratoryId != null)
 		{
 			this.laboratoryContainers = this.sysLaboratoryContainerService.getSysLaboratoryContainerList(laboratoryId);
 		}
@@ -2878,20 +2763,20 @@
 		this.laboratoryContainers = laboratoryContainers;
 	}
 
-	public String getLaboratoryId() {
+	public Long getLaboratoryId() {
 		return laboratoryId;
 	}
 
-	public void setLaboratoryId(String laboratoryId) {
+	public void setLaboratoryId(Long laboratoryId) {
 		this.laboratoryId = laboratoryId;
 	}
 
-	public String getLaboratoryContainerId() {
+	public Long getLaboratoryContainerId() {
 
 		return laboratoryContainerId;
 	}
 
-	public void setLaboratoryContainerId(String laboratoryContainerId) {
+	public void setLaboratoryContainerId(Long laboratoryContainerId) {
 		this.laboratoryContainerId = laboratoryContainerId;
 	}
 
@@ -3006,11 +2891,11 @@
 		this.arrivalTime = arrivalTime;
 	}
 
-	public String getConsigneeId() {
+	public Long getConsigneeId() {
 		return consigneeId;
 	}
 
-	public void setConsigneeId(String consigneeId) {
+	public void setConsigneeId(Long consigneeId) {
 		this.consigneeId = consigneeId;
 	}
 
@@ -3185,7 +3070,7 @@
 			FacesUtils.warn("请选择数据。");
 			return;
 		}
-		ArrayList<String> ids = new ArrayList<>();
+		ArrayList<Long> ids = new ArrayList<>();
 		for (OpeApplyReserve oa : this.selectedListForPerson) {
 			ids.add(oa.getId());
 			if (oa.getStatus() != ApplyStatus.SUPPLIER_CONFIRM) {
@@ -3205,7 +3090,7 @@
 			FacesUtils.warn("请选择数据。");
 			return;
 		}
-		ArrayList<String> ids = new ArrayList<>();
+		ArrayList<Long> ids = new ArrayList<>();
 		for (OpeApplyReserve oa : this.selectedListForPerson) {
 			ids.add(oa.getId());
 			if (oa.getStatus() != ApplyStatus.EXPIRED) {
diff --git a/src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.java b/src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.java
index 4a01f06..35b4b7b 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.java
@@ -12,15 +12,15 @@
  */
 public interface BaseMetaDao {
 
-    public BaseMeta getBaseMeta(String id) throws DataAccessException;
+    public BaseMeta getBaseMeta(Long id) throws DataAccessException;
     public List<BaseMeta> getBaseMetaList(Map params) throws DataAccessException;
     public int getBaseMetaTotalCount(Map params) throws DataAccessException;
 
     public void insertBaseMeta(BaseMeta baseMeta) throws DataAccessException;
     public int updateBaseMeta(BaseMeta baseMeta) throws DataAccessException;
-    public int deleteBaseMeta(String id) throws DataAccessException;
-    public int deleteBaseMetas(List<String> ids) throws DataAccessException;
+    public int deleteBaseMeta(Long id) throws DataAccessException;
+    public int deleteBaseMetas(List<Long> ids) throws DataAccessException;
     public List<BaseMeta> getAllBaseMeta() throws DataAccessException;
 
-    BaseMeta selectBaseMeta(@Param("groupId") String groupId, @Param("key")String key,@Param("value") String value);
+    BaseMeta selectBaseMeta(@Param("groupCode") String groupCode, @Param("key")String key,@Param("value") String value);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.xml b/src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.xml
index 954cc8c..ee7ddff 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/BaseMetaDao.xml
@@ -11,11 +11,12 @@
     <result property="createTime" column="create_time"></result>
     <result property="updateTime" column="update_time"></result>
     <result property="validFlag" column="valid_flag" typeHandler="com.nanometer.smartlab.entity.handler.ValidFlagHandler"></result>
+    <result property="groupCode" column="group_code"></result>
   </resultMap>
 
   <sql id="queryWhereSql">
-    <if test="groupId != null and groupId != ''">
-      and group_id = #{groupId}
+    <if test="groupCode != null and groupCode != ''">
+      and group_code = #{groupCode}
     </if>
     <if test="keyword != null and keyword != ''">
       and (meta_key like #{keyword} or meta_value like #{keyword})
@@ -31,7 +32,7 @@
     </if>
   </sql>
 
-  <select id="getBaseMeta" parameterType="java.lang.String"  resultMap="BaseMeta" >
+  <select id="getBaseMeta"  resultMap="BaseMeta" >
     select * from base_meta
     where id = #{id} and valid_flag = 1
   </select>
@@ -45,7 +46,7 @@
     select * from base_meta
     where valid_flag = 1
     <include refid="queryWhereSql"/>
-    order by group_id asc,meta_value desc, order_index asc
+    order by group_code asc,meta_value desc, order_index asc
     <if test="first != null and pageSize != null">
       limit #{first}, #{pageSize}
     </if>
@@ -59,8 +60,8 @@
       select * from  base_meta
       where
       valid_flag = 1
-      <if test="groupId != null and groupId != ''">
-       and group_id = #{groupId}
+      <if test="groupCode != null and groupCode != ''">
+       and group_code = #{groupCode}
       </if>
       <if test="key != null and key != ''">
         and meta_key = #{key}
@@ -71,9 +72,9 @@
       limit 1
     </select>
 
-    <insert id="insertBaseMeta" parameterType="com.nanometer.smartlab.entity.BaseMeta">
-    insert into base_meta(id, group_id, meta_key, meta_value, order_index, memo, create_time, update_time, valid_flag)
-    values (#{id}, #{groupId}, #{metaKey}, #{metaValue}, #{orderIndex}, #{memo}, now(), now(), 1)
+    <insert id="insertBaseMeta" parameterType="com.nanometer.smartlab.entity.BaseMeta" useGeneratedKeys = "true" keyProperty = "id">
+    insert into base_meta(group_code, meta_key, meta_value, order_index, memo, create_time, update_time, valid_flag)
+    values (#{groupCode}, #{metaKey}, #{metaValue}, #{orderIndex}, #{memo}, now(), now(), 1)
   </insert>
   <update id="updateBaseMeta" parameterType="com.nanometer.smartlab.entity.BaseMeta">
     update base_meta set group_id=#{groupId}, meta_key=#{metaKey}, meta_value=#{metaValue}, order_index=#{orderIndex},
@@ -81,7 +82,7 @@
     where id=#{id}
   </update>
 
-  <update id="deleteBaseMeta" parameterType="java.lang.String">
+  <update id="deleteBaseMeta">
     update base_meta set valid_flag=0, update_time=now()
     where id=#{id}
   </update>
diff --git a/src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.java b/src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.java
index 93c5166..3d233cb 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.java
@@ -9,4 +9,6 @@
 
 	public BaseMetaGroup getBaseMetaGroup(String id) throws DataAccessException;
 	public List<BaseMetaGroup> getBaseMetaGroupList() throws DataAccessException;
+
+	public BaseMetaGroup getBaseMetaGroupByCode(String code) throws DataAccessException;
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.xml b/src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.xml
index bb1147e..224ac15 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/BaseMetaGroupDao.xml
@@ -4,6 +4,7 @@
   <resultMap id="BaseMetaGroup" type="com.nanometer.smartlab.entity.BaseMetaGroup">
     <id property="id" column="id"/>
     <result property="name" column="name"></result>
+    <result property="code" column="code"></result>
     <result property="orderIndex" column="order_index"></result>
     <result property="createTime" column="create_time"></result>
     <result property="updateTime" column="update_time"></result>
@@ -11,11 +12,16 @@
     <result property="validFlag" column="valid_flag" typeHandler="com.nanometer.smartlab.entity.handler.ValidFlagHandler"></result>
   </resultMap>
 
-  <select id="getBaseMetaGroup" parameterType="java.lang.String"  resultMap="BaseMetaGroup" >
+  <select id="getBaseMetaGroup" resultMap="BaseMetaGroup" >
     select * from base_meta_group
     where id = #{id} and valid_flag = 1
   </select>
 
+  <select id="getBaseMetaGroupByCode"   resultMap="BaseMetaGroup" >
+    select * from base_meta_group
+    where code = #{code} and valid_flag = 1
+  </select>
+
   <select id="getBaseMetaGroupList" resultMap="BaseMetaGroup">
     select * from base_meta_group
     where valid_flag = 1
diff --git a/src/main/java/com/nanometer/smartlab/dao/BasePageDao.xml b/src/main/java/com/nanometer/smartlab/dao/BasePageDao.xml
index 792c11f..794b52b 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BasePageDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/BasePageDao.xml
@@ -12,7 +12,7 @@
     <result property="validFlag" column="valid_flag" typeHandler="com.nanometer.smartlab.entity.handler.ValidFlagHandler"></result>
   </resultMap>
 
-  <select id="getBasePage" parameterType="java.lang.String"  resultMap="BasePage" >
+  <select id="getBasePage"  resultMap="BasePage" >
     select * from base_page
     where id = #{id} and valid_flag = 1
   </select>
diff --git a/src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.java b/src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.java
index 460f24d..4d3ecb8 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.java
@@ -11,14 +11,14 @@
  */
 public interface BaseRoleDao {
 
-    public BaseRole getBaseRole(String id) throws DataAccessException;
+    public BaseRole getBaseRole(Long id) throws DataAccessException;
     public List<BaseRole> getBaseRoleList(Map params) throws DataAccessException;
     public int getBaseRoleTotalCount(Map params) throws DataAccessException;
 
     public void insertBaseRole(BaseRole baseRole) throws DataAccessException;
     public int updateBaseRole(BaseRole baseRole) throws DataAccessException;
     public int updateBaseRoleInfo(BaseRole baseRole);
-    public int deleteBaseRoles(List<String> ids) throws DataAccessException;
+    public int deleteBaseRoles(List<Long> ids) throws DataAccessException;
 
-    BaseRole getBaseRoleByUser(String id);
+    BaseRole getBaseRoleByUser(Long id);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.xml b/src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.xml
index d8ac50e..ee04672 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/BaseRoleDao.xml
@@ -24,7 +24,7 @@
     </if>
   </sql>
 
-  <select id="getBaseRole" parameterType="java.lang.String"  resultMap="BaseRole" >
+  <select id="getBaseRole"  resultMap="BaseRole" >
     select * from base_role
     where id = #{id} and valid_flag = 1
   </select>
@@ -50,15 +50,15 @@
     and br.valid_flag = 1
   </select>
 
-  <insert id="insertBaseRole" parameterType="com.nanometer.smartlab.entity.BaseRole">
-    insert into base_role(id, name, memo, valid_flag, create_time, update_time
+  <insert id="insertBaseRole" parameterType="com.nanometer.smartlab.entity.BaseRole" useGeneratedKeys = "true" keyProperty = "id">
+    insert into base_role( name, memo, valid_flag, create_time, update_time
     <if test="btnPermission !=null">
       ,btn_permission
     </if>
     <if test="userPermission !=null">
       ,user_permission
     </if>)
-    values (#{id}, #{name}, #{memo}, 1, now(), now()
+    values (#{name}, #{memo}, 1, now(), now()
     <if test="btnPermission !=null">
       ,#{btnPermission}
     </if>
diff --git a/src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.java b/src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.java
index 2f2898e..b8d9c8b 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.java
@@ -15,5 +15,7 @@
     public List<BaseRolePage> getBaseRolePageList(Map params) throws DataAccessException;
 
     public void insertBaseRolePage(BaseRolePage baseRolePage) throws DataAccessException;
+
+    public void batchInsertBaseRolePage(List<BaseRolePage>baseRolePages)throws DataAccessException;
     public int deleteBaseRolePage(Map params) throws DataAccessException;
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.xml b/src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.xml
index 7d45047..4578227 100644
--- a/src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/BaseRolePageDao.xml
@@ -5,6 +5,7 @@
     <id property="id" column="id"/>
     <result property="roleId" column="role_id"></result>
     <result property="pageId" column="page_id"></result>
+    <result property="pageCode" column="page_code"></result>
   </resultMap>
 
   <sql id="queryWhereSql">
@@ -16,20 +17,29 @@
     </if>
   </sql>
 
-  <select id="getBaseRolePage" parameterType="java.lang.String"  resultMap="BaseRolePage" >
+  <select id="getBaseRolePage"   resultMap="BaseRolePage" >
     select * from base_role_page
     where id = #{id}
   </select>
 
   <select id="getBaseRolePageList" parameterType="java.util.Map" resultMap="BaseRolePage">
-    select * from base_role_page
+    select a.*,b.code as page_code from base_role_page a
+    left join base_page b on b.id=a.page_id and b.valid_flag=1
     where 1 = 1
     <include refid="queryWhereSql"/>
   </select>
 
-  <insert id="insertBaseRolePage" parameterType="com.nanometer.smartlab.entity.BaseRolePage">
-    insert into base_role_page(id, role_id, page_id)
-    values (#{id}, #{roleId}, #{pageId})
+  <insert id="insertBaseRolePage" parameterType="com.nanometer.smartlab.entity.BaseRolePage" useGeneratedKeys = "true" keyProperty = "id">
+    insert into base_role_page( role_id, page_id)
+    values (#{roleId}, #{pageId})
+  </insert>
+
+  <insert id="batchInsertBaseRolePage" parameterType="com.nanometer.smartlab.entity.BaseRolePage">
+    insert into base_role_page( role_id, page_id)
+    values
+    <foreach collection="list" item="baseRolePage" separator=",">
+      (#{baseRolePage.roleId}, #{baseRolePage.pageId})
+    </foreach>
   </insert>
 
   <delete id="deleteBaseRolePage" parameterType="java.util.Map">
diff --git a/src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.java b/src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.java
index 9aaa5a7..d50055b 100644
--- a/src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.java
+++ b/src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.java
@@ -28,7 +28,7 @@
 
     List<DangerousEncode> selectByCodeAndName(@Param("reagentcode") String reagentcode,@Param("reagentname") String reagentname,@Param("cas") String cas,@Param("code") String code);
 
-    List<DangerousEncodeVo> selectByReagentName(@Param("reagentname") String reagentname, @Param("cas") String cas);
+    List<DangerousEncode> selectByReagentName(@Param("reagentname") String reagentname, @Param("cas") String cas);
 
     DangerousEncode selectByName(@Param("reagentname") String reagentname);
 
diff --git a/src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.xml b/src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.xml
index 57c3513..97b497c 100644
--- a/src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/DangerousEncodeMapper.xml
@@ -4,7 +4,7 @@
 
   <resultMap id="BaseResultMap" type="com.nanometer.smartlab.entity.DangerousEncode">
     <!--          -->
-    <id column="id" jdbcType="BIGINT" property="id" />
+    <id column="id"  property="id" />
     <result column="container_number" jdbcType="VARCHAR" property="containerNumber" />
     <result column="reagent_code" jdbcType="VARCHAR" property="reagentCode" />
     <result column="reagent_name" jdbcType="VARCHAR" property="reagentName" />
@@ -26,7 +26,7 @@
     id, container_number, reagent_code, reagent_name, cas, memo, property, feature, avoid,
     status, fire, random, code, update_time, creator, count
   </sql>
-  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+  <select id="selectByPrimaryKey"  resultMap="BaseResultMap">
     <!--          -->
     select
     <include refid="Base_Column_List" />
@@ -38,28 +38,25 @@
     delete from sys_dangerous_encode
     where id = #{id,jdbcType=BIGINT}
   </delete>
-  <insert id="insert" parameterType="com.nanometer.smartlab.entity.DangerousEncode">
+  <insert id="insert" parameterType="com.nanometer.smartlab.entity.DangerousEncode" useGeneratedKeys = "true" keyProperty = "id">
     <!--          -->
-    insert into sys_dangerous_encode (id, container_number, reagent_code,
+    insert into sys_dangerous_encode ( container_number, reagent_code,
       reagent_name, cas, memo,
       property, feature, avoid,
       status, fire, random,
       code, update_time, creator,
       count)
-    values (#{id,jdbcType=BIGINT}, #{containerNumber,jdbcType=VARCHAR}, #{reagentCode,jdbcType=VARCHAR},
+    values ( #{containerNumber,jdbcType=VARCHAR}, #{reagentCode,jdbcType=VARCHAR},
       #{reagentName,jdbcType=VARCHAR}, #{cas,jdbcType=VARCHAR}, #{memo,jdbcType=VARCHAR},
       #{property,jdbcType=VARCHAR}, #{feature,jdbcType=VARCHAR}, #{avoid,jdbcType=VARCHAR},
       #{status,jdbcType=VARCHAR}, #{fire,jdbcType=VARCHAR}, #{random,jdbcType=VARCHAR},
       #{code,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{creator,jdbcType=VARCHAR},
       #{count,jdbcType=INTEGER})
   </insert>
-  <insert id="insertSelective" parameterType="com.nanometer.smartlab.entity.DangerousEncode">
+  <insert id="insertSelective" parameterType="com.nanometer.smartlab.entity.DangerousEncode" useGeneratedKeys = "true" keyProperty = "id">
     <!--          -->
     insert into sys_dangerous_encode
     <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        id,
-      </if>
       <if test="containerNumber != null">
         container_number,
       </if>
@@ -107,9 +104,6 @@
       </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        #{id,jdbcType=BIGINT},
-      </if>
       <if test="containerNumber != null">
         #{containerNumber,jdbcType=VARCHAR},
       </if>
@@ -318,7 +312,7 @@
       </if>
     </where>
   </select>
-  <select id="selectByReagentName" resultType="com.nanometer.smartlab.entity.DangerousEncodeVo">
+  <select id="selectByReagentName" resultMap="BaseResultMap">
     select
       container_number containerNumber, reagent_code reagentCode, reagent_name reagentName, cas, memo, property, feature, avoid,
       status, fire, random, code, update_time, creator, count
@@ -333,16 +327,13 @@
         </if>
     </where>
   </select>
-  <select id="selectByName" resultType="com.nanometer.smartlab.entity.DangerousEncode">
+  <select id="selectByName" resultMap="BaseResultMap">
       select
-      id,container_number containerNumber, reagent_code reagentCode, reagent_name reagentName, cas, memo,
+      id,container_number, reagent_code, reagent_name, cas, memo,
       property, feature, avoid, status, fire, random, code, update_time, creator, count
       from sys_dangerous_encode
       <where>
-          1=1
-          <if test="reagentname != null and reagentname != ''">
-              and reagent_name = #{reagentname}
-          </if>
+          1=1 and reagent_name = #{reagentname}
       </where>
   </select>
   <select id="selectById" resultType="com.nanometer.smartlab.entity.DangerousEncode">
diff --git a/src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.java b/src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.java
index f080d7b..7cf8a1a 100644
--- a/src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.java
@@ -17,6 +17,6 @@
     public void insertEmailStatus(EmailStatus EmailStatus) throws DataAccessException;
     public int updateEmailStatus(EmailStatus EmailStatus) throws DataAccessException;
 
-    List<EmailStatus> selectByReId(String id);
+    List<EmailStatus> selectByReId(Long id);
     public int updateByReId(Map params);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.xml b/src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.xml
index e24b65a..888404d 100644
--- a/src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/EmailStatusDao.xml
@@ -37,9 +37,9 @@
     <include refid="queryWhereSql"/>
   </select>
 
-  <insert id="insertEmailStatus" parameterType="com.nanometer.smartlab.entity.EmailStatus">
-    insert into ope_email_status(id, order_code, apply_code, reagent_id , num, apply_user_id, status, create_time, update_time)
-    values (#{id}, #{orderCode}, #{applyCode}, #{reagentId}, #{num}, #{applyUserId}, #{status}, now(), now())
+  <insert id="insertEmailStatus" parameterType="com.nanometer.smartlab.entity.EmailStatus" useGeneratedKeys = "true" keyProperty = "id">
+    insert into ope_email_status(order_code, apply_code, reagent_id , num, apply_user_id, status, create_time, update_time)
+    values (#{orderCode}, #{applyCode}, #{reagentId}, #{num}, #{applyUserId}, #{status}, now(), now())
   </insert>
 
   <update id="updateEmailStatus" parameterType="com.nanometer.smartlab.entity.EmailStatus">
diff --git a/src/main/java/com/nanometer/smartlab/dao/EncodeReplaceDictMapper.xml b/src/main/java/com/nanometer/smartlab/dao/EncodeReplaceDictMapper.xml
index 93e6b96..9399194 100644
--- a/src/main/java/com/nanometer/smartlab/dao/EncodeReplaceDictMapper.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/EncodeReplaceDictMapper.xml
@@ -91,12 +91,12 @@
     update  sys_encode_replace_dict set  valid_flag = 0
     where id = #{id,jdbcType=BIGINT}
   </update>
-  <insert id="insert" parameterType="com.nanometer.smartlab.entity.EncodeReplaceDict" >
+  <insert id="insert" parameterType="com.nanometer.smartlab.entity.EncodeReplaceDict" useGeneratedKeys = "true" keyProperty = "id">
     <!--          -->
-    insert into sys_encode_replace_dict (id, type, number, 
+    insert into sys_encode_replace_dict (type, number,
       info, abbreviation, creator, 
       update_time, valid_flag)
-    values (#{id,jdbcType=BIGINT}, #{type}, #{number,jdbcType=VARCHAR},
+    values (#{type}, #{number,jdbcType=VARCHAR},
       #{info,jdbcType=VARCHAR}, #{abbreviation,jdbcType=VARCHAR}, #{creator,jdbcType=VARCHAR}, 
       #{updateTime,jdbcType=TIMESTAMP}, 1)
   </insert>
@@ -104,9 +104,6 @@
     <!--          -->
     insert into sys_encode_replace_dict
     <trim prefix="(" suffix=")" suffixOverrides="," >
-      <if test="id != null" >
-        id,
-      </if>
       <if test="type != null" >
         type,
       </if>
@@ -130,9 +127,6 @@
       </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides="," >
-      <if test="id != null" >
-        #{id,jdbcType=BIGINT},
-      </if>
       <if test="type != null" >
         #{type},
       </if>
diff --git a/src/main/java/com/nanometer/smartlab/dao/HazardousWasteMapper.xml b/src/main/java/com/nanometer/smartlab/dao/HazardousWasteMapper.xml
index b5a4509..afe6602 100644
--- a/src/main/java/com/nanometer/smartlab/dao/HazardousWasteMapper.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/HazardousWasteMapper.xml
@@ -10,7 +10,7 @@
     <result column="solid" jdbcType="DECIMAL" property="solid" />
     <result column="medical" jdbcType="DECIMAL" property="medical" />
     <result column="apply_person" jdbcType="VARCHAR" property="applyPerson" />
-    <result column="project" jdbcType="VARCHAR" property="project" />
+    <result column="project_id" property="projectId" />
     <result column="department" jdbcType="VARCHAR" property="department" />
     <result column="unit" jdbcType="VARCHAR" property="unit" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
@@ -19,10 +19,13 @@
     <result column="creator" jdbcType="VARCHAR" property="creator" />
     <result column="updator" jdbcType="VARCHAR" property="updator" />
     <result column="updatetime" jdbcType="TIMESTAMP" property="updatetime" />
+    <result column="project_name" property="projectName" />
+    <result column="apply_person_name" property="applyPersonName" />
+    <result column="unit_name" property="unitName" />
   </resultMap>
   <sql id="Base_Column_List">
     <!--          -->
-    id, acid, alkali, organic, solid, medical, apply_person, project, department, unit,
+    id, acid, alkali, organic, solid, medical, apply_person, project_id, department, unit,
     create_time, tid, status, creator, updator, updatetime
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
@@ -37,26 +40,22 @@
     delete from sys_hazardous_waste
     where id = #{id,jdbcType=BIGINT}
   </delete>
-  <insert id="insert" parameterType="com.nanometer.smartlab.entity.HazardousWaste">
+  <insert id="insert" parameterType="com.nanometer.smartlab.entity.HazardousWaste" useGeneratedKeys = "true" keyProperty = "id">
     <!--          -->
-    insert into sys_hazardous_waste (id, acid, alkali, organic,
+    insert into sys_hazardous_waste ( acid, alkali, organic,
       solid, medical, apply_person,
-      project, department, unit,
-      create_time, tid, status,
-      creator,updator, updatetime)
-    values (#{id,jdbcType=BIGINT}, #{acid,jdbcType=DECIMAL}, #{alkali,jdbcType=DECIMAL}, #{organic,jdbcType=DECIMAL},
-      #{solid,jdbcType=DECIMAL}, #{medical,jdbcType=DECIMAL}, #{applyPerson,jdbcType=VARCHAR},
-      #{project,jdbcType=VARCHAR}, #{department,jdbcType=VARCHAR}, #{unit,jdbcType=VARCHAR},
-      #{createTime,jdbcType=TIMESTAMP}, #{tid,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR},
-      #{creator,jdbcType=VARCHAR},#{updator,jdbcType=VARCHAR},#{updatetime,jdbcType=TIMESTAMP})
+      project_id, department, unit,tid, status,
+      creator,updator)
+    values (#{acid,jdbcType=DECIMAL}, #{alkali,jdbcType=DECIMAL}, #{organic,jdbcType=DECIMAL},
+      #{solid,jdbcType=DECIMAL}, #{medical,jdbcType=DECIMAL}, #{applyPerson},
+      #{projectId}, #{department,jdbcType=VARCHAR}, #{unit,jdbcType=VARCHAR},
+    #{tid,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR},
+      #{creator,jdbcType=VARCHAR},#{updator,jdbcType=VARCHAR})
   </insert>
-  <insert id="insertSelective" parameterType="com.nanometer.smartlab.entity.HazardousWaste">
+  <insert id="insertSelective" parameterType="com.nanometer.smartlab.entity.HazardousWaste" useGeneratedKeys = "true" keyProperty = "id">
     <!--          -->
     insert into sys_hazardous_waste
     <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        id,
-      </if>
       <if test="acid != null">
         acid,
       </if>
@@ -75,8 +74,8 @@
       <if test="applyPerson != null">
         apply_person,
       </if>
-      <if test="project != null">
-        project,
+      <if test="projectId != null">
+        project_id,
       </if>
       <if test="department != null">
         department,
@@ -104,9 +103,6 @@
       </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        #{id,jdbcType=BIGINT},
-      </if>
       <if test="acid != null">
         #{acid,jdbcType=DECIMAL},
       </if>
@@ -125,8 +121,8 @@
       <if test="applyPerson != null">
         #{applyPerson,jdbcType=VARCHAR},
       </if>
-      <if test="project != null">
-        #{project,jdbcType=VARCHAR},
+      <if test="projectId != null">
+        #{projectId},
       </if>
       <if test="department != null">
         #{department,jdbcType=VARCHAR},
@@ -176,8 +172,8 @@
       <if test="applyPerson != null">
         apply_person = #{applyPerson,jdbcType=VARCHAR},
       </if>
-      <if test="project != null">
-        project = #{project,jdbcType=VARCHAR},
+      <if test="projectId != null">
+        project_id = #{projectId},
       </if>
       <if test="department != null">
         department = #{department,jdbcType=VARCHAR},
@@ -215,7 +211,7 @@
       solid = #{solid,jdbcType=DECIMAL},
       medical = #{medical,jdbcType=DECIMAL},
       apply_person = #{applyPerson,jdbcType=VARCHAR},
-      project = #{project,jdbcType=VARCHAR},
+      project_id = #{projectId},
       department = #{department,jdbcType=VARCHAR},
       unit = #{unit,jdbcType=VARCHAR},
       create_time = #{createTime,jdbcType=TIMESTAMP},
@@ -270,30 +266,34 @@
   <select id="selectAll" parameterType="java.util.Map" resultMap="BaseResultMap">
     <!--          -->
     select
-    <include refid="Base_Column_List" />
-    from sys_hazardous_waste
+    hw.id, hw.acid, hw.alkali, hw.organic, hw.solid, hw.medical, hw.apply_person, hw.project_id, hw.department, hw.unit,
+    hw.create_time, hw.tid, hw.status, hw.creator, hw.updator, hw.updatetime,sp.project_name,su.name as apply_person_name,bm.meta_value as unit_name
+    from sys_hazardous_waste hw
+    left join sys_project sp on sp.id=hw.project_id
+    left join sys_user su on su.id=hw.apply_person
+    left join base_meta bm on bm.id=hw.unit
     <where>
       1 = 1
       <if test="startTime != null and startTime != ''">
-        and create_time &gt;= #{startTime}
+        and hw.create_time &gt;= #{startTime}
       </if>
       <if test="endTime != null and endTime != ''">
-        and create_time &lt;= #{endTime}
+        and hw.create_time &lt;= #{endTime}
       </if>
       <if test="status != null and status != ''">
-        and status = #{status}
+        and hw.status = #{status}
       </if>
       <if test="applyPerson != null and applyPerson != ''">
-        and apply_person = #{applyPerson}
+        and hw.apply_person = #{applyPerson}
       </if>
-      <if test="project != null and project != ''">
-        and project = #{project}
+      <if test="projectId != null and projectId != ''">
+        and hw.project_id = #{projectId}
       </if>
       <if test="department != null and department != ''">
-        and department = #{department}
+        and hw.department = #{department}
       </if>
       <if test="tid != null and tid != ''">
-        and tid = #{tid}
+        and hw.tid = #{tid}
       </if>
     </where>
     order by create_time desc
@@ -320,8 +320,8 @@
       <if test="applyPerson != null and applyPerson != ''">
         and apply_person = #{applyPerson}
       </if>
-      <if test="project != null and project != ''">
-        and project = #{project}
+      <if test="projectId != null and projectId != ''">
+        and project_id = #{projectId}
       </if>
       <if test="department != null and department != ''">
         and department = #{department}
@@ -333,7 +333,7 @@
   </select>
   <select id="selectExportList" resultType="java.util.Map">
     select
-    id, acid, alkali, organic, solid, medical, apply_person as applyPerson, project, department, unit,
+    id, acid, alkali, organic, solid, medical, apply_person as applyPerson, project_id, department, unit,
     create_time as createTime, tid, status, creator
     from sys_hazardous_waste
     <where>
@@ -350,8 +350,8 @@
       <if test="applyPerson != null and applyPerson != ''">
         and apply_person = #{applyPerson}
       </if>
-      <if test="project != null and project != ''">
-        and project = #{project}
+      <if test="projectId != null and projectId != ''">
+        and project_id = #{projectId}
       </if>
       <if test="department != null and department != ''">
         and department = #{department}
@@ -380,20 +380,20 @@
       <if test="applyPerson != null and applyPerson != ''">
         and apply_person = #{applyPerson}
       </if>
-      <if test="project != null and project != ''">
-        and project = #{project}
+      <if test="projectId != null and projectId != ''">
+        and project_id = #{projectId}
       </if>
       <if test="department != null and department != ''">
         and department = #{department}
       </if>
-      group by project,department,unit
+      group by project_id,department,unit
     </where>
     ) shw
   </select>
   <select id="selectStatistics" resultType="com.nanometer.smartlab.entity.HazardousWaste">
     select
     id, sum(acid) as acid,sum(alkali) as alkali, sum(organic) as organic,sum(solid) as solid,sum(medical) as medical,
-    apply_person as applyPerson, project, department, unit,create_time as createTime, tid, status, creator
+    apply_person as applyPerson, project_id, department, unit,create_time as createTime, tid, status, creator
     from sys_hazardous_waste
     <where>
       1 = 1
@@ -409,14 +409,14 @@
       <if test="applyPerson != null and applyPerson != ''">
         and apply_person = #{applyPerson}
       </if>
-      <if test="project != null and project != ''">
-        and project = #{project}
+      <if test="projectId != null and projectId != ''">
+        and project_id = #{projectId}
       </if>
       <if test="department != null and department != ''">
         and department = #{department}
       </if>
     </where>
-    group by project,department,unit
+    group by project_id,department,unit
     order by create_time desc
     <if test="first != null and pageSize != null">
       limit #{first},#{pageSize}
@@ -425,7 +425,7 @@
   <select id="selectStatisticsExportList" resultType="java.util.Map">
     select
     id, sum(acid) as acid,sum(alkali) as alkali, sum(organic) as organic,sum(solid) as solid,sum(medical) as medical,
-    apply_person as applyPerson, project, department, unit,create_time as createTime, tid, status, creator
+    apply_person as applyPerson, project_id, department, unit,create_time as createTime, tid, status, creator
     from sys_hazardous_waste
     <where>
       1 = 1
@@ -441,14 +441,14 @@
       <if test="applyPerson != null and applyPerson != ''">
         and apply_person = #{applyPerson}
       </if>
-      <if test="project != null and project != ''">
-        and project = #{project}
+      <if test="projectId != null and projectId != ''">
+        and project_id = #{projectId}
       </if>
       <if test="department != null and department != ''">
         and department = #{department}
       </if>
     </where>
-    group by project,department,unit
+    group by project_id,department,unit
     order by create_time desc
   </select>
   <select id="selectByTid" resultType="com.nanometer.smartlab.entity.HazardousWaste">
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java
index 3503bfc..00d48e9 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.java
@@ -1,9 +1,6 @@
 package com.nanometer.smartlab.dao;
 
-import com.nanometer.smartlab.entity.OpeApply;
-import com.nanometer.smartlab.entity.OpeApplyReserve;
-import com.nanometer.smartlab.entity.OpeOrder;
-import com.nanometer.smartlab.entity.OpeWarehouseReserve;
+import com.nanometer.smartlab.entity.*;
 
 import org.apache.ibatis.annotations.Param;
 import org.springframework.dao.DataAccessException;
@@ -20,23 +17,25 @@
     public int updateFirst2(Map params) throws DataAccessException;
     public int updateOpeApplyProject(Map params) throws DataAccessException;
 
-    public OpeApply getOpeApply(String id) throws DataAccessException;
+    public OpeApply getOpeApply(Long id) throws DataAccessException;
     public List<OpeApply> getOpeApplyList(Map params) throws DataAccessException;
     public int getOpeApplyTotalCount(Map params) throws DataAccessException;
 
     public void insertOpeApply(OpeApply opeApply) throws DataAccessException;
-    public void insertOpeApplyList(List<OpeApply> opeApplyList) throws DataAccessException;
+    public int insertOpeApplyList(@Param("opeApplyList") List<OpeApply> opeApplyList) throws DataAccessException;
     public int updateOpeApply(OpeApply opeApply) throws DataAccessException;
     public int updateOpeApplyStatus(Map params) throws DataAccessException;
+
+    public int updateOpeApplyStatusById(@Param("id") Long id,@Param("status") Integer status);
     public int updateOpeApplyAdmin(Map params) throws DataAccessException;
     public int updateOpeApplyAdmin2(Map params) throws DataAccessException;
-    public int deleteOpeApply(List<String> ids) throws DataAccessException;
+    public int deleteOpeApply(List<Long> ids) throws DataAccessException;
 
     public int updaetOpeApplyPrice(Map params) throws DataAccessException;
     public int updaetOpeApplyStockFlag(Map params) throws DataAccessException;
     public int cancelApply(Map params) throws DataAccessException;
 
-    OpeApply selectOpeApplyByPrimaryKey(String id);
+    OpeApply selectOpeApplyByPrimaryKey(Long id);
 
     public int updateOpeApplyUsed(OpeApplyReserve opeApplyReserve) throws DataAccessException;
 
@@ -50,20 +49,50 @@
     @SuppressWarnings("rawtypes")
     int getOpeApplyReserveTotalCountFor(Map params) throws DataAccessException;
 
-    List<OpeApply> selectByReId(String id);
+    List<OpeApply> selectByReId(Long id);
     public int updateByReId(Map params);
 
-    OpeApplyReserve getOpeApplyDetail(String id);
+    OpeApplyReserve getOpeApplyDetail(Long id);
 
     void updateOpeApplyInfo(Map params);
 
     void insertList(List<OpeApply> opeApplyList);
 
-    OpeApplyReserve getOpeApplyReserveListByNameForRowData(@Param("id") String rowKey);
+    OpeApplyReserve getOpeApplyReserveListByNameForRowData(@Param("id") Long rowKey);
 
     List<Map> getApplyControlInfo();
 
     int getOpeApplySupplerRequireMngTotalCount(Map<String, Object> params);
 
     List<OpeApply> getOpeApplySupplerRequireMngList(Map<String, Object> params);
+
+    List<OpeApply> getOpeApplyByOrderId(Long orderId);
+
+    /**
+     * 更具申请单id获取试剂信息
+     * @param applyId
+     * @return
+     */
+    SysReagent getReagentByApplyId(Long applyId);
+
+    /**
+     * 获取数量,关联订单
+     * @param params
+     * @return
+     */
+    int getOpeApplyCountWithOrder(Map<String, Object> params);
+
+    /**
+     * 获取列表,关联订单
+     * @param params
+     * @return
+     */
+    List<OpeApply> getOpeApplyListWithOrder(Map<String, Object> params);
+
+    /**
+     * 获取到货数量
+     * @param applyId
+     * @return
+     */
+    int getArrivalNumById(Long applyId);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
index 5f262f3..4d09ba4 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeApplyDao.xml
@@ -4,13 +4,14 @@
   <resultMap id="OpeApply" type="com.nanometer.smartlab.entity.OpeApply">
     <id property="id" column="id"/>
       <result property="firstUser" column="first_user"></result>
-      <result property="firName" column="firName"></result>
-      <result property="secondUserName" column="secondUserName"></result>
+      <result property="reagentId" column="reagent_id"></result>
+      <result property="firName" column="fir_name"></result>
+      <result property="secondUserName" column="second_user_name"></result>
     <result property="applyCode" column="apply_code"></result>
     <result property="num" column="num"></result>
     <result property="deadline" column="deadline"></result>
     <result property="applyUserId" column="apply_user_id"></result>
-    <result property="objective" column="objective"></result>
+    <result property="projectId" column="project_id"></result>
     <result property="status" column="status" typeHandler="com.nanometer.smartlab.entity.handler.ApplyStatusHandler"></result>
     <result property="createTime" column="create_time"></result>
     <result property="updateTime" column="update_time"></result>
@@ -18,45 +19,49 @@
     <result property="approveUserId" column="approve_user_id"></result>
     <result property="beforeApproveUserId" column="before_approve_user_id"></result>
     <result property="memo" column="memo"></result>
-    <result property="applyUserName" column="applyUserName"></result>
-    <result property="applyUserProject" column="applyUserProject"></result>
-    <result property="applyUserDepartment" column="applyUserDepartment"></result>
-    <result property="approveUserName" column="approveUserName"></result>
+    <result property="applyUserName" column="apply_user_name"></result>
+    <result property="applyUserProject" column="apply_user_project"></result>
+    <result property="applyUserDepartment" column="apply_user_department"></result>
+    <result property="approveUserName" column="approve_user_name"></result>
     <result property="startReagentCode" column="start_reagent_code"></result>
     <result property="endReagentCode" column="end_reagent_code"></result>
     <result property="arrivalNum" column="arrival_num"></result>
       <result property="articleNumber" column="article_number"></result>
       <result property="houseId" column="house_id"></result>
       <result property="containerId" column="container_id"></result>
-      <result property="placeId" column="place"></result>
+      <result property="place" column="place"></result>
       <result property="applyGoal" column="apply_goal"></result>
       <result property="applyPrice" column="apply_price"></result>
       <result property="stockFlag" column="stock_flag"></result>
     <association property="reagent" javaType="com.nanometer.smartlab.entity.SysReagent">
       <id property="id" column="reagent_id"></id>
-      <result property="name" column="reagentName"></result>
-      <result property="cas" column="reagentCas"></result>
-      <result property="reagentType" column="reagentType"></result>
-      <result property="reagentCharacter" column="reagentCharacter"></result>
-      <result property="supplierId" column="reagentSupplierId"></result>
-      <result property="reagentFormat" column="reagentFormat"></result>
-      <result property="mainMetering" column="reagentMainMetering"></result>
-      <result property="reagentUnit" column="reagentUnit"></result>
-      <result property="price" column="reagentPrice"></result>
-      <result property="perBox" column="reagentPerBox"></result>
-      <result property="memo" column="reagentMemo"></result>
-      <result property="validFlag" column="reagentValidFlag"></result>
-      <result property="createTime" column="reagentCreateTime"></result>
-      <result property="updateTime" column="reagentUpdateTime"></result>
-      <result property="supplierName" column="supplierName"></result>
-      <result property="productSn" column="reagentProductSn"></result>
-      <result property="controlProducts" column="controlProducts"></result>
-      <result property="dangerousFlag" column="reagentDangerousFlag" typeHandler="com.nanometer.smartlab.entity.handler.DangerousFlagHandler"></result>
-      <result property="productHome" column="productHome"></result>
-      <result property="productHomeName" column="productHomeName"></result>
+      <result property="name" column="reagent_name"></result>
+      <result property="cas" column="reagent_cas"></result>
+      <result property="reagentType" column="reagent_type"></result>
+      <result property="reagentCharacter" column="reagent_character"></result>
+      <result property="supplierId" column="reagent_supplier_id"></result>
+      <result property="reagentFormat" column="reagent_format"></result>
+      <result property="mainMetering" column="reagent_main_metering"></result>
+      <result property="reagentUnit" column="reagent_unit"></result>
+      <result property="price" column="reagent_price"></result>
+      <result property="perBox" column="reagent_per_box"></result>
+      <result property="memo" column="reagent_memo"></result>
+      <result property="validFlag" column="reagent_valid_flag"></result>
+      <result property="createTime" column="reagent_create_time"></result>
+      <result property="updateTime" column="reagent_update_time"></result>
+      <result property="supplierName" column="supplier_name"></result>
+      <result property="productSn" column="reagent_product_sn"></result>
+      <result property="controlProducts" column="control_products"></result>
+      <result property="dangerousFlag" column="reagent_dangerous_flag" typeHandler="com.nanometer.smartlab.entity.handler.DangerousFlagHandler"></result>
+      <result property="productHome" column="product_home"></result>
       <result property="type" column="type"></result>
-      <result property="supplierFlag" column="supplierFlag"></result>
+      <result property="supplierFlag" column="supplier_flag"></result>
     </association>
+      <association property="order" javaType="com.nanometer.smartlab.entity.OpeOrder">
+          <id property="id" column="order_id"></id>
+          <result property="orderName" column="order_name"></result>
+          <result property="orderCode" column="order_code"></result>
+      </association>
   </resultMap>
 
    <resultMap id="OpeApplyReserve" type="com.nanometer.smartlab.entity.OpeApplyReserve">
@@ -69,31 +74,32 @@
     <result property="applyUserId" column="apply_user_id"></result>
     <result property="applyUser" column="apply_user"></result>
     <result property="arrivalTime" column="arrival_time"></result>
-    <result property="articleNumber" column="articleNumber"></result>
-    <result property="projectManage" column="projectManage"/>
-    <result property="project" column="project"/>
+    <result property="articleNumber" column="article_number"></result>
+    <result property="projectManage" column="project_manage"/>
+    <result property="projectName" column="project_name"/>
+   <result property="startReagentCode" column="start_reagent_code"></result>
+   <result property="endReagentCode" column="end_reagent_code"></result>
     <association property="reagent" javaType="com.nanometer.smartlab.entity.SysReagent">
-      <id property="id" column="reagent_id"></id>
-      <result property="name" column="reagentName"></result>
-      <result property="cas" column="reagentCas"></result>
-      <result property="reagentType" column="reagentType"></result>
-      <result property="reagentCharacter" column="reagentCharacter"></result>
-      <result property="supplierId" column="reagentSupplierId"></result>
-      <result property="reagentFormat" column="reagentFormat"></result>
-      <result property="mainMetering" column="reagentMainMetering"></result>
-      <result property="reagentUnit" column="reagentUnit"></result>
-      <result property="price" column="reagentPrice"></result>
-      <result property="perBox" column="reagentPerBox"></result>
-      <result property="memo" column="reagentMemo"></result>
-      <result property="validFlag" column="reagentValidFlag"></result>
-      <result property="createTime" column="reagentCreateTime"></result>
-      <result property="updateTime" column="reagentUpdateTime"></result>
-      <result property="supplierName" column="supplierName"></result>
-      <result property="productSn" column="reagentProductSn"></result>
-      <result property="controlProducts" column="controlProducts"></result>
-      <result property="dangerousFlag" column="reagentDangerousFlag" typeHandler="com.nanometer.smartlab.entity.handler.DangerousFlagHandler"></result>
-      <result property="productHome" column="productHome"></result>
-      <result property="productHomeName" column="productHomeName"></result>
+        <id property="id" column="reagent_id"></id>
+        <result property="name" column="reagent_name"></result>
+        <result property="cas" column="reagent_cas"></result>
+        <result property="reagentType" column="reagent_type"></result>
+        <result property="reagentCharacter" column="reagent_character"></result>
+        <result property="supplierId" column="reagent_supplier_id"></result>
+        <result property="reagentFormat" column="reagent_format"></result>
+        <result property="mainMetering" column="reagent_main_metering"></result>
+        <result property="reagentUnit" column="reagent_unit"></result>
+        <result property="price" column="reagent_price"></result>
+        <result property="perBox" column="reagent_per_box"></result>
+        <result property="memo" column="reagent_memo"></result>
+        <result property="validFlag" column="reagent_valid_flag"></result>
+        <result property="createTime" column="reagent_create_time"></result>
+        <result property="updateTime" column="reagent_update_time"></result>
+        <result property="supplierName" column="supplier_name"></result>
+        <result property="productSn" column="reagent_product_sn"></result>
+        <result property="controlProducts" column="control_products"></result>
+        <result property="dangerousFlag" column="reagent_dangerous_flag" typeHandler="com.nanometer.smartlab.entity.handler.DangerousFlagHandler"></result>
+        <result property="productHome" column="product_home"></result>
     </association>
   </resultMap>
 
@@ -139,19 +145,21 @@
         </if>
 	</sql>
 
-  <select id="getOpeApply" parameterType="java.lang.String"  resultMap="OpeApply" >
+  <select id="getOpeApply"  resultMap="OpeApply" >
     select oa.*,sys.name as secondUserName,
-    sr.name as reagentName, sr.cas as reagentCas, sr.reagent_type as reagentType, sr.reagent_character as reagentCharacter, sr.supplier_id as reagentSupplierId, sr.dangerous_flag as reagentDangerousFlag,
-    sr.reagent_format as reagentFormat, sr.main_metering as reagentMainMetering, sr.reagent_unit as reagentUnit, sr.price as reagentPrice, sr.per_box as reagentPerBox,
-    sr.memo as reagentMemo, sr.valid_flag as reagentValidFlag, sr.create_time as reagentCreateTime, sr.update_time as reagentUpdateTime,sr.control_products as controlProducts,sr.product_sn as reagentProductSn,sr.product_home as productHome,
-    ss.name as supplierName,
-    su.name as applyUserName,
-    su.project as applyUserProject,
-    bm2.meta_value as applyUserDepartment,
+    sr.name as reagent_name, sr.cas as reagent_cas ,sr.reagent_type as reagent_type, sr.reagent_character as reagent_character,
+    sr.supplier_id as reagent_supplier_id, sr.dangerous_flag as reagent_dangerous_flag,
+    sr.reagent_format as reagent_format, sr.main_metering as reagent_main_metering, sr.reagent_unit as reagent_unit,
+    sr.price as reagent_price, sr.per_box as reagent_per_box,sr.memo as reagent_memo, sr.valid_flag as reagent_valid_flag,
+    sr.create_time as reagent_create_time, sr.update_time as reagent_update_time,sr.control_products as control_products,
+    sr.product_sn as reagent_product_sn,sr.product_home as product_home,
+    ss.name as supplier_name,
+    su.name as apply_user_name,
+    sp.project_name as apply_user_project,
+    bm2.meta_value as apply_user_department,
     fir.name as firName,
-    suApprove.name as approveUserName,
-    bm.meta_value as productHomeName,
-    ss.valid_flag  as supplierFlag,
+    suApprove.name as approve_user_name,
+    ss.valid_flag  as supplier_flag,
     sr.type as type
     from ope_apply as oa
     left join sys_reagent sr on oa.reagent_id = sr.id
@@ -160,25 +168,26 @@
     left join sys_user as suApprove on oa.approve_user_id = suApprove.id
     left join sys_user as sys on sys.id=oa.before_approve_user_id
     left join sys_user as fir on fir.id=oa.first_user
-    left join base_meta as bm on sr.product_home = bm.id
      left join base_meta as bm2 on bm2.id = su.department
+    left join sys_project sp on sp.id=su.project_id=sp.id
     where oa.id = #{id} and oa.valid_flag = 1
   </select>
 
   <select id="getOpeApplyList" parameterType="java.util.Map" resultMap="OpeApply">
-    select oa.*,sys.name as secondUserName,
-    sr.name as reagentName,sr.price as reagentPrice ,sr.cas as reagentCas, sr.reagent_type as reagentType, sr.reagent_character as reagentCharacter, sr.supplier_id as reagentSupplierId,
-    sr.reagent_format as reagentFormat, sr.main_metering as reagentMainMetering, sr.reagent_unit as reagentUnit, sr.per_box as reagentPerBox,
-    sr.memo as reagentMemo, sr.valid_flag as reagentValidFlag, sr.create_time as reagentCreateTime, sr.update_time as reagentUpdateTime, sr.product_sn as reagentProductSn,
-    sr.dangerous_flag as reagentDangerousFlag,sr.control_products as controlProducts,sr.product_home as productHome,
-    ss.name as supplierName,
-    su.name as applyUserName,
-    su.project as applyUserProject,
-    bm2.meta_value as applyUserDepartment,
-    suApprove.name as approveUserName,
-    bm.meta_value as productHomeName,
-    fir.name as firName,
-    ss.valid_flag  as supplierFlag,
+    select oa.*,sys.name as second_user_name,
+    sr.name as reagent_name,sr.price as reagent_price ,sr.cas as reagent_cas, sr.reagent_type as reagent_type,
+    sr.reagent_character as reagent_character, sr.supplier_id as reagent_supplier_id,
+    sr.reagent_format as reagent_format, sr.main_metering as reagent_main_metering, sr.reagent_unit as reagent_unit,
+    sr.per_box as reagent_per_box,sr.memo as reagent_memo, sr.valid_flag as reagent_valid_flag, sr.create_time as reagent_create_time,
+    sr.update_time as reagent_update_time, sr.product_sn as reagent_product_sn,
+    sr.dangerous_flag as reagent_dangerous_flag,sr.control_products as control_products,sr.product_home as product_home,
+    ss.name as supplier_name,
+    su.name as apply_user_name,
+    sp.project_name as apply_user_project,
+    bm2.meta_value as apply_user_department,
+    suApprove.name as approve_user_name,
+    fir.name as fir_name,
+    ss.valid_flag  as supplier_flag,
     sr.type as type
     from ope_apply as oa
     left join sys_reagent sr on oa.reagent_id = sr.id
@@ -187,15 +196,14 @@
     left join sys_user as suApprove on oa.approve_user_id = suApprove.id
     left join sys_user as sys on sys.id=oa.before_approve_user_id
     left join sys_user as fir on fir.id=oa.first_user
-    left join base_meta as bm on sr.product_home = bm.id
-    left join base_meta as bm1 on bm1.id = sr.control_products
     left join base_meta as bm2 on bm2.id = su.department
+    left join sys_project as sp on sp.id=su.project_id
     where oa.valid_flag = 1
     <if test="isShow != null and isShow ==0">
         and (ss.valid_flag = 1 or sr.type = 0)
     </if>
       <if test="controlProduct != null and controlProduct != ''">
-          and bm1.meta_value like concat("%",#{controlProduct},"%")
+          and sr.control_products like concat("%",#{controlProduct},"%")
       </if>
     <include refid="queryWhereSql"/>
     order by oa.create_time desc
@@ -213,39 +221,37 @@
       left join sys_user as suApprove on oa.approve_user_id = suApprove.id
       left join sys_user as sys on sys.id=oa.before_approve_user_id
       left join sys_user as fir on fir.id=oa.first_user
-      left join base_meta as bm on sr.product_home = bm.id
-      left join base_meta as bm1 on bm1.id = sr.control_products
       where oa.valid_flag = 1
       <if test="isShow != null and isShow ==0">
           and (ss.valid_flag = 1 or sr.type = 0)
       </if>
       <if test="controlProduct != null and controlProduct != ''">
-          and bm1.meta_value like concat("%",#{controlProduct},"%")
+          and sr.control_products like concat("%",#{controlProduct},"%")
       </if>
     <include refid="queryWhereSql"/>
   </select>
 
-  <insert id="insertOpeApply" parameterType="com.nanometer.smartlab.entity.OpeApply">
-    insert into ope_apply(id, apply_code, reagent_id, num, deadline, apply_user_id, objective, status, approve_user_id, memo, valid_flag, create_time, update_time)
-    values (#{id}, #{applyCode}, #{reagent.id}, #{num}, #{deadline}, #{applyUserId}, #{objective}, #{status}, #{approveUserId}, #{memo}, 1, now(), now())
+  <insert id="insertOpeApply" parameterType="com.nanometer.smartlab.entity.OpeApply" useGeneratedKeys = "true" keyProperty = "id">
+    insert into ope_apply( apply_code, reagent_id, num, deadline, apply_user_id, project_id, status, approve_user_id, memo, valid_flag, create_time, update_time)
+    values ( #{applyCode}, #{reagent.id}, #{num}, #{deadline}, #{applyUserId}, #{projectId}, #{status}, #{approveUserId}, #{memo}, 1, now(), now())
   </insert>
 
-  <insert id="insertOpeApplyList" parameterType="java.util.List">
+  <insert id="insertOpeApplyList" parameterType="java.util.List" >
       insert into ope_apply
-      (id, apply_code, reagent_id, num, deadline, apply_user_id, objective, status, approve_user_id, memo, valid_flag, create_time, update_time,apply_goal,apply_price,first_user)
+      (apply_code, reagent_id, num, deadline, apply_user_id, project_id, status, approve_user_id, memo, valid_flag, create_time, update_time,apply_goal,apply_price,first_user)
       values
-      <foreach collection="list" item="opeApply" separator=",">
-          (#{opeApply.id}, #{opeApply.applyCode}, #{opeApply.reagent.id}, #{opeApply.num}, #{opeApply.deadline},
-          #{opeApply.applyUserId}, #{opeApply.objective}, #{opeApply.status}, #{opeApply.approveUserId}, #{opeApply.memo}, 1, now(), now(),#{opeApply.applyGoal},#{opeApply.reagent.price},#{opeApply.approveUserId})
+      <foreach collection="opeApplyList" item="opeApply" separator=",">
+          ( #{opeApply.applyCode}, #{opeApply.reagent.id}, #{opeApply.num}, #{opeApply.deadline},
+          #{opeApply.applyUserId}, #{opeApply.projectId}, #{opeApply.status}, #{opeApply.approveUserId}, #{opeApply.memo}, 1, now(), now(),#{opeApply.applyGoal},#{opeApply.reagent.price},#{opeApply.approveUserId})
       </foreach>
   </insert>
-    <insert id="insertList">
+    <insert id="insertList" parameterType="java.util.List" useGeneratedKeys = "true" keyProperty = "id">
         insert into ope_apply
-        (id, apply_code, reagent_id, num, deadline, apply_user_id, objective, status, approve_user_id, memo, valid_flag, create_time, update_time,apply_goal,apply_price,first_user)
+        (apply_code, reagent_id, num, deadline, apply_user_id, project_id, status, approve_user_id, memo, valid_flag, create_time, update_time,apply_goal,apply_price,first_user)
         values
         <foreach collection="list" item="opeApply" separator=",">
-            (#{opeApply.id}, #{opeApply.applyCode}, #{opeApply.reagent.id}, #{opeApply.num}, #{opeApply.deadline},
-            #{opeApply.applyUserId}, #{opeApply.objective}, #{opeApply.status}, #{opeApply.approveUserId}, #{opeApply.memo}, 1, #{opeApply.createTime}, #{opeApply.updateTime},#{opeApply.applyGoal},#{opeApply.reagent.price},#{opeApply.approveUserId})
+            ( #{opeApply.applyCode}, #{opeApply.reagent.id}, #{opeApply.num}, #{opeApply.deadline},
+            #{opeApply.applyUserId}, #{opeApply.projectId}, #{opeApply.status}, #{opeApply.approveUserId}, #{opeApply.memo}, 1, #{opeApply.createTime}, #{opeApply.updateTime},#{opeApply.applyGoal},#{opeApply.reagent.price},#{opeApply.approveUserId})
         </foreach>
     </insert>
 
@@ -256,14 +262,60 @@
         update ope_apply set first_user=before_approve_user_id where id=#{id}
     </update>
   <update id="updateOpeApply" parameterType="com.nanometer.smartlab.entity.OpeApply">
-    update ope_apply set apply_code=#{applyCode}, reagent_id=#{reagent.id}, num=#{num}, deadline=#{deadline}, apply_user_id=#{applyUserId}, objective=#{objective},
-    status=#{status}, approve_user_id=#{approveUserId}, memo=#{memo}, update_time=now(),start_reagent_code=#{startReagentCode},end_reagent_code=#{endReagentCode},
+    update ope_apply
+    <set>
+    <if test="applyCode!=null and applyCode!=''">
+        apply_code=#{applyCode},
+    </if>
+      <if test="reagent!=null and reagent.id!=null">
+    reagent_id=#{reagent.id},
+      </if>
+      <if test="num!=null and num!=''">
+    num=#{num},
+      </if>
+      <if test="deadline!=null">
+    deadline=#{deadline},
+      </if>
+      <if test="applyUserId!=null and applyUserId!=''">
+    apply_user_id=#{applyUserId},
+      </if>
+      <if test="projectId!=null and projectId!=''">
+    project_id=#{projectId},
+      </if>
+      <if test="status!=null">
+    status=#{status},
+      </if>
+      <if test="approveUserId!=null and approveUserId!=''">
+    approve_user_id=#{approveUserId},
+      </if>
+      <if test="memo!=null and memo!=''">
+    memo=#{memo},
+      </if>
+    update_time=now(),
+      <if test="startReagentCode!=null and startReagentCode!=''">
+    start_reagent_code=#{startReagentCode},
+      </if>
+      <if test="endReagentCode!=null and endReagentCode!=''">
+    end_reagent_code=#{endReagentCode},
+      </if>
+      <if test="arrivalNum!=null and arrivalNum!=''">
     arrival_num=#{arrivalNum},
+      </if>
+      <if test="houseId!=null and houseId!=''">
     house_id=#{houseId},
-    place=#{placeId},
+      </if>
+      <if test="place!=null and place!=''">
+    place=#{place},
+      </if>
+      <if test="containerId!=null and containerId!=''">
     container_id=#{containerId},
+      </if>
+      <if test="articleNumber!=null and articleNumber!=''">
     article_number=#{articleNumber}
+      </if>
+    </set>
     where id=#{id}
+
   </update>
 
   <update id="updateOpeApplyStatus" parameterType="java.util.Map" >
@@ -278,8 +330,13 @@
     </foreach>
   </update>
 
+    <update id="updateOpeApplyStatusById" >
+        update ope_apply set status=#{status},update_time=now()
+        where id =#{id}
+    </update>
+
     <update id="updateOpeApplyProject" parameterType="java.util.Map">
-        update ope_apply set objective =#{newObjective} where objective=#{oldObjective}
+        update ope_apply set project_id =#{newObjective} where project_id=#{oldObjective}
     </update>
 
 
@@ -304,7 +361,6 @@
         update ope_apply set before_memo=#{memo}, before_approve_user_id=#{beforeUserId},
         approve_user_id=#{userId}, update_time=now()
         where id =#{id}
-
     </update>
 
 
@@ -327,16 +383,16 @@
 		select oa.id, oa.apply_code,
 		sr.id reagent_id,
 		oa.status,
-		sr.product_sn reagentProductSn,
-		sr.`name` reagentName,
-		bm2.meta_value controlProducts,
-		bm3.meta_value reagentFormat,
-		sr.main_metering reagentMainMetering,
-		sr.price reagentPrice,
-		sr.cas reagentCas,
-		oa.article_number articleNumber,
-		bm4.meta_value reagentCharacter,
-		bm1.meta_value productHome,
+		sr.product_sn reagent_product_sn,
+		sr.`name` reagent_name,
+		sr.control_products,
+		sr.reagent_format,
+		sr.main_metering reagent_main_metering,
+		sr.price reagent_price,
+		sr.cas reagent_cas,
+		oa.article_number article_number,
+		sr.reagentCharacter,
+		sr.product_home,
 		sr.dangerous_flag,
 		oa.num,
 		oa.used,
@@ -348,12 +404,12 @@
 		left JOIN sys_user su on su.id = oa.apply_user_id
 	</sql>
 
-	<sql id="getOpeApplyReserveList_queryJoins2">
-		left join base_meta as bm2 on sr.control_products = bm2.id
-		left join base_meta as bm3 on sr.reagent_format = bm3.id
-		left join base_meta as bm4 on sr.reagent_character = bm4.id
-		left join base_meta as bm1 on sr.product_home = bm1.id
-	</sql>
+<!--	<sql id="getOpeApplyReserveList_queryJoins2">-->
+<!--		left join base_meta as bm2 on sr.control_products = bm2.id-->
+<!--		left join base_meta as bm3 on sr.reagent_format = bm3.id-->
+<!--		left join base_meta as bm4 on sr.reagent_character = bm4.id-->
+<!--		left join base_meta as bm1 on sr.product_home = bm1.id-->
+<!--	</sql>-->
 
 	<sql id="getOpeApplyReserveList_queryWhereSql">
 		<if test="reagentName != null and reagentName != ''">
@@ -393,11 +449,7 @@
         from ope_apply as oa
         LEFT JOIN sys_reagent sr ON sr.id = oa.reagent_id
         LEFT JOIN sys_user su ON su.id = oa.apply_user_id
-        LEFT JOIN base_meta AS bm2 ON sr.control_products = bm2.id
-        LEFT JOIN base_meta AS bm3 ON sr.reagent_format = bm3.id
-        LEFT JOIN base_meta AS bm4 ON sr.reagent_character = bm4.id
-        LEFT JOIN base_meta AS bm1 ON sr.product_home = bm1.id
-        LEFT JOIN sys_project as project on project.project = su.project
+        LEFT JOIN sys_project as project on project.id = su.project_id
         LEFT JOIN sys_user as su1 on su1.id = project.sys_user_id
         where oa.valid_flag = 1 and (
         <choose>
@@ -405,7 +457,7 @@
                 oa.status = 10
             </when>
             <otherwise>
-                oa.status=4 or oa.status=6
+                oa.status=4 or oa.status=6 or oa.status=9
             </otherwise>
         </choose>
         )
@@ -429,7 +481,6 @@
 		<include refid="getOpeApplyReserveList_queryColumns" />
 		from ope_apply as oa
 		<include refid="getOpeApplyReserveList_queryJoins1" />
-		<include refid="getOpeApplyReserveList_queryJoins2" />
 		where oa.valid_flag = 1
 		<include refid="getOpeApplyReserveList_queryWhereSql" />
         GROUP BY oa.id
@@ -445,34 +496,32 @@
         oa.id,
         oa.apply_code,
         sr.id reagent_id,
-        oa. STATUS,
-        sr.product_sn reagentProductSn,
-        sr.`name` reagentName,
-        bm2.meta_value controlProducts,
-        bm3.meta_value reagentFormat,
-        sr.main_metering reagentMainMetering,
-        sr.price reagentPrice,
-        sr.cas reagentCas,
-        oa.article_number articleNumber,
-        bm4.meta_value reagentCharacter,
-        bm1.meta_value productHome,
+        oa.status,
+        sr.product_sn reagent_product_sn,
+        sr.`name` reagent_name,
+        sr.main_metering reagent_main_metering,
+        sr.price reagent_price,
+        sr.cas reagent_cas,
+        sr.reagent_unit,
+        oa.article_number article_number,
         sr.dangerous_flag,
+        sr.control_products control_products,
+        sr.reagent_character,
+        sr.reagent_format,
+        sr.product_home,
         oa.num,
-        oa.apply_user_id apply_user,
+        su.name apply_user,
+        oa.apply_user_id,
         oa.used,
-        su.`name` apply_user_id,
-        su.project,
-        su1.`name` as projectManage,
+        su.`name` apply_user_name,
+        project.project_name as project_name,
+        su1.`name` as project_manage,
         oa.arrival_time
         FROM
         ope_apply AS oa
         LEFT JOIN sys_reagent sr ON sr.id = oa.reagent_id
         LEFT JOIN sys_user su ON su.id = oa.apply_user_id
-        LEFT JOIN base_meta AS bm2 ON sr.control_products = bm2.id
-        LEFT JOIN base_meta AS bm3 ON sr.reagent_format = bm3.id
-        LEFT JOIN base_meta AS bm4 ON sr.reagent_character = bm4.id
-        LEFT JOIN base_meta AS bm1 ON sr.product_home = bm1.id
-        LEFT JOIN sys_project as project on project.project = su.project
+        LEFT JOIN sys_project as project on project.id = su.project_id
         LEFT JOIN sys_user as su1 on su1.id = project.sys_user_id
         where oa.valid_flag = 1 and (
         <choose>
@@ -480,7 +529,7 @@
                 oa.status = 10
             </when>
             <otherwise>
-                oa.status=4 or oa.status=6
+                oa.status=4 or oa.status=6 or oa.status=9
             </otherwise>
         </choose>
         )
@@ -534,28 +583,27 @@
         select oa.id, oa.apply_code,
 		sr.id reagent_id,
 		oa.status,
-		sr.product_sn reagentProductSn,
-		sr.`name` reagentName,
-		bm2.meta_value controlProducts,
-		bm3.meta_value reagentFormat,
-		sr.main_metering reagentMainMetering,
-		sr.price reagentPrice,
-		sr.cas reagentCas,
-		oa.article_number articleNumber,
-		bm4.meta_value reagentCharacter,
-		bm1.meta_value productHome,
+		sr.product_sn reagent_product_sn,
+		sr.`name` reagent_name,
+		sr.control_products,
+		sr.reagent_format,
+		sr.main_metering reagent_main_metering,
+		sr.price reagent_price,
+		sr.cas reagent_cas,
+		oa.article_number article_number,
+		sr.reagent_character,
+		sr.product_home,
 		sr.dangerous_flag,
 		oa.num,
 		oa.used,
 		oa.arrival_num,
-		su.id apply_user_id
+		su.id apply_user_id,
+        CONCAT(rc.code_prex,LPAD(rc.start_code,4,'0')) as start_reagent_code,
+        CONCAT(rc.code_prex,LPAD(rc.end_code,4,'0')) as end_reagent_code
         from ope_apply as oa
         left JOIN sys_reagent sr on sr.id = oa.reagent_id
         left JOIN sys_user su on su.id = oa.apply_user_id
-        left join base_meta as bm2 on sr.control_products = bm2.id
-        left join base_meta as bm3 on sr.reagent_format = bm3.id
-        left join base_meta as bm4 on sr.reagent_character = bm4.id
-        left join base_meta as bm1 on sr.product_home = bm1.id
+        left join ope_reagent_code  rc on rc.apply_id=oa.id
         where oa.valid_flag = 1
         and oa.id = #{0}
     </select>
@@ -566,33 +614,30 @@
         oa.apply_code,
         sr.id reagent_id,
         oa. STATUS,
-        sr.product_sn reagentProductSn,
-        sr.`name` reagentName,
-        bm2.meta_value controlProducts,
-        bm3.meta_value reagentFormat,
-        sr.main_metering reagentMainMetering,
-        sr.price reagentPrice,
-        sr.cas reagentCas,
-        oa.article_number articleNumber,
-        bm4.meta_value reagentCharacter,
-        bm1.meta_value productHome,
+        sr.product_sn reagent_product_sn,
+        sr.`name` reagent_name,
+        sr.control_products,
+        sr.reagent_format,
+        sr.reagent_unit,
+        sr.main_metering reagent_main_metering,
+        sr.price reagent_price,
+        sr.cas reagent_cas,
+        oa.article_number article_number,
+        sr.reagent_character,
+        sr.product_home,
         sr.dangerous_flag,
         oa.num,
-        oa.apply_user_id apply_user,
+        oa.apply_user_id apply_user_id,
         oa.used,
-        su.`name` apply_user_id,
-        su.project,
-        su1.`name` as projectManage,
+        su.`name` apply_user,
+        project.project_name apply_user_project,
+        su1.`name` as project_manage,
         oa.arrival_time
         FROM
         ope_apply AS oa
         LEFT JOIN sys_reagent sr ON sr.id = oa.reagent_id
         LEFT JOIN sys_user su ON su.id = oa.apply_user_id
-        LEFT JOIN base_meta AS bm2 ON sr.control_products = bm2.id
-        LEFT JOIN base_meta AS bm3 ON sr.reagent_format = bm3.id
-        LEFT JOIN base_meta AS bm4 ON sr.reagent_character = bm4.id
-        LEFT JOIN base_meta AS bm1 ON sr.product_home = bm1.id
-        LEFT JOIN sys_project as project on project.project = su.project
+        LEFT JOIN sys_project as project on project.id = su.project_id
         LEFT JOIN sys_user as su1 on su1.id = project.sys_user_id
         where oa.id = #{id}
 
@@ -601,24 +646,22 @@
     <select id="getApplyControlInfo" resultType="java.util.Map">
            	(SELECT sum(oa.num) sum,"易制毒" name from ope_apply oa
 		LEFT JOIN sys_reagent sr on oa.reagent_id = sr.id
-		LEFT JOIN base_meta bm on bm.id = sr.control_products
 		where
 		oa.valid_flag = 1
 		and sr.valid_flag = 1
 		and YEAR(oa.create_time)=YEAR(NOW())
         and oa.status in(2,3,4,6)
 		and
-		meta_value like "%易制毒%") UNION ALL(
+        sr.control_products like "%易制毒%") UNION ALL(
 
 			SELECT sum(oa.num) sum,"易制爆"  name from ope_apply oa
 		LEFT JOIN sys_reagent sr on oa.reagent_id = sr.id
-		LEFT JOIN base_meta bm on bm.id = sr.control_products
 		where
 		oa.valid_flag = 1
 		and sr.valid_flag = 1
 		and YEAR(oa.create_time)=YEAR(NOW())
         and oa.status in(2,3,4,6)
-		and meta_value like "%易制爆%")UNION ALL(
+		and sr.control_products like "%易制爆%")UNION ALL(
 
 		SELECT sum(oa.num) sum,"总数"  name from ope_apply oa
 		LEFT JOIN sys_reagent sr on oa.reagent_id = sr.id
@@ -639,8 +682,6 @@
         left join sys_user as suApprove on oa.approve_user_id = suApprove.id
         left join sys_user as sys on sys.id=oa.before_approve_user_id
         left join sys_user as fir on fir.id=oa.first_user
-        left join base_meta as bm on sr.product_home = bm.id
-        left join base_meta as bm1 on bm1.id = sr.control_products
         where oa.valid_flag = 1
         <if test="isShow != null and isShow ==0">
             and (ss.valid_flag = 1 or sr.type = 0)
@@ -665,16 +706,17 @@
     <select id="getOpeApplySupplerRequireMngList" parameterType="java.util.Map" resultMap="OpeApply">
 
         select oa.*,sys.name as secondUserName,
-        sr.name as reagentName,sr.price as reagentPrice ,sr.cas as reagentCas, sr.reagent_type as reagentType, sr.reagent_character as reagentCharacter, sr.supplier_id as reagentSupplierId,
-        sr.reagent_format as reagentFormat, sr.main_metering as reagentMainMetering, sr.reagent_unit as reagentUnit, sr.per_box as reagentPerBox,
-        sr.memo as reagentMemo, sr.valid_flag as reagentValidFlag, sr.create_time as reagentCreateTime, sr.update_time as reagentUpdateTime, sr.product_sn as reagentProductSn,
-        sr.dangerous_flag as reagentDangerousFlag,sr.control_products as controlProducts,sr.product_home as productHome,
-        ss.name as supplierName,
-        su.name as applyUserName,
-        suApprove.name as approveUserName,
-        bm.meta_value as productHomeName,
-        fir.name as firName,
-        ss.valid_flag  as supplierFlag,
+        sr.name as reagent_name,sr.price as reagent_price ,sr.cas as reagent_cas, sr.reagent_type as reagent_type, sr.reagent_character as reagent_character,
+        sr.supplier_id as reagentSupplierId,sr.reagent_format as reagent_format, sr.main_metering as reagent_main_metering,
+        sr.reagent_unit as reagent_unit, sr.per_box as reagent_per_box,sr.memo as reagent_memo, sr.valid_flag as reagent_valid_flag,
+        sr.create_time as reagent_create_time, sr.update_time as reagent_update_time, sr.product_sn as reagent_product_sn,
+        sr.dangerous_flag as reagent_dangerous_flag,sr.control_products as control_products,sr.product_home as product_home,
+        ss.name as supplier_name,
+        su.name as applyUser_name,
+        suApprove.name as approve_user_name,
+        sr.product_home as apply_user_project,
+        fir.name as fir_name,
+        ss.valid_flag  as supplier_flag,
         sr.type as type
         from ope_apply as oa
         left join sys_reagent sr on oa.reagent_id = sr.id
@@ -683,8 +725,6 @@
         left join sys_user as suApprove on oa.approve_user_id = suApprove.id
         left join sys_user as sys on sys.id=oa.before_approve_user_id
         left join sys_user as fir on fir.id=oa.first_user
-        left join base_meta as bm on sr.product_home = bm.id
-        left join base_meta as bm1 on bm1.id = sr.control_products
         where oa.valid_flag = 1
         <if test="isShow != null and isShow ==0">
             and (ss.valid_flag = 1 or sr.type = 0)
@@ -725,7 +765,84 @@
         <if test="consigneeId!=null" >
             ,consignee_id = #{consigneeId}
         </if>
+        <if test="arrivalNum!=null" >
+            ,arrival_num = #{arrivalNum}
+        </if>
         where valid_flag = 1
         and id = #{applyId}
     </update>
+
+    <select id="getOpeApplyByOrderId" resultMap="OpeApply">
+        select distinct a.id,a.apply_code,a.reagent_id,a.used,a.num,a.arrival_num,a.apply_user_id,a.status,a.project_id,a.deadline,a.approve_user_id,a.apply_price,a.create_time,a.memo,a.article_number,a.place,
+                        CONCAT(c.code_prex,LPAD(c.start_code,4,'0')) as start_reagent_code,CONCAT(c.code_prex,LPAD(c.end_code,4,'0')) as end_reagent_code,
+                        d.name as reagent_name, d.cas as reagent_cas, d.reagent_type as reagent_type, d.reagent_character as reagent_character,
+                        d.supplier_id as reagent_supplier_id,d.product_home as product_home,d.product_sn as reagent_product_sn,
+                        d.reagent_format as reagent_format, d.main_metering as reagent_main_metering, d.reagent_unit as reagent_unit,
+                        d.price as reagent_price, d.per_box as reagent_per_box,d.control_products,
+                        e.name as apply_user_name
+        from ope_apply a
+        left join ope_apply_order b on b.ope_apply_id=a.id
+        left join ope_reagent_code  c on c.apply_id=a.id
+        left join sys_reagent d on a.reagent_id = d.id
+        left join sys_user e on a.apply_user_id = e.id
+        where b.ope_order_id=#{orderId}
+    </select>
+
+
+    <select id="getReagentByApplyId" resultType="com.nanometer.smartlab.entity.SysReagent">
+        select sa.* from sys_reagent sa
+        left join ope_apply oa on oa.reagent_id=sa.id
+        where oa.id=#{applyId}
+    </select>
+
+
+    <select id="getOpeApplyCountWithOrder" resultType="int">
+        select count(1)
+        from ope_apply as oa
+        inner join ope_apply_order ao on ao.ope_apply_id=oa.id
+        inner join ope_order oo on oo.id=ao.ope_order_id
+        <where>
+            oa.valid_flag = 1 and oo.valid_flag=1
+            <if test="applyCode!=null and applyCode!=''">
+                and oa.apply_code=#{applyCode}
+            </if>
+        </where>
+    </select>
+
+    <select id="getOpeApplyListWithOrder" resultMap="OpeApply">
+        select oa.*,
+        sr.name as reagent_name,sr.cas as reagent_cas, sr.reagent_type as reagent_type,
+        sr.reagent_character as reagent_character,sr.product_sn as reagent_product_sn,sr.product_home as product_home,
+        ss.name as supplier_name,
+        su.name as apply_user_name,
+        oo.id as order_id,oo.order_name,oo.order_code
+        from ope_apply as oa
+        inner join ope_apply_order ao on ao.ope_apply_id=oa.id
+        inner join ope_order oo on oo.id=ao.ope_order_id
+        left join sys_reagent sr on oa.reagent_id = sr.id
+        left join sys_supplier as ss on sr.supplier_id = ss.id
+        left join sys_user as su on oa.apply_user_id = su.id
+        <where>
+            oa.valid_flag = 1 and oo.valid_flag=1
+            <if test="applyCode!=null and applyCode!=''">
+                and oa.apply_code=#{applyCode}
+            </if>
+            <if test="orderCode!=null and orderCode!=''">
+                and oo.order_code=#{orderCode}
+            </if>
+            <if test="orderName!=null and orderName!=''">
+                and oo.order_name like concat('%',#{orderName},'%')
+            </if>
+        </where>
+        order by oo.create_time desc
+        <if test="first != null and pageSize != null">
+            limit #{first}, #{pageSize}
+        </if>
+    </select>
+
+
+    <select id="getArrivalNumById" resultType="int">
+        select ifnull(arrival_num ,0)from ope_apply where id=#{applyId}
+    </select>
+
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.java
index 863a7cc..92d5a60 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.java
@@ -15,4 +15,6 @@
     public int getOpeApplyOrderTotalCount(Map params) throws DataAccessException;
 
     public void insertOpeApplyOrder(OpeApplyOrder opeApplyOrder) throws DataAccessException;
+
+    public int batchInsertOpeApplyOrder(List<OpeApplyOrder> opeApplyOrders)throws DataAccessException;
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.xml
index 52289d9..7e593ec 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeApplyOrderDao.xml
@@ -33,8 +33,16 @@
     <include refid="queryWhereSql"/>
   </select>
 
-  <insert id="insertOpeApplyOrder" parameterType="com.nanometer.smartlab.entity.OpeApplyOrder">
-    insert into ope_apply_order(id, ope_order_id, ope_apply_id)
-    values (#{id}, #{opeOrderId}, #{opeApplyId})
+  <insert id="insertOpeApplyOrder" parameterType="com.nanometer.smartlab.entity.OpeApplyOrder" useGeneratedKeys = "true" keyProperty = "id">
+    insert into ope_apply_order( ope_order_id, ope_apply_id)
+    values ( #{opeOrderId}, #{opeApplyId})
+  </insert>
+
+  <insert id="batchInsertOpeApplyOrder">
+    insert into ope_apply_order( ope_order_id, ope_apply_id)
+    values
+    <foreach collection ="list" item="applyOrder" separator =",">
+      ( #{applyOrder.opeOrderId}, #{applyOrder.opeApplyId})
+    </foreach >
   </insert>
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.java
index e1652d8..cff3339 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.java
@@ -8,7 +8,9 @@
 
 public interface OpeLaboratoryReserveDao {
     public void insertOpeLaboratoryReserve(OpeLaboratoryReserve opeLaboratoryReserve) throws DataAccessException;
-    List<OpeLaboratoryReserve> selectByReId(String id);
+
+    public void batchInsert(List<OpeLaboratoryReserve> opeLaboratoryReserveList);
+    List<OpeLaboratoryReserve> selectByReId(Long id);
     public int updateByReId(Map params);
     void updateByReagent(Map<String, Object> params);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.xml
index 8fe3c95..081e614 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeLaboratoryReserveDao.xml
@@ -13,10 +13,19 @@
         <result property="containerId" column="container_id"></result>
     </resultMap>
 
-    <insert id="insertOpeLaboratoryReserve" parameterType="com.nanometer.smartlab.entity.OpeLaboratoryReserve">
-        insert into ope_laboratory_reserve(id, reagent_id, article_number,reserve, valid_flag, update_time,user_id,house_id,container_id)
-        values (#{id},#{reagentId},#{articleNumber},#{reserve},#{validFlag},now(),#{userId},#{houseId},#{containerId})
+    <insert id="insertOpeLaboratoryReserve" parameterType="com.nanometer.smartlab.entity.OpeLaboratoryReserve" useGeneratedKeys = "true" keyProperty = "id">
+        insert into ope_laboratory_reserve( reagent_id, article_number,reserve, valid_flag, update_time,user_id,house_id,container_id)
+        values (#{reagentId},#{articleNumber},#{reserve},#{validFlag},now(),#{userId},#{houseId},#{containerId})
     </insert>
+
+    <insert id="batchInsert">
+        insert into ope_laboratory_reserve( reagent_id, article_number,reserve, valid_flag, user_id,house_id,container_id)
+        values
+        <foreach collection="list" item="item" separator=",">
+            (#{item.reagentId},#{item.articleNumber},#{item.reserve},#{item.validFlag},#{item.userId},#{item.houseId},#{item.containerId})
+        </foreach>
+    </insert>
+
     <select id="selectByReId" resultMap="OpeLaboratoryReserve">
         select * from ope_laboratory_reserve where reagent_id=#{id}
     </select>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.java
index e5afa2a..c99980b 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.java
@@ -11,7 +11,7 @@
  */
 public interface OpeOrderDao {
 
-    public OpeOrder getOpeOrder(String id) throws DataAccessException;
+    public OpeOrder getOpeOrder(Long id) throws DataAccessException;
     public List<OpeOrder> getOpeOrderList(Map params) throws DataAccessException;
 
     public List<OpeOrder> getOpeOrderListForTable(String code,String Status ) throws DataAccessException;
@@ -20,9 +20,9 @@
 
     public void insertOpeOrder(OpeOrder opeOrder) throws DataAccessException;
     public int updateOpeOrder(OpeOrder opeOrder) throws DataAccessException;
-    public int deleteOpeOrder(List<String> ids) throws DataAccessException;
+    public int deleteOpeOrder(List<Long> ids) throws DataAccessException;
 
-    OpeOrder selectParentOrder(String id);
+    OpeOrder selectParentOrder(Long id);
 
     void updateOpeOrderStatus(OpeOrder oo);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.xml
index 0b6ebd6..2783dad 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeOrderDao.xml
@@ -15,8 +15,8 @@
     <result property="arrivalTime" column="arrival_time"></result>
     <result property="orderUserName" column="orderUserName"></result>
     <result property="consigneeUserName" column="consigneeUserName"></result>
-    <result property="supplyId" column="supplier_id"></result>
-    <result property="supplyName" column="supplier_name"></result>
+    <result property="supplierId" column="supplier_id"></result>
+    <result property="supplierName" column="supplier_name"></result>
   </resultMap>
 
   <sql id="queryWhereSql">
@@ -41,12 +41,12 @@
     <if test="editId != null and editId != ''">
       and oo.id != #{editId}
     </if>
-    <if test="supplyId != null and supplyId != ''">
-      and oo.supplier_id != #{supplyId}
+    <if test="supplierId != null and supplierId != ''">
+      and oo.supplier_id != #{supplierId}
     </if>
   </sql>
 
-  <select id="getOpeOrder" parameterType="java.lang.String"  resultMap="OpeOrder" >
+  <select id="getOpeOrder"   resultMap="OpeOrder" >
     select oo.*, su.name as orderUserName, su2.name as consigneeUserName
     from ope_order as oo
     left join sys_user as su on oo.order_user_id = su.id
@@ -75,9 +75,9 @@
     <include refid="queryWhereSql"/>
   </select>
 
-  <insert id="insertOpeOrder" parameterType="com.nanometer.smartlab.entity.OpeOrder">
-    insert into ope_order(id, order_code, order_name, status, memo, consignee_user_id, order_user_id, arrival_time, valid_flag, create_time, update_time, supplier_id, supplier_name)
-    values (#{id}, #{orderCode}, #{orderName}, #{status}, #{memo}, #{consigneeUserId}, #{orderUserId}, #{arrivalTime}, 1, now(), now(),#{supplyId},#{supplyName})
+  <insert id="insertOpeOrder" parameterType="com.nanometer.smartlab.entity.OpeOrder" useGeneratedKeys = "true" keyProperty = "id">
+    insert into ope_order( order_code, order_name, status, memo, consignee_user_id, order_user_id, arrival_time, valid_flag, create_time, update_time, supplier_id, supplier_name)
+    values ( #{orderCode}, #{orderName}, #{status}, #{memo}, #{consigneeUserId}, #{orderUserId}, #{arrivalTime}, 1, now(), now(),#{supplierId},#{supplierName})
   </insert>
 
   <update id="updateOpeOrder" parameterType="com.nanometer.smartlab.entity.OpeOrder">
@@ -90,8 +90,8 @@
       <if test="consigneeUserId != null">consignee_user_id=#{consigneeUserId},</if>
       <if test="orderUserId != null">order_user_id=#{orderUserId},</if>
       <if test="arrivalTime != null">arrival_time=#{arrivalTime},</if>
-      <if test="supplyId != null">supplier_id=#{supplyId},</if>
-      <if test="supplyName != null">supplier_name=#{supplyName},</if>
+      <if test="supplierId != null">supplier_id=#{supplierId},</if>
+      <if test="supplierName != null">supplier_name=#{supplierName},</if>
       update_time=now()
     </set>
     where id=#{id}
@@ -118,7 +118,8 @@
         oo.status,
         oo.order_code orderCode,
         oo.order_name orderName,
-        oo.order_user_id  orderUserId
+        oo.order_user_id  orderUserId,
+        oo.consignee_user_id
         from    ope_apply_order oao
         left join  ope_order oo on oo.id = oao.ope_order_id
         where oo.valid_flag = 1
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeReagentCodeDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeReagentCodeDao.java
new file mode 100644
index 0000000..4ef191e
--- /dev/null
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeReagentCodeDao.java
@@ -0,0 +1,65 @@
+package com.nanometer.smartlab.dao;
+
+import com.nanometer.smartlab.entity.BaseMeta;
+import com.nanometer.smartlab.entity.OpeReagentCode;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.dao.DataAccessException;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by johnny on 17/8/21.
+ */
+public interface OpeReagentCodeDao {
+    /**
+     * 获取订单生成的试剂编码
+     * @param orderId
+     * @param applyId
+     * @return
+     * @throws DataAccessException
+     */
+    public OpeReagentCode getReagentCode(@Param("orderId") Long orderId,@Param("applyId")Long applyId) throws DataAccessException;
+
+    /**
+     * 获取订单生成的试剂编码
+     * @param applyId
+     * @return
+     * @throws DataAccessException
+     */
+    public List<OpeReagentCode> getReagentCodeByApplyId(@Param("applyId")Long applyId) throws DataAccessException;
+
+    /**
+     * 获取标签前缀对应的最新标签索引,便于后续递增
+     * @param codePrex
+     * @return
+     * @throws DataAccessException
+     */
+    public OpeReagentCode getMaxReagentCode(String codePrex) throws DataAccessException;
+
+    /**
+     * 新增订单标签
+     * @param opeReagentCode
+     * @return
+     * @throws DataAccessException
+     */
+    public int insertReagentCode(OpeReagentCode opeReagentCode) throws DataAccessException;
+
+    /**
+     * 批量插入
+     * @param opeReagentCodeList
+     * @return
+     * @throws DataAccessException
+     */
+    public int batchInsertReagentCode(List<OpeReagentCode>opeReagentCodeList)throws DataAccessException;
+
+    /**
+     * 更新状态
+     * @param orderId
+     * @param applyId
+     * @param status
+     * @return
+     * @throws DataAccessException
+     */
+    public int updateStatus(@Param("orderId") Long orderId,@Param("applyId")Long applyId,@Param("status")Integer status)throws DataAccessException;
+}
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeReagentCodeDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeReagentCodeDao.xml
new file mode 100644
index 0000000..2bebda8
--- /dev/null
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeReagentCodeDao.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.nanometer.smartlab.dao.OpeReagentCodeDao">
+  <resultMap id="OpeReagentCodeMap" type="com.nanometer.smartlab.entity.OpeReagentCode">
+    <id property="id" column="id"/>
+    <result property="orderId" column="order_id"></result>
+    <result property="applyId" column="apply_id"></result>
+    <result property="startCode" column="start_code"></result>
+    <result property="endCode" column="end_code"></result>
+    <result property="codePrex" column="code_prex"></result>
+    <result property="createTime" column="create_time"></result>
+    <result property="updateTime" column="update_time"></result>
+    <result property="status" column="status"></result>
+    <result property="num" column="num"></result>
+    <result property="reagentName" column="reagent_name"></result>
+    <result property="startReagentCode" column="start_reagent_code"></result>
+    <result property="endReagentCode" column="end_reagent_code"></result>
+    <result property="applyCode" column="apply_code"></result>
+  </resultMap>
+
+
+
+  <select id="getMaxReagentCode"  resultMap="OpeReagentCodeMap">
+    select rc.* from ope_reagent_code as rc
+    where code_prex=#{codePrex}
+    order by end_code desc
+    limit 1
+  </select>
+
+  <select id="getReagentCode" resultMap="OpeReagentCodeMap">
+    select rc.* from ope_reagent_code as rc
+    where order_id=#{orderId} and apply_id=#{applyId}
+  </select>
+
+
+  <select id="getReagentCodeByApplyId" resultMap="OpeReagentCodeMap">
+    select rc.*,oa.num,oa.apply_code,sr.name as reagent_name,lpad(start_code,6,'0') as start_reagent_code,lpad(end_code,6,'0') as end_reagent_code from ope_reagent_code as rc
+    left join ope_apply oa on oa.id=rc.apply_id
+    left join sys_reagent sr on sr.id=oa.reagent_id
+    where  apply_id=#{applyId}
+  </select>
+
+  <insert id="insertReagentCode" parameterType="com.nanometer.smartlab.entity.OpeReagentCode" useGeneratedKeys = "true" keyProperty = "id">
+    insert into ope_reagent_code(order_id, apply_id, start_code , end_code, code_prex, create_time, update_time)
+    values (#{orderId}, #{applyId}, #{startCode}, #{endCode}, #{codePrex},now(), now())
+  </insert>
+
+  <insert id="batchInsertReagentCode" parameterType="com.nanometer.smartlab.entity.OpeReagentCode">
+    insert into ope_reagent_code(order_id, apply_id, start_code , end_code, code_prex, create_time, update_time)
+    values
+    <foreach collection ="list" item="reagentCode" separator =",">
+      (#{reagentCode.orderId}, #{reagentCode.applyId}, #{reagentCode.startCode}, #{reagentCode.endCode}, #{reagentCode.codePrex},now(), now())
+    </foreach >
+  </insert>
+
+  <update id="updateStatus">
+    update ope_reagent_code
+    set status=#{status}
+    where order_id=#{orderId} and apply_id=#{applyId}
+  </update>
+
+
+
+</mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
index 9ff5320..94b8fa4 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
@@ -2,6 +2,7 @@
 
 import com.nanometer.smartlab.entity.OpeApply;
 import com.nanometer.smartlab.entity.OpeReagentStatus;
+import com.nanometer.smartlab.entity.SysLaboratory;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.dao.DataAccessException;
 
@@ -33,9 +34,14 @@
 
 
     void insertOpeReagentStatus(OpeReagentStatus opeReagentStatus) throws DataAccessException;
+
+    int batchInsertOpeReagentStatus(List<OpeReagentStatus> opeReagentStatusList);
     OpeReagentStatus getOpeReagentStatusByReagentCode(String reagentCode) throws DataAccessException;
     OpeReagentStatus getOpeReagentStatusByReagentCode2(OpeReagentStatus opeReagentStatus) throws DataAccessException;
-    OpeReagentStatus getOpeReagentStatus(String id) throws DataAccessException;
+    OpeReagentStatus getOpeReagentStatusByCode(String reagentCode) throws DataAccessException;
+
+    OpeReagentStatus getOpeReagentStatusById(Long id) throws DataAccessException;
+
 	int updateOpeReagentStatusDao(OpeReagentStatus opeReagentStatus);
 
     List<OpeReagentStatus> getOpeReagentStatusInfoList(Map params) throws DataAccessException;
@@ -46,14 +52,14 @@
 
     void deleteByReagentCode(@Param("reagentCode")String reagentCode);
 
-    List<OpeReagentStatus> getReagentStatusByContainerId(@Param("containerId") String id);
+    List<OpeReagentStatus> getReagentStatusByContainerId(@Param("containerId") Long id);
     int updateTimeByCode(Map params);
     void updateStatusByCode(Map params);
 
-    List<OpeReagentStatus> selectByReId(String id);
+    List<OpeReagentStatus> selectByReId(Long id);
     public int updateByReId(Map params);
 
-    List<String> selectReagentCodesByReId(String reagentId);
+    List<String> selectReagentCodesByReId(Long reagentId);
 
     void insertOpeReagentStatus2(OpeReagentStatus ors);
 
@@ -63,6 +69,24 @@
 
     List<Map> selectExportList(Map params);
 
-    OpeReagentStatus getStatus(@Param("reagentId") String reagentId,@Param("reagentCode") String reagentCode);
+    OpeReagentStatus getStatus(@Param("reagentId") Long reagentId,@Param("reagentCode") String reagentCode);
+
+    /**
+     * 根据课题id获取实验室列表
+     * @param projectId
+     * @return
+     */
+    List<SysLaboratory> getLabNoContainerByProjectId(Long projectId);
+
+    /**
+     * 根据条码更新试剂状态
+     * @param opeReagentStatus
+     */
+    void updateOpeReagentStatusByCode(OpeReagentStatus opeReagentStatus);
+
+    void batchUpdateReagentStatusByIds(@Param("ids") List<Long>ids,@Param("houseId")Long houseId,@Param("containerId")Long containerId,@Param("status")Integer status);
+
+
+    Integer getReagentStatusCountByApplyCode(String applyCode);
 
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
index 4a1f6f1..1decb18 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
@@ -6,9 +6,9 @@
       <result property="reagentId" column="reagent_id"></result>
       <result property="articleNumber" column="article_number"></result>
       <result property="reagentCode" column="reagent_code"></result>
-      <result property="status" column="status" typeHandler="com.nanometer.smartlab.entity.handler.ArrivalStatusHandler"></result>
-      <result property="realstatus" column="realstatus" typeHandler="com.nanometer.smartlab.entity.handler.RealStatusHandler"></result>
-      <result property="validFlag" column="valid_flag" typeHandler="com.nanometer.smartlab.entity.handler.ValidFlagHandler"></result>
+      <result property="status" column="status" ></result>
+      <result property="realstatus" column="realstatus" ></result>
+      <result property="validFlag" column="valid_flag" ></result>
       <result property="houseId" column="house_id"></result>
       <result property="containerId" column="container_id"></result>
       <result property="userId" column="user_id"></result>
@@ -16,8 +16,8 @@
       <result property="updateTime" column="update_time"></result>
       <result property="remainder" column="remainder"></result>
       <result property="place" column="place"></result>
-      <result property="storeType" column="store_type" typeHandler="com.nanometer.smartlab.entity.handler.StoreTypeHandler"></result>
-      <result property="projectNum" column="project_num"></result>
+      <result property="storeType" column="store_type"></result>
+      <result property="projectId" column="project_id"></result>
 
       <result property="containerCode" column="containerCode"></result>
       <result property="houseName" column="houseName"></result>
@@ -36,7 +36,7 @@
 	    <result property="price" column="price"></result>
 	    <result property="perBox" column="per_box"></result>
 	    <result property="memo" column="memo"></result>
-	    <result property="validFlag" column="valid_flag" typeHandler="com.nanometer.smartlab.entity.handler.ValidFlagHandler"></result>
+	    <result property="validFlag" column="valid_flag"></result>
 	    <result property="createTime" column="create_time"></result>
 	    <result property="updateTime" column="update_time"></result>
 	    <result property="supplierName" column="supplierName"></result>
@@ -157,7 +157,7 @@
 	    </if>
 	</sql>
 
-  <select id="getOpeReagentStatus" parameterType="java.lang.String"  resultMap="OpeReagentStatus" >
+  <select id="getOpeReagentStatusById"   resultMap="OpeReagentStatus" >
     select oa.*,
 	    sr.*,
 	    sr.id as reagentId,
@@ -173,6 +173,23 @@
 	left join sys_user as su on oa.user_id = su.id
     where oa.id = #{id} and oa.valid_flag = 1
   </select>
+
+	<select id="getOpeReagentStatusByCode"  resultMap="OpeReagentStatus" >
+		select oa.*,
+			   sr.*,
+			   sr.id as reagentId,
+			   su.name as userName,
+			   (case when oa.status=1 then (select sw.container_code from sys_warehouse_container sw where sw.id=oa.container_id)
+					 when oa.status=2 then (select sw.container_code from sys_laboratory_container sw where sw.id=oa.container_id) else '' END)as containerCode,
+			   (case when oa.status=1 then (select sw.name from sys_warehouse sw where sw.id=oa.house_id)
+					 when oa.status=2 then (select sw.name from sys_laboratory sw where sw.id=oa.house_id) else '' END)as houseName,
+			   ss.name as supplierName
+		from ope_reagent_status as oa
+				 left join sys_reagent sr on oa.reagent_id = sr.id
+				 left join sys_supplier as ss on sr.supplier_id = ss.id
+				 left join sys_user as su on oa.user_id = su.id
+		where oa.reagent_code = #{reagentCode} and oa.valid_flag = 1
+	</select>
 
     <select id="getOpeReagentStatusInfoList" parameterType="java.util.Map"  resultMap="OpeReagentStatus">
 		select s.id ,name,cas, deadline,reagent_code,bm3.meta_value reagent_format,r.main_metering,bm1.meta_value reagent_type,bm2.meta_value product_home,
@@ -214,7 +231,6 @@
         left join sys_reagent sr on oa.reagent_id = sr.id
         left join sys_supplier as ss on sr.supplier_id = ss.id
         left join sys_user as su on oa.user_id = su.id
-
         <if test="status != null">
             <choose>
                 <when test="status == 1">
@@ -227,9 +243,24 @@
                 </when>
             </choose>
         </if>
-        where oa.valid_flag = 1
-        <include refid="queryWhereSql"/>
-
+        <where>
+			 oa.valid_flag = 1
+			<if test="reagentId != null and reagentId != ''">
+				and oa.reagent_id = #{reagentId}
+			</if>
+			<if test="articleNumber != null and articleNumber != ''">
+				and oa.article_number = #{articleNumber}
+			</if>
+			<if test="reagentCode != null and reagentCode != ''">
+				and oa.reagent_code like #{reagentCode}
+			</if>
+			<if test="status != null">
+				and oa.status = #{status}
+			</if>
+			<if test="applyCode != null and applyCode != ''">
+				and oa.apply_code = #{applyCode}
+			</if>
+		</where>
         order by oa.reagent_code asc
         <if test="first != null and pageSize != null">
             limit #{first}, #{pageSize}
@@ -309,6 +340,13 @@
 		<if test="first != null and pageSize != null">
 			limit #{first}, #{pageSize}
 		</if>
+	</select>
+
+	<select id="getLabNoContainerByProjectId" parameterType="java.util.Map" resultMap="OpeReagentStatus">
+		select oa.*,sr.*,sr.id as reagent_id,sl.name as house_name from sys_laboratory sl
+		left join ope_reagent_status as oa on oa.house_id=sl.id
+		left join sys_reagent sr on sr.id=oa.reagent_id
+		where find_in_set(#{projectId},sl.project)
 	</select>
 
    <select id="getPersonReagentStatusList" parameterType="java.util.Map" resultMap="OpeReagentStatus">
@@ -419,16 +457,26 @@
   </select>
 
 
-    <insert id="insertOpeReagentStatus" parameterType="com.nanometer.smartlab.entity.OpeReagentStatus">
-        insert into ope_reagent_status(id, reagent_id, article_number, reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, update_time,project_num)
-        values (#{id}, #{reagentId}, #{articleNumber}, #{reagentCode}, #{status}, #{houseId}, #{containerId}, #{userId}, #{remainder}, #{place}, #{storeType}, 1, now(),#{projectNum})
+    <insert id="insertOpeReagentStatus" parameterType="com.nanometer.smartlab.entity.OpeReagentStatus" useGeneratedKeys = "true" keyProperty = "id">
+        insert into ope_reagent_status( reagent_id, article_number, reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, update_time,project_id)
+        values ( #{reagentId}, #{articleNumber}, #{reagentCode}, #{status}, #{houseId}, #{containerId}, #{userId}, #{remainder}, #{place}, #{storeType}, 1, now(),#{projectId})
     </insert>
+
+
     <insert id="insertOpeReagentStatus2" parameterType="com.nanometer.smartlab.entity.OpeReagentStatus">
-		insert into ope_reagent_status(id, reagent_id, article_number, reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, update_time,project_num,apply_code,order_code)
-        values (#{id}, #{reagentId}, #{articleNumber}, #{reagentCode}, #{status}, #{houseId}, #{containerId}, #{userId}, #{remainder}, #{place}, #{storeType}, 1, now(),#{projectNum},#{applyCode},#{orderCode})
+		insert into ope_reagent_status( reagent_id, article_number, reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, update_time,project_id,apply_code,order_code)
+        values (#{reagentId}, #{articleNumber}, #{reagentCode}, #{status}, #{houseId}, #{containerId}, #{userId}, #{remainder}, #{place}, #{storeType}, 1, now(),#{projectId},#{applyCode},#{orderCode})
 	</insert>
 
-    <select id="getOpeReagentStatusByReagentCode" parameterType="java.lang.String" resultMap="OpeReagentStatus">
+	<insert id="batchInsertOpeReagentStatus">
+		insert into ope_reagent_status( reagent_id, article_number, reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, update_time,project_id,apply_code,order_code)
+		values
+		<foreach collection ="list" item="reagentStatus" separator =",">
+			(#{reagentStatus.reagentId}, #{reagentStatus.articleNumber}, #{reagentStatus.reagentCode}, #{reagentStatus.status}, #{reagentStatus.houseId}, #{reagentStatus.containerId}, #{reagentStatus.userId}, #{reagentStatus.remainder}, #{reagentStatus.place}, #{reagentStatus.storeType}, 1, now(),#{reagentStatus.projectId},#{reagentStatus.applyCode},#{reagentStatus.orderCode})
+		</foreach >
+	</insert>
+
+    <select id="getOpeReagentStatusByReagentCode"  resultMap="OpeReagentStatus">
         select *
         from ope_reagent_status
         where valid_flag = 1 and reagent_code = #{reagentCode}
@@ -437,11 +485,17 @@
 	<select id="getOpeReagentStatusByReagentCode2" parameterType="com.nanometer.smartlab.entity.OpeReagentStatus" resultMap="OpeReagentStatus">
         select *
         from ope_reagent_status
-        where valid_flag = 1 and reagent_code = #{reagentCode} and status=#{status}
+        <where>
+			valid_flag = 1 and reagent_code = #{reagentCode}
+			<if test="status!=null">
+				and status=#{status}
+			</if>
+		</where>
+        limit 1
     </select>
 
      <update id="updateOpeReagentStatusDao" parameterType="com.nanometer.smartlab.entity.OpeReagentStatus">
-        update ope_reagent_status set status=#{status},house_id=#{houseId},container_id=#{containerId}, user_id=#{userId}, place=#{place}, update_time=now(),project_num=#{projectNum}
+        update ope_reagent_status set status=#{status},house_id=#{houseId},container_id=#{containerId}, user_id=#{userId}, place=#{place}, update_time=now(),project_id=#{projectId}
         where id=#{id}
     </update>
 
@@ -470,13 +524,13 @@
     </update>
 
 
-    <delete id="deleteByReagentCode" parameterType="java.lang.String" >
+    <delete id="deleteByReagentCode"  >
         delete from ope_reagent_status
         where reagent_code=#{reagentCode}
     </delete>
 
 
-    <select id="getReagentStatusByContainerId" parameterType="java.lang.String" resultMap="OpeReagentStatus">
+    <select id="getReagentStatusByContainerId"  resultMap="OpeReagentStatus">
         select *
 		from ope_reagent_status ors
 		LEFT JOIN sys_reagent sr on sr.id = ors.reagent_id
@@ -574,7 +628,7 @@
 		where reagent_code = #{0}
 	</update>
 
-    <select id="selectReagentCodesByReId" parameterType="java.lang.String" resultType="java.lang.String">
+    <select id="selectReagentCodesByReId" resultType="string">
 	select reagent_code from ope_reagent_status WHERE
 	reagent_id = #{reagentId}
 	and valid_flag = 1
@@ -678,4 +732,21 @@
         and reagent_code = #{reagentCode}
         and reagent_id = #{reagentId}
 	</select>
+
+	<update id="updateOpeReagentStatusByCode" parameterType="com.nanometer.smartlab.entity.OpeReagentStatus">
+		update ope_reagent_status set status=#{status}
+		where reagent_code=#{reagentCode}
+	</update>
+
+	<update id="batchUpdateReagentStatusByIds">
+		update ope_reagent_status set house_id=#{houseId} , container_id=#{containerId},status=#{status}
+		where id in
+		<foreach collection="ids" item="id" separator="," open="(" close=")">
+			#{id}
+		</foreach>
+	</update>
+
+	<select id="getReagentStatusCountByApplyCode" resultType="integer">
+		select count(1) from ope_reagent_status where apply_code=#{applyCode} and status!=1
+	</select>
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
index 123b75e..7adb0ab 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
@@ -15,6 +15,8 @@
 
     void insertOpeUseFlow(OpeUseFlow opeUseFlow) throws DataAccessException;
 
+    int batchInsertOpeUseFlow(List<OpeUseFlow>opeUseFlowList) throws DataAccessException;
+
 	@SuppressWarnings("rawtypes")
 	List<OpeUseFlow> getOpeUseFlowList(Map params);
 
@@ -35,7 +37,7 @@
 
     List<Map> getRegentInfoFromReceiptNumber(String receiptNumber);
 
-    Map getUserIdByReagentCode(String reagentCode, String id);
+    Map getUserIdByReagentCode(String reagentCode, Integer operateStatus);
 
     int countPersonalUseInfo(Map params);
 
@@ -63,4 +65,24 @@
      */
     List<OpeUseFlow> getOpeUseFlowSimpleInfoList(Map params);
 
+    /**
+     * 获取流向总数
+     * @param params
+     * @return
+     */
+    Long getOpeUseFlowSimpleInfoCount(Map params);
+
+
+    List<OpeUseFlow> getOpeUseFlowByCode2(String reagentCode);
+
+
+    OpeUseFlow getLastUseFlow(String reagentCode);
+
+
+    List<OpeUseFlow> getUseFlowByCodeAndStatus(@Param("reagentCode") String reagentCode,@Param("operateStatus")Integer operateStatus);
+
+
+    List<OpeUseFlow> getUseFlowByCodeAndStatuses(@Param("reagentCode")String reagentCode,@Param("operateStatuses")List<Integer> operateStatuses);
+
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
index 89fd0cf..8e9f608 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
@@ -4,30 +4,30 @@
   <resultMap id="OpeUseFlow" type="com.nanometer.smartlab.entity.OpeUseFlow">
     <id property="id" column="id"/>
     <result property="reagentCode" column="reagent_code"></result>
-    <result property="articleNumber" column="articleNumber"></result>
-    <result property="status" column="status" typeHandler="com.nanometer.smartlab.entity.handler.ArrivalStatusHandler"></result>
+    <result property="articleNumber" column="article_number"></result>
+    <result property="status" column="status"></result>
     <result property="houseId" column="house_id"></result>
     <result property="containerId" column="container_id"></result>
     <result property="userId" column="user_id"></result>
-    <result property="userName" column="userName"></result>
-    <result property="validFlag" column="valid_flag" typeHandler="com.nanometer.smartlab.entity.handler.ValidFlagHandler"></result>
+    <result property="userName" column="user_name"></result>
+    <result property="validFlag" column="valid_flag"></result>
     <result property="createTime" column="create_time"></result>
     <result property="realstatus" column="realstatus"></result>
     <result property="operateState" column="operatestate"></result>
     <result property="remainder" column="remainder"></result>
     <result property="place" column="place"></result>
-    <result property="storeType" column="store_type" typeHandler="com.nanometer.smartlab.entity.handler.StoreTypeHandler"></result>
-    <result column="laboratoryName" jdbcType="VARCHAR" property="laboratoryName" />
-    <result column="warehouseName" jdbcType="VARCHAR" property="warehouseName" />
-    <result column="warehouseContainerName" jdbcType="VARCHAR" property="warehouseContainerName" />
-    <result column="warehouseContainerCode" jdbcType="VARCHAR" property="warehouseContainerCode" />
-    <result column="laboratoryContainerName" jdbcType="VARCHAR" property="laboratoryContainerName" />
-    <result column="laboratoryContainerCode" jdbcType="VARCHAR" property="laboratoryContainerCode" />
-    <result column="operatestateName" jdbcType="VARCHAR" property="operatestateName" />
+    <result property="storeType" column="store_type"></result>
+    <result column="laboratory_name" jdbcType="VARCHAR" property="laboratoryName" />
+    <result column="warehouse_name" jdbcType="VARCHAR" property="warehouseName" />
+    <result column="warehouse_container_name" jdbcType="VARCHAR" property="warehouseContainerName" />
+    <result column="warehouse_container_code" jdbcType="VARCHAR" property="warehouseContainerCode" />
+    <result column="laboratory_container_name" jdbcType="VARCHAR" property="laboratoryContainerName" />
+    <result column="laboratory_container_code" jdbcType="VARCHAR" property="laboratoryContainerCode" />
+    <result column="operatestate_name" jdbcType="VARCHAR" property="operatestateName" />
     <result column="receipt_number" jdbcType="VARCHAR" property="receiptNumber" />
 
     <association property="reagent" javaType="com.nanometer.smartlab.entity.SysReagent">
-      	<id property="id" column="reagentId"/>
+      	<id property="id" column="reagent_id"/>
 	    <result property="name" column="name"></result>
 	    <result property="cas" column="cas"></result>
 	    <result property="reagentType" column="reagent_type"></result>
@@ -39,10 +39,10 @@
 	    <result property="price" column="price"></result>
 	    <result property="perBox" column="per_box"></result>
 	    <result property="memo" column="memo"></result>
-	    <result property="validFlag" column="valid_flag" typeHandler="com.nanometer.smartlab.entity.handler.ValidFlagHandler"></result>
+	    <result property="validFlag" column="valid_flag"></result>
 	    <result property="createTime" column="create_time"></result>
 	    <result property="updateTime" column="update_time"></result>
-	    <result property="supplierName" column="supplierName"></result>
+	    <result property="supplierName" column="supplier_name"></result>
     </association>
   </resultMap>
 
@@ -58,59 +58,58 @@
         where reagent_code = #{0}
     </update>
     <sql id="queryWhereSql">
-    <if test="reagentId != null and reagentId != ''">
-      and ors.reagent_id = #{reagentId}
-    </if>
-    <if test="userId != null and userId != ''">
-      and oa.user_id = #{userId}
-    </if>
-    <if test="departmentUserIds != null">
-      and oa.user_id in
-      <foreach collection="departmentUserIds" item="item" index="index" open="(" separator="," close=")">
-	      #{item}
-	   </foreach>
-    </if>
-    <if test="reagentCode != null and reagentCode != ''">
-      and oa.reagent_code like #{reagentCode}
-    </if>
-    <if test="status != null">
-      and oa.status = #{status}
-    </if>
-    <if test="reagentName != null and reagentName != ''">
-      and sr.name like concat('%',#{reagentName},'%')
-    </if>
-      <if test="houseName != null and houseName != ''">
-          and ( l.name like concat('%',#{houseName},'%') or w.name like concat('%',#{houseName},'%') )
-      </if>
-    <if test="startDate != null and startDate !=''">
-        and oa.create_time &gt;= #{startDate}
-    </if>
-    <if test="endDate != null and endDate !=''">
-        and oa.create_time &lt;= #{endDate}
-    </if>
-    <if test="operatestate != null and operatestate !=''">
-        and bm1.id = #{operatestate}
-    </if>
-    <if test="containerCode != null and containerCode !=''">
-        and wc.container_code = #{containerCode}
-        or lc.container_code =#{containerCode}
-    </if>
-  </sql>
+        <if test="reagentId != null and reagentId != ''">
+          and ors.reagent_id = #{reagentId}
+        </if>
+        <if test="userId != null and userId != ''">
+          and oa.user_id = #{userId}
+        </if>
+        <if test="departmentUserIds != null">
+          and oa.user_id in
+          <foreach collection="departmentUserIds" item="item" index="index" open="(" separator="," close=")">
+              #{item}
+           </foreach>
+        </if>
+        <if test="reagentCode != null and reagentCode != ''">
+          and oa.reagent_code like #{reagentCode}
+        </if>
+        <if test="status != null">
+          and oa.status = #{status}
+        </if>
+        <if test="reagentName != null and reagentName != ''">
+          and sr.name like concat('%',#{reagentName},'%')
+        </if>
+          <if test="houseName != null and houseName != ''">
+              and ( l.name like concat('%',#{houseName},'%') or w.name like concat('%',#{houseName},'%') )
+          </if>
+        <if test="startDate != null and startDate !=''">
+            and oa.create_time &gt;= #{startDate}
+        </if>
+        <if test="endDate != null and endDate !=''">
+            and oa.create_time &lt;= #{endDate}
+        </if>
+        <if test="operatestate != null and operatestate !=''">
+            and oa.operatestate = #{operatestate}
+        </if>
+        <if test="containerCode != null and containerCode !=''">
+            and wc.container_code = #{containerCode}
+            or lc.container_code =#{containerCode}
+        </if>
+    </sql>
 
     <sql id="queryColumns">
 		select oa.*,
 	    sr.*,
-	    ors.article_number as articleNumber,
-	    sr.id as reagentId,
-	    su.name as userName,
-	    ss.name as supplierName,
-	    l.name as laboratoryName,
-	    w.name as warehouseName,
-	    lc.name as warehouseContainerName,
-	    wc.name as laboratoryContainerName,
-	    lc.container_code as warehouseContainerCode,
-	    wc.container_code as laboratoryContainerCode,
-	    bm1.meta_value as operatestateName
+	    ors.article_number as article_number,
+	    sr.id as reagent_id,
+	    su.name as user_name,
+	    ss.name as supplier_name,
+	    l.name as laboratory_name,
+	    w.name as warehouse_name,
+	    lc.name as warehouse_container_name,
+	    wc.name as laboratory_container_name,
+	    lc.container_code as warehouse_container_code,
+	    wc.container_code as laboratory_container_code,
 	</sql>
 
 	<sql id="queryJoins">
@@ -122,23 +121,32 @@
     	left join sys_warehouse w on w.id = wc.warehouse_id
     	left join sys_laboratory_container lc on lc.id = oa.container_id
     	left join sys_laboratory l on l.id = lc.laboratory_id
-    	left join base_meta bm1 on bm1.id = oa.operatestate
 	</sql>
 
 	<select id="getOpeUseFlowList" parameterType="java.util.Map" resultMap="OpeUseFlow">
         select oa.*,
         sr.*,
-        ors.article_number as articleNumber,
-        sr.id as reagentId,
-        su.name as userName,
-        ss.name as supplierName,
-        l.name as laboratoryName,
-        w.name as warehouseName,
-        wc.name as warehouseContainerName,
-        lc.name as laboratoryContainerName,
-        wc.container_code as warehouseContainerCode,
-        lc.container_code as laboratoryContainerCode,
-        bm1.meta_value as operatestateName
+        ors.article_number as article_number,
+        sr.id as reagent_id,
+        su.name as user_name,
+        ss.name as supplier_name,
+        l.name as laboratory_name,
+        w.name as warehouse_name,
+        wc.name as warehouse_container_name,
+        lc.name as laboratory_container_name,
+        wc.container_code as warehouse_container_code,
+        lc.container_code as laboratory_container_code,
+        (CASE
+        WHEN oa.operatestate = 0 THEN '试剂柜入库'
+        WHEN oa.operatestate = 1 THEN '错误入库'
+        WHEN oa.operatestate = 2 THEN '领用'
+        WHEN oa.operatestate = 3 THEN '存放'
+        WHEN oa.operatestate = 4 THEN '错误存放'
+        WHEN oa.operatestate = 5 THEN '报废'
+        WHEN oa.operatestate = 6 THEN '转移'
+        WHEN oa.operatestate = 10 THEN '仓库入库'
+        WHEN oa.operatestate = 11 THEN '仓库领用'
+        END) operatestate_name
 	    from ope_use_flow as oa
         left join ope_reagent_status ors on ors.reagent_code = oa.reagent_code
         left join sys_reagent sr on ors.reagent_id = sr.id
@@ -148,7 +156,6 @@
         left join sys_warehouse w on w.id = wc.warehouse_id
         left join sys_laboratory_container lc on lc.id = oa.container_id
         left join sys_laboratory l on l.id = lc.laboratory_id
-        left join base_meta bm1 on bm1.id = oa.operatestate
 	    where oa.valid_flag = 1
 	    <include refid="queryWhereSql"/>
    		order by oa.create_time desc
@@ -167,16 +174,15 @@
   </select>
 
     <select id="getOpeUseFlowSimpleInfoList" parameterType="java.util.Map" resultMap="OpeUseFlow">
-        select oa.id,oa.reagent_code,oa.create_time,
-        sr.id as reagentId,sr.name as name,sr.cas as cas,
-        su.name as userName,
-        l.name as laboratoryName,
-        w.name as warehouseName,
-        wc.name as warehouseContainerName,
-        lc.name as laboratoryContainerName,
-        wc.container_code as warehouseContainerCode,
-        lc.container_code as laboratoryContainerCode,
-        bm1.meta_value as operatestateName
+        select oa.*,
+        sr.id as reagent_id,sr.name as name,sr.cas as cas,
+        su.name as user_name,
+        l.name as laboratory_name,
+        w.name as warehouse_name,
+        wc.name as warehouse_container_name,
+        lc.name as laboratory_container_name,
+        wc.container_code as warehouse_container_code,
+        lc.container_code as laboratory_container_code
         from ope_use_flow as oa
         left join ope_reagent_status ors on ors.reagent_code = oa.reagent_code
         left join sys_reagent sr on ors.reagent_id = sr.id
@@ -185,13 +191,26 @@
         left join sys_warehouse w on w.id = wc.warehouse_id
         left join sys_laboratory_container lc on lc.id = oa.container_id
         left join sys_laboratory l on l.id = lc.laboratory_id
-        left join base_meta bm1 on bm1.id = oa.operatestate
         where oa.valid_flag = 1
         <include refid="queryWhereSql"/>
         order by oa.create_time desc
         <if test="first != null and pageSize != null">
             limit #{first}, #{pageSize}
         </if>
+    </select>
+
+    <select id="getOpeUseFlowSimpleInfoCount" parameterType="java.util.Map" resultType="long">
+        select count(1)
+        from ope_use_flow as oa
+        left join ope_reagent_status ors on ors.reagent_code = oa.reagent_code
+        left join sys_reagent sr on ors.reagent_id = sr.id
+        left join sys_user as su on oa.user_id = su.id
+        left join sys_warehouse_container wc on wc.id = oa.container_id
+        left join sys_warehouse w on w.id = wc.warehouse_id
+        left join sys_laboratory_container lc on lc.id = oa.container_id
+        left join sys_laboratory l on l.id = lc.laboratory_id
+        where oa.valid_flag = 1
+        <include refid="queryWhereSql"/>
     </select>
 
 
@@ -205,8 +224,9 @@
     ORDER BY create_time DESC
     LIMIT 1
   </select>
+
     <select id="getRegentInfoFromReceiptNumber" resultType="java.util.Map">
-        SELECT ors.reagent_id reagentId,count(ors.reagent_id) count
+        SELECT ors.reagent_id reagent_id,count(ors.reagent_id) count
         from  ope_use_flow ouf
         LEFT JOIN ope_reagent_status ors on ors.reagent_code = ouf.reagent_code
         WHERE ouf.receipt_number = #{0}
@@ -230,6 +250,7 @@
         LEFT JOIN ope_reagent_status ors on ors.reagent_code = ouf.reagent_code
         LEFT JOIN sys_reagent sr on sr.id = ors.reagent_id
         left join base_meta bm1 on bm1.id = su.department
+        left join sys_project sp on sp.id=su.project_id
         WHERE
         (ouf.operatestate = #{operatestate}
         or ouf.operatestate = #{operatestate1})
@@ -248,7 +269,7 @@
             and ouf.create_time &lt;#{endTime}
         </if>
         <if test="project !=null and project != ''">
-            and su.project like concat("%",#{project},"%")
+            and sp.project_name like concat("%",#{project},"%")
         </if>
         <if test="department !=null and department != ''">
             and su.bm1.meta_value like concat("%",#{department},"%")
@@ -265,24 +286,24 @@
         group by ouf.receipt_number) a
     </select>
     <select id="selectPersonalUseInfo" resultType="com.nanometer.smartlab.entity.OpeUseFlow">
-        SELECT ouf.receipt_number receiptNumber,
+        SELECT ouf.receipt_number receipt_number,
         ouf.note,
-        count(ouf.reagent_code) applyNum,
+        count(ouf.reagent_code) apply_num,
         su.name username,
-        su.project ,
+        sp.project_name as project_name,
         su.phone,
         bm1.meta_value department,
-        sl.name laboratoryName,
-        ouf.create_time createTime,
-        ouf.house_id houseId
+        sl.name laboratory_name,
+        ouf.create_time create_time,
+        ouf.house_id house_id
         FROM
         ope_use_flow  ouf
         LEFT JOIN sys_user su on su.id = ouf.user_id
-        LEFT JOIN base_meta bm on bm.id = ouf.operatestate
         LEFT JOIN ope_reagent_status ors on ors.reagent_code = ouf.reagent_code
         LEFT JOIN sys_reagent sr on sr.id = ors.reagent_id
         left join base_meta bm1 on bm1.id = su.department
         left join sys_laboratory sl on sl.id = ouf.house_id
+        left join sys_project sp on sp.id=su.project_id
 
         WHERE
         (ouf.operatestate = #{operatestate}
@@ -302,7 +323,7 @@
             and ouf.create_time &lt;#{endTime}
         </if>
         <if test="project !=null and project != ''">
-            and su.project like concat("%",#{project},"%")
+            and su.project_name like concat("%",#{project},"%")
         </if>
         <if test="department !=null and department != ''">
             and su.bm1.meta_value like concat("%",#{department},"%")
@@ -324,22 +345,18 @@
     </select>
     <select id="getApplyInfo" resultType="com.nanometer.smartlab.entity.dto.PersonUseDetail">
          SELECT
-        ors.reagent_id reagentId,
-        ors.article_number articleNumber,
-        ouf.reagent_code reagentCode,
-        sr.product_sn productSn,
-        sr.NAME reagentName,
-        bm.meta_value  reagentFormat,
-        CONCAT(sr.main_metering,bm1.meta_value) perInfo,
-        bm2.meta_value productHome,
-        bm3.meta_value controlProducts
+        ors.reagent_id reagent_id,
+        ors.article_number article_number,
+        ouf.reagent_code reagent_code,
+        sr.product_sn product_sn,
+        sr.NAME reagent_name,
+        sr.reagent_format  reagent_format,
+        CONCAT(sr.main_metering,sr.reagent_unit) per_info,
+        sr.product_home product_home,
+        sr.control_products control_products
         from `ope_use_flow` ouf
         LEFT JOIN ope_reagent_status ors ON ors.reagent_code = ouf.reagent_code
         LEFT join sys_reagent sr ON ors.reagent_id = sr.id
-        LEFT JOIN base_meta bm ON bm.id = sr.reagent_format
-        LEFT JOIN base_meta bm1 on bm1.id = sr.reagent_unit
-        LEFT JOIN base_meta bm2 on bm2.id = sr.product_home
-        LEFT JOIN base_meta bm3 on bm3.id = sr.control_products
         WHERE
         (ouf.operatestate = #{operatestate}
         or ouf.operatestate = #{operatestate1})
@@ -374,22 +391,22 @@
         and operatestate =#{operateState}
         and valid_flag = 1
     </select>
-    <select id="selectById" resultType="com.nanometer.smartlab.entity.OpeUseFlow">
+    <select id="selectById" resultMap="OpeUseFlow">
         select  *
         from ope_use_flow
         where id = #{id}
     </select>
     <select id="selectByReceiptNumber" resultType="com.nanometer.smartlab.entity.OpeUseFlow">
-        SELECT ouf.receipt_number receiptNumber,
+        SELECT ouf.receipt_number receipt_number,
         ouf.note,
-        count(ouf.reagent_code) applyNum,
+        count(ouf.reagent_code) apply_num,
         su.name username,
-        su.project ,
+        sp.project_name as project_name ,
         su.phone,
         bm1.meta_value department,
-        sl.name laboratoryName,
-        ouf.create_time createTime,
-        ouf.house_id houseId
+        sl.name laboratory_name,
+        ouf.create_time create_time,
+        ouf.house_id house_id
         FROM
         ope_use_flow  ouf
         LEFT JOIN sys_user su on su.id = ouf.user_id
@@ -398,6 +415,7 @@
         LEFT JOIN sys_reagent sr on sr.id = ors.reagent_id
         left join base_meta bm1 on bm1.id = su.department
         left join sys_laboratory sl on sl.id = ouf.house_id
+        left join sys_project sp on sp.id=su.project_id
         <if test="userId !=null and userId != ''">
             LEFT JOIN sys_reagent sr2 on sr2.id = ouf.user_id
         </if>
@@ -411,14 +429,24 @@
     </select>
     <select id="selectAll" resultType="java.util.Map">
         select
-        oa.reagent_code as reagentCode,
-        sr.`name` as reagentName,
-        CASE WHEN wc.container_code is NULL THEN lc.container_code ELSE wc.container_code END as laboratoryContainerCode,
-        bm1.meta_value as operatestateName,
-        CASE WHEN bm1.meta_value = '仓库入库' or bm1.meta_value='仓库领用' THEN NULL ELSE oa.remainder END as remainder,
-        CASE WHEN w.name is NULL THEN l.name ELSE w.name END as warehouseContainerName,
-        su.name as userName,
-        oa.create_time as createTime
+        oa.reagent_code as reagent_code,
+        sr.`name` as reagent_name,
+        CASE WHEN wc.container_code is NULL THEN lc.container_code ELSE wc.container_code END as laboratory_container_code,
+        (CASE
+        WHEN oa.operatestate = 0 THEN '试剂柜入库'
+        WHEN oa.operatestate = 1 THEN '错误入库'
+        WHEN oa.operatestate = 2 THEN '领用'
+        WHEN oa.operatestate = 3 THEN '存放'
+        WHEN oa.operatestate = 4 THEN '错误存放'
+        WHEN oa.operatestate = 5 THEN '报废'
+        WHEN oa.operatestate = 6 THEN '转移'
+        WHEN oa.operatestate = 10 THEN '仓库入库'
+        WHEN oa.operatestate = 11 THEN '仓库领用'
+        END) operatestate_name,
+        CASE WHEN oa.operatestate = 10 or oa.operatestate=11 THEN NULL ELSE oa.remainder END as remainder,
+        CASE WHEN w.name is NULL THEN l.name ELSE w.name END as warehouse_container_name,
+        su.name as user_name,
+        oa.create_time as create_time
         from ope_use_flow as oa
         left join ope_reagent_status ors on ors.reagent_code = oa.reagent_code
         left join sys_reagent sr on ors.reagent_id = sr.id
@@ -428,7 +456,7 @@
         left join sys_warehouse w on w.id = wc.warehouse_id
         left join sys_laboratory_container lc on lc.id = oa.container_id
         left join sys_laboratory l on l.id = lc.laboratory_id
-        left join base_meta bm1 on bm1.id = oa.operatestate
+
         where oa.valid_flag = 1
         <include refid="queryWhereSql"/>
         order by oa.create_time desc
@@ -437,29 +465,26 @@
     <select id="selectDetail" resultType="java.util.Map">
 
       SELECT
-        sr.product_sn productSn,
-        sr.NAME reagentName,
-        ouf.reagent_code reagentCode,
-        bm3.meta_value controlProducts,
-        bm.meta_value  reagentFormat,
-        CONCAT(sr.main_metering,bm1.meta_value) perInfo,
-        bm2.meta_value productHome,
-        ors.article_number articleNumber,
+        sr.product_sn product_sn,
+        sr.NAME reagent_name,
+        ouf.reagent_code reagent_code,
+        sr.control_products control_products,
+        sr.reagent_format  reagent_format,
+        CONCAT(sr.main_metering,sr.reagent_unit) per_info,
+        sr.product_home product_home,
+        ors.article_number article_number,
         su.name username,
-        su.project,
+        sp.project_name as project_name,
         bm4.meta_value department,
         sl.name location,
-        date_format(ouf.create_time,'%Y-%m-%d %H:%i') createTime
+        date_format(ouf.create_time,'%Y-%m-%d %H:%i') create_time
         from `ope_use_flow` ouf
         LEFT JOIN ope_reagent_status ors ON ors.reagent_code = ouf.reagent_code
         LEFT join sys_reagent sr ON ors.reagent_id = sr.id
-        LEFT JOIN base_meta bm ON bm.id = sr.reagent_format
-        LEFT JOIN base_meta bm1 on bm1.id = sr.reagent_unit
-        LEFT JOIN base_meta bm2 on bm2.id = sr.product_home
-        LEFT JOIN base_meta bm3 on bm3.id = sr.control_products
         LEFT JOIN sys_user as su on su.id = ouf.user_id
         left join base_meta bm4 on bm4.id = su.department
         LEFT JOIN sys_laboratory sl on sl.id = ouf.house_id
+        left join sys_project sp on sp.id =su.project_id
         WHERE
         (ouf.operatestate = #{operatestate}
         or ouf.operatestate = #{operatestate1})
@@ -478,7 +503,7 @@
             and ouf.create_time &lt;#{endTime}
         </if>
         <if test="project !=null and project != ''">
-            and su.project like concat("%",#{project},"%")
+            and sp.project_name like concat("%",#{project},"%")
         </if>
         <if test="department !=null and department != ''">
             and su.bm1.meta_value like concat("%",#{department},"%")
@@ -494,20 +519,28 @@
         </if>
     </select>
 
-    <insert id="insertOpeUseFlow" parameterType="com.nanometer.smartlab.entity.OpeUseFlow">
-    insert into ope_use_flow(id, reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, create_time, realstatus, operatestate,volume
+    <insert id="insertOpeUseFlow" parameterType="com.nanometer.smartlab.entity.OpeUseFlow" useGeneratedKeys = "true" keyProperty = "id">
+    insert into ope_use_flow(reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, create_time, realstatus, operatestate,volume
     <if test="receiptNumber != null">
         ,receipt_number
     </if>
     )
-    values (#{id}, #{reagentCode}, #{status}, #{houseId}, #{containerId}, #{userId}, #{remainder}, #{place}, #{storeType}, 1, #{createTime}, #{realstatus},#{operateState},#{volume}
+    values ( #{reagentCode}, #{status}, #{houseId}, #{containerId}, #{userId}, #{remainder}, #{place}, #{storeType}, 1, now(), #{realstatus},#{operateState},#{volume}
         <if test="receiptNumber != null">
             ,#{receiptNumber}
         </if>)
   </insert>
 
+    <insert id="batchInsertOpeUseFlow" >
+        insert into ope_use_flow(reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, create_time, realstatus, operatestate,volume,receipt_number)
+        values
+        <foreach collection ="list" item="useFlow" separator =",">
+            ( #{useFlow.reagentCode}, #{useFlow.status}, #{useFlow.houseId}, #{useFlow.containerId}, #{useFlow.userId}, #{useFlow.remainder}, #{useFlow.place}, #{useFlow.storeType}, 1, now(), #{useFlow.realstatus},#{useFlow.operateState},#{useFlow.volume},#{useFlow.receiptNumber})
+        </foreach >
+    </insert>
 
-    <delete id="deleteByReagentCode" parameterType="java.lang.String" >
+
+    <delete id="deleteByReagentCode"  >
         delete from ope_use_flow
         where reagent_code=#{reagentCode}
     </delete>
@@ -520,4 +553,30 @@
     </delete>
 
 
+    <select id="getOpeUseFlowByCode2"  resultMap="OpeUseFlow">
+        select oa.*,su.name as user_name,w.name as warehouse_name,l.name as laboratory_name, wc.name as warehouse_container_name,lc.name as laboratory_container_name
+        from ope_use_flow as oa
+        left join sys_user su on oa.user_id = su.id
+        left join sys_warehouse_container wc on wc.id = oa.container_id
+        left join sys_warehouse w on w.id = oa.house_id
+        left join sys_laboratory_container lc on lc.id = oa.container_id
+        left join sys_laboratory l on l.id = lc.laboratory_id
+        where oa.valid_flag = 1 and oa.reagent_code=#{reagentCode}
+        order by oa.create_time desc
+    </select>
+
+    <select id="getLastUseFlow" resultMap="OpeUseFlow">
+        select * from ope_use_flow where reagent_code=#{reagentCode} order by create_time desc limit 1
+    </select>
+
+    <select id="getUseFlowByCodeAndStatus" resultMap="OpeUseFlow">
+        select * from ope_use_flow where reagent_code=#{reagentCode} and operatestate=#{operateStatus}
+    </select>
+
+    <select id="getUseFlowByCodeAndStatuses" resultMap="OpeUseFlow">
+        select * from ope_use_flow where reagent_code=#{reagentCode} and operatestate in
+        <foreach collection ="operateStatuses" item="opestatus" separator ="," open="(" close=")">
+           #{opestatus}
+        </foreach >
+    </select>
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java
index cbd8380..7a18a41 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java
@@ -29,7 +29,7 @@
 
     OpeWarehouseReserve getOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve);
 
-    List<OpeWarehouseReserve> selectByReId(String id);
+    List<OpeWarehouseReserve> selectByReId(Long id);
     public int updateByReId(Map params);
 
     //仓库指定试剂自加1
@@ -41,9 +41,9 @@
 
     List<OpeWarehouseReserve> selectWarehouseByRidAndArtiNumberAndWid(Map params);
 
-    void updateBtReserve(String id, Integer useNum);
+    void updateBtReserve(Long id, Integer useNum);
 
-    Integer countByReagentId(String id);
+    Integer countByReagentId(Long id);
 
-    OpeWarehouseReserve getRowData(@Param("id") String rowKey);
+    OpeWarehouseReserve getRowData(@Param("id") Long rowKey);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
index d79f0c2..c4153c5 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml
@@ -106,13 +106,13 @@
     <include refid="queryWhereSql"/>
   </select>
 
-    <insert id="insertOpeWarehouseReserve" parameterType="com.nanometer.smartlab.entity.OpeWarehouseReserve">
-        insert into ope_warehouse_reserve(id, reagent_id, article_number, reserve, valid_flag, update_time,warehouseId,container_id,user_id)
-        values (#{id}, #{reagentId}, #{articleNumber}, #{reserve}, 1, now(),#{warehouseId},#{containerId},#{userId})
+    <insert id="insertOpeWarehouseReserve" parameterType="com.nanometer.smartlab.entity.OpeWarehouseReserve" useGeneratedKeys = "true" keyProperty = "id">
+        insert into ope_warehouse_reserve(reagent_id, article_number, reserve, valid_flag, update_time,warehouseId,container_id,user_id)
+        values (#{reagentId}, #{articleNumber}, #{reserve}, 1, now(),#{warehouseId},#{containerId},#{userId})
     </insert>
-    <insert id="insertOpeWarehouseReserve2" parameterType="com.nanometer.smartlab.entity.OpeWarehouseReserve">
-        insert into ope_warehouse_reserve(id, reagent_id, article_number, reserve, valid_flag, update_time,warehouseId,apply_code,order_code,container_id,user_id)
-        values (#{id}, #{reagentId}, #{articleNumber}, #{reserve}, 1, now(),#{warehouseId},#{applyCode},#{orderCode},#{containerId},#{userId})
+    <insert id="insertOpeWarehouseReserve2" parameterType="com.nanometer.smartlab.entity.OpeWarehouseReserve" useGeneratedKeys = "true" keyProperty = "id">
+        insert into ope_warehouse_reserve(reagent_id, article_number, reserve, valid_flag, update_time,warehouseId,apply_code,order_code,container_id,user_id)
+        values ( #{reagentId}, #{articleNumber}, #{reserve}, 1, now(),#{warehouseId},#{applyCode},#{orderCode},#{containerId},#{userId})
     </insert>
 
     <update id="updateOpeWarehouseReserve" parameterType="com.nanometer.smartlab.entity.OpeWarehouseReserve">
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.java b/src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.java
index 28c2b0a..14454c0 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.java
@@ -20,6 +20,6 @@
 
     int selectOne(@Param("containerCode") String containerCode,
                   @Param("controllerCode") String controllerCode,
-                  @Param("warningId") String warningId,
+                  @Param("warningId") Long warningId,
                   @Param("warningTime")Timestamp warningTime);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.xml
index bd64a7d..3a82152 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysAlarmDao.xml
@@ -24,7 +24,7 @@
       and #{endWarningTime} >= sw.warning_time
     </if>
   </sql>
-  <insert id="insertSysAlarm" parameterType="com.nanometer.smartlab.entity.SysAlarm">
+  <insert id="insertSysAlarm" parameterType="com.nanometer.smartlab.entity.SysAlarm" useGeneratedKeys = "true" keyProperty = "id">
     insert into sys_alarm(container_code, warning_id, warning_time, warning_level, controller_code)
     values (#{containerCode}, #{warningId}, #{warningTime}, #{warningLevel}, #{controllerCode})
   </insert>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.java b/src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.java
index 8852b43..b6a13eb 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.java
@@ -15,5 +15,5 @@
 
 	int repeatedJudgment(@Param("containerCode") String containerCode, @Param("warningLevel") Integer warningLevel, @Param("warningTime")Timestamp warningTime);
 
-    List<SysAlarmPerson> selectByCode(@Param("containerCode") String containerCode,@Param("warningId") String warningid);
+    List<SysAlarmPerson> selectByCode(@Param("containerCode") String containerCode,@Param("warningId") Long warningid);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.xml
index c5bdf3d..8b1a9c2 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysAlarmPersonDao.xml
@@ -12,7 +12,7 @@
     <result property="refId" column="daping_alarm_id"/>
   </resultMap>
 
-  <insert id="insertSysAlarmPerson" parameterType="com.nanometer.smartlab.entity.SysAlarmPerson">
+  <insert id="insertSysAlarmPerson" parameterType="com.nanometer.smartlab.entity.SysAlarmPerson" useGeneratedKeys = "true" keyProperty = "id">
     insert into sys_warning(container_code, warning_id, warning_time, warning_level, user_id, warning_point,daping_alarm_id,memo)
     values (#{containerCode}, #{warningId}, #{warningTime}, #{warningLevel}, #{userId}, #{warningPoint},#{refId},#{memo} )
   </insert>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysContainerSensorsDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysContainerSensorsDao.xml
index c4f1f8b..6d227ae 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysContainerSensorsDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysContainerSensorsDao.xml
@@ -20,22 +20,19 @@
   <sql id="Base_Column_List">
     id, container_id, temp, humidity, voc1, flag, type, update_time
   </sql>
-  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap">
     select
     <include refid="Base_Column_List" />
     from sys_container_sensors
     where id = #{id,jdbcType=VARCHAR}
   </select>
-  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+  <delete id="deleteByPrimaryKey" >
     delete from sys_container_sensors
     where id = #{id,jdbcType=VARCHAR}
   </delete>
-  <insert id="insertSelective" parameterType="com.nanometer.smartlab.entity.SysContainerSensors">
+  <insert id="insertSelective" parameterType="com.nanometer.smartlab.entity.SysContainerSensors" useGeneratedKeys = "true" keyProperty = "id">
     insert into sys_container_sensors
     <trim prefix="(" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        id,
-      </if>
       <if test="containerId != null">
         container_id,
       </if>
@@ -59,9 +56,6 @@
       </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
-      <if test="id != null">
-        #{id,jdbcType=VARCHAR},
-      </if>
       <if test="containerId != null">
         #{containerId,jdbcType=VARCHAR},
       </if>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysControllerDao.java b/src/main/java/com/nanometer/smartlab/dao/SysControllerDao.java
index b8ae8d9..93b9dc0 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysControllerDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysControllerDao.java
@@ -21,11 +21,11 @@
     
     List<SysController> getAllControllerList();
     
-    SysController getSysController(Integer id);
+    SysController getSysController(Long id);
     
     List<SysController> getSysControllerList(Map params);
     
-    int deleteSysControllers(List<Integer> ids);
+    int deleteSysControllers(List<Long> ids);
 
     List<Map> exportExcelList(Map params);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysControllerDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysControllerDao.xml
index 6267331..9dc943c 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysControllerDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysControllerDao.xml
@@ -21,11 +21,11 @@
     </if>
   </sql>
 
-  <select id="getSysControllerByCode" parameterType="java.lang.String"  resultMap="SysController" >
+  <select id="getSysControllerByCode"   resultMap="SysController" >
     select * from sys_controller where controller_code = #{controllerCode}
   </select>
 
-  <select id="getSysControllerByName" parameterType="java.lang.String"  resultMap="SysController" >
+  <select id="getSysControllerByName"  resultMap="SysController" >
     select * from sys_controller where controller_name = #{controllerName}
   </select>
 
@@ -65,12 +65,12 @@
     order by sc.create_time desc
   </select>
 
-  <insert id="insertSysController" parameterType="com.nanometer.smartlab.entity.SysController">
+  <insert id="insertSysController" parameterType="com.nanometer.smartlab.entity.SysController" useGeneratedKeys = "true" keyProperty = "id">
     insert into sys_controller(type,controller_code, controller_name, valid_flag, create_time, update_time)
     values (#{type},#{controllerCode}, #{controllerName}, #{validFlag}, #{createTime}, #{updateTime})
   </insert>
 
-  <insert id="insertSysControllerById" parameterType="com.nanometer.smartlab.entity.SysController">
+  <insert id="insertSysControllerById" parameterType="com.nanometer.smartlab.entity.SysController" useGeneratedKeys = "true" keyProperty = "id">
     insert into sys_controller(type,controller_code, controller_name, valid_flag, create_time, update_time)
     values (#{type},#{controllerCode}, #{controllerName}, 1, now(), now())
   </insert>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysFileDao.java b/src/main/java/com/nanometer/smartlab/dao/SysFileDao.java
index ad33af0..154faab 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysFileDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysFileDao.java
@@ -12,8 +12,8 @@
 
     public int insertSysFile(SysFile SysProject) throws DataAccessException;
     public int updateSysFile(SysFile SysProject) throws DataAccessException;
-    public int deleteSysFile(List<String> ids) throws DataAccessException;
+    public int deleteSysFile(List<Long> ids) throws DataAccessException;
 
 
-    public SysFile getSysFileById(String id) throws DataAccessException;
+    public SysFile getSysFileById(Long id) throws DataAccessException;
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysFileDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysFileDao.xml
index 1c8dab3..4f112c9 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysFileDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysFileDao.xml
@@ -18,7 +18,7 @@
 
 
 
-  <select id="getSysFileById" parameterType="java.lang.String"  resultMap="SysFile" >
+  <select id="getSysFileById"  resultMap="SysFile" >
     select * from sys_file where id = #{id}
   </select>
 
@@ -47,16 +47,16 @@
 
 
 
-  <insert id="insertSysFile" parameterType="com.nanometer.smartlab.entity.SysFile">
-    insert into sys_file(id, valid_flag,name,fileName,url,createTime,updateTime,remark,version,newOrOld)
-    values (#{id}, #{validFlag}, #{name}, #{fileName}, #{url},now(),now(),#{remark},#{version},#{newOrOld})
+  <insert id="insertSysFile" parameterType="com.nanometer.smartlab.entity.SysFile" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_file( valid_flag,name,fileName,url,createTime,updateTime,remark,version,newOrOld)
+    values ( #{validFlag}, #{name}, #{fileName}, #{url},now(),now(),#{remark},#{version},#{newOrOld})
   </insert>
 
   <update id="updateSysFile" parameterType="com.nanometer.smartlab.entity.SysFile">
     update sys_file set name=#{name},version=#{version},fileName=#{fileName}, url=#{url}, remark=#{remark},updateTime=now(),newOrOld=#{newOrOld} where id=#{id}
   </update>
 
-  <update id="deleteSysFile" parameterType="java.lang.String">
+  <update id="deleteSysFile" >
     update sys_file set valid_flag=0 where id in
     <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
       #{item}
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.java b/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.java
index f43c68a..174b59f 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.java
@@ -1,5 +1,6 @@
 package com.nanometer.smartlab.dao;
 
+import com.nanometer.smartlab.entity.SysLaboratory;
 import com.nanometer.smartlab.entity.SysLaboratoryContainer;
 import com.nanometer.smartlab.entity.SysWarehouseContainer;
 import org.springframework.dao.DataAccessException;
@@ -12,7 +13,7 @@
  */
 public interface SysLaboratoryContainerDao {
 
-    SysLaboratoryContainer getSysLaboratoryContainer(String id) throws DataAccessException;
+    SysLaboratoryContainer getSysLaboratoryContainer(Long id) throws DataAccessException;
     @SuppressWarnings("rawtypes")
     List<SysLaboratoryContainer> getSysLaboratoryContainerList(Map params) throws DataAccessException;
 
@@ -23,7 +24,7 @@
 
     void insertSysLaboratoryContainer(SysLaboratoryContainer sysLaboratoryContainer) throws DataAccessException;
     int updateSysLaboratoryContainer(SysLaboratoryContainer sysLaboratoryContainer) throws DataAccessException;
-    int deleteSysLaboratoryContainers(List<String> ids) throws DataAccessException;
+    int deleteSysLaboratoryContainers(List<Long> ids) throws DataAccessException;
     int updateSLContainerUser(SysLaboratoryContainer sysLaboratoryContainer) throws DataAccessException;
 
     SysLaboratoryContainer getSysLaboratoryContainerByContainerCode(String containerCode) throws DataAccessException;
@@ -52,7 +53,9 @@
 
     List<String> selectProjectsByContainerCode(String containerCode);
 
-    int delSlcIds(List<String> ids);
+    int delSlcIds(List<Long> ids);
 
     int getSysLaboratoryContainerExist(Map<String, Object> params);
+
+    List<SysLaboratoryContainer> getLaboratoryByProjectId(Long projectId);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.xml
index be36307..8878e15 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryContainerDao.xml
@@ -35,7 +35,7 @@
     select container_code,name,valid_flag,type,character_left,character_right from sys_laboratory_container where update_time >= #{startTime} and #{endTime} > update_time
   </select>
 
-  <select id="getSysLaboratoryContainer" parameterType="java.lang.String"  resultMap="SysLaboratoryContainer" >
+  <select id="getSysLaboratoryContainer"  resultMap="SysLaboratoryContainer" >
     select su.*,ss.name as laboratoryName, ss.type as laboratoryType ,su.project project
     from sys_laboratory_container as su
     left join sys_laboratory as ss on su.laboratory_id = ss.id
@@ -44,7 +44,7 @@
     and ss.valid_flag = 1
   </select>
 
-  <select id="getSysLaboratoryContainerByContainerCode" parameterType="java.lang.String" resultMap="SysLaboratoryContainer">
+  <select id="getSysLaboratoryContainerByContainerCode" resultMap="SysLaboratoryContainer">
      SELECT
      sys_laboratory_container.*
      FROM
@@ -68,11 +68,9 @@
   </select>
 
   <select id="getSysLaboratoryContainerList" parameterType="java.util.Map" resultMap="SysLaboratoryContainer">
-    select su.*,ss.name as laboratoryName, ss.type as laboratoryType,sc.controller_name as controllerName,su.project as project  from sys_laboratory_container as su
+    select su.*,ss.name as laboratoryName, ss.type as laboratoryType,su.project as project  from sys_laboratory_container as su
     left join sys_laboratory as ss on su.laboratory_id = ss.id
-    left join sys_controller sc on sc.controller_code=su.controller_code
     where su.valid_flag = 1
-    AND sc.valid_flag = 1
     AND ss.valid_flag = 1
     <if test="laboratoryType != null and laboratoryType != ''">
       and ss.type = #{laboratoryType}
@@ -86,10 +84,7 @@
     <if test="project != null and project != ''">
       and su.project like concat("%",#{project},"%")
     </if>
-    <if test="controllerName != null and controllerName != ''">
-      and sc.controller_name like concat("%",#{controllerName},"%")
-    </if>
-    order by ss.name ASC,sc.controller_name,su.container_code,su.name
+    order by ss.name ASC,su.container_code,su.name
     <if test="first != null and pageSize != null">
       limit #{first}, #{pageSize}
     </if>
@@ -98,19 +93,14 @@
 
   <select id="getSysLaboratoryContainerSimpleInfoList" parameterType="java.util.Map" resultMap="SysLaboratoryContainer">
     select su.id,su.name,su.container_code,su.info_code,su.project as project,bm1.meta_value as type,bm2.meta_value as structure,
-           ss.name as laboratoryName,sc.controller_name as controllerName from sys_laboratory_container as su
+           ss.name as laboratoryName from sys_laboratory_container as su
     left join sys_laboratory as ss on su.laboratory_id = ss.id
-    left join sys_controller sc on sc.controller_code=su.controller_code
     left join base_meta bm1 ON bm1.id = su.type
     left join base_meta bm2 ON bm2.id = su.structure
     where su.valid_flag = 1
-    AND sc.valid_flag = 1
     AND ss.valid_flag = 1
     <if test="laboratoryName != null and laboratoryName != ''">
       and ss.name like #{laboratoryName}
-    </if>
-    <if test="controllerName != null and controllerName != ''">
-      and sc.controller_name like concat("%",#{controllerName},"%")
     </if>
     order by su.create_time desc
     <if test="first != null and pageSize != null">
@@ -160,9 +150,7 @@
   <select id="getSysLaboratoryContainerTotalCount" parameterType="java.util.Map" resultType="int">
     select count(1) from sys_laboratory_container as su
     left join sys_laboratory as ss on su.laboratory_id = ss.id
-    left join sys_controller sc on sc.controller_code=su.controller_code
     where su.valid_flag = 1
-    AND sc.valid_flag = 1
     AND ss.valid_flag = 1
     <if test="laboratoryType != null and laboratoryType != ''">
       and ss.type = #{laboratoryType}
@@ -182,14 +170,11 @@
     <if test="project != null and project != ''">
       and su.project like concat("%",#{project},"%")
     </if>
-    <if test="controllerName != null and controllerName != ''">
-      and sc.controller_name like concat("%",#{controllerName},"%")
-    </if>
   </select>
 
-  <insert id="insertSysLaboratoryContainer" parameterType="com.nanometer.smartlab.entity.SysLaboratoryContainer">
-    insert into sys_laboratory_container(id, laboratory_id, type, container_code, info_code, structure, name, valid_flag, character_left, character_right, create_time, update_time, controller_code,project)
-    values (#{id}, #{laboratoryId}, #{type}, #{containerCode}, #{infoCode}, #{structure}, #{name}, 1, #{characterLeft}, #{characterRight}, now(), now(), #{controllerCode},#{project})
+  <insert id="insertSysLaboratoryContainer" parameterType="com.nanometer.smartlab.entity.SysLaboratoryContainer" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_laboratory_container( laboratory_id, type, container_code, info_code, structure, name, valid_flag, character_left, character_right, create_time, update_time, controller_code,project)
+    values ( #{laboratoryId}, #{type}, #{containerCode}, #{infoCode}, #{structure}, #{name}, 1, #{characterLeft}, #{characterRight}, now(), now(), #{controllerCode},#{project})
   </insert>
 
   <update id="updateSysLaboratoryContainer" parameterType="com.nanometer.smartlab.entity.SysLaboratoryContainer">
@@ -228,13 +213,13 @@
     </foreach>
   </select>
 
-  <update id="updateSysLaboratoryContainerClearControllerCode" parameterType="java.lang.String" >
+  <update id="updateSysLaboratoryContainerClearControllerCode">
     update sys_laboratory_container set
     controller_code=null
     where controller_code=#{controllerCode}
   </update>
 
-  <select id="getSysLaboratoryContainerByControllerCode" parameterType="java.lang.String" resultMap="SysLaboratoryContainer">
+  <select id="getSysLaboratoryContainerByControllerCode" resultMap="SysLaboratoryContainer">
     select * from sys_laboratory_container
     where controller_code = #{controllerCode}
   </select>
@@ -245,7 +230,7 @@
   </update>
 
 
-  <select id="getContainerPersonInCharge" parameterType="java.lang.String" resultType="java.util.Map">
+  <select id="getContainerPersonInCharge"  resultType="java.util.Map">
     SELECT slc.container_code containCode,su.name name,su.phone phone,
     CONCAT(sl.location1,"-",sl.location2) location
     FROM sys_laboratory_container slc
@@ -261,7 +246,7 @@
 
 
 
-  <select id="selectLocationByContainerCode" parameterType="java.lang.String" resultType="java.util.Map">
+  <select id="selectLocationByContainerCode" resultType="java.util.Map">
      SELECT
      sl.name,
   CONCAT(sl.location1,"-",sl.location2) location,sl.bar_code barCode
@@ -273,7 +258,7 @@
   and sl.valid_flag = 1
   </select>
 
-  <select id="selectProjectsByContainerCode" resultType="java.lang.String">
+  <select id="selectProjectsByContainerCode" resultType="string">
   SELECT
 	slc.project
     FROM
@@ -295,4 +280,9 @@
       and su.id != #{editId}
     </if>
   </select>
+
+  <select id="getLaboratoryByProjectId" resultMap="SysLaboratoryContainer">
+    select * from sys_laboratory_container
+    where find_in_set(#{projectId},project)
+  </select>
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.java b/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.java
index e8b68c5..dae9dcb 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.java
@@ -13,9 +13,9 @@
  */
 public interface SysLaboratoryDao {
 
-    public SysLaboratory getSysLaboratory(String id) throws DataAccessException;
+    public SysLaboratory getSysLaboratory(Long id) throws DataAccessException;
 
-    public SysLaboratory getSysLaboratorySimpleInfo(String id) throws DataAccessException;
+    public SysLaboratory getSysLaboratorySimpleInfo(Long id) throws DataAccessException;
 
     @SuppressWarnings("rawtypes")
 	public List<SysLaboratory> getSysLaboratoryList(Map params) throws DataAccessException;
@@ -27,7 +27,7 @@
 
     public void insertSysLaboratory(SysLaboratory sysLaboratory) throws DataAccessException;
     public int updateSysLaboratory(SysLaboratory sysLaboratory) throws DataAccessException;
-    public int deleteSysLaboratorys(List<String> ids) throws DataAccessException;
+    public int deleteSysLaboratorys(List<Long> ids) throws DataAccessException;
 
     public SysLaboratory getSysLaboratoryByBarCode(String barCode) throws DataAccessException;
 
@@ -35,11 +35,19 @@
 
     public  void updateLabExport(SysLaboratory sysLaboratory);
 
-    List<Map> exportLabList(Map params);
+    List<SysLaboratory> exportLabList(Map params);
 
-    List<LaboratoryVo.Laboratory> getLaboratoryByProject(@Param("project") String project);
+    List<LaboratoryVo.Laboratory> getLaboratoryByProject(@Param("projectId") Long projectId);
 
     SysLaboratory getSysLaboratoryByName(String name);
 
     List<Map> getPersonInCharge(String project);
+
+    /**
+     * 根据课题id获取实验室列表
+     * @param projectId
+     * @return
+     */
+    List<SysLaboratory> getLaboratoryByProjectId(Long projectId);
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.xml
index b2323cf..3ed0857 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysLaboratoryDao.xml
@@ -4,16 +4,25 @@
   <resultMap id="SysLaboratory" type="com.nanometer.smartlab.entity.SysLaboratory">
     <id property="id" column="id"/>
     <result property="type" column="type"></result>
+    <result property="typeName" column="type_name"></result>
     <result property="name" column="name"></result>
     <result property="infoCode" column="info_code"></result>
     <result property="barCode" column="bar_code"></result>
     <result property="location1" column="location1"></result>
     <result property="location2" column="location2"></result>
+    <result property="location" column="location"></result>
     <result property="department" column="department"></result>
+    <result property="departmentName" column="department_name"></result>
     <result property="validFlag" column="valid_flag" typeHandler="com.nanometer.smartlab.entity.handler.ValidFlagHandler"></result>
     <result property="createTime" column="create_time"></result>
     <result property="updateTime" column="update_time"></result>
     <result property="project" column="project"></result>
+    <collection property="projects" ofType="com.nanometer.smartlab.entity.SysProject" select="getProjectsByIds" column="{projectIds=project}"/>
+  </resultMap>
+
+  <resultMap id="laboratoryAndContainerMap" type="com.nanometer.smartlab.entity.SysLaboratory" extends="SysLaboratory">
+    <collection property="laboratoryContainers" ofType="com.nanometer.smartlab.entity.SysLaboratoryContainer" select="getContaninerByLabId" column="{labId=id}"/>
+    <collection property="projects" ofType="com.nanometer.smartlab.entity.SysProject" select="getProjectsByIds" column="{projectIds=project}"/>
   </resultMap>
 
   <sql id="queryWhereSql">
@@ -37,12 +46,12 @@
     </if>
   </sql>
 
-  <select id="getSysLaboratory" parameterType="java.lang.String"  resultMap="SysLaboratory" >
+  <select id="getSysLaboratory"   resultMap="SysLaboratory" >
     select * from sys_laboratory
     where id = #{id} and valid_flag = 1
   </select>
 
-  <select id="getSysLaboratorySimpleInfo" parameterType="java.lang.String"  resultMap="SysLaboratory">
+  <select id="getSysLaboratorySimpleInfo"   resultType="com.nanometer.smartlab.entity.SysLaboratory">
     select id,name from sys_laboratory
     where id = #{id} and valid_flag = 1
   </select>
@@ -58,7 +67,8 @@
   </select>
 
   <select id="getSysLaboratorySimpleInfoList" parameterType="java.util.Map" resultMap="SysLaboratory">
-    select su.id,su.name,su.info_code,su.bar_code,su.location1,su.location2,su.project,su.create_time,su.update_time,bm1.meta_value as type,bm2.meta_value as department from sys_laboratory as su
+    select su.id,su.type,su.name,su.info_code,su.bar_code,su.location1,su.location2,su.project,su.create_time,su.update_time,bm1.meta_value as type_name,bm2.meta_value as department
+    from sys_laboratory as su
     left join base_meta as bm1 on bm1.id=su.type
     left join base_meta as bm2 on bm2.id=su.department
     where su.valid_flag = 1
@@ -69,8 +79,8 @@
     </if>
   </select>
 
-  <select id="exportLabList" parameterType="java.util.Map" resultType="java.util.Map">
-    SELECT bm1.meta_value type ,sl.name,sl.info_code infoCode,sl.bar_code barCode,
+  <select id="exportLabList" parameterType="java.util.Map" resultMap="SysLaboratory">
+    SELECT sl.id,bm1.meta_value type_name ,sl.name,sl.info_code info_code,sl.bar_code bar_code,
     CASE
     WHEN (ISNULL(location1)=1) || (LENGTH(trim(location1))=0)
     THEN
@@ -79,7 +89,7 @@
     CONCAT(location1,'-',location2)
     END
     location,
-    bm2.meta_value department,
+    bm2.meta_value department_name,
     sl.project
     from sys_laboratory as sl
     LEFT JOIN base_meta bm1 on bm1.id = sl.type
@@ -108,9 +118,9 @@
     order by name asc
   </select>
 
-  <insert id="insertSysLaboratory" parameterType="com.nanometer.smartlab.entity.SysLaboratory">
-    insert into sys_laboratory(id, type, name, info_code, bar_code, location1, location2, valid_flag,department, create_time, update_time,project)
-    values (#{id}, #{type}, #{name}, #{infoCode}, #{barCode}, #{location1}, #{location2}, 1,#{department}, now(), now(),#{project})
+  <insert id="insertSysLaboratory" parameterType="com.nanometer.smartlab.entity.SysLaboratory" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_laboratory( type, name, info_code, bar_code, location1, location2, valid_flag,department, create_time, update_time,project)
+    values ( #{type}, #{name}, #{infoCode}, #{barCode}, #{location1}, #{location2}, 1,#{department}, now(), now(),#{project})
   </insert>
 
   <update id="updateSysLaboratory" parameterType="com.nanometer.smartlab.entity.SysLaboratory">
@@ -127,12 +137,12 @@
     </foreach>
   </update>
 
-  <select id="getSysLaboratoryByBarCode" parameterType="java.lang.String"  resultMap="SysLaboratory" >
+  <select id="getSysLaboratoryByBarCode"   resultMap="SysLaboratory" >
     select * from sys_laboratory
     where bar_code = #{barCode} and valid_flag=1
   </select>
 
-  <select id="getSysLaboratoryByBarCodeForExport" parameterType="java.lang.String"  resultMap="SysLaboratory" >
+  <select id="getSysLaboratoryByBarCodeForExport"  resultMap="SysLaboratory" >
     select * from sys_laboratory
     where bar_code = #{barCode}
     and valid_flag=1
@@ -145,7 +155,7 @@
 	sys_laboratory as sl
     LEFT JOIN base_meta bm on bm.id = sl.department
     WHERE
-	sl.project LIKE CONCAT('%',#{project},'%')
+    find_in_set(#{projectId},sl.project)
   </select>
   <select id="getSysLaboratoryByName"  resultMap="SysLaboratory">
     select *
@@ -174,4 +184,24 @@
     update_time=now()
     where id=#{id}
   </update>
+
+  <select id="getLaboratoryByProjectId" resultMap="laboratoryAndContainerMap">
+        select sl.*,bm.meta_value as type_name from sys_laboratory sl
+        left join base_meta bm on bm.id=sl.type
+        where find_in_set(#{projectId},project)
+  </select>
+
+  <select id="getContaninerByLabId" resultType="com.nanometer.smartlab.entity.SysLaboratoryContainer">
+        select * from sys_laboratory_container where laboratory_id=#{labId}
+  </select>
+
+  <select id="getProjectsByIds" resultType="com.nanometer.smartlab.entity.SysProject">
+    select id,project_no as projectNo,project_name as projectName,sys_user_id as sysUserId,project from sys_project where id in
+    <foreach item="item" index="index" collection="projectIds.split(',')"  open="(" separator="," close=")">
+      #{item}
+    </foreach>
+  </select>
+
+
+
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysProjectDao.java b/src/main/java/com/nanometer/smartlab/dao/SysProjectDao.java
index d8e505d..159e8ad 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysProjectDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysProjectDao.java
@@ -7,20 +7,24 @@
 import java.util.Map;
 
 public interface SysProjectDao {
-    public SysProject getSysProject(String id) throws DataAccessException;
+    public SysProject getSysProject(Long id) throws DataAccessException;
+
+    public SysProject getSysProjectByName(String projectName) throws DataAccessException;
     public List<SysProject> getSysProjectList(Map params) throws DataAccessException;
     public int getSysProjectTotalCount(Map params) throws DataAccessException;
 
     public int insertSysProject(SysProject SysProject) throws DataAccessException;
     public int updateSysProject(SysProject SysProject) throws DataAccessException;
-    public int deleteSysProjects(List<String> ids) throws DataAccessException;
+    public int deleteSysProjects(List<Long> ids) throws DataAccessException;
 
     public List<SysProject> getSysProjectListUpdate(Map params) throws DataAccessException;
     public int getSysProjectTotalCountUpdate(Map params) throws DataAccessException;
 
-    public SysProject getProjectByProId(String projectId) throws DataAccessException;
+    public SysProject getProjectByProNo(String projectNo) throws DataAccessException;
 
-    public List<SysProject> getSysProjectListByProjectId(Map params) throws DataAccessException;
+    public List<SysProject> getSysProjectListByProjectNo(Map params) throws DataAccessException;
+
+    public SysProject getSysProjectListByProjectId(Long id);
 
     void insertBatch(List<?> list);
 
@@ -29,4 +33,6 @@
 
     //课题组是否存在
     int selectByProject(String project);
+
+    List<SysProject> getProjectByIds(List<Long> ids);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysProjectDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysProjectDao.xml
index b2e0c03..e6c9878 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysProjectDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysProjectDao.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.nanometer.smartlab.dao.SysProjectDao">
   <resultMap id="SysProject" type="com.nanometer.smartlab.entity.SysProject">
     <id property="id" column="id"/>
-    <result property="projectId" column="project_id"></result>
+    <result property="projectNo" column="project_no"></result>
     <result property="projectName" column="project_name"></result>
     <result property="sysUserId" column="sys_user_id"></result>
     <result property="remark" column="remark"></result>
@@ -15,8 +15,8 @@
   </resultMap>
 
   <sql id="queryWhereSql">
-    <if test="projectId != null and projectId != ''">
-      and sp.project_id like #{projectId}
+    <if test="projectNo != null and projectNo != ''">
+      and sp.project_no like #{projectNo}
     </if>
     <if test="projectName != null and projectName != ''">
       and sp.project_name like #{projectName}
@@ -26,18 +26,29 @@
     </if>
   </sql>
 
-  <select id="getProjectByProId" parameterType="java.lang.String" resultMap="SysProject">
-  select * from sys_project where project_id=#{projectId} and valid_flag=1
+  <select id="getProjectByProNo"  resultMap="SysProject">
+  select * from sys_project where project_no=#{projectNo} and valid_flag=1
   </select>
 
-  <select id="getSysProjectListByProjectId" parameterType="java.lang.String" resultMap="SysProject">
+  <select id="getSysProjectListByProjectNo"  resultMap="SysProject">
   select sp.*,su.`name` userName from sys_project as sp
-    left join sys_user su on su.id=sp.sys_user_id where sp.project_id=#{projectId}
+    left join sys_user su on su.id=sp.sys_user_id where sp.project_no=#{projectNd}
   </select>
 
-  <select id="getSysProject" parameterType="java.lang.String"  resultMap="SysProject" >
+  <select id="getSysProjectListByProjectId" resultMap="SysProject">
+    select sp.*,su.`name` userName from sys_project as sp
+    left join sys_user su on su.id=sp.sys_user_id where sp.id=#{id}
+  </select>
+
+  <select id="getSysProject"  resultMap="SysProject" >
     select * from sys_project where id = #{id}
   </select>
+
+  <select id="getSysProjectByName"   resultMap="SysProject" >
+    select * from sys_project where project_name = #{projectName}
+  </select>
+
+
 
   <select id="getSysProjectList" parameterType="java.util.Map" resultMap="SysProject">
     select sp.*,su.`name` userName from sys_project as sp
@@ -55,22 +66,22 @@
       FROM
           sys_project sp
           WHERE sp.valid_flag = 1
-          AND sp.project is not null
+          AND sp.project_name is not null
       GROUP BY
-          sp.project
+          sp.project_name
   </select>
 
 
-  <insert id="insertBatch" parameterType="java.util.List">
+  <insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys = "true" keyProperty = "id">
     insert into sys_project
-    (id,project_id,project_name,sys_user_id,remark,valid_flag,creater_user,create_time)
+    (project_no,project_name,sys_user_id,remark,valid_flag,creater_user,create_time)
     values
     <foreach collection="list" separator="," item="project">
-(#{project.id},#{project.projectId},#{project.projectName},#{project.sysUserId},#{project.remark},1,#{project.createrUser},now())
+(#{project.projectNo},#{project.projectName},#{project.sysUserId},#{project.remark},1,#{project.createrUser},now())
     </foreach>
 
   </insert>
-  <select id="getSysProjectListByIds" parameterType="java.util.List">
+  <select id="getSysProjectListByIds" parameterType="java.util.List" >
     select sp.* from sys_project as sp where valid_flag=1
     <include refid="queryWhereSql"/>
     <if test="first != null and pageSize != null">
@@ -91,8 +102,8 @@
     <if test="createrUser!= '' and createrUser != null">
      and  sp.creater_user=#{createrUser}
     </if>
-    <if test="projectId != '' and projectId != null">
-      and sp.project_id=#{projectId}
+    <if test="projectNo != '' and projectNo != null">
+      and sp.project_no=#{projectNo}
     </if>
     <if test="sysUserName != '' and sysUserName != null">
       and su.name like #{sysUserName}
@@ -109,8 +120,8 @@
     <if test="createrUser != '' and createrUser != null">
       and creater_user=#{createrUser}
     </if>
-    <if test="projectId != '' and projectId != null">
-      and sp.project_id=#{projectId}
+    <if test="projectNo != '' and projectNo != null">
+      and sp.project_no=#{projectNo}
     </if>
     <if test="sysUserName != '' and sysUserName != null">
       and su.name like #{sysUserName}
@@ -127,17 +138,17 @@
         select count(0)
         from sys_project
         where valid_flag = 1
-        and project = #{0}
+        and project_name = #{0}
 
   </select>
 
-  <insert id="insertSysProject" parameterType="com.nanometer.smartlab.entity.SysProject">
-    insert into sys_project(id, project_id,project_name,sys_user_id,remark,valid_flag,creater_user,create_time,project)
-    values (#{id}, #{projectId}, #{projectName}, #{sysUserId}, #{remark},#{validFlag},#{createrUser},now(),#{project})
+  <insert id="insertSysProject" parameterType="com.nanometer.smartlab.entity.SysProject" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_project( project_no,project_name,sys_user_id,remark,valid_flag,creater_user,create_time,project)
+    values ( #{projectNo}, #{projectName}, #{sysUserId}, #{remark},#{validFlag},#{createrUser},now(),#{project})
   </insert>
 
   <update id="updateSysProject" parameterType="com.nanometer.smartlab.entity.SysProject">
-    update sys_project set project_id=#{projectId}, project_name=#{projectName}, sys_user_id=#{sysUserId}, remark=#{remark} ,project=#{project} where id=#{id}
+    update sys_project set project_no=#{projectNo}, project_name=#{projectName}, sys_user_id=#{sysUserId}, remark=#{remark} ,project=#{project} where id=#{id}
   </update>
 
   <update id="deleteSysProjects" parameterType="java.util.List">
@@ -146,4 +157,13 @@
       #{item}
     </foreach>
   </update>
+
+
+  <select id="getProjectByIds" resultType="com.nanometer.smartlab.entity.SysProject">
+    select * from sys_project where valid_flag=1 and id in
+    <foreach collection="list" separator="," item="id">
+      (#{id})
+    </foreach>
+
+  </select>
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java
index 8406ed1..6bab774 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java
@@ -13,7 +13,7 @@
  */
 public interface SysReagentDao {
 
-    public SysReagent getSysReagent(String id) throws DataAccessException;
+    public SysReagent getSysReagent(Long id) throws DataAccessException;
     public List<SysReagent> getSysReagentByCas(SysReagent sysReagent) throws DataAccessException;
     public SysReagent getSysReagentByCas2(SysReagent sysReagent) throws DataAccessException;
     public List<SysReagent> getSysReagentList(Map params) throws DataAccessException;
@@ -24,7 +24,7 @@
     public void insertSysReagent(SysReagent sysReagent) throws DataAccessException;
     public int updateSysReagent(SysReagent sysReagent) throws DataAccessException;
     public int updateSysReagentForExport(SysReagent sysReagent) throws DataAccessException;
-    public int deleteSysReagent(List<String> ids) throws DataAccessException;
+    public int deleteSysReagent(List<Long> ids) throws DataAccessException;
 
     public List<SysReagent> query();
     //试剂库总数
@@ -36,15 +36,15 @@
     int reagentSimpleInfoCount(Map params);
     int favorCount(Map params);
     List<SysReagent> favorList(Map params);
-    Map getSysReagentDetail(String id);
+    Map getSysReagentDetail(Long id);
 
-    String getReagentUnitByReagentId(String reagentId);
+    String getReagentUnitByReagentId(Long reagentId);
 
     List<SysReagent> getReagent(Map params);
 
     List<SysReagent> selectReagentSafetyNum();
 
-    void updateSafetyNum(@Param("id") String id, @Param("safetynum") Integer safetynum);
+    void updateSafetyNum(@Param("id") Long id, @Param("safetynum") Integer safetynum);
 
     /**
     * @Description: 根据Map里的详细传参 查询试剂个数
@@ -52,11 +52,11 @@
     */
     List<SysReagent> countReagentByDetail(@Param("params") Map detail);
 
-    SysReagent getRowData(@Param("id") String rowKey);
+    SysReagent getRowData(@Param("id") Long rowKey);
 
-    SysReagent getSysReagentListNewRowData(@Param("id")String rowKey);
+    SysReagent getSysReagentListNewRowData(@Param("id")Long rowKey);
 
     List<Map> selectAll(Map params);
 
-    void updateSysReagentPriceById(@Param("reagentId") String reagentId,@Param("price") BigDecimal price);
+    void updateSysReagentPriceById(@Param("reagentId") Long reagentId,@Param("price") BigDecimal price);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
index db8de67..9640c16 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
@@ -25,7 +25,6 @@
     <result property="controlProducts" column="control_products"></result>
     <result property="controlProductsName" column="control_products_name"></result>
     <result property="productHome" column="product_home"></result>
-    <result property="productHomeName" column="product_home_name"></result>
     <result property="type" column="type"></result>
     <result property="unitName" column="unitName"></result>
     <result property="formatName" column="formatName"></result>
@@ -63,27 +62,21 @@
 left join base_meta d on d.id=a.product_home
 where a.valid_flag = 1
 </select>
-  <select id="getSysReagent" parameterType="java.lang.String"  resultMap="SysReagent" >
+  <select id="getSysReagent"   resultMap="SysReagent" >
     select * from sys_reagent
     where id = #{id} and valid_flag = 1
   </select>
 
-  <select id="getSysReagentDetail" parameterType="java.lang.String" resultType="java.util.Map">
-    select sr.name ,sr.main_metering,sr.memo  memo,sr.product_sn productCode,bm.meta_value reagentFormat  ,sm.meta_value controlProducts,am.meta_value unit
+  <select id="getSysReagentDetail"  resultType="java.util.Map">
+    select sr.name ,sr.main_metering,sr.memo  memo,sr.product_sn productCode,sr.reagent_format as reagentFormat  ,sr.control_products as controlProducts,sr.reagent_unit as unit
         from sys_reagent sr
-    left join base_meta  bm on bm.id = sr.reagent_format
-		LEFT JOIN base_meta sm  on sr.control_products = sm.id
-		LEFT JOIN base_meta am on sr.reagent_unit = am.id
     where sr.id = #{id} and sr.valid_flag = 1
   </select>
 
   <select id="getSysReagentList" parameterType="java.util.Map" resultMap="SysReagent">
-    select sr.*, ss.meta_value as product_home_name, ifnull(w.reserve,0)  as reserve, bm.meta_value as control_products_name,supplier.name as supplierName,f.id favor,f.create_time favortime
+    select sr.*,  ifnull(w.reserve,0)  as reserve,supplier.name as supplierName,f.id favor,f.create_time favortime
     from sys_reagent as sr
-    left join base_meta as ss on sr.product_home = ss.id
-    left join base_meta bm	on bm.id = sr.control_products
     left join (select reagent_id, sum(reserve) reserve from ope_warehouse_reserve where valid_flag = 1 group by reagent_id) w on w.reagent_id = sr.id
-
     left join sys_supplier supplier on supplier.id = sr.supplier_id
     LEFT JOIN favor f on f.reagent_id = sr.id AND f.user_id = #{user}
     where sr.valid_flag = 1
@@ -104,17 +97,12 @@
     (
     SELECT
     sr.*,
-    ss.meta_value AS product_home_name,
-    ss.order_index,
-    bm.meta_value AS control_products_name,
     supplier. NAME AS supplierName,
     f.id favor,
     f.create_time favortime,
     supplier.valid_flag  as supplierFlag
     FROM
     sys_reagent AS sr
-    LEFT JOIN base_meta AS ss ON sr.product_home = ss.id
-    LEFT JOIN base_meta bm ON bm.id = sr.control_products
     LEFT JOIN sys_supplier supplier ON supplier.id = sr.supplier_id
     LEFT JOIN favor f ON f.reagent_id = sr.id
     AND f.user_id= #{user}
@@ -137,17 +125,12 @@
     UNION ALL
     (SELECT
     sr.*,
-    ss.meta_value AS product_home_name,
-    ss.order_index,
-    bm.meta_value AS control_products_name,
     supplier.NAME AS supplierName,
     f.id favor,
     f.create_time favortime,
     supplier.valid_flag as supplierFlag
     FROM
     sys_reagent AS sr
-    LEFT JOIN base_meta AS ss ON sr.product_home = ss.id
-    LEFT JOIN base_meta bm ON bm.id = sr.control_products
     LEFT JOIN sys_supplier supplier ON supplier.id = sr.supplier_id
     LEFT JOIN favor f ON f.reagent_id = sr.id
     AND f.user_id = #{user}
@@ -172,7 +155,7 @@
     </if>
     )
     ) as reagent
-    ORDER BY reagent.favortime DESC,length(reagent.name),reagent.order_index,price asc
+    ORDER BY reagent.favortime DESC,length(reagent.name),price asc
     <if test="first != null and pageSize != null">
       limit #{first}, #{pageSize}
     </if>
@@ -180,9 +163,7 @@
 
 
   <select id="reagentSimpleInfoList" resultMap="SysReagent">
-    select sr.id,sr.name,sr.cas,sr.product_sn,sr.create_time,sr.update_time,bm.meta_value as reagent_type,bm2.meta_value as reagent_character from sys_reagent sr
-    left join base_meta as bm on bm.id=sr.reagent_type
-    left join base_meta as bm2 on bm2.id=sr.reagent_character
+    select sr.id,sr.name,sr.cas,sr.product_sn,sr.create_time,sr.update_time from sys_reagent sr
     <where>
         and sr.valid_flag = 1 and sr.type=1
       <if test="cas != null and cas != ''">
@@ -209,15 +190,12 @@
   </select>
 
   <select id="favorList" parameterType="java.util.Map" resultMap="SysReagent">
-    select sr.*, ss.meta_value as product_home_name,
-    bm.meta_value as control_products_name,
+    select sr.*,
     supplier.name as supplierName,
     f.id favor,
     f.create_time favortime,
     supplier.valid_flag  as supplierFlag
     from sys_reagent as sr
-    left join base_meta as ss on sr.product_home = ss.id
-    left join base_meta bm	on bm.id = sr.control_products
     left join sys_supplier supplier on supplier.id = sr.supplier_id
     LEFT JOIN favor f on f.reagent_id = sr.id AND f.user_id = #{user}
     where sr.valid_flag = 1
@@ -258,8 +236,6 @@
   <select id="favorCount" parameterType="java.util.Map" resultType="int">
     select count(1)
     from sys_reagent as sr
-    left join base_meta as ss on sr.product_home = ss.id
-    left join base_meta bm	on bm.id = sr.control_products
     left join sys_supplier supplier on supplier.id = sr.supplier_id
     LEFT JOIN favor f on f.reagent_id = sr.id AND f.user_id = #{user}
     where sr.valid_flag = 1
@@ -287,14 +263,12 @@
   </select>
 
   <select id="getSysReagentListNew" parameterType="java.util.Map" resultMap="SysReagent">
-    select sr.*, ss.meta_value as product_home_name, ifnull(w.reserve,0)  as reserve, bm.meta_value as control_products_name,supplier.name as supplierName
+    select sr.*,ifnull(w.reserve,0)  as reserve, supplier.name as supplierName
     from sys_reagent as sr
-    left join base_meta as ss on sr.product_home = ss.id
-    left join base_meta bm	on bm.id = sr.control_products
     left join (select reagent_id, sum(reserve) reserve from ope_warehouse_reserve where valid_flag = 1 group by reagent_id) w on w.reagent_id = sr.id
     left join sys_supplier supplier on supplier.id = sr.supplier_id
     where sr.valid_flag = 1
-    and (supplier.valid_flag = 1 or sr.type = 0)
+    and (supplier.valid_flag = 1)
     <if test="cas != null and cas != ''">
       and sr.cas = #{cas}
     </if>
@@ -304,7 +278,7 @@
     <if test="name != null and name != ''">
       and sr.name like concat("%", #{name} ,"%")
     </if>
-    <if test="type != null">
+    <if test="type != null and type != ''">
       and sr.type = #{type}
     </if>
     <if test="productSn != null and productSn != ''">
@@ -319,8 +293,6 @@
   <select id="getSysReagentTotalCount" parameterType="java.util.Map" resultType="int">
     select count(1)
     from sys_reagent as sr
-    left join base_meta as ss on sr.product_home = ss.id
-    left join base_meta bm	on bm.id = sr.control_products
     left join (select reagent_id, sum(reserve) reserve from ope_warehouse_reserve where valid_flag = 1 group by reagent_id) w on w.reagent_id = sr.id
     left join sys_supplier supplier on supplier.id = sr.supplier_id
     LEFT JOIN favor f on f.reagent_id = sr.id AND f.user_id = #{user}
@@ -334,8 +306,6 @@
   <select id="reagentCount" parameterType="java.util.Map" resultType="int">
     select count(1)
     from sys_reagent as sr
-    left join base_meta as ss on sr.product_home = ss.id
-    left join base_meta bm	on bm.id = sr.control_products
     left join sys_supplier supplier on supplier.id = sr.supplier_id
     LEFT JOIN favor f on f.reagent_id = sr.id AND f.user_id = #{user}
     where sr.valid_flag = 1
@@ -359,9 +329,12 @@
     from sys_reagent as sr
     LEFT JOIN sys_supplier ss on ss.id = sr.supplier_id
     where sr.valid_flag = 1
-    and (ss.valid_flag = 1 or sr.type = 0)
+    and (ss.valid_flag = 1)
     <if test="cas != null and cas != ''">
         and sr.cas = #{cas}
+    </if>
+    <if test="type != null">
+      and sr.type = #{type}
     </if>
     <if test="supplierId != null and supplierId != ''">
         and sr.supplier_id = #{supplierId}
@@ -369,20 +342,15 @@
     <if test="name != null and name != ''">
         and sr.name like concat("%", #{name} ,"%")
     </if>
-    <if test="type != null">
-      and sr.type = #{type}
-    </if>
     <if test="productSn != null and productSn != ''">
       and sr.product_sn like concat("%", #{productSn} ,"%")
     </if>
   </select>
 
-  <select id="getReagentUnitByReagentId" parameterType="java.lang.String" resultType="java.lang.String">
-   SELECT bm.meta_value
+  <select id="getReagentUnitByReagentId"  resultType="java.lang.String">
+   SELECT sr.reagent_unit
   from sys_reagent sr
-  LEFT JOIN base_meta bm on bm.id = sr.reagent_unit
   where sr.valid_flag  =1
-  and bm.valid_flag = 1
   and sr.id = #{reagentId}
   </select>
 
@@ -429,36 +397,19 @@
   </select>
     <select id="selectReagentSafetyNum" resultMap="SysReagent">
       select
-      sr.id,
-      sr.product_sn,
-      sr.cas,
-      sr.safetynum,
-      sr.name,
-      sr.main_metering,
-      bm1.meta_value reagent_unit,
-      bm2.meta_value reagent_type,
-      bm3.meta_value reagent_format,
-      bm4.meta_value product_home,
-      ss.meta_value as product_home_name,
-      bm.meta_value as control_products_name,
+      sr.*,
       supplier.name as supplierName
       from sys_reagent as sr
-      left join base_meta as ss on sr.product_home = ss.id
-      left join base_meta bm	on bm.id = sr.control_products
       left join sys_supplier supplier on supplier.id = sr.supplier_id
-      left join base_meta bm1 on bm1.id = sr.reagent_unit
-      left join base_meta bm2 on bm2.id = sr.reagent_type
-      left join base_meta bm3 on bm3.id = sr.reagent_format
-      left join base_meta bm4 on bm4.id = sr.product_home
       where sr.valid_flag = 1
       and sr.type = 1
       and safetynum > 0
     </select>
 
 
-    <insert id="insertSysReagent" parameterType="com.nanometer.smartlab.entity.SysReagent">
-    insert into sys_reagent(id, name, cas, reagent_type, reagent_character, supplier_id, reagent_format, main_metering, reagent_unit, price, per_box, memo, valid_flag, create_time, update_time,deadline, product_sn, dangerous_flag,control_products,product_home,type,density)
-    values (#{id}, #{name}, #{cas}, #{reagentType}, #{reagentCharacter}, #{supplierId}, #{reagentFormat}, #{mainMetering}, #{reagentUnit}, #{price}, #{perBox}, #{memo}, 1, now(), now(),#{deadline}, #{productSn}, #{dangerousFlag},#{controlProducts},#{productHome},#{type},#{density})
+    <insert id="insertSysReagent" parameterType="com.nanometer.smartlab.entity.SysReagent" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_reagent(name, cas, reagent_type, reagent_character, supplier_id, reagent_format, main_metering, reagent_unit, price, per_box, memo, valid_flag, create_time, update_time,deadline, product_sn, dangerous_flag,control_products,product_home,type,density)
+    values ( #{name}, #{cas}, #{reagentType}, #{reagentCharacter}, #{supplierId}, #{reagentFormat}, #{mainMetering}, #{reagentUnit}, #{price}, #{perBox}, #{memo}, 1, now(), now(),#{deadline}, #{productSn}, #{dangerousFlag},#{controlProducts},#{productHome},#{type},#{density})
   </insert>
 
   <update id="updateSysReagent" parameterType="com.nanometer.smartlab.entity.SysReagent">
@@ -527,29 +478,23 @@
     select
     *
     from sys_reagent as sr
-    left join base_meta bm2 on sr.reagent_character = bm2.id
-    left join base_meta bm4 on sr.reagent_unit = bm4.id
-    left join base_meta bm5 on sr.product_home = bm5.id
-    left join base_meta bm6 on sr.reagent_format = bm6.id
-    left join base_meta bm7 on sr.reagent_type = bm7.id
     left join sys_supplier supply on sr.supplier_id = supply.id
-
     <where>
       sr.valid_flag = 1
       <if test="params.packing != null and params.packing != ''">
         and UPPER(concat(sr.main_metering,bm4.meta_value) ) = UPPER(#{params.packing})
       </if>
       <if test="params.product_home != null and params.product_home != ''">
-        and bm5.meta_value = #{params.product_home}
+        and sr.product_home = #{params.product_home}
       </if>
       <if test="params.reagent_character != null and params.reagent_character != ''">
-        and bm2.meta_value = #{params.reagent_character}
+        and sr.params.reagent_character = #{params.reagent_character}
       </if>
       <if test="params.reagent_format != null and params.reagent_format != ''">
-        and bm6.meta_value = #{params.reagent_format}
+        and sr.params.reagent_format = #{params.reagent_format}
       </if>
       <if test="params.reagent_type != null and params.reagent_type != ''">
-        and bm7.meta_value = #{params.reagent_type}
+        and sr.reagent_type = #{params.reagent_type}
       </if>
       <if test="params.cas != null and params.cas != ''">
         and sr.cas = #{params.cas}
@@ -569,31 +514,16 @@
   <select id="getRowData" resultMap="SysReagent">
         select
         a.*,
-        main_metering,
-        reagent_unit,
-        reagent_format,
-        product_home,
-        b.meta_value unitName,
-        c.meta_value formatName,
-        d.meta_value product_home_name,
-        e.meta_value control_products_name,
         s.name AS supplierName,
         s.valid_flag  as supplierFlag
         from sys_reagent a
-        left join base_meta b on b.id=a.reagent_unit
-        left join base_meta c on c.id=a.reagent_format
-        left join base_meta d on d.id=a.product_home
-        left join base_meta e on e.id=a.control_products
         left join sys_supplier s ON s.id = a.supplier_id
         where a.id = #{id}
 
   </select>
   <select id="getSysReagentListNewRowData" resultMap="SysReagent">
-     select sr.*, ss.meta_value as product_home_name, ifnull(w.reserve,0)  as reserve, bm.meta_value as control_products_name,supplier.name as supplierName
+     select sr.*, ifnull(w.reserve,0)  as reserve,supplier.name as supplierName
     from sys_reagent as sr
-
-    left join base_meta as ss on sr.product_home = ss.id
-    left join base_meta bm	on bm.id = sr.control_products
     left join (select reagent_id, sum(reserve) reserve from ope_warehouse_reserve where valid_flag = 1 group by reagent_id) w on w.reagent_id = sr.id
 
     left join sys_supplier supplier on supplier.id = sr.supplier_id
@@ -601,28 +531,10 @@
   </select>
   <select id="selectAll" resultType="java.util.Map">
     select
-    sr.name,
-    sr.product_sn as productSn,
-    sr.cas,
-    sr.price,
-    sr.per_box as perBox,
-    sr.safetynum,
-
+    sr.*,
     CASE WHEN type = 0 THEN '耗材' WHEN type = 1 THEN '试剂' ELSE '' END AS kind,
-    ss.meta_value as productHomeName,
-    bm.meta_value as control_products_name,
-    supplier.name as supplierName,
-    bm1.meta_value as reagentType,
-    bm2.meta_value as reagentCharacter,
-    bm3.meta_value as reagentFormat,
-    CONCAT(sr.main_metering,bm4.meta_value) as reagentUnit
+    supplier.name as supplierName
     from sys_reagent as sr
-    left join base_meta as ss on sr.product_home = ss.id
-    left join base_meta bm	on bm.id = sr.control_products
-    left join base_meta bm1	on bm1.id = sr.reagent_type
-    left join base_meta bm2	on bm2.id = sr.reagent_character
-    left join base_meta bm3	on bm3.id = sr.reagent_format
-    left join base_meta bm4	on bm4.id = sr.reagent_unit
     left join sys_supplier supplier on supplier.id = sr.supplier_id
     where sr.valid_flag = 1
     <if test="cas != null and cas != ''">
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.java b/src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.java
index 19f71b1..07f9488 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.java
@@ -8,7 +8,7 @@
  */
 public interface SysSequenceDao {
 
-    public SysSequence getSysSequence(String id) throws DataAccessException;
+    public SysSequence getSysSequenceByName(String name) throws DataAccessException;
     public void insertSysSequence(SysSequence sysSequence) throws DataAccessException;
     public int updateSysSequence(SysSequence sysSequence) throws DataAccessException;
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.xml
index afd8e92..ff58fbe 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysSequenceDao.xml
@@ -11,14 +11,14 @@
     <result property="updateTime" column="update_time"></result>
   </resultMap>
 
-  <select id="getSysSequence" parameterType="java.lang.String"  resultMap="SysSequence" >
+  <select id="getSysSequenceByName" resultMap="SysSequence" >
     select * from sys_sequence
-    where id = #{id}
+    where name = #{name}
   </select>
 
-  <insert id="insertSysSequence" parameterType="com.nanometer.smartlab.entity.SysSequence">
-    insert into sys_sequence(id, name, min_val, max_val, current_val, step, update_time)
-    values (#{id}, #{name}, #{minVal}, #{maxVal}, #{currentVal}, #{step}, now())
+  <insert id="insertSysSequence" parameterType="com.nanometer.smartlab.entity.SysSequence" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_sequence( name, min_val, max_val, current_val, step, update_time)
+    values (#{name}, #{minVal}, #{maxVal}, #{currentVal}, #{step}, now())
   </insert>
 
   <update id="updateSysSequence" parameterType="com.nanometer.smartlab.entity.SysSequence">
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.java b/src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.java
index 8e6854b..720f222 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.java
@@ -13,16 +13,16 @@
  */
 public interface SysSupplierDao {
 
-    public SysSupplier getSysSupplier(String id) throws DataAccessException;
+    public SysSupplier getSysSupplier(Long id) throws DataAccessException;
     public List<SysSupplier> getSysSupplierList(Map params) throws DataAccessException;
     public int getSysSupplierTotalCount(Map params) throws DataAccessException;
-    public String getSysSupplierId(@Param("name") String name,@Param("groupId") String groupId) throws DataAccessException;
-    public String getSysSupplierIdByname(String name) throws DataAccessException;
+    public Long getSysSupplierId(@Param("name") String name,@Param("groupId") Long groupId) throws DataAccessException;
+    public Long getSysSupplierIdByname(String name) throws DataAccessException;
 
     public void insertSysSupplier(SysSupplier sysSupplier) throws DataAccessException;
     public int updateSysSupplier(SysSupplier sysSupplier) throws DataAccessException;
 
-    public int deleteSysSupplier(List<String> ids) throws DataAccessException;
+    public int deleteSysSupplier(List<Long> ids) throws DataAccessException;
 
     void insertBatch(List<?> list);
 
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.xml
index c8daa8a..14f0668 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysSupplierDao.xml
@@ -24,7 +24,7 @@
     </if>
   </sql>
 
-  <select id="getSysSupplier" parameterType="java.lang.String"  resultMap="SysSupplier" >
+  <select id="getSysSupplier"  resultMap="SysSupplier" >
     select * from sys_supplier
     where id = #{id} and valid_flag = 1
   </select>
@@ -48,12 +48,12 @@
     order by name ASC
   </select>
 
-  <insert id="insertBatch" parameterType="java.util.List">
+  <insert id="insertBatch" parameterType="java.util.List" useGeneratedKeys = "true" keyProperty = "id">
     insert into sys_supplier
-    (id,name,person_name,phone,memo,create_time,valid_flag)
+    (name,person_name,phone,memo,create_time,valid_flag)
     values
     <foreach collection ="list" item="supplier" separator =",">
-      (#{supplier.id}, #{supplier.name}, #{supplier.personName}, #{supplier.phone}, #{supplier.memo}, now(),1)
+      ( #{supplier.name}, #{supplier.personName}, #{supplier.phone}, #{supplier.memo}, now(),1)
     </foreach >
   </insert>
 
@@ -63,9 +63,9 @@
     <include refid="queryWhereSql"/>
   </select>
 
-  <insert id="insertSysSupplier" parameterType="com.nanometer.smartlab.entity.SysSupplier">
-    insert into sys_supplier(id, name, person_name, phone, memo, valid_flag, create_time, update_time)
-    values (#{id}, #{name}, #{personName}, #{phone}, #{memo}, 1, now(), now())
+  <insert id="insertSysSupplier" parameterType="com.nanometer.smartlab.entity.SysSupplier" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_supplier( name, person_name, phone, memo, valid_flag, create_time, update_time)
+    values ( #{name}, #{personName}, #{phone}, #{memo}, 1, now(), now())
   </insert>
 
   <update id="updateSysSupplier" parameterType="com.nanometer.smartlab.entity.SysSupplier">
@@ -73,17 +73,16 @@
     where id=#{id}
   </update>
 
-  <select id="getSysSupplierId" parameterType="java.lang.String" resultType="string">
+  <select id="getSysSupplierId" resultType="long">
       select id From base_meta
       where group_id = #{groupId} and meta_value = #{name}
   </select>
 
-  <select id="getSysSupplierIdByname" parameterType="java.lang.String" resultType="string">
+  <select id="getSysSupplierIdByname" resultType="long">
     select id From sys_supplier where name = #{name}
   </select>
 
-  <select id="getSysSupplierByName" resultType="com.nanometer.smartlab.entity.SysSupplier"
-          parameterType="java.lang.String">
+  <select id="getSysSupplierByName" resultType="com.nanometer.smartlab.entity.SysSupplier">
     select * from sys_supplier where name=#{name} and valid_flag=1 limit 1
   </select>
 
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java
index 62387c5..51df1eb 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java
@@ -15,8 +15,8 @@
  */
 public interface SysUserDao {
 
-    public SysUser getSysUser(String id) throws DataAccessException;
-    public SysUser getSysUserForSuppllier(String id) throws DataAccessException;
+    public SysUser getSysUser(Long id) throws DataAccessException;
+    public SysUser getSysUserForSuppllier(Long id) throws DataAccessException;
     public SysUser getSysUserByIdCard(String idCard) throws DataAccessException;
     public List<SysUser> getSysUserList(Map params) throws DataAccessException;
 
@@ -26,18 +26,18 @@
 
     public void insertSysUser(SysUser sysUser) throws DataAccessException;
     public int updateSysUser(SysUser sysUser) throws DataAccessException;
-    public int deleteSysUsers(List<String> ids) throws DataAccessException;
+    public int deleteSysUsers(List<Long> ids) throws DataAccessException;
 
     public List<SysUser> getSysUserInfoList(Map params) throws DataAccessException;
 
-    public SysUser getSysUserInfoByContainerCode(String userId, String containerCode, String controllerCode) throws DataAccessException;
+    public SysUser getSysUserInfoByContainerCode(Long userId, String containerCode, String controllerCode) throws DataAccessException;
     public List<SysUser> getUserListByContainerCode(String containerCode, String startTime,String endTime) throws DataAccessException;
 
-    void updateUserPointBySelective(@Param("point")Integer point,@Param("id") String id);
+    void updateUserPointBySelective(@Param("point")Integer point,@Param("id") Long id);
 
     public SysUser selectByAccount(SysUser user);
 
-    SysUser getUser(String id);
+    SysUser getUser(Long id);
 
     void insertUserFavor(Map params);
 
@@ -52,7 +52,7 @@
 
     HazardousWasteUser getUserByAccount(Map params);
 
-    List<LaboratoryVo.LaboratoryUser> getUserByProject(@Param("project") String project);
+    List<LaboratoryVo.LaboratoryUser> getUserByProject(@Param("projectId") Long projectId);
 
     List<SysUser> getUserByArp(String arp);
 
@@ -61,7 +61,7 @@
     List<SysUser> getUserInProject(Map params);
 
     List<Map> getExportUserList(@Param("arp") String arp,@Param("name") String name, @Param("departmentName") String departmentName,
-                                @Param("project") String project,@Param("company") String company);
+                                @Param("projectId") Long projectId,@Param("company") String company);
 
     List<String> getLibrarianEmail();
 
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
index 2331466..6677031 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
@@ -8,6 +8,7 @@
     <result property="password" column="password"></result>
     <result property="company" column="company"></result>
     <result property="department" column="department"></result>
+    <result property="departmentName" column="department_name"></result>
     <result property="name" column="name"></result>
     <result property="phone" column="phone"></result>
     <result property="email" column="email"></result>
@@ -22,7 +23,8 @@
     <result property="updateTime" column="update_time"></result>
     <result property="roleName" column="roleName"></result>
     <result property="containerCodeList" column="containerCodeList"></result>
-    <result property="project" column="project"></result>
+    <result property="projectId" column="project_id"></result>
+     <result property="projectName" column="project_name"></result>
     <result property="url" column="url"></result>
     <result property="score" column="score"></result>
     <result property="waster" column="waster" typeHandler="com.nanometer.smartlab.entity.handler.WasterHandler"></result>
@@ -73,26 +75,29 @@
     <if test="waster != null">
         and su.waster = #{waster}
     </if>
-    <if test="project != null and project != ''">
-        and su.project like concat("%",#{project},"%")
+    <if test="projectId != null and projectId != ''">
+        and su.project_id =#{projectId}
     </if>
+      <if test="projectName != null and projectName != ''">
+          and sp.project_name like concat("%",#{projectName},"%")
+      </if>
     <if test="company != null and company != ''">
          and bm1.meta_value like concat("%",#{company},"%")
     </if>
   </sql>
 
-  <select id="getSysUser" parameterType="java.lang.String"  resultMap="SysUser" >
+  <select id="getSysUser"  resultMap="SysUser" >
     select * from sys_user
     where id = #{id} and valid_flag = 1
   </select>
 
-  <select id="getUser" parameterType="java.lang.String" resultMap="SysUser">
+  <select id="getUser"  resultMap="SysUser">
     select
     sys_user.id,
 	sys_user.`name`,
     sys_user.phone,
-    sys_user.project,
-    base_meta.meta_value as department
+    sys_user.project_id,
+    base_meta.meta_value as department_name
     from sys_user
     left join  base_meta on sys_user.department = base_meta.id
     where sys_user.id = #{id}
@@ -100,11 +105,11 @@
     and base_meta.valid_flag = 1
   </select>
 
-  <insert id="insertUserFavor" parameterType="java.util.Map">
-    insert  into favor(id,user_id,reagent_id,create_time) value (#{id},#{user},#{reagent},now());
+  <insert id="insertUserFavor" parameterType="java.util.Map" useGeneratedKeys = "true" keyProperty = "id">
+    insert  into favor(user_id,reagent_id,create_time) value (#{user},#{reagent},now());
   </insert>
 
-  <select id="getSysUserForSuppllier" parameterType="java.lang.String"  resultMap="SysUser" >
+  <select id="getSysUserForSuppllier"  resultMap="SysUser" >
     select * from sys_user
     where id = #{id}
   </select>
@@ -121,7 +126,7 @@
 
 
 
-  <select id="getSysUserByIdCard" parameterType="java.lang.String"  resultMap="SysUser" >
+  <select id="getSysUserByIdCard"   resultMap="SysUser" >
     select * from sys_user
     where id_card = #{idCard}
     and valid_flag = 1
@@ -129,10 +134,11 @@
   </select>
 
   <select id="getSysUserList" parameterType="java.util.Map" resultMap="SysUser">
-    select su.*, br.name as roleName from sys_user as su
+    select su.*, br.name as roleName,sp.project_name from sys_user as su
     left join base_role as br on su.role_id = br.id
       left join base_meta bm on su.department = bm.id
       left join base_meta bm1 on bm1.id = su.company
+    left join sys_project sp on sp.id=su.project_id
     where su.valid_flag = 1
       <if test="departmentNameLike != null and departmentNameLike != ''">
           and bm.meta_value  like #{departmentNameLike}
@@ -145,9 +151,10 @@
   </select>
 
     <select id="getSysUserSimpleInfoList" parameterType="java.util.Map" resultMap="SysUser">
-        select su.id,su.arp,su.account,su.name,su.phone,su.email,su.create_time,su.project,bm.meta_value as department,bm1.meta_value as company  from sys_user as su
+        select su.id,su.arp,su.account,su.name,su.phone,su.email,su.create_time,su.project_id,bm.meta_value as department,bm1.meta_value as company,sp.project_name  from sys_user as su
         left join base_meta bm on su.department = bm.id
         left join base_meta bm1 on bm1.id = su.company
+        left join sys_project sp on sp.id=su.project_id
         where su.valid_flag = 1
         <include refid="queryWhereSql"/>
         order by su.arp ASC
@@ -158,7 +165,8 @@
 
   <select id="getHasProjectSysUserList" parameterType="java.util.Map" resultMap="SysUser">
     select DISTINCT su.*, br.name as roleName from sys_user as su
-    left join base_role as br on su.role_id = br.id inner join sys_project as sp on su.id=sp.sys_user_id
+    left join base_role as br on su.role_id = br.id
+    inner join sys_project as sp on su.id=sp.sys_user_id
     where su.valid_flag = 1
       <if test="department != null and department != ''">
           and su.department = #{department}
@@ -166,9 +174,8 @@
       <if test="approverFlag != null">
           and su.approver_flag = #{approverFlag}
       </if>
-      <if test="project != null and project != ''">
-          and (su.project like concat('%',#{project},'%')
-          or su.project is null or su.project = '')
+      <if test="projectId != null and projectId != ''">
+          and su.project_id =#{projectId}
       </if>
     order by su.arp ASC
     <if test="first != null and pageSize != null">
@@ -192,6 +199,7 @@
     select count(1) from sys_user as su
     left join base_meta bm on su.department = bm.id
     left join base_meta bm1 on bm1.id = su.company
+      left join sys_project sp on sp.id=su.project_id
     where su.valid_flag = 1
       <if test="departmentNameLike != null and departmentNameLike != ''">
           and bm.meta_value  like #{departmentNameLike}
@@ -199,14 +207,14 @@
     <include refid="queryWhereSql"/>
   </select>
 
-  <insert id="insertSysUser" parameterType="com.nanometer.smartlab.entity.SysUser">
-    insert into sys_user(id, arp, account, password, company, department, name, phone, email, memo, id_card, approver_flag, see_flag, role_id, valid_flag, create_time, update_time,project,waster,url,score)
-    values (#{id}, #{arp}, #{account}, #{password}, #{company}, #{department}, #{name}, #{phone}, #{email}, #{memo}, #{idCard}, #{approverFlag}, #{seeFlag}, #{roleId}, 1, now(), now(),#{project},#{waster},#{url},#{score})
+  <insert id="insertSysUser" parameterType="com.nanometer.smartlab.entity.SysUser" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_user( arp, account, password, company, department, name, phone, email, memo, id_card, approver_flag, see_flag, role_id, valid_flag, create_time, update_time,project_id,waster,url,score)
+    values ( #{arp}, #{account}, #{password}, #{company}, #{department}, #{name}, #{phone}, #{email}, #{memo}, #{idCard}, #{approverFlag}, #{seeFlag}, #{roleId}, 1, now(), now(),#{projectId},#{waster},#{url},#{score})
   </insert>
 
   <update id="updateSysUser" parameterType="com.nanometer.smartlab.entity.SysUser">
     update sys_user set arp=#{arp}, account=#{account}, password=#{password}, company=#{company}, department=#{department}, name=#{name}, phone=#{phone},
-    email=#{email}, memo=#{memo}, id_card=#{idCard}, approver_flag=#{approverFlag}, see_flag=#{seeFlag}, role_id=#{roleId}, point=#{point},update_time=now(),project=#{project},waster=#{waster},
+    email=#{email}, memo=#{memo}, id_card=#{idCard}, approver_flag=#{approverFlag}, see_flag=#{seeFlag}, role_id=#{roleId}, point=#{point},update_time=now(),project_id=#{projectId},waster=#{waster},
     url= #{url},
     score = #{score}
     where id=#{id}
@@ -265,12 +273,12 @@
     </select>
 
     <select id="getUserListByProject" parameterType="java.util.Map" resultMap="SysUser">
-    SELECT u.name,u.see_flag,u.role_id,u.valid_flag,u.id_card,bm2.meta_value department,bm1.meta_value company,u.arp,u.point,u.project
+    SELECT u.name,u.see_flag,u.role_id,u.valid_flag,u.id_card,bm2.meta_value department,bm1.meta_value company,u.arp,u.point,u.project_id
     from sys_user u
     left join base_meta bm1 on bm1.id = u.company
     left join base_meta bm2 on bm2.id = u.department
     where
-    u.project = #{0}
+    u.project_id = #{0}
     and u.valid_flag = 1
     and u.update_time >= #{1} and #{2} > u.update_time
     </select>
@@ -278,22 +286,26 @@
     SELECT
     su.id,
 	su.account,
+	su.id_card,
     su.`name`,
     su.`password`,
     su.waster as adminFlag,
-    su.project,
+    su.project_id,
     bm.meta_value as department,
-    com.meta_value as company
+    com.meta_value as company_name,
+    com.id as company,
+    sp.project_name
     FROM sys_user AS su
     LEFT JOIN base_meta bm ON su.department = bm.id
     LEFT JOIN base_meta com on com.id = su.company
+    left join sys_project sp on sp.id=su.project_id
     <where>
         su.valid_flag = 1
         <if test="account != null and account !=''">
             AND su.account = #{account}
         </if>
-        <if test="name != null and name !=''">
-            AND su.name = #{name}
+        <if test="userId != null ">
+            AND su.id = #{userId}
         </if>
     </where>
     </select>
@@ -304,7 +316,7 @@
     WHERE
     	valid_flag = '1'
     AND waster = '1'
-    AND project = #{project};
+    AND project_id = #{projectId};
     </select>
     <select id="getUserByArp" resultMap="SysUser">
         select * from sys_user
@@ -314,6 +326,7 @@
         select count(1) from sys_user as su
         left join base_meta bm on su.department = bm.id
         left join base_meta bm1 on bm1.id = su.company
+        left join sys_project sp on sp.id=su.project_id
         where su.valid_flag = 1
         <if test="departmentNameLike != null and departmentNameLike != ''">
             and bm.meta_value  like concat("%",#{departmentNameLike},"%")
@@ -327,11 +340,11 @@
         <if test="company != null and company != ''">
             and bm1.meta_value like concat("%",#{company},"%")
         </if>
-        <if test="project != null and project != ''">
-            and
-            <foreach item="item" index="index" collection="project.split(',')" open="(" separator="or" close=")">
-                 su.project like concat("%",#{item},"%")
-            </foreach>
+        <if test="projectId != null and projectId != ''">
+            and su.project_id=#{projectId}
+        </if>
+        <if test="projectName != null and projectName != ''">
+            and sp.projectName like concat("%",#{projectId},"%")
         </if>
     </select>
     <select id="getUserInProject" parameterType="java.util.Map" resultMap="SysUser">
@@ -339,6 +352,7 @@
         left join base_role as br on su.role_id = br.id
         left join base_meta bm on su.department = bm.id
         left join base_meta bm1 on bm1.id = su.company
+        left join sys_project sp on sp.id=su.project_id
         where su.valid_flag = 1
         <if test="departmentNameLike != null and departmentNameLike != ''">
             and bm.meta_value  like concat("%",#{departmentNameLike},"%")
@@ -352,11 +366,11 @@
         <if test="company != null and company != ''">
             and bm1.meta_value like concat("%",#{company},"%")
         </if>
-        <if test="project != null and project != ''">
-            and
-            <foreach item="item" index="index" collection="project.split(',')" open="(" separator="or" close=")">
-                su.project like concat("%",#{item},"%")
-            </foreach>
+        <if test="projectId != null and projectId != ''">
+            and su.project_id=#{projectId}
+        </if>
+        <if test="projectName != null and projectName != ''">
+            and sp.project_name like concat("%",#{projectName},"%")
         </if>
         order by su.arp ASC
         <if test="first != null and pageSize != null">
@@ -367,7 +381,8 @@
         select
         bm.meta_value AS departmentName,
         bm1.meta_value AS companyName,
-        su.project,
+        su.project_id,
+        sp.project_name projectName,
         su.arp,
         su.name,
         su.account,
@@ -375,7 +390,7 @@
         su.phone,
         su.email,
         su.memo,
-        br. NAME AS roleName,
+        br.name AS roleName,
         CASE WHEN su.approver_flag=0 then '否' else '是' END AS approver,
         CASE WHEN su.see_flag=2 then '一般人员' WHEN su.see_flag=3 then '安全员' WHEN su.see_flag=11 then '系统管理员'WHEN su.see_flag=0 then '实验室管理员' END AS seeName,
         CASE WHEN su.waster=2 then '危废管理员' WHEN su.waster=1 then '危废处理人员' else '' END AS wasterName,
@@ -384,6 +399,7 @@
         left join base_role as br on su.role_id = br.id
         left join base_meta bm on su.department = bm.id
         left join base_meta bm1 on bm1.id = su.company
+        left join sys_project sp on sp.id=su.project_id
         <where>
             su.valid_flag = 1
             <if test="arp != null and arp != ''">
@@ -395,8 +411,8 @@
             <if test="departmentName != null and departmentName != ''">
                 and su.department like concat("%",#{departmentName},"%")
             </if>
-            <if test="project != null and project != ''">
-                and su.project like concat("%",#{project},"%")
+            <if test="projectId != null and projectId != ''">
+                and su.project_id =#{projectId}
             </if>
             <if test="company != null and company != ''">
                 and bm1.meta_value like concat("%",#{company},"%")
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.java b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.java
index 4345a98..9c9f41e 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.java
@@ -11,7 +11,7 @@
  */
 public interface SysWarehouseContainerDao {
 
-    public SysWarehouseContainer getSysWarehouseContainer(String id) throws DataAccessException;
+    public SysWarehouseContainer getSysWarehouseContainer(Long id) throws DataAccessException;
     @SuppressWarnings("rawtypes")
 	public List<SysWarehouseContainer> getSysWarehouseContainerList(Map params) throws DataAccessException;
     @SuppressWarnings("rawtypes")
@@ -20,7 +20,7 @@
     public void insertSysWarehouseContainer(SysWarehouseContainer sysWarehouseContainer) throws DataAccessException;
     public int updateSysWarehouseContainer(SysWarehouseContainer sysWarehouseContainer) throws DataAccessException;
 
-    public int deleteSysWarehouseContainers(List<String> ids) throws DataAccessException;
+    public int deleteSysWarehouseContainers(List<Long> ids) throws DataAccessException;
 
     public List<SysWarehouseContainer> getSysWarehouseContainerInfoList(Map params) throws DataAccessException;
 
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.xml
index c0fc672..7d253f9 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseContainerDao.xml
@@ -25,7 +25,7 @@
     select container_code,name,valid_flag,type,character_left,character_right from sys_warehouse_container where update_time >= #{startTime} and #{endTime} > update_time
   </select>
 
-  <select id="getSysWarehouseContainer" parameterType="java.lang.String"  resultMap="SysWarehouseContainer" >
+  <select id="getSysWarehouseContainer"   resultMap="SysWarehouseContainer" >
     select su.*,ss.name as warehouseName, ss.type as warehouseType from sys_warehouse_container as su
     left join sys_warehouse as ss on su.warehouse_id = ss.id
     where su.id = #{id} and su.valid_flag = 1
@@ -33,13 +33,9 @@
 
   <select id="getSysWarehouseContainerList" parameterType="java.util.Map" resultMap="SysWarehouseContainer">
     select su.*,ss.name as warehouseName, ss.type as warehouseType
-    ,
-    sc.controller_name
     from sys_warehouse_container as su
     left join sys_warehouse as ss on su.warehouse_id = ss.id
-    left join sys_controller sc on sc.controller_code = su.controller_code
     where su.valid_flag = 1
-    and sc.valid_flag = 1
     <if test="warehouseType != null and warehouseType != ''">
       and ss.type = #{warehouseType}
     </if>
@@ -73,9 +69,9 @@
     </if>
   </select>
 
-  <insert id="insertSysWarehouseContainer" parameterType="com.nanometer.smartlab.entity.SysWarehouseContainer">
-    insert into sys_warehouse_container(id, warehouse_id, type, container_code, info_code, structure, name, valid_flag, character_left, character_right, create_time, update_time, controller_code)
-    values (#{id}, #{warehouseId}, #{type}, #{containerCode}, #{infoCode}, #{structure}, #{name}, 1, #{characterLeft}, #{characterRight}, now(), now(), #{controllerCode})
+  <insert id="insertSysWarehouseContainer" parameterType="com.nanometer.smartlab.entity.SysWarehouseContainer" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_warehouse_container(warehouse_id, type, container_code, info_code, structure, name, valid_flag, character_left, character_right, create_time, update_time, controller_code)
+    values ( #{warehouseId}, #{type}, #{containerCode}, #{infoCode}, #{structure}, #{name}, 1, #{characterLeft}, #{characterRight}, now(), now(), #{controllerCode})
   </insert>
 
   <update id="updateSysWarehouseContainer" parameterType="com.nanometer.smartlab.entity.SysWarehouseContainer">
@@ -94,7 +90,7 @@
     </foreach>
   </update>
 
-  <select id="getSysWarehouseContainerByContainerCode" parameterType="java.lang.String" resultMap="SysWarehouseContainer">
+  <select id="getSysWarehouseContainerByContainerCode"  resultMap="SysWarehouseContainer">
     select * from sys_warehouse_container
     where container_code = #{containerCode} and valid_flag = 1
   </select>
@@ -114,13 +110,13 @@
     </foreach>
   </select>
 
-  <update id="updateSysWarehouseContainerClearControllerCode" parameterType="java.lang.String" >
+  <update id="updateSysWarehouseContainerClearControllerCode"  >
     update sys_warehouse_container set
     controller_code=null
     where controller_code=#{controllerCode}
   </update>
 
-  <select id="getSysWarehouseContainerByControllerCode" parameterType="java.lang.String" resultMap="SysWarehouseContainer">
+  <select id="getSysWarehouseContainerByControllerCode"  resultMap="SysWarehouseContainer">
     select * from sys_warehouse_container
     where controller_code = #{controllerCode}
   </select>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.java b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.java
index 4978cc8..eb7afd7 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.java
@@ -12,7 +12,7 @@
  */
 public interface SysWarehouseDao {
 
-    public SysWarehouse getSysWarehouse(String id) throws DataAccessException;
+    public SysWarehouse getSysWarehouse(Long id) throws DataAccessException;
     @SuppressWarnings("rawtypes")
 	public List<SysWarehouse> getSysWarehouseList(Map params) throws DataAccessException;
     public List<SysWarehouse> getAllSysWarehouseList() throws DataAccessException;
@@ -21,7 +21,7 @@
 
     public void insertSysWarehouse(SysWarehouse sysWarehouse) throws DataAccessException;
     public int updateSysWarehouse(SysWarehouse sysWarehouse) throws DataAccessException;
-    public int deleteSysWarehouses(List<String> ids) throws DataAccessException;
+    public int deleteSysWarehouses(List<Long> ids) throws DataAccessException;
 
     public SysWarehouse getSysWarehouseByBarCode(String barCode) throws DataAccessException;
 
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.xml
index ef9df27..ef55afc 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseDao.xml
@@ -55,7 +55,7 @@
     </if>
   </sql>
 
-  <select id="getSysWarehouse" parameterType="java.lang.String"  resultMap="SysWarehouse" >
+  <select id="getSysWarehouse"  resultMap="SysWarehouse" >
     select * from sys_warehouse
     where id = #{id} and valid_flag = 1
   </select>
@@ -82,9 +82,9 @@
     order by name asc
   </select>
 
-  <insert id="insertSysWarehouse" parameterType="com.nanometer.smartlab.entity.SysWarehouse">
-    insert into sys_warehouse(id, type, name, info_code, bar_code, location1, location2, valid_flag, create_time, update_time,department,temperature_max,temperature_min,humidity_max,humidity_min)
-    values (#{id}, #{type}, #{name}, #{infoCode}, #{barCode}, #{location1}, #{location2}, 1, now(), now(),#{department},#{temperatureMax},#{temperatureMin},#{humidityMax},#{humidityMin})
+  <insert id="insertSysWarehouse" parameterType="com.nanometer.smartlab.entity.SysWarehouse" useGeneratedKeys = "true" keyProperty = "id">
+    insert into sys_warehouse( type, name, info_code, bar_code, location1, location2, valid_flag, create_time, update_time,department,temperature_max,temperature_min,humidity_max,humidity_min)
+    values ( #{type}, #{name}, #{infoCode}, #{barCode}, #{location1}, #{location2}, 1, now(), now(),#{department},#{temperatureMax},#{temperatureMin},#{humidityMax},#{humidityMin})
   </insert>
 
   <update id="updateSysWarehouse" parameterType="com.nanometer.smartlab.entity.SysWarehouse">
@@ -105,7 +105,7 @@
     </foreach>
   </update>
 
-  <select id="getSysWarehouseByBarCode" parameterType="java.lang.String"  resultMap="SysWarehouse" >
+  <select id="getSysWarehouseByBarCode"  resultMap="SysWarehouse" >
     select * from sys_warehouse
     where bar_code = #{barCode}
   </select>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseStatusDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseStatusDao.xml
index e851ad8..3e91cd6 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysWarehouseStatusDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysWarehouseStatusDao.xml
@@ -15,7 +15,7 @@
     <result property="selectDate"  column="select_date"/>
   </resultMap>
 
-  <insert id="insertOne" parameterType="com.nanometer.smartlab.entity.SysWarehouseStatus">
+  <insert id="insertOne" parameterType="com.nanometer.smartlab.entity.SysWarehouseStatus" useGeneratedKeys = "true" keyProperty = "id">
     insert into sys_warehouse_status
     (type,name,temperature,humidity,creator,create_time,valid_flag,warehouse_id,select_date,warning)
     values
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysWarningDao.java b/src/main/java/com/nanometer/smartlab/dao/SysWarningDao.java
index eaf584b..7df73f4 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysWarningDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysWarningDao.java
@@ -14,7 +14,7 @@
     
     public int getSysWarningTotalCount(Map param);
 
-    SysWarning getSysWarning(String id);
+    SysWarning getSysWarning(Long id);
 
     void updateSysWarning(Map params);
 }
\ No newline at end of file
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysWarningDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysWarningDao.xml
index 1c85fc0..8d984b6 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysWarningDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysWarningDao.xml
@@ -27,10 +27,10 @@
     </if>
   </sql>
 
-  <insert id="insertWatning" parameterType="com.nanometer.smartlab.entity.SysWarning">
-    INSERT INTO sys_warning(`id`, `user_id`, `container_code`, `warning_id`, `warning_time`, `warning_level`, `warning_point`)
+  <insert id="insertWatning" parameterType="com.nanometer.smartlab.entity.SysWarning" useGeneratedKeys = "true" keyProperty = "id">
+    INSERT INTO sys_warning( `user_id`, `container_code`, `warning_id`, `warning_time`, `warning_level`, `warning_point`)
 	VALUES
-	( #{id}, #{userId}, #{containerId}, #{warningId}, #{warningTime}, #{warningLevel}, #{warningPoint});
+	(  #{userId}, #{containerId}, #{warningId}, #{warningTime}, #{warningLevel}, #{warningPoint});
   </insert>
 
 <select id="getSysWarningList" parameterType="java.util.Map" resultMap="SysWarning">
diff --git a/src/main/java/com/nanometer/smartlab/dao/TempSensorsDao.xml b/src/main/java/com/nanometer/smartlab/dao/TempSensorsDao.xml
index b6788d8..695820f 100644
--- a/src/main/java/com/nanometer/smartlab/dao/TempSensorsDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/TempSensorsDao.xml
@@ -22,9 +22,6 @@
     <insert id="insertWatning" parameterType="com.nanometer.smartlab.entity.TempSensors">
         insert into sys_container_sensors
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                id,
-            </if>
             <if test="containerId != null">
                 container_id,
             </if>
@@ -48,9 +45,6 @@
             </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
-            <if test="id != null">
-                #{id,jdbcType=VARCHAR},
-            </if>
             <if test="containerId != null">
                 #{containerId,jdbcType=VARCHAR},
             </if>
diff --git a/src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java b/src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java
index 5bbf6b0..0de3ff8 100644
--- a/src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java
+++ b/src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java
@@ -176,8 +176,8 @@
             if (admin == null ||StringUtils.isBlank(admin.getEmail())) throw new BusinessException(ExceptionEnumCode.PARAM_NULL,"找不到管理员或者管理员邮箱信息");
 
             //2.获取国药试剂
-            String supplierId = sysSupplierService.getSysSupplierIdByname(send_supplier_name);
-            if (StringUtils.isBlank(supplierId))
+            Long supplierId = sysSupplierService.getSysSupplierIdByname(send_supplier_name);
+            if (supplierId==null)
                 throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, "没有找到与(" + send_supplier_name + ")相关供应商,请检查最近信息更新");
 
             List<SysReagent> guoyao_reagents = sysReagentService.getSysReagentListNew(null, null, supplierId, 1, null, null, null);
diff --git a/src/main/java/com/nanometer/smartlab/entity/BaseMeta.java b/src/main/java/com/nanometer/smartlab/entity/BaseMeta.java
index c66a2fa..78ee505 100644
--- a/src/main/java/com/nanometer/smartlab/entity/BaseMeta.java
+++ b/src/main/java/com/nanometer/smartlab/entity/BaseMeta.java
@@ -1,6 +1,9 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -8,10 +11,12 @@
 /**
  * Created by johnny on 17/8/21.
  */
+@Getter
+@Setter
 public class BaseMeta implements Serializable {
 
-    private String id;
-    private String groupId;
+    private Long id;
+    private Long groupId;
     private String metaKey;
     private String metaValue;
     private Integer orderIndex;
@@ -19,76 +24,6 @@
     private Timestamp createTime;
     private Timestamp updateTime;
     private ValidFlag validFlag;
+    private String groupCode;
 
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public String getMetaKey() {
-        return metaKey;
-    }
-
-    public void setMetaKey(String metaKey) {
-        this.metaKey = metaKey;
-    }
-
-    public String getMetaValue() {
-        return metaValue;
-    }
-
-    public void setMetaValue(String metaValue) {
-        this.metaValue = metaValue;
-    }
-
-    public Integer getOrderIndex() {
-        return orderIndex;
-    }
-
-    public void setOrderIndex(Integer orderIndex) {
-        this.orderIndex = orderIndex;
-    }
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/BaseMetaGroup.java b/src/main/java/com/nanometer/smartlab/entity/BaseMetaGroup.java
index 5763e91..299b87a 100644
--- a/src/main/java/com/nanometer/smartlab/entity/BaseMetaGroup.java
+++ b/src/main/java/com/nanometer/smartlab/entity/BaseMetaGroup.java
@@ -2,6 +2,8 @@
 
 import com.nanometer.smartlab.entity.enumtype.EditFlag;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -9,9 +11,12 @@
 /**
  * Created by johnny on 17/8/21.
  */
+@Getter
+@Setter
 public class BaseMetaGroup implements Serializable {
 
-    private String id;
+    private Long id;
+    private String code;
     private String name;
     private Integer orderIndex;
     private Timestamp createTime;
@@ -19,59 +24,4 @@
     private EditFlag editFlag;
     private ValidFlag validFlag;
 
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Integer getOrderIndex() {
-        return orderIndex;
-    }
-
-    public void setOrderIndex(Integer orderIndex) {
-        this.orderIndex = orderIndex;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public EditFlag getEditFlag() {
-        return editFlag;
-    }
-
-    public void setEditFlag(EditFlag editFlag) {
-        this.editFlag = editFlag;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/BasePage.java b/src/main/java/com/nanometer/smartlab/entity/BasePage.java
index e40f12c..2d7acc4 100644
--- a/src/main/java/com/nanometer/smartlab/entity/BasePage.java
+++ b/src/main/java/com/nanometer/smartlab/entity/BasePage.java
@@ -1,6 +1,8 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -8,78 +10,17 @@
 /**
  * Created by johnny on 17/11/18.
  */
+@Getter
+@Setter
 public class BasePage implements Serializable {
 
-    private String id;
-    private String parentId;
+    private Long id;
+    private Long parentId;
     private String name;
+    private String code;
     private Integer levelType;
     private Integer levelIndex;
     private ValidFlag validFlag;
     private Timestamp createTime;
     private Timestamp updateTime;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getParentId() {
-        return parentId;
-    }
-
-    public void setParentId(String parentId) {
-        this.parentId = parentId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Integer getLevelType() {
-        return levelType;
-    }
-
-    public void setLevelType(Integer levelType) {
-        this.levelType = levelType;
-    }
-
-    public Integer getLevelIndex() {
-        return levelIndex;
-    }
-
-    public void setLevelIndex(Integer levelIndex) {
-        this.levelIndex = levelIndex;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/BaseRole.java b/src/main/java/com/nanometer/smartlab/entity/BaseRole.java
index d535732..c289243 100644
--- a/src/main/java/com/nanometer/smartlab/entity/BaseRole.java
+++ b/src/main/java/com/nanometer/smartlab/entity/BaseRole.java
@@ -1,6 +1,8 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 import org.apache.commons.lang.StringUtils;
 
 import java.io.Serializable;
@@ -11,9 +13,10 @@
 /**
  * Created by johnny on 17/11/18.
  */
+@Setter
+@Getter
 public class BaseRole implements Serializable {
-
-    private String id;
+    private Long id;
     private String name;
     private String memo;
     private ValidFlag validFlag;
@@ -21,69 +24,11 @@
     private Timestamp updateTime;
     private String btnPermission;
     private String userPermission;
+
+    //非数据库字段
     private List<String> btnPermissions;
+    private List<Long> pageIdList;
 
-    private List<String> pageIdList;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    public List<String> getPageIdList() {
-        return pageIdList;
-    }
-
-    public void setPageIdList(List<String> pageIdList) {
-        this.pageIdList = pageIdList;
-    }
-
-    public String getBtnPermission() {
-        return btnPermission;
-    }
 
     public void setBtnPermission(String btnPermission) {
         if (StringUtils.isNotBlank(btnPermission)) {
@@ -91,22 +36,5 @@
         }
         this.btnPermission = btnPermission;
     }
-
-    public String getUserPermission() {
-        return userPermission;
-    }
-
-    public void setUserPermission(String userPermission) {
-        this.userPermission = userPermission;
-    }
-
-    public List<String> getBtnPermissions() {
-        return btnPermissions;
-    }
-
-    public void setBtnPermissions(List<String> btnPermissions) {
-        this.btnPermissions = btnPermissions;
-    }
-
 
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/BaseRolePage.java b/src/main/java/com/nanometer/smartlab/entity/BaseRolePage.java
index 932519e..a589566 100644
--- a/src/main/java/com/nanometer/smartlab/entity/BaseRolePage.java
+++ b/src/main/java/com/nanometer/smartlab/entity/BaseRolePage.java
@@ -1,37 +1,23 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
 
 /**
  * Created by johnny on 17/11/18.
  */
+@Setter
+@Getter
 public class BaseRolePage implements Serializable {
 
-    private String id;
-    private String roleId;
-    private String pageId;
+    private Long id;
+    private Long roleId;
+    private Long pageId;
 
-    public String getId() {
-        return id;
-    }
+    //非数据库字段
+    private String pageCode;
 
-    public void setId(String id) {
-        this.id = id;
-    }
 
-    public String getRoleId() {
-        return roleId;
-    }
-
-    public void setRoleId(String roleId) {
-        this.roleId = roleId;
-    }
-
-    public String getPageId() {
-        return pageId;
-    }
-
-    public void setPageId(String pageId) {
-        this.pageId = pageId;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/DangerousEncode.java b/src/main/java/com/nanometer/smartlab/entity/DangerousEncode.java
index a763b38..4544316 100644
--- a/src/main/java/com/nanometer/smartlab/entity/DangerousEncode.java
+++ b/src/main/java/com/nanometer/smartlab/entity/DangerousEncode.java
@@ -1,8 +1,13 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
 import java.util.Date;
 
+@Setter
+@Getter
 public class DangerousEncode implements Serializable {
     /** id  id **/
     private Long id;
@@ -52,162 +57,9 @@
     /** 使用次数  count **/
     private Integer count;
 
-    public Long getId() {
-        return id;
-    }
+    //非数据库字段
+    private String containerName;
 
-    public void setId(Long id) {
-        this.id = id;
-    }
 
-    /**   柜码  container_number   **/
-    public String getContainerNumber() {
-        return containerNumber;
-    }
-
-    /**   柜码  container_number   **/
-    public void setContainerNumber(String containerNumber) {
-        this.containerNumber = containerNumber == null ? null : containerNumber.trim();
-    }
-
-    /**   试剂名称码  reagent_code   **/
-    public String getReagentCode() {
-        return reagentCode;
-    }
-
-    /**   试剂名称码  reagent_code   **/
-    public void setReagentCode(String reagentCode) {
-        this.reagentCode = reagentCode == null ? null : reagentCode.trim();
-    }
-
-    /**   试剂名称  reagent_name   **/
-    public String getReagentName() {
-        return reagentName;
-    }
-
-    /**   试剂名称  reagent_name   **/
-    public void setReagentName(String reagentName) {
-        this.reagentName = reagentName == null ? null : reagentName.trim();
-    }
-
-    /**   CAS号  cas   **/
-    public String getCas() {
-        return cas;
-    }
-
-    /**   CAS号  cas   **/
-    public void setCas(String cas) {
-        this.cas = cas == null ? null : cas.trim();
-    }
-
-    /**   备注  memo   **/
-    public String getMemo() {
-        return memo;
-    }
-
-    /**   备注  memo   **/
-    public void setMemo(String memo) {
-        this.memo = memo == null ? null : memo.trim();
-    }
-
-    /**   性状  property   **/
-    public String getProperty() {
-        return property;
-    }
-
-    /**   性状  property   **/
-    public void setProperty(String property) {
-        this.property = property == null ? null : property.trim();
-    }
-
-    /**   特性  feature   **/
-    public String getFeature() {
-        return feature;
-    }
-
-    /**   特性  feature   **/
-    public void setFeature(String feature) {
-        this.feature = feature == null ? null : feature.trim();
-    }
-
-    /**   相忌  avoid   **/
-    public String getAvoid() {
-        return avoid;
-    }
-
-    /**   相忌  avoid   **/
-    public void setAvoid(String avoid) {
-        this.avoid = avoid == null ? null : avoid.trim();
-    }
-
-    /**   状态  status   **/
-    public String getStatus() {
-        return status;
-    }
-
-    /**   状态  status   **/
-    public void setStatus(String status) {
-        this.status = status == null ? null : status.trim();
-    }
-
-    /**   灭火器  fire   **/
-    public String getFire() {
-        return fire;
-    }
-
-    /**   灭火器  fire   **/
-    public void setFire(String fire) {
-        this.fire = fire == null ? null : fire.trim();
-    }
-
-    /**   随机码  random   **/
-    public String getRandom() {
-        return random;
-    }
-
-    /**   随机码  random   **/
-    public void setRandom(String random) {
-        this.random = random == null ? null : random.trim();
-    }
-
-    /**   编码  code   **/
-    public String getCode() {
-        return code;
-    }
-
-    /**   编码  code   **/
-    public void setCode(String code) {
-        this.code = code == null ? null : code.trim();
-    }
-
-    /**   更新时间  update_time   **/
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    /**   更新时间  update_time   **/
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    /**   创建用户  creator   **/
-    public String getCreator() {
-        return creator;
-    }
-
-    /**   创建用户  creator   **/
-    public void setCreator(String creator) {
-        this.creator = creator == null ? null : creator.trim();
-    }
-
-    /**   使用次数  count   **/
-    public Integer getCount() {
-        return count;
-    }
-
-    /**   使用次数  count   **/
-    public void setCount(Integer count) {
-        this.count = count;
-    }
 
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/DangerousEncodeVo.java b/src/main/java/com/nanometer/smartlab/entity/DangerousEncodeVo.java
index 3f68d42..f0fb763 100644
--- a/src/main/java/com/nanometer/smartlab/entity/DangerousEncodeVo.java
+++ b/src/main/java/com/nanometer/smartlab/entity/DangerousEncodeVo.java
@@ -1,14 +1,11 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
 public class DangerousEncodeVo extends DangerousEncode {
 
     private String containerName;
-
-    public String getContainerName() {
-        return containerName;
-    }
-
-    public void setContainerName(String containerName) {
-        this.containerName = containerName;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/EmailStatus.java b/src/main/java/com/nanometer/smartlab/entity/EmailStatus.java
index fc2b4ce..de772d4 100644
--- a/src/main/java/com/nanometer/smartlab/entity/EmailStatus.java
+++ b/src/main/java/com/nanometer/smartlab/entity/EmailStatus.java
@@ -3,6 +3,8 @@
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.entity.enumtype.EmailSendStatus;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -10,97 +12,20 @@
 /**
  * Created by wjd on 18/06/17.
  */
+@Getter
+@Setter
 public class EmailStatus implements Serializable {
 
-    private String id;
+    private Long id;
     private String orderCode;
     private String applyCode;
-    private String reagentId;
+    private Long reagentId;
     private Integer num;
-    private String applyUserId;
+    private Long applyUserId;
     private EmailSendStatus status;
     private Timestamp createTime;
     private Timestamp updateTime;
-
+    //非数据库字段
     private String EmailAddress;
 
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getOrderCode() {
-        return orderCode;
-    }
-
-    public void setOrderCode(String orderCode) {
-        this.orderCode = orderCode;
-    }
-
-    public String getApplyCode() {
-        return applyCode;
-    }
-
-    public void setApplyCode(String applyCode) {
-        this.applyCode = applyCode;
-    }
-
-    public String getReagentId() {
-        return reagentId;
-    }
-
-    public void setReagentId(String reagentId) {
-        this.reagentId = reagentId;
-    }
-
-    public Integer getNum() {
-        return num;
-    }
-
-    public void setNum(Integer num) {
-        this.num = num;
-    }
-
-    public String getApplyUserId() {
-        return applyUserId;
-    }
-
-    public void setApplyUserId(String applyUserId) {
-        this.applyUserId = applyUserId;
-    }
-
-    public EmailSendStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(EmailSendStatus status) {
-        this.status = status;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getEmailAddress() {
-        return EmailAddress;
-    }
-
-    public void setEmailAddress(String emailAddress) {
-        EmailAddress = emailAddress;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/EncodeReplaceDict.java b/src/main/java/com/nanometer/smartlab/entity/EncodeReplaceDict.java
index 50c37e9..b28d0a2 100644
--- a/src/main/java/com/nanometer/smartlab/entity/EncodeReplaceDict.java
+++ b/src/main/java/com/nanometer/smartlab/entity/EncodeReplaceDict.java
@@ -1,10 +1,14 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.ReplaceDictType;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.util.Date;
 
+@Getter
+@Setter
 public class EncodeReplaceDict implements Serializable {
     /** id  id **/
     private Long id;
@@ -22,7 +26,7 @@
     private String abbreviation;
 
     /** 创建者  creator **/
-    private String creator;
+    private Long creator;
 
     /** 更新时间  update_time **/
     private Date updateTime;
@@ -30,83 +34,4 @@
     /**   valid_flag **/
     private Integer validFlag;
 
-    /**   id  id   **/
-    public Long getId() {
-        return id;
-    }
-
-    /**   id  id   **/
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    /**   三种类型:1.厂家,2.规格,3.包装  type   **/
-    public ReplaceDictType getType() {
-        return type;
-    }
-
-    /**   三种类型:1.厂家,2.规格,3.包装  type   **/
-    public void setType(ReplaceDictType type) {
-        this.type = type;
-    }
-
-    /**   编号  number   **/
-    public String getNumber() {
-        return number;
-    }
-
-    /**   编号  number   **/
-    public void setNumber(String number) {
-        this.number = number == null ? null : number.trim();
-    }
-
-    /**   信息  info   **/
-    public String getInfo() {
-        return info;
-    }
-
-    /**   信息  info   **/
-    public void setInfo(String info) {
-        this.info = info == null ? null : info.trim();
-    }
-
-    /**   信息简写  abbreviation   **/
-    public String getAbbreviation() {
-        return abbreviation;
-    }
-
-    /**   信息简写  abbreviation   **/
-    public void setAbbreviation(String abbreviation) {
-        this.abbreviation = abbreviation == null ? null : abbreviation.trim();
-    }
-
-    /**   创建者  creator   **/
-    public String getCreator() {
-        return creator;
-    }
-
-    /**   创建者  creator   **/
-    public void setCreator(String creator) {
-        this.creator = creator == null ? null : creator.trim();
-    }
-
-    /**   更新时间  update_time   **/
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    /**   更新时间  update_time   **/
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    /**     valid_flag   **/
-    public Integer getValidFlag() {
-        return validFlag;
-    }
-
-    /**     valid_flag   **/
-    public void setValidFlag(Integer validFlag) {
-        this.validFlag = validFlag;
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/nanometer/smartlab/entity/HazardousWaste.java b/src/main/java/com/nanometer/smartlab/entity/HazardousWaste.java
index 61d5995..6d57aac 100644
--- a/src/main/java/com/nanometer/smartlab/entity/HazardousWaste.java
+++ b/src/main/java/com/nanometer/smartlab/entity/HazardousWaste.java
@@ -1,9 +1,14 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
+@Getter
+@Setter
 public class HazardousWaste implements Serializable {
     /**   id **/
     private Long id;
@@ -24,16 +29,16 @@
     private BigDecimal medical;
 
     /** 确认者  apply_person **/
-    private String applyPerson;
+    private Long applyPerson;
 
     /** 课题组  project **/
-    private String project;
+    private Long projectId;
 
     /** 部门  department **/
     private String department;
 
     /** 单位  unit **/
-    private String unit;
+    private Long unit;
 
     /** 创建时间  create_time **/
     private Date createTime;
@@ -53,159 +58,13 @@
     /** 创建时间  updatetime **/
     private Date updatetime;
 
-    /**     id   **/
-    public Long getId() {
-        return id;
-    }
 
-    /**     id   **/
-    public void setId(Long id) {
-        this.id = id;
-    }
 
-    /**   酸  acid   **/
-    public BigDecimal getAcid() {
-        return acid;
-    }
+    //非数据库字段
+    /** 课题组  project **/
+    private String projectName;
 
-    /**   酸  acid   **/
-    public void setAcid(BigDecimal acid) {
-        this.acid = acid;
-    }
+    private String applyPersonName;
 
-    /**   碱  alkali   **/
-    public BigDecimal getAlkali() {
-        return alkali;
-    }
-
-    /**   碱  alkali   **/
-    public void setAlkali(BigDecimal alkali) {
-        this.alkali = alkali;
-    }
-
-    /**   有机  organic   **/
-    public BigDecimal getOrganic() {
-        return organic;
-    }
-
-    /**   有机  organic   **/
-    public void setOrganic(BigDecimal organic) {
-        this.organic = organic;
-    }
-
-    /**   固废  solid   **/
-    public BigDecimal getSolid() {
-        return solid;
-    }
-
-    /**   固废  solid   **/
-    public void setSolid(BigDecimal solid) {
-        this.solid = solid;
-    }
-
-    /**   医疗  medical   **/
-    public BigDecimal getMedical() {
-        return medical;
-    }
-
-    /**   医疗  medical   **/
-    public void setMedical(BigDecimal medical) {
-        this.medical = medical;
-    }
-
-    /**   申请人  apply_person   **/
-    public String getApplyPerson() {
-        return applyPerson;
-    }
-
-    /**   申请人  apply_person   **/
-    public void setApplyPerson(String applyPerson) {
-        this.applyPerson = applyPerson == null ? null : applyPerson.trim();
-    }
-
-    /**   课题组  project   **/
-    public String getProject() {
-        return project;
-    }
-
-    /**   课题组  project   **/
-    public void setProject(String project) {
-        this.project = project == null ? null : project.trim();
-    }
-
-    /**   部门  department   **/
-    public String getDepartment() {
-        return department;
-    }
-
-    /**   部门  department   **/
-    public void setDepartment(String department) {
-        this.department = department == null ? null : department.trim();
-    }
-
-    /**   单位  unit   **/
-    public String getUnit() {
-        return unit;
-    }
-
-    /**   单位  unit   **/
-    public void setUnit(String unit) {
-        this.unit = unit == null ? null : unit.trim();
-    }
-
-    /**   创建时间  create_time   **/
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    /**   创建时间  create_time   **/
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    /**   单号  tid   **/
-    public String getTid() {
-        return tid;
-    }
-
-    /**   单号  tid   **/
-    public void setTid(String tid) {
-        this.tid = tid == null ? null : tid.trim();
-    }
-
-    /**   状态  待解决、已确认、已拒绝  status   **/
-    public String getStatus() {
-        return status;
-    }
-
-    /**   状态  待解决、已确认、已拒绝  status   **/
-    public void setStatus(String status) {
-        this.status = status == null ? null : status.trim();
-    }
-
-    /**   创建人  creator   **/
-    public String getCreator() {
-        return creator;
-    }
-
-    /**   创建人  creator   **/
-    public void setCreator(String creator) {
-        this.creator = creator == null ? null : creator.trim();
-    }
-
-    public String getUpdator() {
-        return updator;
-    }
-
-    public void setUpdator(String updator) {
-        this.updator = updator;
-    }
-
-    public Date getUpdatetime() {
-        return updatetime;
-    }
-
-    public void setUpdatetime(Date updatetime) {
-        this.updatetime = updatetime;
-    }
+    private String unitName;
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/LaboratoryReagentReserve.java b/src/main/java/com/nanometer/smartlab/entity/LaboratoryReagentReserve.java
index e3e346f..b7b1bb2 100644
--- a/src/main/java/com/nanometer/smartlab/entity/LaboratoryReagentReserve.java
+++ b/src/main/java/com/nanometer/smartlab/entity/LaboratoryReagentReserve.java
@@ -1,60 +1,30 @@
 package com.nanometer.smartlab.entity;
 
-import java.io.Serializable;
+import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+@Getter
+@Setter
 public class LaboratoryReagentReserve implements Serializable {
-    private String reagentId;
+    private Long id;
+    private Long reagentId;
+    private String articleNumber;
+    private Integer reserve;
+    private Timestamp updateTime;
+    private ValidFlag validFlag;
+    private Long userId;
+    private Long houseId;
+    private Long containerId;
+
+
+    //非数据库字段
     private SysReagent sysReagent;
     private String laboratoryName;
     private String containerName;
-    private Integer reserve;
-    private String id;
 
-    public String getId() {
-        return id;
-    }
 
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getReagentId() {
-        return reagentId;
-    }
-
-    public void setReagentId(String reagentId) {
-        this.reagentId = reagentId;
-    }
-
-    public SysReagent getSysReagent() {
-        return sysReagent;
-    }
-
-    public void setSysReagent(SysReagent sysReagent) {
-        this.sysReagent = sysReagent;
-    }
-
-    public String getLaboratoryName() {
-        return laboratoryName;
-    }
-
-    public void setLaboratoryName(String laboratoryName) {
-        this.laboratoryName = laboratoryName;
-    }
-
-    public String getContainerName() {
-        return containerName;
-    }
-
-    public void setContainerName(String containerName) {
-        this.containerName = containerName;
-    }
-
-    public Integer getReserve() {
-        return reserve;
-    }
-
-    public void setReserve(Integer reserve) {
-        this.reserve = reserve;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeApply.java b/src/main/java/com/nanometer/smartlab/entity/OpeApply.java
index 8365d57..4555830 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeApply.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeApply.java
@@ -1,8 +1,11 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
 import com.nanometer.smartlab.util.Validator;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -12,373 +15,65 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Setter
+@Getter
+@JsonIgnoreProperties(value = {"handler"})
 public class OpeApply implements Serializable,Comparable<OpeApply> {
-
-    private String first;
-    private String second;
-
-    public String getFirst() {
-        return first;
-    }
-
-    public void setFirst(String first) {
-        this.first = first;
-    }
-
-    public String getSecond() {
-        return second;
-    }
-
-    public void setSecond(String second) {
-        this.second = second;
-    }
-
-    private String firName;
-    private String firstUser;
-
-    public String getFirName() {
-        return firName;
-    }
-
-    public void setFirName(String firName) {
-        this.firName = firName;
-    }
-
-    public String getFirstUser() {
-        return firstUser;
-    }
-
-    public void setFirstUser(String firstUser) {
-        this.firstUser = firstUser;
-    }
-
-    private String id;
+    private Long id;
     private String applyCode;
+    private Long reagentId;
+    private Integer used;
     private Integer num;
     private Timestamp deadline;
-    private String applyUserId;
-    private String objective;
+    private Long applyUserId;
+    private Long projectId;
     private ApplyStatus status;
     private Timestamp createTime;
     private Timestamp updateTime;
     private ValidFlag validFlag;
-    private String approveUserId;
-    private String beforeApproveUserId;
+    private Long approveUserId;
     private String memo;
-    private SysReagent reagent;
+    private Long beforeApproveUserId;
+    private String before_memo;
+    private String startReagentCode;
+    private String endReagentCode;
+    private Integer arrivalNum;
+    private Long houseId;
+    private String place;
+    private Long containerId;
+    private String articleNumber;
+    private String applyGoal;
+    private BigDecimal applyPrice;
+    private Integer stockFlag;
+    private Long firstUser;
+    private Long consigneeId;
+    private Timestamp arrivalTime;
 
+
+
+    //非数据库字段
+    private String firName;
+    private SysReagent reagent;
+    private OpeOrder order;
     private String applyUserName;
     private String applyUserProject;
     private String applyUserDepartment;
-
     private String approveUserName;
-
     private String secondUserName;
-
     private ApplyStatus orderStatus;
-
-    public String getSecondUserName() {
-        return secondUserName;
-    }
-
-    public void setSecondUserName(String secondUserName) {
-        this.secondUserName = secondUserName;
-    }
-
     // 用于订单入库的时候表格编辑字段
-    private Integer arrivalNum;
-    private String articleNumber;
-    private String startReagentCode;
-    private String endReagentCode;
+
     private List<String> reagentCodeList;
-    private String houseId;
-    private String containerId;
-    private String placeId;
-
     private String projectName;
-    private String projectId;
     private String projectOwner;
-    private String ownerDepartment;
-
-    private String applyGoal;
-    private BigDecimal applyPrice;
-    private int stockFlag;
+    private Long ownerDepartment;
     private String stockFlagValue;
     //用于存放仓库 和仓库货柜的id
-    private String warehouseId;
-    private String warehouseContainerId;
+    private Long warehouseId;
+    private Long warehouseContainerId;
 
-    public String getStockFlagValue() {
-        return stockFlagValue;
-    }
-
-    public void setStockFlagValue(String stockFlagValue) {
-        this.stockFlagValue = stockFlagValue;
-    }
-
-    public int getStockFlag() {
-        return stockFlag;
-    }
-
-    public void setStockFlag(int stockFlag) {
-        this.stockFlag = stockFlag;
-    }
-
-    public BigDecimal getApplyPrice() {
-        return applyPrice;
-    }
-
-    public void setApplyPrice(BigDecimal applyPrice) {
-        this.applyPrice = applyPrice;
-    }
-
-    public String getApplyGoal() {
-        return applyGoal;
-    }
-
-    public void setApplyGoal(String applyGoal) {
-        this.applyGoal = Validator.filter(applyGoal);
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getApplyCode() {
-        return applyCode;
-    }
-
-    public void setApplyCode(String applyCode) {
-        this.applyCode = applyCode;
-    }
-
-    public Integer getNum() {
-        return num;
-    }
-
-    public void setNum(Integer num) {
-        this.num = Integer.parseInt(Validator.filter(num.toString()));
-    }
-
-    public String getApplyUserId() {
-        return applyUserId;
-    }
-
-    public void setApplyUserId(String applyUserId) {
-        this.applyUserId = applyUserId;
-    }
-
-    public String getObjective() {
-        return objective;
-    }
-
-    public void setObjective(String objective) {
-        this.objective = Validator.filter(objective);
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public String getApproveUserId() {
-        return approveUserId;
-    }
-    public String getBeforeApproveUserId(){
-        return beforeApproveUserId;
-    }
-
-    public void setBeforeApproveUserId(String beforeApproveUserId){
-        this.beforeApproveUserId=beforeApproveUserId;
-    }
-    public void setApproveUserId(String approveUserId) {
-        this.approveUserId = Validator.filter(approveUserId);
-    }
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    public Timestamp getDeadline() {
-        return deadline;
-    }
-
-    public void setDeadline(Timestamp deadline) {
-        this.deadline = deadline;
-    }
-
-    public ApplyStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(ApplyStatus status) {
-        this.status = status;
-    }
-
-    public SysReagent getReagent() {
-        return reagent;
-    }
-
-    public void setReagent(SysReagent reagent) {
-        this.reagent = reagent;
-    }
-
-    public String getApplyUserName() {
-        return applyUserName;
-    }
-
-    public void setApplyUserName(String applyUserName) {
-        this.applyUserName = applyUserName;
-    }
-
-    public Integer getArrivalNum() {
-        return arrivalNum;
-    }
-
-    public void setArrivalNum(Integer arrivalNum) {
-        this.arrivalNum = arrivalNum;
-    }
-
-    public String getArticleNumber() {
-        return articleNumber;
-    }
-
-    public void setArticleNumber(String articleNumber) {
-        this.articleNumber = articleNumber;
-    }
-
-    public String getStartReagentCode() {
-        return startReagentCode;
-    }
-
-    public void setStartReagentCode(String startReagentCode) {
-        this.startReagentCode = startReagentCode;
-    }
-
-    public String getEndReagentCode() {
-        return endReagentCode;
-    }
-
-    public void setEndReagentCode(String endReagentCode) {
-        this.endReagentCode = endReagentCode;
-    }
-
-    public String getHouseId() {
-        return houseId;
-    }
-
-    public void setHouseId(String houseId) {
-        this.houseId = houseId;
-    }
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
-
-    public String getPlaceId() {
-        return placeId;
-    }
-
-    public void setPlaceId(String placeId) {
-        this.placeId = placeId;
-    }
-
-    public String getApproveUserName() {
-        return approveUserName;
-    }
-
-    public void setApproveUserName(String approveUserName) {
-        this.approveUserName = approveUserName;
-    }
-
-	public String getProjectName() {
-		return projectName;
-	}
-
-	public void setProjectName(String projectName) {
-		this.projectName = projectName;
-	}
-
-	public String getProjectId() {
-		return projectId;
-	}
-
-	public void setProjectId(String projectId) {
-		this.projectId = projectId;
-	}
-
-    public List<String> getReagentCodeList() {
-        return reagentCodeList;
-    }
-
-    public void setReagentCodeList(List<String> reagentCodeList) {
-        this.reagentCodeList = reagentCodeList;
-    }
-
-    public String getProjectOwner() {
-		return projectOwner;
-	}
-
-	public void setProjectOwner(String projectOwner) {
-		this.projectOwner = projectOwner;
-	}
-
-
-
-	public String getOwnerDepartment() {
-		return ownerDepartment;
-	}
-
-	public void setOwnerDepartment(String ownerDepartment) {
-		this.ownerDepartment = ownerDepartment;
-	}
-
-    public String getWarehouseId() {
-        return warehouseId;
-    }
-
-    public void setWarehouseId(String warehouseId) {
-        this.warehouseId = warehouseId;
-    }
-
-    public String getWarehouseContainerId() {
-        return warehouseContainerId;
-    }
-
-    public void setWarehouseContainerId(String warehouseContainerId) {
-        this.warehouseContainerId = warehouseContainerId;
-    }
+    private String first;
+    private String second;
 
     @Override
 	public int compareTo(OpeApply o) {
@@ -405,30 +100,5 @@
         sb.append(", secondUserName='").append(secondUserName).append('\'');
         sb.append('}');
         return sb.toString();
-    }
-
-
-    public ApplyStatus getOrderStatus() {
-        return orderStatus;
-    }
-
-    public void setOrderStatus(ApplyStatus orderStatus) {
-        this.orderStatus = orderStatus;
-    }
-
-    public String getApplyUserProject() {
-        return applyUserProject;
-    }
-
-    public void setApplyUserProject(String applyUserProject) {
-        this.applyUserProject = applyUserProject;
-    }
-
-    public String getApplyUserDepartment() {
-        return applyUserDepartment;
-    }
-
-    public void setApplyUserDepartment(String applyUserDepartment) {
-        this.applyUserDepartment = applyUserDepartment;
     }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeApplyOrder.java b/src/main/java/com/nanometer/smartlab/entity/OpeApplyOrder.java
index 069550c..a0f24e8 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeApplyOrder.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeApplyOrder.java
@@ -1,37 +1,19 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
 
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
+@JsonIgnoreProperties(value = {"handler"})
 public class OpeApplyOrder implements Serializable {
-
-    private String id;
-    private String opeOrderId;
-    private String opeApplyId;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getOpeOrderId() {
-        return opeOrderId;
-    }
-
-    public void setOpeOrderId(String opeOrderId) {
-        this.opeOrderId = opeOrderId;
-    }
-
-    public String getOpeApplyId() {
-        return opeApplyId;
-    }
-
-    public void setOpeApplyId(String opeApplyId) {
-        this.opeApplyId = opeApplyId;
-    }
+    private Long id;
+    private Long opeOrderId;
+    private Long opeApplyId;
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java b/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
index 20d23da..b0e55c7 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeApplyReserve.java
@@ -1,7 +1,10 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -12,9 +15,12 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
+@JsonIgnoreProperties(value = {"handler"})
 public class OpeApplyReserve implements Serializable, Comparable<OpeApplyReserve> {
-
-	private String id;
+	//申请id
+	private Long id;
 	// 申购编号
 	private String applyCode;
 	// 申请数量
@@ -24,7 +30,7 @@
 	// 申购试剂
 	private SysReagent reagent;
 	// 申购者
-	private String applyUserId;
+	private Long applyUserId;
 	// 批号
 	private String articleNumber;
 	//领用数量
@@ -33,211 +39,25 @@
 	private Integer flag;
 	private ApplyStatus status;
 	private Integer arrivalNum;
-	private String containerId;
-	private String houseId;
+	private Long containerId;
+	private Long houseId;
 	private Timestamp arrivalTime;
 
-	private String project;
+	private String projectName;
 	private String projectManage;
 	private String applyUser;
 
-	public ApplyStatus getStatus() {
-		return status;
-	}
-
-	public void setStatus(ApplyStatus status) {
-		this.status = status;
-	}
-
-	private BigDecimal startReagentCode;
-	private BigDecimal endReagentCode;
+	private String startReagentCode;
+	private String endReagentCode;
 
 	private String startReagentCode2;
 	private String endReagentCode2;
 	private List<OpeWarehouseReserve> cacheUpdateList;
 
-	public String getStartReagentCode2() {
-		return startReagentCode2;
-	}
-
-	public void setStartReagentCode2(String startReagentCode2) {
-		this.startReagentCode2 = startReagentCode2;
-	}
-
-	public String getEndReagentCode2() {
-		return endReagentCode2;
-	}
-
-	public void setEndReagentCode2(String endReagentCode2) {
-		this.endReagentCode2 = endReagentCode2;
-	}
-
-	public Integer getFlag() {
-		return flag;
-	}
-
-	public void setFlag(Integer flag) {
-		this.flag = flag;
-	}
-
-	public BigDecimal getStartReagentCode() {
-		return startReagentCode;
-	}
-
-	public void setStartReagentCode(BigDecimal startReagentCode) {
-		this.startReagentCode = startReagentCode;
-	}
-
-	public BigDecimal getEndReagentCode() {
-		return endReagentCode;
-	}
-
-	public void setEndReagentCode(BigDecimal endReagentCode) {
-		this.endReagentCode = endReagentCode;
-	}
-
-	private List<String> reagentCode;
-
-    public List<String> getReagentCode(){
-    	return  reagentCode;
-	}
-
-	public void setReagentCode(List<String> reagentCode){
-    	this.reagentCode=reagentCode;
-	}
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getApplyCode() {
-        return applyCode;
-    }
-
-    public void setApplyCode(String applyCode) {
-        this.applyCode = applyCode;
-    }
-
-    public Integer getNum() {
-        return num;
-    }
-
-    public void setNum(Integer num) {
-        this.num = num;
-    }
-
-	public Integer getUsed() {
-		return used;
-	}
-
-	public void setUsed(Integer used) {
-		this.used = used;
-	}
-
-	public SysReagent getReagent() {
-		return reagent;
-	}
-
-	public void setReagent(SysReagent reagent) {
-		this.reagent = reagent;
-	}
-
+	private List<String> reagentCodes;
 	@Override
 	public int compareTo(OpeApplyReserve o) {
 		// TODO Auto-generated method stub
 		return 0;
-	}
-
-	public String getApplyUserId() {
-		return applyUserId;
-	}
-
-	public void setApplyUserId(String applyUserId) {
-		this.applyUserId = applyUserId;
-	}
-
-	public String getArticleNumber() {
-		return articleNumber;
-	}
-
-	public void setArticleNumber(String articleNumber) {
-		this.articleNumber = articleNumber;
-	}
-
-	public Integer getSelectNum() {
-		return selectNum;
-	}
-
-	public void setSelectNum(Integer selectNum) {
-		this.selectNum = selectNum;
-	}
-
-	public Integer getArrivalNum() {
-		return arrivalNum;
-	}
-
-	public void setArrivalNum(Integer arrivalNum) {
-		this.arrivalNum = arrivalNum;
-	}
-
-	public String getContainerId() {
-		return containerId;
-	}
-
-	public void setContainerId(String containerId) {
-		this.containerId = containerId;
-	}
-
-	public String getHouseId() {
-		return houseId;
-	}
-
-	public void setHouseId(String houseId) {
-		this.houseId = houseId;
-	}
-
-	public Timestamp getArrivalTime() {
-		return arrivalTime;
-	}
-
-	public void setArrivalTime(Timestamp arrivalTime) {
-		this.arrivalTime = arrivalTime;
-	}
-
-    public String getProject() {
-        return project;
-    }
-
-    public void setProject(String project) {
-        this.project = project;
-    }
-
-    public String getProjectManage() {
-        return projectManage;
-    }
-
-    public void setProjectManage(String projectManage) {
-        this.projectManage = projectManage;
-    }
-
-
-	public List<OpeWarehouseReserve> getCacheUpdateList() {
-		return cacheUpdateList;
-	}
-
-	public void setCacheUpdateList(List<OpeWarehouseReserve> cacheUpdateList) {
-		this.cacheUpdateList = cacheUpdateList;
-	}
-
-	public String getApplyUser() {
-		return applyUser;
-	}
-
-	public void setApplyUser(String applyUser) {
-		this.applyUser = applyUser;
 	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeLaboratoryReserve.java b/src/main/java/com/nanometer/smartlab/entity/OpeLaboratoryReserve.java
index 330dfa9..c2a6104 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeLaboratoryReserve.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeLaboratoryReserve.java
@@ -1,90 +1,23 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
-
+@Getter
+@Setter
+@JsonIgnoreProperties(value = {"handler"})
 public class OpeLaboratoryReserve implements Serializable {
-    private String id;
-    private String reagentId;
+    private Long id;
+    private Long reagentId;
     private String articleNumber;
     private ValidFlag validFlag;
     private Timestamp updateTime;
     private Integer reserve;
-    private String userId;
-    private String houseId;
-    private String containerId;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getReagentId() {
-        return reagentId;
-    }
-
-    public void setReagentId(String reagentId) {
-        this.reagentId = reagentId;
-    }
-
-    public String getArticleNumber() {
-        return articleNumber;
-    }
-
-    public void setArticleNumber(String articleNumber) {
-        this.articleNumber = articleNumber;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public Integer getReserve() {
-        return reserve;
-    }
-
-    public void setReserve(Integer reserve) {
-        this.reserve = reserve;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    public String getHouseId() {
-        return houseId;
-    }
-
-    public void setHouseId(String houseId) {
-        this.houseId = houseId;
-    }
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
+    private Long userId;
+    private Long houseId;
+    private Long containerId;
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeOrder.java b/src/main/java/com/nanometer/smartlab/entity/OpeOrder.java
index 9d4beb3..ed0eb8d 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeOrder.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeOrder.java
@@ -1,7 +1,10 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -9,9 +12,12 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
+@JsonIgnoreProperties(value = {"handler"})
 public class OpeOrder implements Serializable {
 
-    private String id;
+    private Long id;
     private String orderCode;
     private String orderName;
     private ApplyStatus status;
@@ -19,134 +25,20 @@
     private Timestamp updateTime;
     private ValidFlag validFlag;
     private String memo;
-    private String consigneeUserId;
-    private String orderUserId;
+    private Long consigneeUserId;
+    private Long orderUserId;
+    private Long supplierId;
+    private String supplierName;
     private Timestamp arrivalTime;
+    private Integer destoryFlag;
+
+
+    //非数据库字段
     private String orderUserName;
     private String consigneeUserName;
     
-    private String supplyId;
+
     
-    private String supplyName;
 
-    public String getId() {
-        return id;
-    }
 
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getOrderCode() {
-        return orderCode;
-    }
-
-    public void setOrderCode(String orderCode) {
-        this.orderCode = orderCode;
-    }
-
-    public String getOrderName() {
-        return orderName;
-    }
-
-    public void setOrderName(String orderName) {
-        this.orderName = orderName;
-    }
-
-    public ApplyStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(ApplyStatus status) {
-        this.status = status;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    public String getConsigneeUserId() {
-        return consigneeUserId;
-    }
-
-    public void setConsigneeUserId(String consigneeUserId) {
-        this.consigneeUserId = consigneeUserId;
-    }
-
-    public String getOrderUserId() {
-        return orderUserId;
-    }
-
-    public void setOrderUserId(String orderUserId) {
-        this.orderUserId = orderUserId;
-    }
-
-    public Timestamp getArrivalTime() {
-        return arrivalTime;
-    }
-
-    public void setArrivalTime(Timestamp arrivalTime) {
-        this.arrivalTime = arrivalTime;
-    }
-
-    public String getOrderUserName() {
-        return orderUserName;
-    }
-
-    public void setOrderUserName(String orderUserName) {
-        this.orderUserName = orderUserName;
-    }
-
-    public String getConsigneeUserName() {
-        return consigneeUserName;
-    }
-
-    public void setConsigneeUserName(String consigneeUserName) {
-        this.consigneeUserName = consigneeUserName;
-    }
-
-	public String getSupplyId() {
-		return supplyId;
-	}
-
-	public void setSupplyId(String supplyId) {
-		this.supplyId = supplyId;
-	}
-
-	public String getSupplyName() {
-		return supplyName;
-	}
-
-	public void setSupplyName(String supplyName) {
-		this.supplyName = supplyName;
-	}
-    
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeReagentCode.java b/src/main/java/com/nanometer/smartlab/entity/OpeReagentCode.java
new file mode 100644
index 0000000..353b4fc
--- /dev/null
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeReagentCode.java
@@ -0,0 +1,95 @@
+package com.nanometer.smartlab.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
+import com.nanometer.smartlab.entity.enumtype.RealStatus;
+import com.nanometer.smartlab.entity.enumtype.StoreType;
+import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.util.Date;
+import java.util.List;
+
+import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
+
+/**
+ * Created by johnny on 17/11/23.
+ */
+@Setter
+@Getter
+@JsonInclude(NON_NULL)
+@JsonIgnoreProperties(value = {"handler"})
+public class OpeReagentCode implements Serializable {
+
+    private Long id;
+    /**
+     * 订单id
+     */
+    private Long orderId;
+    /**
+     * 申请id
+     */
+    private Long applyId;
+    /**
+     * 试剂编码开始位置
+     */
+    private Integer startCode;
+    /**
+     * 试剂编码结束位置
+     */
+    private Integer endCode;
+    /**
+     * 试剂编码前缀
+     */
+    private String codePrex;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+    /**
+     * 状态,备用
+     */
+    private Integer status;
+
+
+    //非数据库字段
+    /**
+     * 试剂名称
+     */
+    private String reagentName;
+    /**
+     * 条码数量(试剂申请数量)
+     */
+    private String num;
+    /**
+     * 完整开始条码
+     */
+    private String startReagentCode;
+    /**
+     * 完整结束条码
+     */
+    private String endReagentCode;
+    /**
+     * 申请单号
+     */
+    private String applyCode;
+
+    /**
+     * 标签列表
+     */
+    private List<String> reagentCodes;
+
+    /**
+     * 试剂信息
+     */
+    private SysReagent reagent;
+}
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeReagentStatus.java b/src/main/java/com/nanometer/smartlab/entity/OpeReagentStatus.java
index f42878c..8a86bc3 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeReagentStatus.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeReagentStatus.java
@@ -8,229 +8,48 @@
 import com.nanometer.smartlab.entity.enumtype.RealStatus;
 import com.nanometer.smartlab.entity.enumtype.StoreType;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
 
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
+@Accessors(chain = true)
 @SuppressWarnings("serial")
 public class OpeReagentStatus implements Serializable {
 
-    private String id;
-    private String reagentId;
+    private Long id;
+    private Long reagentId;
     private String articleNumber;
     private String reagentCode;
-    private ArrivalStatus status;
-    private RealStatus realstatus;
-    private ValidFlag validFlag;
-    private String houseId;
-    private String containerId;
-    private String userId;
-    private String userName;
+    private Integer status;
+    private Integer realstatus;
+    private Integer validFlag;
+    private Long houseId;
+    private Long containerId;
+    private Long userId;
+
 	private Timestamp updateTime;
     private BigDecimal remainder;
     private String place;
-    private StoreType storeType;
-    private String projectNum;
+    private Integer storeType;
+    private Long projectId;
     private String applyCode;
     private String orderCode;
+    private String startReagentCode;
+    private String endReagentCode;
+    private Integer arrivalNum;
 
+
+    //非数据库字段
     private String houseName;
     private String containerCode;
     private SysReagent reagent;
-
     private String name;
     private String cas;
     private Integer deadline;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getArticleNumber() {
-        return articleNumber;
-    }
-
-    public void setArticleNumber(String articleNumber) {
-        this.articleNumber = articleNumber;
-    }
-
-    public String getReagentCode() {
-        return reagentCode;
-    }
-
-    public void setReagentCode(String reagentCode) {
-        this.reagentCode = reagentCode;
-    }
-
-    public ArrivalStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(ArrivalStatus status) {
-        this.status = status;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public String getHouseId() {
-        return houseId;
-    }
-
-    public void setHouseId(String houseId) {
-        this.houseId = houseId;
-    }
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
-
-    public RealStatus getRealstatus() {
-		return realstatus;
-	}
-
-	public void setRealstatus(RealStatus realstatus) {
-		this.realstatus = realstatus;
-	}
-
-	public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    public BigDecimal getRemainder() {
-        return remainder;
-    }
-
-    public void setRemainder(BigDecimal remainder) {
-        this.remainder = remainder;
-    }
-
-	public String getHouseName() {
-		return houseName;
-	}
-
-	public void setHouseName(String houseName) {
-		this.houseName = houseName;
-	}
-
-	public SysReagent getReagent() {
-		return reagent;
-	}
-
-	public void setReagent(SysReagent reagent) {
-		this.reagent = reagent;
-	}
-
-	public String getContainerCode() {
-		return containerCode;
-	}
-
-	public void setContainerCode(String containerCode) {
-		this.containerCode = containerCode;
-	}
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getPlace() {
-        return place;
-    }
-
-    public void setPlace(String place) {
-        this.place = place;
-    }
-
-	public String getReagentId() {
-		return reagentId;
-	}
-
-	public void setReagentId(String reagentId) {
-		this.reagentId = reagentId;
-	}
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCas() {
-        return cas;
-    }
-
-    public void setCas(String cas) {
-        this.cas = cas;
-    }
-
-    public Integer getDeadline() {
-        return deadline;
-    }
-
-    public void setDeadline(Integer deadline) {
-        this.deadline = deadline;
-    }
-
-	public String getProjectNum() {
-		return projectNum;
-	}
-
-	public void setProjectNum(String projectNum) {
-		this.projectNum = projectNum;
-	}
-
-	public StoreType getStoreType() {
-		return storeType;
-	}
-
-	public void setStoreType(StoreType storeType) {
-		this.storeType = storeType;
-	}
-
-    public String getApplyCode() {
-        return applyCode;
-    }
-
-    public void setApplyCode(String applyCode) {
-        this.applyCode = applyCode;
-    }
-
-    public String getOrderCode() {
-        return orderCode;
-    }
-
-    public void setOrderCode(String orderCode) {
-        this.orderCode = orderCode;
-    }
+    private String userName;
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java b/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
index 110400e..1408ef6 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
@@ -1,10 +1,13 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
 import com.nanometer.smartlab.entity.enumtype.RealStatus;
 import com.nanometer.smartlab.entity.enumtype.StoreType;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -15,290 +18,46 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Setter
+@Getter
 @JsonInclude(NON_NULL)
+@JsonIgnoreProperties(value = {"handler"})
 public class OpeUseFlow implements Serializable {
 
-    private String id;
+    private Long id;
     private String reagentCode;
-    private ArrivalStatus status;
-    private RealStatus realstatus;
-    private String houseId;
-    private String containerId;
-    private String userId;
-    private ValidFlag validFlag;
+    private Integer status;
+    private Integer realstatus;
+    private Long houseId;
+    private Long containerId;
+    private Long userId;
+    private Integer validFlag;
     private Timestamp createTime;
     private BigDecimal remainder;
     private String place;
-    private StoreType storeType;
-    // 体积
+    private Integer operateState;
+    private Integer storeType;
+    private String receiptNumber;
+    private String note;
     private BigDecimal volume;
 
+
+    //非数据库字段
     private SysReagent reagent;
     private String userName;
     private String articleNumber;
-
     private String laboratoryName;
     private String warehouseName;
-
     private String warehouseContainerName;
     private String laboratoryContainerName;
     private String warehouseContainerCode;
     private String laboratoryContainerCode;
-
     private String operatestateName;
-    private String operateState;
-    private String receiptNumber;
-    private String note;
+
     //人员信息
-    private String project;
+    private Long projectId;
+    private String projectName;
     private String phone;
     private String department;
     private Integer applyNum;
-
-
-
-
-	public String getWarehouseContainerCode() {
-		return warehouseContainerCode;
-	}
-
-	public void setWarehouseContainerCode(String warehouseContainerCode) {
-		this.warehouseContainerCode = warehouseContainerCode;
-	}
-
-	public String getLaboratoryContainerCode() {
-		return laboratoryContainerCode;
-	}
-
-	public void setLaboratoryContainerCode(String laboratoryContainerCode) {
-		this.laboratoryContainerCode = laboratoryContainerCode;
-	}
-
-	public String getOperatestateName() {
-		return operatestateName;
-	}
-
-	public void setOperatestateName(String operatestateName) {
-		this.operatestateName = operatestateName;
-	}
-
-	public RealStatus getRealstatus() {
-		return realstatus;
-	}
-
-	public void setRealstatus(RealStatus realstatus) {
-		this.realstatus = realstatus;
-	}
-
-
-
-	public String getOperateState() {
-		return operateState;
-	}
-
-	public void setOperateState(String operateState) {
-		this.operateState = operateState;
-	}
-
-	public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getReagentCode() {
-        return reagentCode;
-    }
-
-    public void setReagentCode(String reagentCode) {
-        this.reagentCode = reagentCode;
-    }
-
-    public ArrivalStatus getStatus() {
-        return status;
-    }
-
-    public void setStatus(ArrivalStatus status) {
-        this.status = status;
-    }
-
-    public String getHouseId() {
-        return houseId;
-    }
-
-    public void setHouseId(String houseId) {
-        this.houseId = houseId;
-    }
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public BigDecimal getRemainder() {
-        return remainder;
-    }
-
-    public void setRemainder(BigDecimal remainder) {
-        this.remainder = remainder;
-    }
-
-    public String getPlace() {
-        return place;
-    }
-
-    public void setPlace(String place) {
-        this.place = place;
-    }
-
-	public SysReagent getReagent() {
-		return reagent;
-	}
-
-	public void setReagent(SysReagent reagent) {
-		this.reagent = reagent;
-	}
-
-	public String getUserName() {
-		return userName;
-	}
-
-	public void setUserName(String userName) {
-		this.userName = userName;
-	}
-
-	public String getArticleNumber() {
-		return articleNumber;
-	}
-
-	public void setArticleNumber(String articleNumber) {
-		this.articleNumber = articleNumber;
-	}
-
-	public String getLaboratoryName() {
-		return laboratoryName;
-	}
-
-	public void setLaboratoryName(String laboratoryName) {
-		this.laboratoryName = laboratoryName;
-	}
-
-	public String getWarehouseName() {
-		return warehouseName;
-	}
-
-	public void setWarehouseName(String warehouseName) {
-		this.warehouseName = warehouseName;
-	}
-
-	public String getWarehouseContainerName() {
-		return warehouseContainerName;
-	}
-
-	public void setWarehouseContainerName(String warehouseContainerName) {
-		this.warehouseContainerName = warehouseContainerName;
-	}
-
-	public String getLaboratoryContainerName() {
-		return laboratoryContainerName;
-	}
-
-	public void setLaboratoryContainerName(String laboratoryContainerName) {
-		this.laboratoryContainerName = laboratoryContainerName;
-	}
-
-	public StoreType getStoreType() {
-		return storeType;
-	}
-
-	public void setStoreType(StoreType storeType) {
-		this.storeType = storeType;
-	}
-
-    public String getReceiptNumber() {
-        return receiptNumber;
-    }
-
-    public void setReceiptNumber(String receiptNumber) {
-        this.receiptNumber = receiptNumber;
-    }
-
-
-
-    public Integer getApplyNum() {
-        return applyNum;
-    }
-
-    public void setApplyNum(Integer applyNum) {
-        this.applyNum = applyNum;
-    }
-
-    public String getProject() {
-        return project;
-    }
-
-    public void setProject(String project) {
-        this.project = project;
-    }
-
-    public String getDepartment() {
-        return department;
-    }
-
-    public void setDepartment(String department) {
-        this.department = department;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getNote() {
-        return note;
-    }
-
-    public void setNote(String note) {
-        this.note = note;
-    }
-
-    public BigDecimal getVolume() {
-        return volume;
-    }
-
-    public void setVolume(BigDecimal volume) {
-        this.volume = volume;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java b/src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java
index a53e795..cb489fc 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeWarehouseReserve.java
@@ -5,207 +5,46 @@
 import java.sql.Timestamp;
 import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 /**
  * Created by johnny on 17/12/15.
  */
+@Getter
+@Setter
 @SuppressWarnings("serial")
+@JsonIgnoreProperties(value = {"handler"})
 public class OpeWarehouseReserve implements Serializable {
 
-    private String id;
-    private String reagentId;
-    private SysReagent reagent;
+    private Long id;
+    private Long reagentId;
     private String articleNumber;
     private Integer reserve;
     private Timestamp updateTime;
     private ValidFlag validFlag;
+    private String applyCode;
+    private String orderCode;
+    private Long warehouseId;
+    private Long containerId;
+    private Long userId;
+
+
+
+    //非数据库字段
     private Integer selectNum;
     private BigDecimal startReagentCode;
     private BigDecimal endReagentCode;
     private Integer flag;
-    private String warehouseId;
     private String warehouseName;
     private String startReagentCode2;
     private String endReagentCode2;
-    private String applyCode;
-    private String orderCode;
-    //新增 货柜id
-    private String containerId;
-    private String userId;
-
-
     /**
      * 补贴条码的暂存领用数量
      */
     public Integer useNum;
-    public String getWarehouseId() {
-        return warehouseId;
-    }
-
-    public void setWarehouseId(String warehouseId) {
-        this.warehouseId = warehouseId;
-    }
-
-    public String getWarehouseName() {
-        return warehouseName;
-    }
-
-    public void setWarehouseName(String warehouseName) {
-        this.warehouseName = warehouseName;
-    }
-
-    public String getStartReagentCode2() {
-        return startReagentCode2;
-    }
-
-    public void setStartReagentCode2(String startReagentCode2) {
-        this.startReagentCode2 = startReagentCode2;
-    }
-
-    public String getEndReagentCode2() {
-        return endReagentCode2;
-    }
-
-    public void setEndReagentCode2(String endReagentCode2) {
-        this.endReagentCode2 = endReagentCode2;
-    }
-
     private List<String> reagentCodes;
-
-    public Integer getFlag() {
-        return flag;
-    }
-
-    public void setFlag(Integer flag) {
-        this.flag = flag;
-    }
-
-    public BigDecimal getStartReagentCode() {
-        return startReagentCode;
-    }
-
-    public void setStartReagentCode(BigDecimal startReagentCode) {
-        this.startReagentCode = startReagentCode;
-    }
-
-    public BigDecimal getEndReagentCode() {
-        return endReagentCode;
-    }
-
-    public void setEndReagentCode(BigDecimal endReagentCode) {
-        this.endReagentCode = endReagentCode;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getReagentId() {
-        return reagentId;
-    }
-
-    public void setReagentId(String reagentId) {
-        this.reagentId = reagentId;
-    }
-
-    public String getArticleNumber() {
-        return articleNumber;
-    }
-
-    public void setArticleNumber(String articleNumber) {
-        this.articleNumber = articleNumber;
-    }
-
-    public Integer getReserve() {
-        return reserve;
-    }
-
-    public void setReserve(Integer reserve) {
-        this.reserve = reserve;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-	public SysReagent getReagent() {
-		return reagent;
-	}
-
-	public void setReagent(SysReagent reagent) {
-		this.reagent = reagent;
-	}
-
-	public ValidFlag getValidFlag() {
-		return validFlag;
-	}
-
-	public void setValidFlag(ValidFlag validFlag) {
-		this.validFlag = validFlag;
-	}
-
-	public List<String> getReagentCodes() {
-		return reagentCodes;
-	}
-
-	public void setReagentCodes(List<String> reagentCodes) {
-		this.reagentCodes = reagentCodes;
-	}
-
-	public Integer getSelectNum() {
-		return selectNum;
-	}
-
-	public void setSelectNum(Integer selectNum) {
-		this.selectNum = selectNum;
-	}
-
-    public String getApplyCode() {
-        return applyCode;
-    }
-
-    public void setApplyCode(String applyCode) {
-        this.applyCode = applyCode;
-    }
-
-    public String getOrderCode() {
-        return orderCode;
-    }
-
-    public void setOrderCode(String orderCode) {
-        this.orderCode = orderCode;
-    }
-
-    public Integer getUseNum() {
-        return useNum;
-    }
-
-    public void setUseNum(Integer useNum) {
-        this.useNum = useNum;
-    }
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
+    private SysReagent reagent;
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SupplierOrder.java b/src/main/java/com/nanometer/smartlab/entity/SupplierOrder.java
index 7f3407b..a30b9ed 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SupplierOrder.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SupplierOrder.java
@@ -5,68 +5,19 @@
 import java.util.List;
 
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
+import lombok.Getter;
+import lombok.Setter;
 
+@Getter
+@Setter
 @SuppressWarnings("serial")
 public class SupplierOrder implements Serializable  {
-	@Override
-	public String toString() {
-		final StringBuilder sb = new StringBuilder("SupplierOrder{");
-		sb.append("beforeApproveUserId='").append(beforeApproveUserId).append('\'');
-		sb.append(", firName='").append(firName).append('\'');
-		sb.append(", firstUser='").append(firstUser).append('\'');
-		sb.append(", approveUserName='").append(approveUserName).append('\'');
-		sb.append(", secondUserName='").append(secondUserName).append('\'');
-		sb.append('}');
-		return sb.toString();
-	}
-
-	private String beforeApproveUserId;
+	private Long beforeApproveUserId;
 	private String firName;
 	private String firstUser;
 	private String first;
 	private String second;
-
-	public String getBeforeApproveUserId() {
-		return beforeApproveUserId;
-	}
-
-	public void setBeforeApproveUserId(String beforeApproveUserId) {
-		this.beforeApproveUserId = beforeApproveUserId;
-	}
-
-	public String getFirName() {
-		return firName;
-	}
-
-	public void setFirName(String firName) {
-		this.firName = firName;
-	}
-
-	public String getFirstUser() {
-		return firstUser;
-	}
-
-	public void setFirstUser(String firstUser) {
-		this.firstUser = firstUser;
-	}
-
-	public String getFirst() {
-		return first;
-	}
-
-	public void setFirst(String first) {
-		this.first = first;
-	}
-
-	public String getSecond() {
-		return second;
-	}
-
-	public void setSecond(String second) {
-		this.second = second;
-	}
-
-	private String id;
+	private Long id;
 
 	private ApplyStatus status;
 
@@ -80,97 +31,11 @@
 
     private Timestamp createTime;
 
-    private List<String> applyIds;
+    private List<Long> applyIds;
 
     private String ids;
 
-    private int destoryFlag;
-
-    public int getDestoryFlag(){
-    	return  destoryFlag;
-	}
-	public void setDestoryFlag(int destoryFlag){
-    	this.destoryFlag=destoryFlag;
-	}
-    public List<String> getApplyIds() {
-		return applyIds;
-	}
-
-	public void setApplyIds(List<String> applyIds) {
-		this.applyIds = applyIds;
-	}
+    private Integer destoryFlag;
 
 	private Double totalPrice;
-
-	public String getId() {
-		return id;
-	}
-
-	public void setId(String id) {
-		this.id = id;
-	}
-
-	public ApplyStatus getStatus() {
-		return status;
-	}
-
-	public void setStatus(ApplyStatus status) {
-		this.status = status;
-	}
-
-	public String getOrderCode() {
-		return orderCode;
-	}
-
-	public void setOrderCode(String orderCode) {
-		this.orderCode = orderCode;
-	}
-
-	public String getApproveUserName() {
-		return approveUserName;
-	}
-
-	public void setApproveUserName(String approveUserName) {
-		this.approveUserName = approveUserName;
-	}
-
-	public String getSecondUserName() {
-		return secondUserName;
-	}
-
-	public void setSecondUserName(String secondUserName) {
-		this.secondUserName = secondUserName;
-	}
-
-	public String getOrderUserName() {
-		return orderUserName;
-	}
-
-	public void setOrderUserName(String orderUserName) {
-		this.orderUserName = orderUserName;
-	}
-
-	public Timestamp getCreateTime() {
-		return createTime;
-	}
-
-	public void setCreateTime(Timestamp createTime) {
-		this.createTime = createTime;
-	}
-
-	public Double getTotalPrice() {
-		return totalPrice;
-	}
-
-	public void setTotalPrice(Double totalPrice) {
-		this.totalPrice = totalPrice;
-	}
-
-	public String getIds() {
-		return ids;
-	}
-
-	public void setIds(String ids) {
-		this.ids = ids;
-	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysAlarm.java b/src/main/java/com/nanometer/smartlab/entity/SysAlarm.java
index 1e2022e..4165ec8 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysAlarm.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysAlarm.java
@@ -1,111 +1,33 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.WarningLevel;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
-
+@Getter
+@Setter
 public class SysAlarm implements Serializable {
 
     /**
 	 * 
 	 */
 	private static final long serialVersionUID = -3525838194228163619L;
+	private Long id;
+    private Long containerId;
+    private Long warningId;
+    private Timestamp warningTime;
+    private WarningLevel warningLevel;
+    private String controllerCode;
 
-	private int id;
-
+    //非数据库字段
     private String containerCode;
     private String type;
     private String typeName;
-    private String warningId;
     private String warningName;
-    private Timestamp warningTime;
 
-    private WarningLevel warningLevel;
 
-    private String controllerCode;
 
-    public int getId() {
-        return id;
-    }
 
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getContainerCode() {
-        return containerCode;
-    }
-
-    public void setContainerCode(String containerCode) {
-        this.containerCode = containerCode;
-    }
-
-    public String getWarningId() {
-        return warningId;
-    }
-
-    public void setWarningId(String warningId) {
-        this.warningId = warningId;
-    }
-
-    public Timestamp getWarningTime() {
-        return warningTime;
-    }
-
-    public void setWarningTime(Timestamp warningTime) {
-        this.warningTime = warningTime;
-    }
-
-    public WarningLevel getWarningLevel() {
-        return warningLevel;
-    }
-
-    public void setWarningLevel(WarningLevel warningLevel) {
-        this.warningLevel = warningLevel;
-    }
-
-    public String getControllerCode() {
-        return controllerCode;
-    }
-
-    public void setControllerCode(String controllerCode) {
-        this.controllerCode = controllerCode;
-    }
-
-    public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public String getTypeName() {
-		return typeName;
-	}
-
-	public void setTypeName(String typeName) {
-		this.typeName = typeName;
-	}
-
-	public String getWarningName() {
-		return warningName;
-	}
-
-	public void setWarningName(String warningName) {
-		this.warningName = warningName;
-	}
-
-	@Override
-    public String toString() {
-        return "SysAlarm{" +
-                "id=" + id +
-                ", containerCode='" + containerCode + '\'' +
-                ", warningId='" + warningId + '\'' +
-                ", warningTime=" + warningTime +
-                ", warningLevel=" + warningLevel +
-                ", controllerCode='" + controllerCode + '\'' +
-                '}';
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysAlarmPerson.java b/src/main/java/com/nanometer/smartlab/entity/SysAlarmPerson.java
index a2711a8..5b9e160 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysAlarmPerson.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysAlarmPerson.java
@@ -1,112 +1,30 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.WarningLevel;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
-
+@Getter
+@Setter
 public class SysAlarmPerson implements Serializable {
 
-    private int id;
+    private Long id;
 
     private String containerCode;
 
-    private String warningId;
+    private Long warningId;
 
     private Timestamp warningTime;
 
     private WarningLevel warningLevel;
 
-    private String userId;
+    private Long userId;
     
     private int warningPoint;
 
     private String memo;
 
-    private String refId;
-
-    public String getRefId() {
-        return refId;
-    }
-
-    public void setRefId(String refId) {
-        this.refId = refId;
-    }
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public String getContainerCode() {
-        return containerCode;
-    }
-
-    public void setContainerCode(String containerCode) {
-        this.containerCode = containerCode;
-    }
-
-    public String getWarningId() {
-        return warningId;
-    }
-
-    public void setWarningId(String warningId) {
-        this.warningId = warningId;
-    }
-
-    public Timestamp getWarningTime() {
-        return warningTime;
-    }
-
-    public void setWarningTime(Timestamp warningTime) {
-        this.warningTime = warningTime;
-    }
-
-    public WarningLevel getWarningLevel() {
-        return warningLevel;
-    }
-
-    public void setWarningLevel(WarningLevel warningLevel) {
-        this.warningLevel = warningLevel;
-    }
-   
-    public String getUserId() {
-		return userId;
-	}
-
-	public void setUserId(String userId) {
-		this.userId = userId;
-	}
-
-
-
-	public int getWarningPoint() {
-		return warningPoint;
-	}
-
-	public void setWarningPoint(int warningPoint) {
-		this.warningPoint = warningPoint;
-	}
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    @Override
-    public String toString() {
-        return "SysAlarm{" +
-                "id=" + id +
-                ", containerCode='" + containerCode + '\'' +
-                ", warningId='" + warningId + '\'' +
-                ", warningTime=" + warningTime +
-                ", warningLevel=" + warningLevel +
-                '}';
-    }
+    private Long refId;
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysContainerSensors.java b/src/main/java/com/nanometer/smartlab/entity/SysContainerSensors.java
index 5da523f..5d85ceb 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysContainerSensors.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysContainerSensors.java
@@ -1,8 +1,17 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
 import java.util.Date;
 
-public class SysContainerSensors {
+@Getter
+@Setter
+public class SysContainerSensors implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
     public final static int TYPE_LABORATORY_CONTAINER = 1;
     public final static int TYPE_WAREHOUSE_CONTAINER = 2;
 
@@ -14,33 +23,26 @@
     public final static int FLAG_VOC1_INDEX = 4;
 
 
-    private String id;
-
-    private String containerId;
-
-    private String warehouseContainerName;
-    private String laboratoryContainerName;
-
+    private Long id;
+    private Long containerId;
     private Double temp;
-
     private Integer humidity;
-
     private Double voc1;
-
     private String flag;
-
     private Integer type;
-
     private Date updateTime;
 
+
+
+
+   //非数据库字段
+    private String warehouseContainerName;
+    private String laboratoryContainerName;
     private String laboratoryName;
     private String warehouseName;
-
     private String laboratoryId;
     private String warehouseId;
 
-
-    private static final long serialVersionUID = 1L;
 
 
     public boolean isLowTempAlert(){
@@ -76,117 +78,5 @@
             return flag.charAt(FLAG_VOC1_INDEX)=='1';
         }
         return false;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
-
-    public Double getTemp() {
-        return temp;
-    }
-
-    public void setTemp(Double temp) {
-        this.temp = temp;
-    }
-
-    public Integer getHumidity() {
-        return humidity;
-    }
-
-    public void setHumidity(Integer humidity) {
-        this.humidity = humidity;
-    }
-
-    public Double getVoc1() {
-        return voc1;
-    }
-
-    public void setVoc1(Double voc1) {
-        this.voc1 = voc1;
-    }
-
-    public String getFlag() {
-        return flag;
-    }
-
-    public void setFlag(String flag) {
-        this.flag = flag;
-    }
-
-    public Integer getType() {
-        return type;
-    }
-
-    public void setType(Integer type) {
-        this.type = type;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getLaboratoryName() {
-        return laboratoryName;
-    }
-
-    public void setLaboratoryName(String laboratoryName) {
-        this.laboratoryName = laboratoryName;
-    }
-
-    public String getWarehouseName() {
-        return warehouseName;
-    }
-
-    public void setWarehouseName(String warehouseName) {
-        this.warehouseName = warehouseName;
-    }
-
-    public String getLaboratoryId() {
-        return laboratoryId;
-    }
-
-    public void setLaboratoryId(String laboratoryId) {
-        this.laboratoryId = laboratoryId;
-    }
-
-    public String getWarehouseId() {
-        return warehouseId;
-    }
-
-    public void setWarehouseId(String warehouseId) {
-        this.warehouseId = warehouseId;
-    }
-
-    public String getWarehouseContainerName() {
-        return warehouseContainerName;
-    }
-
-    public void setWarehouseContainerName(String warehouseContainerName) {
-        this.warehouseContainerName = warehouseContainerName;
-    }
-
-    public String getLaboratoryContainerName() {
-        return laboratoryContainerName;
-    }
-
-    public void setLaboratoryContainerName(String laboratoryContainerName) {
-        this.laboratoryContainerName = laboratoryContainerName;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysController.java b/src/main/java/com/nanometer/smartlab/entity/SysController.java
index 6c61bed..5c0c77c 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysController.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysController.java
@@ -1,14 +1,18 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
 
+@Getter
+@Setter
 @SuppressWarnings("serial")
 public class SysController implements Serializable {
 
-    private Integer id;
+    private Long id;
 
     private String controllerCode;
 
@@ -20,71 +24,9 @@
 
     private ValidFlag validFlag;
 
-    private String type;
+    private Long type;
 
+
+    //非数据库字段
     private String typeName;
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getTypeName() {
-        return typeName;
-    }
-
-    public void setTypeName(String typeName) {
-        this.typeName = typeName;
-    }
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getControllerCode() {
-        return controllerCode;
-    }
-
-    public void setControllerCode(String controllerCode) {
-        this.controllerCode = controllerCode;
-    }
-
-    public String getControllerName() {
-        return controllerName;
-    }
-
-    public void setControllerName(String controllerName) {
-        this.controllerName = controllerName;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysFile.java b/src/main/java/com/nanometer/smartlab/entity/SysFile.java
index 336c6a2..e984569 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysFile.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysFile.java
@@ -1,99 +1,23 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
 
+@Getter
+@Setter
 public class SysFile implements Serializable {
-    private String id;
+    private Long id;
+    private ValidFlag validFlag;
     private String name;
     private String fileName;
     private String url;
-    private ValidFlag validFlag;
     private Timestamp createTime;
     private Timestamp updateTime;
     private String remark;
     private Integer version;
     private Integer newOrOld;
-
-    public Integer getNewOrOld() {
-        return newOrOld;
-    }
-
-    public void setNewOrOld(Integer newOrOld) {
-        this.newOrOld = newOrOld;
-    }
-
-    public Integer getVersion() {
-        return version;
-    }
-
-    public void setVersion(Integer version) {
-        this.version = version;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getFileName() {
-        return fileName;
-    }
-
-    public void setFileName(String fileName) {
-        this.fileName = fileName;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysLaboratory.java b/src/main/java/com/nanometer/smartlab/entity/SysLaboratory.java
index c947a6d..d99bf82 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysLaboratory.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysLaboratory.java
@@ -1,7 +1,10 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -13,140 +16,35 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
 @SuppressWarnings("serial")
 @JsonInclude(NON_NULL)
+@JsonIgnoreProperties(value = {"handler"})
 public class SysLaboratory implements Serializable {
+    private static final long serialVersionUID = 1L;
 
-    private String id;
-    private String type;//实验室类型
+    private Long id;
+    private Long type;//实验室类型
     private String name;//实验室名
     private String infoCode;//状态码
     private String barCode;//地点条码
     private String location1;//使用地点-楼号
     private String location2;//使用地点-地址号
-    private String department;//负责部门
+    private Long department;//负责部门
     private Timestamp createTime;
     private Timestamp updateTime;
     private ValidFlag validFlag;
-    //显示
-    private List<String> projects;
     //存放
     private String project;
 
-    public String getId() {
-        return id;
-    }
 
-    public void setId(String id) {
-        this.id = id;
-    }
+    //非数据库字段
+    //显示
+    private List<SysProject> projects;
+    private List<SysLaboratoryContainer> laboratoryContainers;
+    private String typeName;//实验室类型名称
+    private String location;
+    private String departmentName;
 
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getInfoCode() {
-        return infoCode;
-    }
-
-    public void setInfoCode(String infoCode) {
-        this.infoCode = infoCode;
-    }
-
-    public String getBarCode() {
-        return barCode;
-    }
-
-    public void setBarCode(String barCode) {
-        this.barCode = barCode;
-    }
-
-    public String getLocation1() {
-        return location1;
-    }
-
-    public void setLocation1(String location1) {
-        this.location1 = location1;
-    }
-
-    public String getLocation2() {
-        return location2;
-    }
-
-    public void setLocation2(String location2) {
-        this.location2 = location2;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public String getDepartment() {
-        return department;
-    }
-
-    public void setDepartment(String department) {
-        this.department = department;
-    }
-
-    public List<String> getProjects() {
-        if (projects == null && project != null){
-            this.projects = Arrays.asList(this.project.split(","));
-        }
-        return projects;
-    }
-
-    public void setProjects(List<String> projects) {
-        this.projects = projects;
-    }
-
-    public String getProject() {
-        if (this.project == null){
-            this.project = "";
-            if (projects != null && projects.size() > 0) {
-                projects.forEach(pro->{
-                    this.project += ",";
-                    this.project += pro;
-                });
-                this.project = this.project.substring(1);
-            }
-        }
-        return project;
-    }
-
-    public void setProject(String project) {
-        this.project = project;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysLaboratoryContainer.java b/src/main/java/com/nanometer/smartlab/entity/SysLaboratoryContainer.java
index 9309aa9..95bbd41 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysLaboratoryContainer.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysLaboratoryContainer.java
@@ -1,7 +1,10 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -12,155 +15,42 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
 @SuppressWarnings("serial")
 @JsonInclude(NON_NULL)
+@JsonIgnoreProperties(value = {"handler"})
 public class SysLaboratoryContainer implements Serializable {
 
-    private String id;
-    private String laboratoryId;
-    private String laboratoryName;
-    private String type;
-    private String laboratoryType;
-	private String containerCode;
+    private Long id;
+    private Long laboratoryId;
+    private Long type;
+    private String containerCode;
     private String infoCode;
-    private String structure;
     private String name;
+    private Long structure;
     private Timestamp createTime;
     private Timestamp updateTime;
     private ValidFlag validFlag;
-    private String characterLeft;
-    private String characterRight;
+    private Long characterLeft;
+    private Long characterRight;
     private String controllerCode;
+    private Double temp;
+    private Integer humidity;
+    private Double voc1;
+    private String flag;
+    private String project;
+
+
+
+
+
+
+    //非数据库字段
+    private String laboratoryName;
+    private String laboratoryType;
     private String controllerName;
     private List<String> projects;
-    private String project;
-    public String getControllerName() {
-        return controllerName;
-    }
-
-    public void setControllerName(String controllerName) {
-        this.controllerName = controllerName;
-    }
-
-    public String getLaboratoryName() {
-  		return laboratoryName;
-  	}
-
-  	public void setLaboratoryName(String laboratoryName) {
-  		this.laboratoryName = laboratoryName;
-  	}
-
-  	public String getLaboratoryType() {
-  		return laboratoryType;
-  	}
-
-  	public void setLaboratoryType(String laboratoryType) {
-  		this.laboratoryType = laboratoryType;
-  	}
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getLaboratoryId() {
-        return laboratoryId;
-    }
-
-    public void setLaboratoryId(String laboratoryId) {
-        this.laboratoryId = laboratoryId;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getContainerCode() {
-        return containerCode;
-    }
-
-    public void setContainerCode(String containerCode) {
-        this.containerCode = containerCode;
-    }
-
-    public String getInfoCode() {
-        return infoCode;
-    }
-
-    public void setInfoCode(String infoCode) {
-        this.infoCode = infoCode;
-    }
-
-    public String getStructure() {
-        return structure;
-    }
-
-    public void setStructure(String structure) {
-        this.structure = structure;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getCharacterLeft() {
-		return characterLeft;
-	}
-
-	public void setCharacterLeft(String characterLeft) {
-		this.characterLeft = characterLeft;
-	}
-
-	public String getCharacterRight() {
-		return characterRight;
-	}
-
-	public void setCharacterRight(String characterRight) {
-		this.characterRight = characterRight;
-	}
-
-    public String getControllerCode() {
-        return controllerCode;
-    }
-
-    public void setControllerCode(String controllerCode) {
-        this.controllerCode = controllerCode;
-    }
 
     public List<String> getProjects() {
         if (projects == null && project != null){
@@ -169,9 +59,6 @@
         return projects;
     }
 
-    public void setProjects(List<String> projects) {
-        this.projects = projects;
-    }
 
     public String getProject() {
         if (this.project == null){
@@ -187,7 +74,4 @@
         return project;
     }
 
-    public void setProject(String project) {
-        this.project = project;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysProject.java b/src/main/java/com/nanometer/smartlab/entity/SysProject.java
index 419633e..63eecd3 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysProject.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysProject.java
@@ -1,97 +1,26 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
 import java.util.Date;
 
+@Getter
+@Setter
+@Data
 public class SysProject implements Serializable {
-    private String id;
-    private String projectId;
+    private Long id;
+    private String projectNo;
     private String projectName;
-    private String project;
-    private String sysUserId;
+    private Long sysUserId;
     private String remark;
-    private int validFlag;
-    private String createrUser;
+    private Integer validFlag;
+    private Long createrUser;
     private Date createTime;
+    private String project;
+
+    //非数据库字段
     private String username;
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getCreaterUser() {
-        return createrUser;
-    }
-
-    public void setCreaterUser(String createrUser) {
-        this.createrUser = createrUser;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getProjectId() {
-        return projectId;
-    }
-
-    public void setProjectId(String projectId) {
-        this.projectId = projectId;
-    }
-
-    public String getProjectName() {
-        return projectName;
-    }
-
-    public void setProjectName(String projectName) {
-        this.projectName = projectName;
-    }
-
-    public String getSysUserId() {
-        return sysUserId;
-    }
-
-    public void setSysUserId(String sysUserId) {
-        this.sysUserId = sysUserId;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public int getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(int validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public String getProject() {
-        return project;
-    }
-
-    public void setProject(String project) {
-        this.project = project;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysReagent.java b/src/main/java/com/nanometer/smartlab/entity/SysReagent.java
index 7431bd2..c90a369 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysReagent.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysReagent.java
@@ -1,8 +1,11 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.nanometer.smartlab.entity.enumtype.DangerousFlag;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 import sun.awt.SunHints;
 
 import java.io.Serializable;
@@ -15,15 +18,18 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
 @JsonInclude(NON_NULL)
+@JsonIgnoreProperties(value = {"handler"})
 public class SysReagent implements Serializable {
 
-    private String id;
+    private Long id;
     private String name;
     private String cas;
     private String reagentType;
     private String reagentCharacter;
-    private String supplierId;
+    private Long supplierId;
     private String reagentFormat;
     private BigDecimal mainMetering;
     private String reagentUnit;
@@ -33,29 +39,34 @@
     private ValidFlag validFlag;
     private Timestamp createTime;
     private Timestamp updateTime;
-    private String supplierName;
     private Integer deadline;
-    private Integer reserve;
     private String productSn;
     private DangerousFlag dangerousFlag;
     private String controlProducts;
-    private String controlProductsName;
     private String productHome;
-    private String productHomeName;
     private Integer type;
+    private Integer safetynum;
+    private BigDecimal originprice;
+    private BigDecimal density;
+
+
+
+
+    //非数据库字段
+    private String supplierName;
+    private Integer reserve;
+    private String controlProductsName;
+    private String productHomeName;
     private String firstUser;
     private String firName;
     private String unitName;
     private String formatName;
-
     private String favor;
-    private Integer safetynum;
     private Integer actualnum;
-
     private ValidFlag supplierFlag;
 
 
-    private BigDecimal density;
+
 
 
     public void change(){
@@ -64,278 +75,5 @@
         }else{
             favor = "1";
         }
-    }
-
-    public String getFavor() {
-        return favor;
-    }
-
-    public void setFavor(String favor) {
-        this.favor = favor;
-    }
-
-    public String getUnitName() {
-        return unitName;
-    }
-
-    public void setUnitName(String unitName) {
-        this.unitName = unitName;
-    }
-
-    public String getFormatName() {
-        return formatName;
-    }
-
-    public void setFormatName(String formatName) {
-        this.formatName = formatName;
-    }
-
-    public String getFirstUser() {
-        return firstUser;
-    }
-
-    public void setFirstUser(String firstUser) {
-        this.firstUser = firstUser;
-    }
-
-    public String getFirName() {
-        return firName;
-    }
-
-    public void setFirName(String firName) {
-        this.firName = firName;
-    }
-
-    public Integer getType() {
-        return type;
-    }
-
-    public void setType(Integer type) {
-        this.type = type;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getCas() {
-        return cas;
-    }
-
-    public void setCas(String cas) {
-        this.cas = cas;
-    }
-
-    public String getReagentType() {
-        return reagentType;
-    }
-
-    public void setReagentType(String reagentType) {
-        this.reagentType = reagentType;
-    }
-
-    public String getReagentCharacter() {
-        return reagentCharacter;
-    }
-
-    public void setReagentCharacter(String reagentCharacter) {
-        this.reagentCharacter = reagentCharacter;
-    }
-
-    public String getSupplierId() {
-        return supplierId;
-    }
-
-    public void setSupplierId(String supplierId) {
-        this.supplierId = supplierId;
-    }
-
-    public String getReagentFormat() {
-        return reagentFormat;
-    }
-
-    public void setReagentFormat(String reagentFormat) {
-        this.reagentFormat = reagentFormat;
-    }
-
-    public BigDecimal getMainMetering() {
-        return mainMetering;
-    }
-
-    public void setMainMetering(BigDecimal mainMetering) {
-        this.mainMetering = mainMetering;
-    }
-
-    public String getReagentUnit() {
-        return reagentUnit;
-    }
-
-    public void setReagentUnit(String reagentUnit) {
-        this.reagentUnit = reagentUnit;
-    }
-
-    public BigDecimal getPrice() {
-        return price;
-    }
-
-    public void setPrice(BigDecimal price) {
-        this.price = price;
-    }
-
-    public Integer getPerBox() {
-        return perBox;
-    }
-
-    public void setPerBox(Integer perBox) {
-        this.perBox = perBox;
-    }
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getSupplierName() {
-        return supplierName;
-    }
-
-    public void setSupplierName(String supplierName) {
-        this.supplierName = supplierName;
-    }
-
-    public Integer getDeadline() {
-        return deadline;
-    }
-
-    public void setDeadline(Integer deadline) {
-        this.deadline = deadline;
-    }
-
-    public Integer getReserve() {
-        return reserve;
-    }
-
-    public void setReserve(Integer reserve) {
-        this.reserve = reserve;
-    }
-
-    public String getProductSn() {
-        return productSn;
-    }
-
-    public void setProductSn(String productSn) {
-        this.productSn = productSn;
-    }
-
-    public DangerousFlag getDangerousFlag() {
-        return dangerousFlag;
-    }
-
-    public void setDangerousFlag(DangerousFlag dangerousFlag) {
-        this.dangerousFlag = dangerousFlag;
-    }
-
-    public String getControlProductsName() {
-        return controlProductsName;
-    }
-
-    public void setControlProductsName(String controlProductsName) {
-        this.controlProductsName = controlProductsName;
-    }
-
-    public String getProductHome() {
-        return productHome;
-    }
-
-    public void setProductHome(String productHome) {
-        this.productHome = productHome;
-    }
-
-    public String getProductHomeName() {
-        return productHomeName;
-    }
-
-    public void setProductHomeName(String productHomeName) {
-        this.productHomeName = productHomeName;
-    }
-
-    public String getControlProducts() {
-        return controlProducts;
-    }
-
-    public void setControlProducts(String controlProducts) {
-        this.controlProducts = controlProducts;
-    }
-
-    public Integer getSafetynum() {
-        return safetynum;
-    }
-
-    public void setSafetynum(Integer safetynum) {
-        this.safetynum = safetynum;
-    }
-
-    public Integer getActualnum() {
-        return actualnum;
-    }
-
-    public void setActualnum(Integer actualnum) {
-        this.actualnum = actualnum;
-    }
-
-
-    public ValidFlag getSupplierFlag() {
-        return supplierFlag;
-    }
-
-    public void setSupplierFlag(ValidFlag supplierFlag) {
-        this.supplierFlag = supplierFlag;
-    }
-
-    public BigDecimal getDensity() {
-        return density;
-    }
-
-    public void setDensity(BigDecimal density) {
-        this.density = density;
     }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysSequence.java b/src/main/java/com/nanometer/smartlab/entity/SysSequence.java
index fc4d06a..3bd2c15 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysSequence.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysSequence.java
@@ -1,74 +1,23 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
 import java.sql.Timestamp;
 
 /**
  * Created by johnny on 17/12/13.
  */
+@Getter
+@Setter
 public class SysSequence implements Serializable {
 
-    private String id;
+    private Long id;
     private String name;
-    private int minVal;
-    private int maxVal;
-    private int currentVal;
-    private int step;
+    private Integer minVal;
+    private Integer maxVal;
+    private Integer currentVal;
+    private Integer step;
     private Timestamp updateTime;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public int getMinVal() {
-        return minVal;
-    }
-
-    public void setMinVal(int minVal) {
-        this.minVal = minVal;
-    }
-
-    public int getMaxVal() {
-        return maxVal;
-    }
-
-    public void setMaxVal(int maxVal) {
-        this.maxVal = maxVal;
-    }
-
-    public int getCurrentVal() {
-        return currentVal;
-    }
-
-    public void setCurrentVal(int currentVal) {
-        this.currentVal = currentVal;
-    }
-
-    public int getStep() {
-        return step;
-    }
-
-    public void setStep(int step) {
-        this.step = step;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysSupplier.java b/src/main/java/com/nanometer/smartlab/entity/SysSupplier.java
index 4372b6c..8e82224 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysSupplier.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysSupplier.java
@@ -1,6 +1,8 @@
 package com.nanometer.smartlab.entity;
 
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -8,9 +10,11 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
 public class SysSupplier implements Serializable {
 
-    private String id;
+    private Long id;
     private String name;
     private String personName;
     private String phone;
@@ -18,68 +22,4 @@
     private Timestamp createTime;
     private Timestamp updateTime;
     private ValidFlag validFlag;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getPersonName() {
-        return personName;
-    }
-
-    public void setPersonName(String personName) {
-        this.personName = personName;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysUser.java b/src/main/java/com/nanometer/smartlab/entity/SysUser.java
index 4afb725..666fd30 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysUser.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysUser.java
@@ -9,231 +9,49 @@
 import com.nanometer.smartlab.entity.enumtype.SeeFlag;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
 import com.nanometer.smartlab.entity.enumtype.Waster;
+import lombok.Getter;
+import lombok.Setter;
 
 import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
 
 /**
  * Created by johnny on 17/11/18.
  */
+@Getter
+@Setter
 @JsonInclude(NON_NULL)
 public class SysUser implements Serializable {
 
-    private String id;
+    private Long id;
     private String arp;
     private String account;
     private String password;
-    private String company;
-    private String department;
+    private Long company;
+    private Long department;
     private String name;
     private String phone;
     private String email;
     private String memo;
     private String idCard;
-    private int point;
-	private ApproverFlag approverFlag;
+    private ApproverFlag approverFlag;
+    private Long roleId;
     private SeeFlag seeFlag;
-    private String roleId;
     private ValidFlag validFlag;
     private Timestamp createTime;
+    private Integer point;
     private Timestamp updateTime;
-    private String containerCodeList;
-    private String roleName;
-    private String project;
+    private Long projectId;
     private Waster waster;
     // 图片的相对地址
     private String url;
     // 考试分数
     private BigDecimal score;
 
-    public String getId() {
-        return id;
-    }
 
-    public void setId(String id) {
-        this.id = id;
-    }
+    //非数据库字段
+    private String containerCodeList;
+    private String roleName;
+    private String departmentName;
+    private String projectName;
 
-    public int getPoint() {
-		return point;
-	}
-
-	public void setPoint(int point) {
-		this.point = point;
-	}
-
-    public String getArp() {
-        return arp;
-    }
-
-    public void setArp(String arp) {
-        this.arp = arp;
-    }
-
-    public String getAccount() {
-        return account;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getCompany() {
-        return company;
-    }
-
-    public void setCompany(String company) {
-        this.company = company;
-    }
-
-    public String getDepartment() {
-        return department;
-    }
-
-    public void setDepartment(String department) {
-        this.department = department;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    public String getIdCard() {
-        return idCard;
-    }
-
-    public void setIdCard(String idCard) {
-        this.idCard = idCard;
-    }
-
-    public ApproverFlag getApproverFlag() {
-        return approverFlag;
-    }
-
-    public void setApproverFlag(ApproverFlag approverFlag) {
-        this.approverFlag = approverFlag;
-    }
-
-    public String getRoleId() {
-        return roleId;
-    }
-
-    public void setRoleId(String roleId) {
-        this.roleId = roleId;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getRoleName() {
-        return roleName;
-    }
-
-    public void setRoleName(String roleName) {
-        this.roleName = roleName;
-    }
-
-	public SeeFlag getSeeFlag() {
-		return seeFlag;
-	}
-
-	public void setSeeFlag(SeeFlag seeFlag) {
-		this.seeFlag = seeFlag;
-	}
-
-    public String getContainerCodeList() {
-        return containerCodeList;
-    }
-
-    public void setContainerCodeList(String containerCodeList) {
-        this.containerCodeList = containerCodeList;
-    }
-
-    public String getProject() {
-        return project;
-    }
-
-    public void setProject(String project) {
-        this.project = project;
-    }
-
-    public Waster getWaster() {
-        return waster;
-    }
-
-    public void setWaster(Waster waster) {
-        this.waster = waster;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public BigDecimal getScore() {
-        return score;
-    }
-
-    public void setScore(BigDecimal score) {
-        this.score = score;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysWarehouse.java b/src/main/java/com/nanometer/smartlab/entity/SysWarehouse.java
index ffe5b05..9882428 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysWarehouse.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysWarehouse.java
@@ -1,6 +1,9 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -9,10 +12,13 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
 @SuppressWarnings("serial")
+@JsonIgnoreProperties(value = {"handler"})
 public class SysWarehouse implements Serializable {
 
-    private String id;
+    private Long id;
     private String type;
     private String name;
     private String infoCode;
@@ -23,131 +29,11 @@
     private Timestamp updateTime;
     private ValidFlag validFlag;
     //新增负责部门
-    private String department;
+    private Long department;
 
     private BigDecimal temperatureMax;
     private BigDecimal temperatureMin;
     private BigDecimal humidityMax;
     private BigDecimal humidityMin;
 
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getInfoCode() {
-        return infoCode;
-    }
-
-    public void setInfoCode(String infoCode) {
-        this.infoCode = infoCode;
-    }
-
-    public String getBarCode() {
-        return barCode;
-    }
-
-    public void setBarCode(String barCode) {
-        this.barCode = barCode;
-    }
-
-    public String getLocation1() {
-        return location1;
-    }
-
-    public void setLocation1(String location1) {
-        this.location1 = location1;
-    }
-
-    public String getLocation2() {
-        return location2;
-    }
-
-    public void setLocation2(String location2) {
-        this.location2 = location2;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public String getDepartment() {
-        return department;
-    }
-
-    public void setDepartment(String department) {
-        this.department = department;
-    }
-
-
-    public BigDecimal getTemperatureMax() {
-        return temperatureMax;
-    }
-
-    public void setTemperatureMax(BigDecimal temperatureMax) {
-        this.temperatureMax = temperatureMax;
-    }
-
-    public BigDecimal getTemperatureMin() {
-        return temperatureMin;
-    }
-
-    public void setTemperatureMin(BigDecimal temperatureMin) {
-        this.temperatureMin = temperatureMin;
-    }
-
-    public BigDecimal getHumidityMax() {
-        return humidityMax;
-    }
-
-    public void setHumidityMax(BigDecimal humidityMax) {
-        this.humidityMax = humidityMax;
-    }
-
-    public BigDecimal getHumidityMin() {
-        return humidityMin;
-    }
-
-    public void setHumidityMin(BigDecimal humidityMin) {
-        this.humidityMin = humidityMin;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysWarehouseContainer.java b/src/main/java/com/nanometer/smartlab/entity/SysWarehouseContainer.java
index 636efa5..4049ab6 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysWarehouseContainer.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysWarehouseContainer.java
@@ -1,6 +1,9 @@
 package com.nanometer.smartlab.entity;
 
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.sql.Timestamp;
@@ -8,153 +11,28 @@
 /**
  * Created by johnny on 17/11/23.
  */
+@Getter
+@Setter
 @SuppressWarnings("serial")
+@JsonIgnoreProperties(value = {"handler"})
 public class SysWarehouseContainer implements Serializable {
 
-    private String id;
-    private String warehouseId;
-    private String type;
-    private String warehouseType;
-    private String warehouseName;
+    private Long id;
+    private Long warehouseId;
+    private Long type;
     private String containerCode;
     private String infoCode;
-    private String structure;
+    private Long structure;
     private String name;
     private Timestamp createTime;
     private Timestamp updateTime;
     private ValidFlag validFlag;
-    private String characterLeft;
-    private String characterRight;
+    private Long characterLeft;
+    private Long characterRight;
     private String controllerCode;
+
+    //非数据库字段
     private String controllerName;
-
-
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getWarehouseId() {
-        return warehouseId;
-    }
-
-    public void setWarehouseId(String warehouseId) {
-        this.warehouseId = warehouseId;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getContainerCode() {
-        return containerCode;
-    }
-
-    public void setContainerCode(String containerCode) {
-        this.containerCode = containerCode;
-    }
-
-    public String getInfoCode() {
-        return infoCode;
-    }
-
-    public void setInfoCode(String infoCode) {
-        this.infoCode = infoCode;
-    }
-
-    public String getStructure() {
-        return structure;
-    }
-
-    public void setStructure(String structure) {
-        this.structure = structure;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public Timestamp getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Timestamp updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-	public String getWarehouseType() {
-		return warehouseType;
-	}
-
-	public void setWarehouseType(String warehouseType) {
-		this.warehouseType = warehouseType;
-	}
-
-	public String getWarehouseName() {
-		return warehouseName;
-	}
-
-	public void setWarehouseName(String warehouseName) {
-		this.warehouseName = warehouseName;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public String getCharacterLeft() {
-		return characterLeft;
-	}
-
-	public void setCharacterLeft(String characterLeft) {
-		this.characterLeft = characterLeft;
-	}
-
-	public String getCharacterRight() {
-		return characterRight;
-	}
-
-	public void setCharacterRight(String characterRight) {
-		this.characterRight = characterRight;
-	}
-
-    public String getControllerCode() {
-        return controllerCode;
-    }
-
-    public void setControllerCode(String controllerCode) {
-        this.controllerCode = controllerCode;
-    }
-
-    public String getControllerName() {
-        return controllerName;
-    }
-
-    public void setControllerName(String controllerName) {
-        this.controllerName = controllerName;
-    }
+    private String warehouseType;
+    private String warehouseName;
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysWarehouseStatus.java b/src/main/java/com/nanometer/smartlab/entity/SysWarehouseStatus.java
index b3dd167..390cdda 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysWarehouseStatus.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysWarehouseStatus.java
@@ -2,11 +2,15 @@
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
+@Getter
+@Setter
 public class SysWarehouseStatus implements Serializable {
 
     private Long id;
@@ -25,98 +29,10 @@
 
     private ValidFlag validFlag;
 
-    private String warehouseId;
+    private Long warehouseId;
 
     private String warning;
 
     @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
     private Date selectDate;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public BigDecimal getTemperature() {
-        return temperature;
-    }
-
-    public void setTemperature(BigDecimal temperature) {
-        this.temperature = temperature;
-    }
-
-    public BigDecimal getHumidity() {
-        return humidity;
-    }
-
-    public void setHumidity(BigDecimal humidity) {
-        this.humidity = humidity;
-    }
-
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public ValidFlag getValidFlag() {
-        return validFlag;
-    }
-
-    public void setValidFlag(ValidFlag validFlag) {
-        this.validFlag = validFlag;
-    }
-
-    public String getWarehouseId() {
-        return warehouseId;
-    }
-
-    public void setWarehouseId(String warehouseId) {
-        this.warehouseId = warehouseId;
-    }
-
-    public Date getSelectDate() {
-        return selectDate;
-    }
-
-    public void setSelectDate(Date selectDate) {
-        this.selectDate = selectDate;
-    }
-
-    public String getWarning() {
-        return warning;
-    }
-
-    public void setWarning(String warning) {
-        this.warning = warning;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/SysWarning.java b/src/main/java/com/nanometer/smartlab/entity/SysWarning.java
index 9329df9..c726c8e 100644
--- a/src/main/java/com/nanometer/smartlab/entity/SysWarning.java
+++ b/src/main/java/com/nanometer/smartlab/entity/SysWarning.java
@@ -1,135 +1,31 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.util.Date;
 
+@Getter
+@Setter
 public class SysWarning {
-    private String id;
-    private String userId;
-    private String username;
-    private String containerId;
-    private String type;
-    private String typeName;
-    private String warningId;
-    private String warningName;
+    private Long id;
+    private Long userId;
+    private Long containerId;
+    private Long warningId;
+    private Date warningTime;
+
+
     private Integer warningLevel;
     private Integer warningPoint;
-    private Date warningTime;
+
     private Integer status;
     private String memo;
-    private String alarmId;
+    private Long dapingAlarmId;
 
-    public Integer getWarningLevel() {
-        return warningLevel;
-    }
-
-    public void setWarningLevel(Integer warningLevel) {
-        this.warningLevel = warningLevel;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    public String getUsername() {
-		return username;
-	}
-
-	public void setUsername(String username) {
-		this.username = username;
-	}
-
-	public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
-
-    public String getType() {
-		return type;
-	}
-
-	public void setType(String type) {
-		this.type = type;
-	}
-
-	public String getTypeName() {
-		return typeName;
-	}
-
-	public void setTypeName(String typeName) {
-		this.typeName = typeName;
-	}
-
-	public String getWarningId() {
-        return warningId;
-    }
-
-    public void setWarningId(String warningId) {
-        this.warningId = warningId;
-    }
-
-    public String getWarningName() {
-		return warningName;
-	}
-
-	public void setWarningName(String warningName) {
-		this.warningName = warningName;
-	}
-
-	public Integer getWarningPoint() {
-        return warningPoint;
-    }
-
-    public void setWarningPoint(Integer warningPoint) {
-        this.warningPoint = warningPoint;
-    }
-
-    public void setWarningTime(Date warningTime) {
-        this.warningTime = warningTime;
-    }
-
-    public Date getWarningTime() {
-        return warningTime;
-    }
-
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
-    public String getMemo() {
-        return memo;
-    }
-
-    public void setMemo(String memo) {
-        this.memo = memo;
-    }
-
-    public String getAlarmId() {
-        return alarmId;
-    }
-
-    public void setAlarmId(String alarmId) {
-        this.alarmId = alarmId;
-    }
-
-
+    //非数据库字段
+    private String username;
+    private String type;
+    private String typeName;
+    private String warningName;
 }
 
diff --git a/src/main/java/com/nanometer/smartlab/entity/TempSensors.java b/src/main/java/com/nanometer/smartlab/entity/TempSensors.java
index 94a338d..135b6b6 100644
--- a/src/main/java/com/nanometer/smartlab/entity/TempSensors.java
+++ b/src/main/java/com/nanometer/smartlab/entity/TempSensors.java
@@ -1,7 +1,12 @@
 package com.nanometer.smartlab.entity;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.util.Date;
 
+@Setter
+@Getter
 public class TempSensors {
     public final static int TYPE_LABORATORY_CONTAINER = 1;
     public final static int TYPE_WAREHOUSE_CONTAINER = 2;
@@ -14,9 +19,9 @@
     public final static int FLAG_VOC1_INDEX = 4;
 
 
-    private String id;
+    private Long id;
 
-    private String containerId;
+    private Long containerId;
 
     private String warehouseContainerName;
     private String laboratoryContainerName;
@@ -36,8 +41,8 @@
     private String laboratoryName;
     private String warehouseName;
 
-    private String laboratoryId;
-    private String warehouseId;
+    private Long laboratoryId;
+    private Long warehouseId;
 
 
     private static final long serialVersionUID = 1L;
@@ -76,117 +81,5 @@
             return flag.charAt(FLAG_VOC1_INDEX)=='1';
         }
         return false;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
-
-    public Float getTemp() {
-        return temp;
-    }
-
-    public void setTemp(Float temp) {
-        this.temp = temp;
-    }
-
-    public Float getHumidity() {
-        return humidity;
-    }
-
-    public void setHumidity(Float humidity) {
-        this.humidity = humidity;
-    }
-
-    public Float getVoc1() {
-        return voc1;
-    }
-
-    public void setVoc1(Float voc1) {
-        this.voc1 = voc1;
-    }
-
-    public String getFlag() {
-        return flag;
-    }
-
-    public void setFlag(String flag) {
-        this.flag = flag;
-    }
-
-    public Integer getType() {
-        return type;
-    }
-
-    public void setType(Integer type) {
-        this.type = type;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    public String getLaboratoryName() {
-        return laboratoryName;
-    }
-
-    public void setLaboratoryName(String laboratoryName) {
-        this.laboratoryName = laboratoryName;
-    }
-
-    public String getWarehouseName() {
-        return warehouseName;
-    }
-
-    public void setWarehouseName(String warehouseName) {
-        this.warehouseName = warehouseName;
-    }
-
-    public String getLaboratoryId() {
-        return laboratoryId;
-    }
-
-    public void setLaboratoryId(String laboratoryId) {
-        this.laboratoryId = laboratoryId;
-    }
-
-    public String getWarehouseId() {
-        return warehouseId;
-    }
-
-    public void setWarehouseId(String warehouseId) {
-        this.warehouseId = warehouseId;
-    }
-
-    public String getWarehouseContainerName() {
-        return warehouseContainerName;
-    }
-
-    public void setWarehouseContainerName(String warehouseContainerName) {
-        this.warehouseContainerName = warehouseContainerName;
-    }
-
-    public String getLaboratoryContainerName() {
-        return laboratoryContainerName;
-    }
-
-    public void setLaboratoryContainerName(String laboratoryContainerName) {
-        this.laboratoryContainerName = laboratoryContainerName;
     }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/dto/HazardousWasteUser.java b/src/main/java/com/nanometer/smartlab/entity/dto/HazardousWasteUser.java
index 0dc5902..799d635 100644
--- a/src/main/java/com/nanometer/smartlab/entity/dto/HazardousWasteUser.java
+++ b/src/main/java/com/nanometer/smartlab/entity/dto/HazardousWasteUser.java
@@ -1,7 +1,12 @@
 package com.nanometer.smartlab.entity.dto;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.Serializable;
 
+@Getter
+@Setter
 public class HazardousWasteUser implements Serializable {
     private String id;
     private String account;
@@ -9,80 +14,12 @@
     private String password;
     /**1危废处理人员 2危废管理员**/
     private int adminFlag;
-    private String project;
+    private Long projectId;
     private String department;
-    private String company;
+    private Long company;
     private String newpassword;
+    private String idCard;
+    private String projectName;
 
-    public String getAccount() {
-        return account;
-    }
-
-    public void setAccount(String account) {
-        this.account = account;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public int getAdminFlag() {
-        return adminFlag;
-    }
-
-    public void setAdminFlag(int adminFlag) {
-        this.adminFlag = adminFlag;
-    }
-
-    public String getProject() {
-        return project;
-    }
-
-    public void setProject(String project) {
-        this.project = project;
-    }
-
-    public String getDepartment() {
-        return department;
-    }
-
-    public void setDepartment(String department) {
-        this.department = department;
-    }
-
-    public String getCompany() {
-        return company;
-    }
-
-    public void setCompany(String company) {
-        this.company = company;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getNewpassword() {
-        return newpassword;
-    }
-
-    public void setNewpassword(String newpassword) {
-        this.newpassword = newpassword;
-    }
+    private String companyName;
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/dto/InWarehouseInfoDto.java b/src/main/java/com/nanometer/smartlab/entity/dto/InWarehouseInfoDto.java
index ded40c9..9a0bde1 100644
--- a/src/main/java/com/nanometer/smartlab/entity/dto/InWarehouseInfoDto.java
+++ b/src/main/java/com/nanometer/smartlab/entity/dto/InWarehouseInfoDto.java
@@ -1,59 +1,23 @@
 package com.nanometer.smartlab.entity.dto;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.util.*;
 import java.io.Serializable;
 
+@Getter
+@Setter
 public class InWarehouseInfoDto implements Serializable {
 
     //用户id
-    private String user;
+    private Long user;
     //仓库id
-    private String warehouseId;
+    private Long warehouseId;
     //货柜id
-    private String containerId;
+    private Long containerId;
     //试剂条码
     private List<String> reagentCode;
     //批号
     private String articleNumber;
-
-    public String getUser() {
-        return user;
-    }
-
-    public void setUser(String user) {
-        this.user = user;
-    }
-
-    public String getWarehouseId() {
-        return warehouseId;
-    }
-
-    public void setWarehouseId(String warehouseId) {
-        this.warehouseId = warehouseId;
-    }
-
-
-    public String getContainerId() {
-        return containerId;
-    }
-
-    public void setContainerId(String containerId) {
-        this.containerId = containerId;
-    }
-
-    public List<String> getReagentCode() {
-        return reagentCode;
-    }
-
-    public void setReagentCode(List<String> reagentCode) {
-        this.reagentCode = reagentCode;
-    }
-
-    public String getArticleNumber() {
-        return articleNumber;
-    }
-
-    public void setArticleNumber(String articleNumber) {
-        this.articleNumber = articleNumber;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/dto/ReagentReceivingDto.java b/src/main/java/com/nanometer/smartlab/entity/dto/ReagentReceivingDto.java
index 1dcd3c6..3db78b7 100644
--- a/src/main/java/com/nanometer/smartlab/entity/dto/ReagentReceivingDto.java
+++ b/src/main/java/com/nanometer/smartlab/entity/dto/ReagentReceivingDto.java
@@ -1,48 +1,22 @@
 package com.nanometer.smartlab.entity.dto;
 
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.util.*;
+
+@Getter
+@Setter
 public class ReagentReceivingDto {
 
     //试剂编码
     private List<String> reagentCode;
     //申领人id
-    private String applyUserId;
+    private Long applyUserId;
     //实验室id
-    private String labId;
+    private Long labId;
     //实验室下货柜id
-    private String labContainerId;
+    private Long labContainerId;
 
-
-    public List<String> getReagentCode() {
-        return reagentCode;
-    }
-
-    public void setReagentCode(List<String> reagentCode) {
-        this.reagentCode = reagentCode;
-    }
-
-    public String getApplyUserId() {
-        return applyUserId;
-    }
-
-    public void setApplyUserId(String applyUserId) {
-        this.applyUserId = applyUserId;
-    }
-
-    public String getLabId() {
-        return labId;
-    }
-
-    public void setLabId(String labId) {
-        this.labId = labId;
-    }
-
-    public String getLabContainerId() {
-        return labContainerId;
-    }
-
-    public void setLabContainerId(String labContainerId) {
-        this.labContainerId = labContainerId;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java b/src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java
index d9f2f18..1fb0b7f 100644
--- a/src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java
+++ b/src/main/java/com/nanometer/smartlab/entity/enumtype/ApplyStatusVo.java
@@ -3,7 +3,7 @@
 import java.util.HashMap;
 
 public enum ApplyStatusVo {
-    STORAGE(4, "已入库"),SUPPLIER_CONFIRM(6,"已确认");
+    STORAGE(4, "已入库"),SUPPLIER_CONFIRM(6,"已确认"),NO_COMPLETE(9,"未完成");
     private int key;
 
     private String text;
diff --git a/src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java b/src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java
index 7b7cada..39619a7 100644
--- a/src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java
+++ b/src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java
@@ -1,9 +1,16 @@
 package com.nanometer.smartlab.entity.enumtype;
 
-import java.util.HashMap;
+import java.util.*;
 
 public enum OperateStatus {
-	WAREHOUSEIN(10, "仓库入库"), WAREHOUSEOUT(11, "仓库领用"), LABORATORYIN(0, "试剂柜入库"), TRANSFER(6,"转移"),
+	ERRORIN(1, "错误入库"),
+	USE(2, "领用"),
+	STORE(3, "存放"),
+	ERRORSTORE(4, "错误存放"),
+	WAREHOUSEIN(10, "仓库入库"),
+	WAREHOUSEOUT(11, "仓库领用"),
+	LABORATORYIN(0, "试剂柜入库"),
+	TRANSFER(6,"转移"),
 	SCRAP(5, "报废");
 	private int key;
 
@@ -35,4 +42,19 @@
 		}
 		return null;
 	}
+
+	/**
+	 * 获取广告位置集合Map
+	 * @return
+	 */
+	public static List<Map<String,Object>> getOperateStatusList() {
+		List<Map<String,Object>> mapList=new ArrayList<>();
+		for (OperateStatus operateStatus : EnumSet.allOf(OperateStatus.class)) {
+			Map<String,Object> map=new HashMap<>();
+			map.put("key",operateStatus.key);
+			map.put("value",operateStatus.text);
+			mapList.add(map);
+		}
+		return mapList;
+	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/enumtype/ReagentTypeFlag.java b/src/main/java/com/nanometer/smartlab/entity/enumtype/ReagentTypeFlag.java
new file mode 100644
index 0000000..f6aac0a
--- /dev/null
+++ b/src/main/java/com/nanometer/smartlab/entity/enumtype/ReagentTypeFlag.java
@@ -0,0 +1,50 @@
+package com.nanometer.smartlab.entity.enumtype;
+
+import java.util.HashMap;
+
+public enum ReagentTypeFlag {
+
+    MATERIAL(1, "耗材"),
+    FLUID(2, "液体"),
+    SOLID(3, "固体"),
+    GAS(4, "气体"),
+    CHEMICAL(5, "化学品");
+    private int key;
+
+    private String value;
+
+    private ReagentTypeFlag(int key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    public int getKey() {
+        return key;
+    }
+
+    public void setKey(int key) {
+        this.key = key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    private static HashMap<Integer, ReagentTypeFlag> map = new HashMap<Integer, ReagentTypeFlag>();
+    static {
+        for(ReagentTypeFlag d : ReagentTypeFlag.values()){
+            map.put(d.key, d);
+        }
+    }
+
+    public static ReagentTypeFlag parse(Integer index) {
+        if(map.containsKey(index)){
+            return map.get(index);
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/com/nanometer/smartlab/model/MenuModel.java b/src/main/java/com/nanometer/smartlab/model/MenuModel.java
index 9ea52ea..85d8f07 100644
--- a/src/main/java/com/nanometer/smartlab/model/MenuModel.java
+++ b/src/main/java/com/nanometer/smartlab/model/MenuModel.java
@@ -1,10 +1,15 @@
 package com.nanometer.smartlab.model;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.util.List;
 
 /**
  * Created by johnny on 16/1/14.
  */
+@Getter
+@Setter
 public class MenuModel {
     private String id;
     private String title;
@@ -17,92 +22,4 @@
     private boolean dispInMenuList = true;
     private String privilegeCode;
     private String icon;
-
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getPage() {
-        return page;
-    }
-
-    public void setPage(String page) {
-        this.page = page;
-    }
-
-    public List<MenuModel> getSubMenu() {
-        return subMenu;
-    }
-
-    public void setSubMenu(List<MenuModel> subMenu) {
-        this.subMenu = subMenu;
-    }
-
-    public String getInitClazz() {
-        return initClazz;
-    }
-
-    public void setInitClazz(String initClazz) {
-        this.initClazz = initClazz;
-    }
-
-    public String getInitMethod() {
-        return initMethod;
-    }
-
-    public void setInitMethod(String initMethod) {
-        this.initMethod = initMethod;
-    }
-
-    public String getDestoryClazz() {
-        return destoryClazz;
-    }
-
-    public void setDestoryClazz(String destoryClazz) {
-        this.destoryClazz = destoryClazz;
-    }
-
-    public String getDestoryMethod() {
-        return destoryMethod;
-    }
-
-    public void setDestoryMethod(String destoryMethod) {
-        this.destoryMethod = destoryMethod;
-    }
-
-    public boolean isDispInMenuList() {
-        return dispInMenuList;
-    }
-
-    public void setDispInMenuList(boolean dispInMenuList) {
-        this.dispInMenuList = dispInMenuList;
-    }
-
-    public String getPrivilegeCode() {
-        return privilegeCode;
-    }
-
-    public void setPrivilegeCode(String privilegeCode) {
-        this.privilegeCode = privilegeCode;
-    }
-
-    public String getIcon() {
-        return icon;
-    }
-
-    public void setIcon(String icon) {
-        this.icon = icon;
-    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/realm/AuthorizationRealm.java b/src/main/java/com/nanometer/smartlab/realm/AuthorizationRealm.java
index 3c4e09c..5b0827b 100644
--- a/src/main/java/com/nanometer/smartlab/realm/AuthorizationRealm.java
+++ b/src/main/java/com/nanometer/smartlab/realm/AuthorizationRealm.java
@@ -48,7 +48,7 @@
             List<BaseRolePage> baseRolePageList = baseRolePageService.getBaseRolePageList(user.getRoleId(), null);
             if (baseRolePageList != null && baseRolePageList.size() > 0) {
                 for (BaseRolePage baseRolePage : baseRolePageList) {
-                    permissions.add(baseRolePage.getPageId());
+                    permissions.add(baseRolePage.getPageCode());
                 }
             }
         }
diff --git a/src/main/java/com/nanometer/smartlab/realm/ShiroDbRealm.java b/src/main/java/com/nanometer/smartlab/realm/ShiroDbRealm.java
index dc83fb6..9ddcbfe 100644
--- a/src/main/java/com/nanometer/smartlab/realm/ShiroDbRealm.java
+++ b/src/main/java/com/nanometer/smartlab/realm/ShiroDbRealm.java
@@ -76,7 +76,7 @@
             List<BaseRolePage> baseRolePageList = baseRolePageService.getBaseRolePageList(user.getRoleId(), null);
             if (baseRolePageList != null && baseRolePageList.size() > 0) {
                 for (BaseRolePage baseRolePage : baseRolePageList) {
-                    permissions.add(baseRolePage.getPageId());
+                    permissions.add(baseRolePage.getPageCode());
                 }
             }
         }
diff --git a/src/main/java/com/nanometer/smartlab/service/BaseMetaGroupService.java b/src/main/java/com/nanometer/smartlab/service/BaseMetaGroupService.java
index 3b7a3d7..f2b6a62 100644
--- a/src/main/java/com/nanometer/smartlab/service/BaseMetaGroupService.java
+++ b/src/main/java/com/nanometer/smartlab/service/BaseMetaGroupService.java
@@ -10,4 +10,6 @@
 public interface BaseMetaGroupService {
 
     public List<BaseMetaGroup> getBaseMetaGroupList();
+
+    public BaseMetaGroup getBaseMetaGroupByCode(String code);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/BaseMetaGroupServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/BaseMetaGroupServiceImpl.java
index aa2d97f..b848542 100644
--- a/src/main/java/com/nanometer/smartlab/service/BaseMetaGroupServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/BaseMetaGroupServiceImpl.java
@@ -34,4 +34,9 @@
             throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
         }
     }
+
+    @Override
+    public BaseMetaGroup getBaseMetaGroupByCode(String code) {
+        return baseMetaGroupDao.getBaseMetaGroupByCode(code);
+    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/BaseMetaService.java b/src/main/java/com/nanometer/smartlab/service/BaseMetaService.java
index 52d11d8..73f9347 100644
--- a/src/main/java/com/nanometer/smartlab/service/BaseMetaService.java
+++ b/src/main/java/com/nanometer/smartlab/service/BaseMetaService.java
@@ -11,19 +11,19 @@
 public interface BaseMetaService {
 
     public void loadData();
-    public int getBaseMetaTotalCount(String groupId, String keyword);
-    public boolean isBaseMetaExist(String groupId, String metaKey, String editId);
-    public List<BaseMeta> getBaseMetaList(String groupId, String keyword, Integer first, Integer pageSize);
-    public BaseMeta getBaseMeta(String id);
+    public int getBaseMetaTotalCount(String groupCode, String keyword);
+    public boolean isBaseMetaExist(String groupCode, String metaKey, Long editId);
+    public List<BaseMeta> getBaseMetaList(String groupCode, String keyword, Integer first, Integer pageSize);
+    public BaseMeta getBaseMeta(Long id);
     public BaseMeta insertBaseMeta(BaseMeta baseMeta);
     public boolean updateBaseMeta(BaseMeta baseMeta);
-    public boolean deleteBaseMeta(List<String> ids);
+    public boolean deleteBaseMeta(List<Long> ids);
     public List<BaseMetaGroup> getBaseMetaGroupList();
-    public String getBaseMetaGroupName(String baseMetaGroupId);
-    public List<BaseMeta> getBaseMetaList(String baseMetaGroupId);
-    public String getBaseMetaValue(String id);
-    public String getBaseMetaKey(String id);
+    public String getBaseMetaGroupName(String baseMetaGroupCode);
+    public List<BaseMeta> getBaseMetaList(String baseMetaGroupCode);
+    public String getBaseMetaValue(Long id);
+    public String getBaseMetaKey(Long id);
     public List<BaseMeta> getAllBaseMeta();
 
-    BaseMeta getBaseMeta(String groupId, String key,String value);
+    BaseMeta getBaseMeta(String groupCode, String key,String value);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/BaseMetaServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/BaseMetaServiceImpl.java
index 269f52b..c4f353a 100644
--- a/src/main/java/com/nanometer/smartlab/service/BaseMetaServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/BaseMetaServiceImpl.java
@@ -44,7 +44,7 @@
     // key为分组id,value为数据列表
     private Map<String, List<BaseMeta>> baseMetaListMap;
     // key为数据id,value为数据
-    private Map<String, BaseMeta> baseMetaMap;
+    private Map<Long, BaseMeta> baseMetaMap;
 
     public synchronized void loadData() {
         try {
@@ -54,19 +54,19 @@
                 baseMetaGroupList = new ArrayList<BaseMetaGroup>();
             } else {
                 for (BaseMetaGroup baseMetaGroup : baseMetaGroupList) {
-                    baseMetaGroupMap.put(baseMetaGroup.getId(), baseMetaGroup);
+                    baseMetaGroupMap.put(baseMetaGroup.getCode(), baseMetaGroup);
                 }
             }
 
-            List<BaseMeta> baseMetaList = this.getBaseMetaList(null, null, null, null);
+            List<BaseMeta> baseMetaList = this.getBaseMetaList((String) null, null, null, null);
             baseMetaListMap = new HashMap<String, List<BaseMeta>>();
-            baseMetaMap = new HashMap<String, BaseMeta>();
+            baseMetaMap = new HashMap<Long, BaseMeta>();
             if (baseMetaList != null) {
                 String key = null;
                 for (BaseMeta baseMeta : baseMetaList) {
                     if (!baseMetaListMap.containsKey(baseMeta.getGroupId())
                             || baseMetaListMap.get(baseMeta.getGroupId()) == null) {
-                        baseMetaListMap.put(baseMeta.getGroupId(), new ArrayList<BaseMeta>());
+                        baseMetaListMap.put(baseMeta.getGroupCode(), new ArrayList<BaseMeta>());
                     }
                     baseMetaListMap.get(baseMeta.getGroupId()).add(baseMeta);
 
@@ -79,10 +79,10 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public int getBaseMetaTotalCount(String groupId, String keyword) {
+    public int getBaseMetaTotalCount(String groupCode, String keyword) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
-            params.put("groupId", groupId);
+            params.put("groupCode", groupCode);
             if (StringUtils.isNotBlank(keyword)) {
                 params.put("keyword", "%" + keyword + "%");
             }
@@ -94,12 +94,12 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean isBaseMetaExist(String groupId, String metaKey, String editId) {
+    public boolean isBaseMetaExist(String groupCode, String metaKey, Long editId) {
         try {
              Map<String, Object> params = new HashMap<String, Object>();
-             params.put("groupId", groupId);
+             params.put("groupCode", groupCode);
              params.put("metaKey", metaKey);
-             if (StringUtils.isNotBlank(editId)) {
+             if (editId!=null) {
                  params.put("editId", editId);
              }
              int count = this.baseMetaDao.getBaseMetaTotalCount(params);
@@ -111,10 +111,10 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<BaseMeta> getBaseMetaList(String groupId, String keyword, Integer first, Integer pageSize) {
+    public List<BaseMeta> getBaseMetaList(String groupCode, String keyword, Integer first, Integer pageSize) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
-            params.put("groupId", groupId);
+            params.put("groupCode", groupCode);
             if (StringUtils.isNotBlank(keyword)) {
                 params.put("keyword", "%" + keyword + "%");
             }
@@ -128,7 +128,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public BaseMeta getBaseMeta(String id) {
+    public BaseMeta getBaseMeta(Long id) {
         try {
             return this.baseMetaDao.getBaseMeta(id);
         } catch (DataAccessException e) {
@@ -143,12 +143,8 @@
             if (baseMeta == null) {
                 return null;
             }
-
-            if (baseMeta.getId() == null) {
-                baseMeta.setId(IDUtils.uuid());
-            }
             this.baseMetaDao.insertBaseMeta(baseMeta);
-            this.loadData();
+          //  this.loadData();
             return baseMeta;
         } catch (DuplicateKeyException ex) {
             logger.warn(ex.getMessage(), ex);
@@ -188,7 +184,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean deleteBaseMeta(List<String> ids) {
+    public boolean deleteBaseMeta(List<Long> ids) {
         try {
             if (ids == null || ids.isEmpty()) {
                 return false;
@@ -211,70 +207,49 @@
 
     public List<BaseMetaGroup> getBaseMetaGroupList() {
         if (baseMetaGroupList == null) {
-            this.loadData();
+            baseMetaGroupList = this.baseMetaGroupService.getBaseMetaGroupList();
         }
-
         return baseMetaGroupList;
     }
-    public String getBaseMetaGroupName(String baseMetaGroupId) {
-        if (StringUtils.isBlank(baseMetaGroupId)) {
+    public String getBaseMetaGroupName(String baseMetaGroupCode) {
+        if (StringUtils.isBlank(baseMetaGroupCode)) {
             return "";
         }
-
-        if (baseMetaGroupMap == null) {
-            this.loadData();
+        BaseMetaGroup baseMetaGroup= this.baseMetaGroupService.getBaseMetaGroupByCode(baseMetaGroupCode);
+        if(baseMetaGroup!=null){
+            return baseMetaGroup.getName();
         }
-
-        if (baseMetaGroupMap.containsKey(baseMetaGroupId)
-                && baseMetaGroupMap.get(baseMetaGroupId) != null) {
-            return baseMetaGroupMap.get(baseMetaGroupId).getName();
-        }
-
         return "";
     }
-    public List<BaseMeta> getBaseMetaList(String baseMetaGroupId) {
-        if (StringUtils.isBlank(baseMetaGroupId)) {
+    public List<BaseMeta> getBaseMetaList(String baseMetaGroupCode) {
+        if (StringUtils.isBlank(baseMetaGroupCode)) {
             return null;
         }
-
-        if (baseMetaListMap == null) {
-            this.loadData();
-        }
-
-        return baseMetaListMap.get(baseMetaGroupId);
+        Map<String,Object> params=new HashMap();
+        params.put("groupCode",baseMetaGroupCode);
+        return baseMetaDao.getBaseMetaList(params);
     }
 
-    public String getBaseMetaValue(String id) {
-        if (StringUtils.isBlank(id)) {
+    public String getBaseMetaValue(Long id) {
+        if (id==null) {
             return "";
         }
-
-        if (baseMetaMap == null) {
-            this.loadData();
+        BaseMeta baseMeta=this.baseMetaDao.getBaseMeta(id);
+        if(baseMeta!=null){
+            return baseMeta.getMetaValue();
         }
-
-        if (baseMetaMap.containsKey(id)
-                && baseMetaMap.get(id) != null) {
-            return baseMetaMap.get(id).getMetaValue();
-        }
-
         return "";
     }
 
-    public String getBaseMetaKey(String id) {
-        if (StringUtils.isBlank(id)) {
+    public String getBaseMetaKey(Long id) {
+        if (id==null) {
             return "";
         }
 
-        if (baseMetaMap == null) {
-            this.loadData();
+        BaseMeta baseMeta=this.baseMetaDao.getBaseMeta(id);
+        if(baseMeta!=null){
+            return baseMeta.getMetaKey();
         }
-
-        if (baseMetaMap.containsKey(id)
-                && baseMetaMap.get(id) != null) {
-            return baseMetaMap.get(id).getMetaKey();
-        }
-
         return "";
     }
 
@@ -284,7 +259,7 @@
     }
 
     @Override
-    public BaseMeta getBaseMeta(String groupId, String key,String value) {
-        return baseMetaDao.selectBaseMeta(groupId,key,value);
+    public BaseMeta getBaseMeta(String groupCode, String key,String value) {
+        return baseMetaDao.selectBaseMeta(groupCode,key,value);
     }
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/BaseRolePageService.java b/src/main/java/com/nanometer/smartlab/service/BaseRolePageService.java
index 8127d2c..682d78e 100644
--- a/src/main/java/com/nanometer/smartlab/service/BaseRolePageService.java
+++ b/src/main/java/com/nanometer/smartlab/service/BaseRolePageService.java
@@ -9,7 +9,9 @@
  */
 public interface BaseRolePageService {
 
-    public List<BaseRolePage> getBaseRolePageList(String roleId, String pageId);
+    public List<BaseRolePage> getBaseRolePageList(Long roleId, Long pageId);
     public BaseRolePage insertBaseRolePage(BaseRolePage baseRolePage);
-    public boolean deleteBaseRolePage(String roleId);
+    public boolean deleteBaseRolePage(Long roleId);
+
+    public void batchInsertBaseRolePage(List<BaseRolePage> baseRolePages);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/BaseRolePageServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/BaseRolePageServiceImpl.java
index 1476eb9..ed212a9 100644
--- a/src/main/java/com/nanometer/smartlab/service/BaseRolePageServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/BaseRolePageServiceImpl.java
@@ -34,13 +34,13 @@
     BaseRolePageDao baseRolePageDao;
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<BaseRolePage> getBaseRolePageList(String roleId, String pageId) {
+    public List<BaseRolePage> getBaseRolePageList(Long roleId, Long pageId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
-            if (StringUtils.isNotBlank(roleId)) {
+            if (roleId!=null) {
                 params.put("roleId", roleId);
             }
-            if (StringUtils.isNotBlank(pageId)) {
+            if (pageId!=null) {
                 params.put("pageId", pageId);
             }
             return this.baseRolePageDao.getBaseRolePageList(params);
@@ -53,9 +53,9 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public BaseRolePage insertBaseRolePage(BaseRolePage baseRolePage) {
         try {
-            if (baseRolePage.getId() == null) {
-                baseRolePage.setId(IDUtils.uuid());
-            }
+//            if (baseRolePage.getId() == null) {
+//                baseRolePage.setId(IDUtils.uuid());
+//            }
             this.baseRolePageDao.insertBaseRolePage(baseRolePage);
             return baseRolePage;
         } catch (DuplicateKeyException ex) {
@@ -71,7 +71,26 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean deleteBaseRolePage(String roleId) {
+    public void batchInsertBaseRolePage(List<BaseRolePage> baseRolePages) {
+        try {
+//            if (baseRolePage.getId() == null) {
+//                baseRolePage.setId(IDUtils.uuid());
+//            }
+            this.baseRolePageDao.batchInsertBaseRolePage(baseRolePages);
+        } catch (DuplicateKeyException ex) {
+            logger.warn(ex.getMessage(), ex);
+            throw new AlarmException(AlarmCode.DATA_DUPLICATE, MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
+        } catch (DataIntegrityViolationException ex) {
+            logger.warn(ex.getMessage(), ex);
+            throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
+        } catch (DataAccessException ex) {
+            logger.error(ex.getMessage(), ex);
+            throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
+        }
+    }
+
+    @Transactional(propagation = Propagation.REQUIRED)
+    public boolean deleteBaseRolePage(Long roleId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("roleId", roleId);
diff --git a/src/main/java/com/nanometer/smartlab/service/BaseRoleService.java b/src/main/java/com/nanometer/smartlab/service/BaseRoleService.java
index a53f758..dea32d4 100644
--- a/src/main/java/com/nanometer/smartlab/service/BaseRoleService.java
+++ b/src/main/java/com/nanometer/smartlab/service/BaseRoleService.java
@@ -12,8 +12,8 @@
     public List<BaseRole> getBaseRoleList(String name, String memo, Integer first, Integer pageSize);
     public List<BaseRole> getBaseRoleList();
     public int getBaseRoleTotalCount(String name, String memo);
-    public BaseRole getBaseRole(String id);
-    public boolean isBaseRoleExist(String name, String editId);
+    public BaseRole getBaseRole(Long id);
+    public boolean isBaseRoleExist(String name, Long editId);
     public BaseRole insertBaseRole(BaseRole baseRole);
     public boolean updateBaseRole(BaseRole baseRole);
     public boolean deleteBaseRole(List<BaseRole> baseRoleList);
@@ -21,5 +21,5 @@
     public void updateUserMngPageBtn(BaseRole baseRole);
     public void updateUserMngPageUser(BaseRole baseRole);
 
-    BaseRole getRoleByUserId(String id);
+    BaseRole getRoleByUserId(Long id);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/BaseRoleServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/BaseRoleServiceImpl.java
index fa14a1a..12aaf9e 100644
--- a/src/main/java/com/nanometer/smartlab/service/BaseRoleServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/BaseRoleServiceImpl.java
@@ -23,6 +23,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * Created by johnny on 17/11/18.
@@ -79,12 +80,12 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public BaseRole getBaseRole(String id) {
+    public BaseRole getBaseRole(Long id) {
         try {
             BaseRole baseRole = this.baseRoleDao.getBaseRole(id);
             List<BaseRolePage> baseRolePageList = this.baseRolePageService.getBaseRolePageList(id, null);
             if (baseRolePageList != null && baseRolePageList.size() > 0) {
-                List<String> pageIdList = new ArrayList<String>();
+                List<Long> pageIdList = new ArrayList<Long>();
                 for (BaseRolePage baseRolePage : baseRolePageList) {
                     pageIdList.add(baseRolePage.getPageId());
                 }
@@ -99,13 +100,13 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean isBaseRoleExist(String name, String editId) {
+    public boolean isBaseRoleExist(String name, Long editId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             if (StringUtils.isNotBlank(name)) {
                 params.put("name", name);
             }
-            if (StringUtils.isNotBlank(editId)) {
+            if (editId!=null) {
                 params.put("editId", editId);
             }
             int count = this.baseRoleDao.getBaseRoleTotalCount(params);
@@ -119,21 +120,20 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public BaseRole insertBaseRole(BaseRole baseRole) {
         try {
-            if (baseRole.getId() == null) {
-                baseRole.setId(IDUtils.uuid());
-            }
             this.baseRoleDao.insertBaseRole(baseRole);
             if (baseRole.getPageIdList() != null) {
-                BaseRolePage baseRolePage = null;
-                for (String pageId : baseRole.getPageIdList()) {
-                    baseRolePage = new BaseRolePage();
-                    baseRolePage.setId(IDUtils.uuid());
+                List<Long> pageIdList=baseRole.getPageIdList();
+                List<BaseRolePage> baseRolePages=new ArrayList<>();
+                for(int i=0;i<pageIdList.size();i++){
+                    //前端id被处理成了字符串,映射到后台变成了char,进行数据强转
+                    Long pageId = Long.valueOf(((Object) pageIdList.get(i)).toString());
+                    BaseRolePage baseRolePage = new BaseRolePage();
                     baseRolePage.setRoleId(baseRole.getId());
                     baseRolePage.setPageId(pageId);
-                    this.baseRolePageService.insertBaseRolePage(baseRolePage);
+                    baseRolePages.add(baseRolePage);
                 }
+                this.baseRolePageService.batchInsertBaseRolePage(baseRolePages);
             }
-
             return baseRole;
         } catch (DuplicateKeyException ex) {
             logger.warn(ex.getMessage(), ex);
@@ -153,14 +153,17 @@
             int row = this.baseRoleDao.updateBaseRole(baseRole);
             this.baseRolePageService.deleteBaseRolePage(baseRole.getId());
             if (baseRole.getPageIdList() != null) {
-                BaseRolePage baseRolePage = null;
-                for (String pageId : baseRole.getPageIdList()) {
-                    baseRolePage = new BaseRolePage();
-                    baseRolePage.setId(IDUtils.uuid());
+                List<Long> pageIdList=baseRole.getPageIdList();
+                List<BaseRolePage> baseRolePages=new ArrayList<>();
+                for(int i=0;i<pageIdList.size();i++){
+                    //前端id被处理成了字符串,映射到后台变成了char,进行数据强转
+                    Long pageId = Long.valueOf(((Object) pageIdList.get(i)).toString());
+                    BaseRolePage baseRolePage = new BaseRolePage();
                     baseRolePage.setRoleId(baseRole.getId());
                     baseRolePage.setPageId(pageId);
-                    this.baseRolePageService.insertBaseRolePage(baseRolePage);
+                    baseRolePages.add(baseRolePage);
                 }
+                this.baseRolePageService.batchInsertBaseRolePage(baseRolePages);
             }
 
             if (row == 0) {
@@ -186,7 +189,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (BaseRole baseRole : baseRoleList) {
                 ids.add(baseRole.getId());
             }
@@ -233,7 +236,7 @@
     }
 
     @Override
-    public BaseRole getRoleByUserId(String id) {
+    public BaseRole getRoleByUserId(Long id) {
         return baseRoleDao.getBaseRoleByUser(id);
     }
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/DangerousEncodeService.java b/src/main/java/com/nanometer/smartlab/service/DangerousEncodeService.java
index 7db8bff..44a1fd1 100644
--- a/src/main/java/com/nanometer/smartlab/service/DangerousEncodeService.java
+++ b/src/main/java/com/nanometer/smartlab/service/DangerousEncodeService.java
@@ -28,7 +28,7 @@
 
     List<DangerousEncode> selectByCodeAndName(String reagentcode, String reagentname,String cas,String code);
 
-    List<DangerousEncodeVo> selectByReagentName(String reagentname, String cas);
+    List<DangerousEncode> selectByReagentName(String reagentname, String cas);
 
     DangerousEncode selectByName(String reagentname);
 
diff --git a/src/main/java/com/nanometer/smartlab/service/DangerousEncodeServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/DangerousEncodeServiceImpl.java
index 7251e62..b2bd27c 100644
--- a/src/main/java/com/nanometer/smartlab/service/DangerousEncodeServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/DangerousEncodeServiceImpl.java
@@ -163,7 +163,7 @@
             }
             dangerousEncode.setCount(0);
             dangerousEncode.setUpdateTime(new Date());
-            dangerousEncode.setCreator(user.getId());
+            dangerousEncode.setCreator(user.getName());
             dangerousEncodeMapper.insert(dangerousEncode);
         }
 
@@ -190,7 +190,7 @@
     }
 
     @Override
-    public List<DangerousEncodeVo> selectByReagentName(String reagentname, String cas) {
+    public List<DangerousEncode> selectByReagentName(String reagentname, String cas) {
         return dangerousEncodeMapper.selectByReagentName(reagentname, cas);
     }
 
diff --git a/src/main/java/com/nanometer/smartlab/service/HazardousWasteService.java b/src/main/java/com/nanometer/smartlab/service/HazardousWasteService.java
index bc8d821..24286f3 100644
--- a/src/main/java/com/nanometer/smartlab/service/HazardousWasteService.java
+++ b/src/main/java/com/nanometer/smartlab/service/HazardousWasteService.java
@@ -8,19 +8,19 @@
 
 public interface HazardousWasteService {
 
-    List<HazardousWaste> selectAll(Date startTime, Date endTime,String status,String applyPerson,String project,String department,String tid,Integer offset, Integer pageSize);
+    List<HazardousWaste> selectAll(Date startTime, Date endTime,String status,String applyPerson,Long projectId,String department,String tid,Integer offset, Integer pageSize);
 
-    int countAll(Date startTime, Date endTime,String status,String applyPerson,String project,String department,String tid);
+    int countAll(Date startTime, Date endTime,String status,String applyPerson,Long projectId,String department,String tid);
 
-    List<Map> exportList(Date startTime, Date endTime, String status, String applyPerson, String project, String department,String tid);
+    List<Map> exportList(Date startTime, Date endTime, String status, String applyPerson, Long project, String department,String tid);
 
     void export2Excel(List<Map> list) throws Exception;
 
-    int countStatistics(Date startTime, Date endTime, String status, String applyPerson, String project, String department);
+    int countStatistics(Date startTime, Date endTime, String status, String applyPerson, Long projectId, String department);
 
-    List<HazardousWaste> selectStatistics(Date startTime, Date endTime, String status, String applyPerson, String project, String department, int first, int pageSize);
+    List<HazardousWaste> selectStatistics(Date startTime, Date endTime, String status, String applyPerson, Long projectId, String department, int first, int pageSize);
 
-    List<Map> exportStatisticsList(Date startTime, Date endTime, String status, String applyPerson, String project, String department);
+    List<Map> exportStatisticsList(Date startTime, Date endTime, String status, String applyPerson, Long projectId, String department);
 
     void exportStatistics2Excel(List<Map> list)throws Exception;
 
diff --git a/src/main/java/com/nanometer/smartlab/service/HazardousWasteServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/HazardousWasteServiceImpl.java
index e22ab8d..a7bf070 100644
--- a/src/main/java/com/nanometer/smartlab/service/HazardousWasteServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/HazardousWasteServiceImpl.java
@@ -16,7 +16,7 @@
     private HazardousWasteMapper hazardousWasteMapper;
 
     @Override
-    public List<HazardousWaste> selectAll(Date startTime, Date endTime,String status,String applyPerson,String project,String department,
+    public List<HazardousWaste> selectAll(Date startTime, Date endTime,String status,String applyPerson,Long projectId,String department,
                                           String tid, Integer offset, Integer pageSize) {
         Map<String, Object> params = new HashMap<>();
         params.put("startTime", startTime);
@@ -27,14 +27,14 @@
             params.put("status", status);
         }
         params.put("applyPerson", applyPerson);
-        params.put("project", project);
+        params.put("projectId", projectId);
         params.put("department", department);
         params.put("tid", tid);
         return hazardousWasteMapper.selectAll(params);
     }
 
     @Override
-    public int countAll(Date startTime, Date endTime,String status,String applyPerson,String project,String department,String tid) {
+    public int countAll(Date startTime, Date endTime,String status,String applyPerson,Long projectId,String department,String tid) {
         Map<String, Object> params = new HashMap<>();
         params.put("startTime", startTime);
         params.put("endTime", endTime);
@@ -42,14 +42,14 @@
             params.put("status", status);
         }
         params.put("applyPerson", applyPerson);
-        params.put("project", project);
+        params.put("projectId", projectId);
         params.put("department", department);
         params.put("tid", tid);
         return hazardousWasteMapper.countAll(params);
     }
 
     @Override
-    public List<Map> exportList(Date startTime, Date endTime, String status, String applyPerson, String project, String department,String tid) {
+    public List<Map> exportList(Date startTime, Date endTime, String status, String applyPerson, Long projectId, String department,String tid) {
         Map<String, Object> params = new HashMap<>();
         params.put("startTime", startTime);
         params.put("endTime", endTime);
@@ -57,7 +57,7 @@
             params.put("status", status);
         }
         params.put("applyPerson", applyPerson);
-        params.put("project", project);
+        params.put("projectId", projectId);
         params.put("department", department);
         params.put("tid", tid);
         return hazardousWasteMapper.selectExportList(params);
@@ -83,7 +83,7 @@
     }
 
     @Override
-    public int countStatistics(Date startTime, Date endTime, String status, String applyPerson, String project, String department) {
+    public int countStatistics(Date startTime, Date endTime, String status, String applyPerson, Long projectId, String department) {
         Map<String, Object> params = new HashMap<>();
         params.put("startTime", startTime);
         params.put("endTime", endTime);
@@ -91,13 +91,13 @@
             params.put("status", status);
         }
         params.put("applyPerson", applyPerson);
-        params.put("project", project);
+        params.put("projectId", projectId);
         params.put("department", department);
         return hazardousWasteMapper.countStatistics(params);
     }
 
     @Override
-    public List<HazardousWaste> selectStatistics(Date startTime, Date endTime, String status, String applyPerson, String project, String department, int first, int pageSize) {
+    public List<HazardousWaste> selectStatistics(Date startTime, Date endTime, String status, String applyPerson, Long projectId, String department, int first, int pageSize) {
         Map<String, Object> params = new HashMap<>();
         params.put("startTime", startTime);
         params.put("endTime", endTime);
@@ -107,13 +107,13 @@
             params.put("status", status);
         }
         params.put("applyPerson", applyPerson);
-        params.put("project", project);
+        params.put("projectId", projectId);
         params.put("department", department);
         return hazardousWasteMapper.selectStatistics(params);
     }
 
     @Override
-    public List<Map> exportStatisticsList(Date startTime, Date endTime, String status, String applyPerson, String project, String department) {
+    public List<Map> exportStatisticsList(Date startTime, Date endTime, String status, String applyPerson, Long projectId, String department) {
         Map<String, Object> params = new HashMap<>();
         params.put("startTime", startTime);
         params.put("endTime", endTime);
@@ -121,7 +121,7 @@
             params.put("status", status);
         }
         params.put("applyPerson", applyPerson);
-        params.put("project", project);
+        params.put("projectId", projectId);
         params.put("department", department);
         return hazardousWasteMapper.selectStatisticsExportList(params);
     }
diff --git a/src/main/java/com/nanometer/smartlab/service/InterfaceService.java b/src/main/java/com/nanometer/smartlab/service/InterfaceService.java
index 2553bd7..c1e6031 100644
--- a/src/main/java/com/nanometer/smartlab/service/InterfaceService.java
+++ b/src/main/java/com/nanometer/smartlab/service/InterfaceService.java
@@ -1,22 +1,27 @@
 package com.nanometer.smartlab.service;
 
 import java.io.IOException;
+import java.text.ParseException;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.nanometer.smartlab.entity.OpeUseFlow;
+import com.nanometer.smartlab.entity.SysLaboratory;
 import com.nanometer.smartlab.entity.SysUser;
 import com.nanometer.smartlab.exception.ApiException;
 
 public interface InterfaceService {
 
-    public void registerTestCabinet(String userId, JSONObject jsonObject) throws ApiException;
+    public void registerTestCabinet(Long userId, JSONObject jsonObject) throws ApiException;
 
-    public void logoutTestCabinet(String userId, JSONObject jsonObject) throws ApiException;
+    public void logoutTestCabinet(Long userId, JSONObject jsonObject) throws ApiException;
 
-    public void updateTestCabinet(String userId, JSONObject jsonObject) throws ApiException;
+    public void updateTestCabinet(Long userId, JSONObject jsonObject) throws ApiException;
 
-    public String openCabinetDoor(String userId, JSONObject jsonObject) throws ApiException;
+    public String openCabinetDoor(Long userId, JSONObject jsonObject) throws ApiException;
 
     public void closeCabinetDoor(JSONObject jsonObject) throws ApiException;
 
@@ -26,7 +31,7 @@
 
     public void alarmperson(JSONObject jsonObject) throws Exception;
 
-    public void cabinetData(JSONArray jsonObject) throws ApiException;
+    public void cabinetData(JSONArray jsonObject,Long userId) throws ApiException;
 
     public JSONObject getContainerInfo(JSONObject jsonObject) throws ApiException;
 
@@ -34,11 +39,46 @@
 
     public JSONObject getUserInfo(JSONObject jsonObject) throws ApiException;
 
-	public void AutheTestCabinet(String userId, JSONObject parseObject) throws ApiException;
+	public void AutheTestCabinet(Long userId, JSONObject parseObject) throws ApiException;
 
 	public List<SysUser> getUserListByContainerCode(String containerCode, String startTime,String endTime) throws ApiException;
 
     List<SysUser> getUserListByContainerCodeNew(String containerCode, String startTime, String endTime) throws ApiException;
 
     public void delalarmperson(JSONObject jsonObject) throws Exception;
+
+    /**
+     * 获取实验室列表和实验室临时存储库列表
+     * @param userId
+     * @return
+     */
+    List<SysLaboratory> getLabAndContainerByUserId(Long userId) throws ApiException;
+
+    /**
+     * 根据试剂条码查询流向
+     * @param reagentCode
+     * @return
+     * @throws ApiException
+     */
+    List<OpeUseFlow> getReagentUseFlowList(String reagentCode) throws ApiException;
+
+    /**
+     *
+     * @param userId
+     * @return
+     * @throws ApiException
+     */
+    List<SysLaboratory> getLaboratoryByUserId(Long userId)throws ApiException;
+
+    /**
+     * 个人获取流向
+     * @param pageNum
+     * @param pageSize
+     * @param userId
+     * @return
+     * @throws ApiException
+     */
+    Map<String,Object> getOpeUseFlowByUserId(Integer pageNum, Integer pageSize, Long userId, Integer operatestate, String startDate, String endDate) throws ApiException, ParseException;
+
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/InterfaceServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/InterfaceServiceImpl.java
index fed7f24..76adaf4 100644
--- a/src/main/java/com/nanometer/smartlab/service/InterfaceServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/InterfaceServiceImpl.java
@@ -5,17 +5,14 @@
 import com.nanometer.smartlab.api.ApiAction;
 import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
-import com.nanometer.smartlab.entity.enumtype.ApiStatus;
-import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
-import com.nanometer.smartlab.entity.enumtype.SeeFlag;
-import com.nanometer.smartlab.entity.enumtype.ValidFlag;
-import com.nanometer.smartlab.entity.enumtype.WarningLevel;
+import com.nanometer.smartlab.entity.enumtype.*;
 import com.nanometer.smartlab.exception.ApiException;
 import com.nanometer.smartlab.util.IDUtils;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.DateUtils;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
@@ -106,7 +103,7 @@
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED)
-	public void AutheTestCabinet(String userId, JSONObject jsonObject) throws ApiException {
+	public void AutheTestCabinet(Long userId, JSONObject jsonObject) throws ApiException {
     	if (!jsonObject.containsKey("createTime")) {
             throw new ApiException(ApiStatus.PARAM_NO_EXIST, ApiStatus.PARAM_NO_EXIST.getRetMsg() + "[createTime]");
         }
@@ -228,8 +225,8 @@
                 throw new ApiException(ApiStatus.PARAM_NULL, ApiStatus.PARAM_NULL.getRetMsg() + "[barCode]");
             }
 
-            Integer containerLeft = containerDateJson.getInteger("left");
-            Integer containerRight = containerDateJson.getInteger("right");
+            Long containerLeft = containerDateJson.getLong("left");
+            Long containerRight = containerDateJson.getLong("right");
 
             // 仓库试剂柜场合
             if (containerPlace == 0) {
@@ -262,10 +259,10 @@
 
 				// 可能不能直接存,需要转换成数据字典
 				if (containerLeft != null) {
-					sysWarehouseContainer.setCharacterLeft(String.valueOf(containerLeft));
+					sysWarehouseContainer.setCharacterLeft(containerLeft);
 				}
 				if (containerRight != null) {
-					sysWarehouseContainer.setCharacterRight(String.valueOf(containerRight));
+					sysWarehouseContainer.setCharacterRight(containerRight);
 				}
 
 				sysWarehouseContainerDao
@@ -303,11 +300,11 @@
 
 				// 可能不能直接存,需要转换成数据字典
 				if (containerLeft != null) {
-					sysLaboratoryContainer.setCharacterLeft(String.valueOf(containerLeft));
+					sysLaboratoryContainer.setCharacterLeft(containerLeft);
 				}
 
 				if (containerRight != null) {
-					sysLaboratoryContainer.setCharacterRight(String.valueOf(containerRight));
+					sysLaboratoryContainer.setCharacterRight(containerRight);
 				}
 
 				int containerCount = sysLaboratoryContainerDao
@@ -324,7 +321,7 @@
 
 	@Override
     @Transactional(propagation = Propagation.REQUIRED)
-    public void registerTestCabinet(String userId, JSONObject jsonObject) throws ApiException {
+    public void registerTestCabinet(Long userId, JSONObject jsonObject) throws ApiException {
         long createTimestamp = jsonObject.getLong("createTime");
 
         if (!jsonObject.containsKey("controllerData")) {
@@ -452,8 +449,8 @@
                 throw new ApiException(ApiStatus.PARAM_NULL, ApiStatus.PARAM_NULL.getRetMsg() + "[place]");
             }
 
-            Integer containerLeft = containerDateJson.getInteger("left");
-            Integer containerRight = containerDateJson.getInteger("right");
+            Long containerLeft = containerDateJson.getLong("left");
+            Long containerRight = containerDateJson.getLong("right");
 
 
             if (containerPlace == 0) {
@@ -479,7 +476,7 @@
 
                 SysWarehouseContainer tempSysWarehouseContainer = new SysWarehouseContainer();
                 tempSysWarehouseContainer.setWarehouseId(sysWarehouse.getId());
-                tempSysWarehouseContainer.setType(baseMetaList.get(0).getMetaValue());
+                tempSysWarehouseContainer.setType(Long.valueOf(baseMetaList.get(0).getMetaValue()));
                 tempSysWarehouseContainer.setContainerCode(containerCode);
                 tempSysWarehouseContainer.setCreateTime(new Timestamp(createTimestamp));
                 tempSysWarehouseContainer.setUpdateTime(new Timestamp(createTimestamp));
@@ -491,14 +488,14 @@
                 tempSysWarehouseContainer.setValidFlag(ValidFlag.parse(containerValidFlag));
                 tempSysWarehouseContainer.setControllerCode(controllerCode);
                 if (containerLeft != null) {
-                    tempSysWarehouseContainer.setCharacterLeft(String.valueOf(containerLeft));
+                    tempSysWarehouseContainer.setCharacterLeft(containerLeft);
                 }
 
                 if (containerRight != null) {
-                    tempSysWarehouseContainer.setCharacterRight(String.valueOf(containerRight));
+                    tempSysWarehouseContainer.setCharacterRight(containerRight);
                 }
 
-                tempSysWarehouseContainer.setId(IDUtils.uuid());
+            //    tempSysWarehouseContainer.setId(IDUtils.uuid());
                 sysWarehouseContainerDao.insertSysWarehouseContainer(tempSysWarehouseContainer);
             } else if (containerPlace == 1) {
                 SysLaboratoryContainer sysLaboratoryContainer = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(containerCode);
@@ -523,7 +520,7 @@
 
                 SysLaboratoryContainer tempSysLaboratoryContainer = new SysLaboratoryContainer();
                 tempSysLaboratoryContainer.setLaboratoryId(sysLaboratory.getId());
-                tempSysLaboratoryContainer.setType(baseMetaList.get(0).getMetaValue());
+                tempSysLaboratoryContainer.setType(Long.valueOf(baseMetaList.get(0).getMetaValue()));
                 tempSysLaboratoryContainer.setContainerCode(containerCode);
                 tempSysLaboratoryContainer.setCreateTime(new Timestamp(createTimestamp));
                 tempSysLaboratoryContainer.setUpdateTime(new Timestamp(createTimestamp));
@@ -535,13 +532,13 @@
                 tempSysLaboratoryContainer.setValidFlag(ValidFlag.parse(containerValidFlag));
                 tempSysLaboratoryContainer.setControllerCode(controllerCode);
                 if (containerLeft != null) {
-                    tempSysLaboratoryContainer.setCharacterLeft(String.valueOf(containerLeft));
+                    tempSysLaboratoryContainer.setCharacterLeft(containerLeft);
                 }
 
                 if (containerRight != null) {
-                    tempSysLaboratoryContainer.setCharacterRight(String.valueOf(containerRight));
+                    tempSysLaboratoryContainer.setCharacterRight(containerRight);
                 }
-                sysLaboratoryContainer.setId(IDUtils.uuid());
+            //    sysLaboratoryContainer.setId(IDUtils.uuid());
                 sysLaboratoryContainerDao.insertSysLaboratoryContainer(sysLaboratoryContainer);
             }
         }
@@ -568,7 +565,7 @@
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED)
-    public void logoutTestCabinet(String userId, JSONObject jsonObject) throws ApiException {
+    public void logoutTestCabinet(Long userId, JSONObject jsonObject) throws ApiException {
         if (!jsonObject.containsKey("controllerCode")) {
             throw new ApiException(ApiStatus.PARAM_NO_EXIST, ApiStatus.PARAM_NO_EXIST.getRetMsg() + "[controllerCode]");
         }
@@ -647,7 +644,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED)
     @Override
-    public void updateTestCabinet(String userId, JSONObject jsonObject) throws ApiException {
+    public void updateTestCabinet(Long userId, JSONObject jsonObject) throws ApiException {
         if (!jsonObject.containsKey("updateTime")) {
             throw new ApiException(ApiStatus.PARAM_NO_EXIST, ApiStatus.PARAM_NO_EXIST.getRetMsg() + "[updateTime]");
         }
@@ -786,8 +783,8 @@
                 throw new ApiException(ApiStatus.PARAM_NULL, ApiStatus.PARAM_NULL.getRetMsg() + "[barCode]");
             }
 
-            Integer containerLeft = containerDateJson.getInteger("left");
-            Integer containerRight = containerDateJson.getInteger("right");
+            Long containerLeft = containerDateJson.getLong("left");
+            Long containerRight = containerDateJson.getLong("right");
             String containerName = containerDateJson.getString("containerName");
 
             if (containerPlace == 0) {
@@ -810,7 +807,7 @@
 
                 if (sysWarehouseContainer == null) {
                     SysWarehouseContainer tempSysWarehouseContainer = new SysWarehouseContainer();
-                    tempSysWarehouseContainer.setId(IDUtils.uuid());
+                  //  tempSysWarehouseContainer.setId(IDUtils.uuid());
                     tempSysWarehouseContainer.setWarehouseId(sysWarehouse.getId());
 //                    tempSysWarehouseContainer.setType(baseMetaList.get(0).getMetaValue());
                     tempSysWarehouseContainer.setType(baseMetaList.get(0).getId());
@@ -822,11 +819,11 @@
                     tempSysWarehouseContainer.setValidFlag(containerValidFlag);
                     tempSysWarehouseContainer.setControllerCode(controllerCode);
                     if (containerLeft != null) {
-                        tempSysWarehouseContainer.setCharacterLeft(String.valueOf(containerLeft));
+                        tempSysWarehouseContainer.setCharacterLeft(containerLeft);
                     }
 
                     if (containerRight != null) {
-                        tempSysWarehouseContainer.setCharacterRight(String.valueOf(containerRight));
+                        tempSysWarehouseContainer.setCharacterRight(containerRight);
                     }
 
                     try {
@@ -847,11 +844,11 @@
                     sysWarehouseContainer.setValidFlag(containerValidFlag);
                     sysWarehouseContainer.setControllerCode(controllerCode);
                     if (containerLeft != null) {
-                        sysWarehouseContainer.setCharacterLeft(String.valueOf(containerLeft));
+                        sysWarehouseContainer.setCharacterLeft(containerLeft);
                     }
 
                     if (containerRight != null) {
-                        sysWarehouseContainer.setCharacterRight(String.valueOf(containerRight));
+                        sysWarehouseContainer.setCharacterRight(containerRight);
                     }
 
                     int containerCount = sysWarehouseContainerDao.updateSysWarehouseContainerForInterface(sysWarehouseContainer);
@@ -881,7 +878,7 @@
 
                 if (sysLaboratoryContainer == null) {
                     SysLaboratoryContainer tempSysLaboratoryContainer = new SysLaboratoryContainer();
-                    tempSysLaboratoryContainer.setId(IDUtils.uuid());
+               //     tempSysLaboratoryContainer.setId(IDUtils.uuid());
                     tempSysLaboratoryContainer.setLaboratoryId(sysLaboratory.getId());
 //                    tempSysLaboratoryContainer.setType(baseMetaList.get(0).getMetaValue());
                     tempSysLaboratoryContainer.setType(baseMetaList.get(0).getId());
@@ -893,11 +890,11 @@
                     tempSysLaboratoryContainer.setValidFlag(containerValidFlag);
                     tempSysLaboratoryContainer.setControllerCode(controllerCode);
                     if (containerLeft != null) {
-                        tempSysLaboratoryContainer.setCharacterLeft(String.valueOf(containerLeft));
+                        tempSysLaboratoryContainer.setCharacterLeft(containerLeft);
                     }
 
                     if (containerRight != null) {
-                        tempSysLaboratoryContainer.setCharacterRight(String.valueOf(containerRight));
+                        tempSysLaboratoryContainer.setCharacterRight(containerRight);
                     }
                     try {
                         sysLaboratoryContainerDao.insertSysLaboratoryContainer(sysLaboratoryContainer);
@@ -916,11 +913,11 @@
                     sysLaboratoryContainer.setValidFlag(containerValidFlag);
                     sysLaboratoryContainer.setControllerCode(controllerCode);
                     if (containerLeft != null) {
-                        sysLaboratoryContainer.setCharacterLeft(String.valueOf(containerLeft));
+                        sysLaboratoryContainer.setCharacterLeft(containerLeft);
                     }
 
                     if (containerRight != null) {
-                        sysLaboratoryContainer.setCharacterRight(String.valueOf(containerRight));
+                        sysLaboratoryContainer.setCharacterRight(containerRight);
                     }
 
                     int containerCount = sysLaboratoryContainerDao.updateSysLaboratoryContainerForInterface(sysLaboratoryContainer);
@@ -943,7 +940,7 @@
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED)
-    public String openCabinetDoor(String userId, JSONObject jsonObject) throws ApiException {
+    public String openCabinetDoor(Long userId, JSONObject jsonObject) throws ApiException {
         if (!jsonObject.containsKey("controllerCode")) {
             throw new ApiException(ApiStatus.PARAM_NO_EXIST, ApiStatus.PARAM_NO_EXIST.getRetMsg() + "[contollerCode]");
         }
@@ -968,7 +965,7 @@
             throw new ApiException(ApiStatus.PARAM_NO_EXIST, ApiStatus.PARAM_NO_EXIST.getRetMsg() + "[userID]");
         }
 
-        String userID = jsonObject.getString("userID");
+        Long userID = Long.valueOf(jsonObject.getString("userID"));
 
         if (userID == null || "".equals(userID)) {
             throw new ApiException(ApiStatus.PARAM_NULL, ApiStatus.PARAM_NULL.getRetMsg() + "[userID]");
@@ -1080,9 +1077,9 @@
             if (!dataJson.containsKey("userID")) {
                 throw new ApiException(ApiStatus.PARAM_NO_EXIST, ApiStatus.PARAM_NO_EXIST.getRetMsg() + "[userID]");
             }
-            String userId = dataJson.getString("userID");
+            Long userId = dataJson.getString("userID")!=null?Long.valueOf(dataJson.getString("userID")):null;
 
-            if (userId == null || "".equals(userId)) {
+            if (userId == null) {
                 throw new ApiException(ApiStatus.PARAM_NULL, ApiStatus.PARAM_NULL.getRetMsg() + "[userID]");
             }
 
@@ -1147,12 +1144,12 @@
                     opeReagentStatus.setReagentCode(reagentCode);
                     opeReagentStatus.setUserId(userId);
                     opeReagentStatus.setContainerId(sysLaboratoryContainer.getId());
-                    opeReagentStatus.setStatus(ArrivalStatus.parse(status));
+                    opeReagentStatus.setStatus(status);
                     opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
 
                     OpeUseFlow opeUseFlow = new OpeUseFlow();
                     opeUseFlow.setReagentCode(reagentCode);
-                    opeUseFlow.setStatus(ArrivalStatus.parse(status));
+                    opeUseFlow.setStatus(status);
                     opeUseFlow.setHouseId(queryOpeReagentStatus.getHouseId());
                     opeUseFlow.setContainerId(sysLaboratoryContainer.getId());
                     opeUseFlow.setUserId(userId);
@@ -1162,7 +1159,7 @@
                     opeUseFlow.setPlace(queryOpeReagentStatus.getPlace());
                     opeUseFlow.setStoreType(queryOpeReagentStatus.getStoreType());
                     opeUseFlow.setValidFlag(queryOpeReagentStatus.getValidFlag());
-                    opeUseFlow.setId(IDUtils.uuid());
+                //    opeUseFlow.setId(IDUtils.uuid());
                     opeUseFlowDao.insertOpeUseFlow(opeUseFlow);
                 }
 
@@ -1172,13 +1169,13 @@
                 opeReagentStatus.setReagentCode(reagentCode);
                 opeReagentStatus.setUserId(userId);
                 opeReagentStatus.setContainerId(sysWarehouseContainer.getId());
-                opeReagentStatus.setStatus(ArrivalStatus.parse(status));
+                opeReagentStatus.setStatus(status);
                 opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
 
                 OpeUseFlow opeUseFlow = new OpeUseFlow();
-                opeUseFlow.setId(IDUtils.uuid());
+            //    opeUseFlow.setId(IDUtils.uuid());
                 opeUseFlow.setReagentCode(reagentCode);
-                opeUseFlow.setStatus(ArrivalStatus.parse(status));
+                opeUseFlow.setStatus(status);
                 opeUseFlow.setHouseId(queryOpeReagentStatus.getHouseId());
                 opeUseFlow.setContainerId(sysWarehouseContainer.getId());
                 opeUseFlow.setUserId(userId);
@@ -1558,7 +1555,7 @@
                         JSONObject res = data2.getJSONObject("data");
                         String refId = res.getString("id");
                         if (StringUtils.isNotBlank(refId)) {
-                            sysAlarmPerson.setRefId(refId);
+                            sysAlarmPerson.setRefId(Long.valueOf(refId));
                         }
                     } else {
                         //请求错误打印日志
@@ -1697,7 +1694,7 @@
 
 	@Override
     @Transactional(propagation = Propagation.REQUIRED)
-    public void cabinetData(JSONArray jsonObject) throws ApiException {
+    public void cabinetData(JSONArray jsonObject,Long userId) throws ApiException {
 
     	Iterator<Object> dataIt = jsonObject.iterator();
     	 while(dataIt.hasNext()) {
@@ -1712,49 +1709,59 @@
 			//    		 操作状态	operateState	Integer	○
     		 // 非空检查
              if (!dataJson.containsKey("status")
-                     || !dataJson.containsKey("realstatus")
-                     || !dataJson.containsKey("containerCode")
                      || !dataJson.containsKey("reagentCode")
                      || !dataJson.containsKey("updateTime")
+                     || !dataJson.containsKey("labContainerId")
                      || !dataJson.containsKey("operateState")
             		 ) {
                  throw new ApiException(ApiStatus.PARAM_NO_EXIST);
              }
 
-			Integer status = dataJson.getInteger("status");
-			Integer realstatus = dataJson.getInteger("realstatus");
-			String containerCode = dataJson.getString("containerCode");
+			ArrivalStatus status = ArrivalStatus.parse(Integer.valueOf(String.valueOf(dataJson.get("status"))));
+
+
+            Long labContainerId = Long.valueOf(dataJson.getString("labContainerId"));
 			String reagentCode = dataJson.getString("reagentCode");
-			String idcard = dataJson.getString("idcard");
-			String updateTime = dataJson.getString("updateTime");
+             String updateTime = dataJson.getString("updateTime");
 			BigDecimal remainder = dataJson.getBigDecimal("remainder");
-			String operateState = dataJson.getString("operateState");
+			Integer operateState = Integer.valueOf(dataJson.getString("operateState"));
              BigDecimal volume = dataJson.getBigDecimal("volume");
+             Date createtime = null;
+             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+             try {
+                 createtime = sdf.parse(updateTime);
+             } catch (ParseException e) {
+                 throw new ApiException(ApiStatus.PARAM_ERR);
+             }
 
-			Map<String, String> metaMap = new HashMap<>();
-            metaMap.put("groupId", "operate_status");
-            metaMap.put("metaKey", String.valueOf(operateState));
-            List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-
-			Date createtime = null;
-			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-			try {
-				 createtime = sdf.parse(updateTime);
-			} catch (ParseException e) {
-				throw new ApiException(ApiStatus.PARAM_ERR);
+			SysUser user = sysUserDao.getUser(userId);
+			if (user == null ) {
+				throw new ApiException(ApiStatus.PARAM_ERR, "userid: "+userId);
 			}
-
-			SysUser user = sysUserDao.getSysUserByIdCard(idcard);
-
-			if (user == null || user.getIdCard() == null) {
-				throw new ApiException(ApiStatus.PARAM_ERR, "idcard: "+idcard);
-			}
+            if(operateState==OperateStatus.STORE.getKey()){
+                List<OpeUseFlow> useFlowList = opeUseFlowDao.getUseFlowByCodeAndStatus(reagentCode,OperateStatus.WAREHOUSEOUT.getKey());
+                if(useFlowList.size()==0){
+                    throw new ApiException(ApiStatus.PARAM_ERR, "仓库领用后才能进行存放操作");
+                }
+            }
+             if(operateState==OperateStatus.USE.getKey()){
+                 List<OpeUseFlow> useFlowList = opeUseFlowDao.getUseFlowByCodeAndStatus(reagentCode,OperateStatus.STORE.getKey());
+                 if(useFlowList.size()==0){
+                     throw new ApiException(ApiStatus.PARAM_ERR, "存放的试剂才能进行领用操作");
+                 }
+             }
+             if(operateState==OperateStatus.SCRAP.getKey()){
+                 List<OpeUseFlow> useFlowList = opeUseFlowDao.getUseFlowByCodeAndStatuses(reagentCode,Arrays.asList(new Integer[]{OperateStatus.STORE.getKey(),OperateStatus.USE.getKey()}));
+                 if(useFlowList.size()==0){
+                     throw new ApiException(ApiStatus.PARAM_ERR, "存放或者领用的试剂才能进行报废操作");
+                 }
+             }
 
 			OpeUseFlow opeUseFlow = new OpeUseFlow();
 			opeUseFlow.setReagentCode(reagentCode);
-			opeUseFlow.setUserId(user.getId());
+			opeUseFlow.setUserId(userId);
 			opeUseFlow.setRemainder(remainder);
-			opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+			opeUseFlow.setOperateState(Integer.valueOf(operateState));
 			opeUseFlow.setCreateTime(new java.sql.Timestamp(createtime.getTime()));
             opeUseFlow.setVolume(volume);
 
@@ -1790,30 +1797,44 @@
 //					continue;
 //				}
 //			}
-
-			opeUseFlow.setStatus(ArrivalStatus.parse(Integer.valueOf(String.valueOf(dataJson.get("status")))));
-			SysLaboratoryContainer sysLaboratoryContainer = sysLaboratoryContainerDao
-					.getSysLaboratoryContainerByContainerCode(containerCode);
+             OpeReagentStatus opeReagentStatus = new OpeReagentStatus();
+             opeReagentStatus.setReagentCode(reagentCode);
+             opeReagentStatus.setUserId(user.getId());
+             Integer reagentStatus=null;
+             if(operateState==OperateStatus.SCRAP.getKey()){//试剂报废
+                 reagentStatus=ArrivalStatus.SCRAP.getKey();
+             }else if(operateState==OperateStatus.USE.getKey()){
+                 reagentStatus=ArrivalStatus.PERSONAL.getKey();
+             }else if(operateState==OperateStatus.LABORATORYIN.getKey()){
+                 reagentStatus=ArrivalStatus.WAREHOUSE.getKey();
+             }else if(operateState==OperateStatus.STORE.getKey()){
+                 reagentStatus=ArrivalStatus.LABORATORY.getKey();
+             }else if(operateState==OperateStatus.WAREHOUSEOUT.getKey()){
+                 reagentStatus=ArrivalStatus.NOREGISTER.getKey();
+             }
+             if(reagentStatus!=null){
+                 opeReagentStatus.setStatus(reagentStatus);
+                 opeReagentStatusDao.updateOpeReagentStatusByCode(opeReagentStatus);
+             }
+			opeUseFlow.setStatus(reagentStatus);
+			SysLaboratoryContainer sysLaboratoryContainer = sysLaboratoryContainerDao.getSysLaboratoryContainer(labContainerId);
 
 			if (Objects.isNull(sysLaboratoryContainer) == false) {
 				opeUseFlow.setContainerId(sysLaboratoryContainer.getId());
 				opeUseFlow.setHouseId(sysLaboratoryContainer.getLaboratoryId());
 			} else {
-				SysWarehouseContainer container = sysWarehouseContainerDao
-						.getSysWarehouseContainerByContainerCode(containerCode);
+				SysWarehouseContainer container = sysWarehouseContainerDao.getSysWarehouseContainer(labContainerId);
 				if (Objects.isNull(container) == false) {
-
 					opeUseFlow.setContainerId(container.getId());
 					opeUseFlow.setHouseId(container.getWarehouseId());
 
 				} else {
-					logger.error("The containerCode has not been exists!");
-					continue;
+                    logger.error("The containerCode has not been exists!");
+                    throw new ApiException(ApiStatus.PARAM_NO_EXIST,"The containerCode has not been exists!");
 				}
 			}
              int count = opeUseFlowService.getOpeUseFlow(opeUseFlow);
              if (count < 1) {
-
                  this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
              }
     	 }
@@ -1866,11 +1887,12 @@
                 sysAlarmPerson.setWarningId(baseMetaList.get(0).getId());
                 List<SysAlarmPerson> sysAlarmPersonList = sysAlarmPersonDao.selectByCode(containerCode, baseMetaList.get(0).getId());
                 for (SysAlarmPerson sysAlarm : sysAlarmPersonList) {
-                    if (!"".equals(alarmUrl) && StringUtils.isNotBlank(sysAlarm.getRefId()) && ("1".equals(warning) || "2".equals(warning))) {
+                    if (!"".equals(alarmUrl) && sysAlarm.getRefId()!= null && ("1".equals(warning) || "2".equals(warning))) {
                         SysWarning sysWarning = new SysWarning();
-                        sysWarning.setId(String.valueOf(sysAlarm.getId()));
+                        //-----------------待改善---------------------20230408
+                        sysWarning.setId(sysAlarm.getId());
                         sysWarning.setStatus(1);
-                        sysWarning.setAlarmId(sysAlarm.getRefId());
+                        sysWarning.setDapingAlarmId(sysAlarm.getRefId());
                         sysWarningService.updateSysWarning(sysWarning);
                     }else {
                         Map<String,Object> params = new HashMap<>();
@@ -1882,4 +1904,64 @@
             }
         }
     }
+
+    @Override
+    public List<SysLaboratory> getLabAndContainerByUserId(Long userId) throws ApiException {
+        SysUser user=sysUserDao.getSysUser(userId);
+        if(user==null){
+            throw new ApiException(ApiStatus.SYS_ERR,"用户不存在");
+        }
+        Long projectId=user.getProjectId();
+        if(projectId==null){
+            throw new ApiException(ApiStatus.SYS_ERR,"用户未选择课题组");
+        }
+        List<SysLaboratory> sysLaboratoryList=this.sysLaboratoryDao.getLaboratoryByProjectId(projectId);
+        return sysLaboratoryList;
+    }
+
+    @Override
+    public List<OpeUseFlow> getReagentUseFlowList(String reagentCode) throws ApiException {
+        return this.opeUseFlowDao.getOpeUseFlowByCode2(reagentCode);
+    }
+
+    @Override
+    public List<SysLaboratory> getLaboratoryByUserId(Long userId) throws ApiException {
+        SysUser user=sysUserDao.getSysUser(userId);
+        if(user==null){
+            throw new ApiException(ApiStatus.SYS_ERR,"用户不存在");
+        }
+        Long projectId=user.getProjectId();
+        if(projectId==null){
+            throw new ApiException(ApiStatus.SYS_ERR,"用户未选择课题组");
+        }
+        return this.opeReagentStatusDao.getLabNoContainerByProjectId(projectId);
+    }
+
+    @Override
+    public Map<String,Object> getOpeUseFlowByUserId(Integer pageNum,Integer pageSize,Long userId,Integer operatestate,String startDate,String endDate) throws ApiException, ParseException {
+        Map<String,Object> params=new HashMap();
+        params.put("userId",userId);
+        params.put("first", (pageNum-1)*pageSize);
+        params.put("pageSize", pageSize);
+        if(operatestate!=null){
+            params.put("operatestate",operatestate);
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if(startDate!=null){
+            params.put("startDate", sdf.format(sdf.parse(startDate)));
+        }
+        if(endDate!=null){
+            params.put("endDate", sdf.format(sdf.parse(endDate)));
+        }
+        Long totalCunt=opeUseFlowDao.getOpeUseFlowSimpleInfoCount(params);
+        List<OpeUseFlow> opeUseFlowList= opeUseFlowDao.getOpeUseFlowSimpleInfoList(params);
+        Map<String,Object> resMap=new HashMap<>();
+        resMap.put("totalCount",totalCunt);
+        resMap.put("pageNum",pageNum);
+        resMap.put("pageSize",pageSize);
+        resMap.put("list",opeUseFlowList);
+        return resMap;
+    }
+
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyOrderService.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyOrderService.java
index 3516575..520580d 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyOrderService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyOrderService.java
@@ -9,7 +9,9 @@
  */
 public interface OpeApplyOrderService {
 
-    public List<OpeApplyOrder> getOpeApplyOrderList(String opeOrderId, String opeApplyId);
-    public int getOpeApplyOrderTotalCount(String opeOrderId, String opeApplyId);
+    public List<OpeApplyOrder> getOpeApplyOrderList(Long opeOrderId, Long opeApplyId);
+    public int getOpeApplyOrderTotalCount(Long opeOrderId, Long opeApplyId);
     public OpeApplyOrder insertOpeApplyOrder(OpeApplyOrder opeApplyOrder);
+
+    public int batchInsertOpeApplyOrder(List<OpeApplyOrder> opeApplyOrderList);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyOrderServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyOrderServiceImpl.java
index ff91904..9934a38 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyOrderServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyOrderServiceImpl.java
@@ -33,7 +33,7 @@
     OpeApplyOrderDao opeApplyOrderDao;
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<OpeApplyOrder> getOpeApplyOrderList(String opeOrderId, String opeApplyId) {
+    public List<OpeApplyOrder> getOpeApplyOrderList(Long opeOrderId, Long opeApplyId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("opeOrderId", opeOrderId);
@@ -46,7 +46,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public int getOpeApplyOrderTotalCount(String opeOrderId, String opeApplyId) {
+    public int getOpeApplyOrderTotalCount(Long opeOrderId, Long opeApplyId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("opeOrderId", opeOrderId);
@@ -61,7 +61,6 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public OpeApplyOrder insertOpeApplyOrder(OpeApplyOrder opeApplyOrder) {
         try {
-            opeApplyOrder.setId(IDUtils.uuid());
             this.opeApplyOrderDao.insertOpeApplyOrder(opeApplyOrder);
             return opeApplyOrder;
         } catch (DuplicateKeyException ex) {
@@ -75,4 +74,21 @@
             throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
         }
     }
+
+
+
+    public int batchInsertOpeApplyOrder(List<OpeApplyOrder> opeApplyOrderList) {
+        try {
+            return this.opeApplyOrderDao.batchInsertOpeApplyOrder(opeApplyOrderList);
+        } catch (DuplicateKeyException ex) {
+            logger.warn(ex.getMessage(), ex);
+            throw new AlarmException(AlarmCode.DATA_DUPLICATE, MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
+        } catch (DataIntegrityViolationException ex) {
+            logger.warn(ex.getMessage(), ex);
+            throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
+        } catch (DataAccessException ex) {
+            logger.error(ex.getMessage(), ex);
+            throw new BusinessException(ExceptionEnumCode.DB_ERR, MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
+        }
+    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
index 08ab215..8a53d5d 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
@@ -17,32 +17,32 @@
 public interface OpeApplyService {
 
     public List<OpeApply> getOpeApplyList(String reagentName, Timestamp startDeadline,String controlProduct, Timestamp endDeadline, Integer status,
-                                          String applyUserId, String approveUserId, String queryCas,
+                                          Long applyUserId, Long approveUserId, String queryCas,
                                           Integer first, Integer pageSize,String applyCode,String applyUserName,Byte isShow);
     public List<OpeApply> getOpeApplyListForApproval(String applyUserName,String approvaUserName,String reagentName, Timestamp startDeadline, Timestamp endDeadline, Integer status,
-                                          String applyUserId, String approveUserId, String queryCas,
+                                                     Long applyUserId, Long approveUserId, String queryCas,
                                           Integer first, Integer pageSize,String applyCode,String searchApproval);
     public int getOpeApplyTotalCount(String reagentName, Timestamp startDeadline,String controlProduct, Timestamp endDeadline, Integer status,
-                                     String applyUserId, String approveUserId, String queryCas,String applyCode,String applyUserName,Byte isShow);
+                                     Long applyUserId, Long approveUserId, String queryCas,String applyCode,String applyUserName,Byte isShow);
     public int getOpeApplyTotalCountForApproval(String applyUserName,String approvaUserName,String reagentName, Timestamp startDeadline, Timestamp endDeadline, Integer status,
-                                     String applyUserId, String approveUserId, String queryCas,String applyCode,String searchApproval);
-    public OpeApply getOpeApply(String id);
+                                                Long applyUserId, Long approveUserId, String queryCas,String applyCode,String searchApproval);
+    public OpeApply getOpeApply(Long id);
     public OpeApply insertOpeApply(OpeApply opeApply);
     public List<OpeApply> insertOpeApplyList(List<OpeApply> opeApplyList);
     public boolean updateOpeApply(OpeApply opeApply);
 
-    public boolean updateFirst(String id);
-    public boolean updateFirst2(String id);
+    public boolean updateFirst(Long id);
+    public boolean updateFirst2(Long id);
     public boolean updateOpeApplyProject(String newObjective,String oldObjective);
 
-    public boolean updateSelectedOpeApplyStatus(String memo, List<String> applyIds,
-                                                String adminUserId, List<String> adminApplyIds,List<String> firstUserIds);
+    public boolean updateSelectedOpeApplyStatus(String memo, List<Long> applyIds,
+                                                Long adminUserId, List<Long> adminApplyIds,List<Long> firstUserIds);
 
-    public boolean updateOpeApplyStatus(ApplyStatus status, String memo, List<String> applyIds);
+    public boolean updateOpeApplyStatus(ApplyStatus status, String memo, List<Long> applyIds);
 
-    public boolean updateOpeApplyAdminStatus(String memo, List<String> applyIds, String adminUserId,List<String> firstUserIds);
+    public boolean updateOpeApplyAdminStatus(String memo, List<Long> applyIds, Long adminUserId,List<Long> firstUserIds);
 
-    public boolean updateOpeApplyAdminStatus2(String memo, List<String> applyIds, String adminUserId,List<String> firstUserIds);
+    public boolean updateOpeApplyAdminStatus2(String memo, List<Long> applyIds, Long adminUserId,List<Long> firstUserIds);
 
     public boolean deleteOpeApply(List<OpeApply> opeApplyList);
 
@@ -50,35 +50,79 @@
     public boolean isApplyApproved(OpeApply opeApply);
     public boolean isAllowApplyCancel(OpeApply opeApply);
 
-    OpeApply selectOpeApplyByPrimaryKey(String id);
+    OpeApply selectOpeApplyByPrimaryKey(Long id);
 
-	int getOpeApplyReserveTotalCountByName(String id,String reagentName, String personName);
-	List<OpeApplyReserve> getOpeApplyReserveListByName(String id,String reagentName, String personName, Integer first,
+	int getOpeApplyReserveTotalCountByName(Long id,String reagentName, String personName);
+	List<OpeApplyReserve> getOpeApplyReserveListByName(Long id,String reagentName, String personName, Integer first,
 			Integer pageSize);
-    int getOpeApplyReserveTotalCountByNameFor(String id,String reagentName, String personName,String productSn,String applyCode,Integer status,Integer isAllApply,boolean isExpired);
-    List<OpeApplyReserve> getOpeApplyReserveListByNameFor(String id,String reagentName, String personName, Integer first,
+    int getOpeApplyReserveTotalCountByNameFor(Long userId,String reagentName, String personName,String productSn,String applyCode,Integer status,Integer isAllApply,boolean isExpired);
+    List<OpeApplyReserve> getOpeApplyReserveListByNameFor(Long id,String reagentName, String personName, Integer first,
                                                        Integer pageSize,String productSn,String applyCode,Integer status,Integer isAllApply,boolean isExpired);
-	public boolean updaetOpeApplyPrice(BigDecimal applyPrice,String id);
-	public boolean updaetOpeApplyStockFlag(int stockFlag,String id);
-	public boolean cancelApply(ApplyStatus status,String id);
+	public boolean updaetOpeApplyPrice(BigDecimal applyPrice,Long id);
+	public boolean updaetOpeApplyStockFlag(int stockFlag,Long id);
+	public boolean cancelApply(ApplyStatus status,Long id);
 
-	public List<OpeApply> selectByReId(String id);
-	public void updateByReId(String newReId,String oldReId);
+	public List<OpeApply> selectByReId(Long id);
+	public void updateByReId(Long newReId,Long oldReId);
 
-    OpeApplyReserve getOpeApplyDetail(String applyCode);
+    OpeApplyReserve getOpeApplyDetail(Long applyCode);
 
 
-    void updateOpeApplyInfo(ApplyStatus storage, String consigneeId, Timestamp arrivalTime, String applyId);
+    void updateOpeApplyInfo(ApplyStatus storage, Long consigneeId, Timestamp arrivalTime, Long applyId,Integer arrivalNum);
 
-    void orderInputWarehouse(List<OpeApplyReserve> opeApplyList,String consigneeId,Timestamp arrivalTime) throws BusinessException,Exception;
+    void orderInputWarehouse(List<OpeApplyReserve> opeApplyList,Long consigneeId,Timestamp arrivalTime) throws BusinessException,Exception;
 
     void btUpdateApplyAndOrder(List<OpeApply> opeList);
 
     void importApply(FileUploadEvent event, SysUser user) throws IOException;
 
-    OpeApplyReserve getOpeApplyReserveListByNameForRowData(String rowKey);
+    OpeApplyReserve getOpeApplyReserveListByNameForRowData(Long rowKey);
 
     int getOpeApplySupplerRequireMngTotalCount(SysUser user,String reagentName, Timestamp startDeadline, Timestamp endDeadline, int key, byte b);
 
     List<OpeApply> getOpeApplySupplerRequireMngList(SysUser user,String reagentName, Timestamp startDeadline, Timestamp endDeadline, int key, int first, int pageSize, byte b);
+
+    /**
+     * 根据id更新申请订单状态
+     * @param status
+     * @param applyId
+     * @return
+     */
+    int updateOpeApplyStatusById(Integer status,  Long applyId);
+
+    /**
+     * 获取订单下面的申请列表
+     * @param orderId
+     * @return
+     */
+    List<OpeApply> getOpeApplyByOrderId(Long orderId);
+
+
+    /**
+     * 根据申请id获取试剂信息
+     * @param applyId
+     * @return
+     */
+    SysReagent getReagentByApplyId(Long applyId);
+
+    /**
+     * 获取数量,关联订单
+     * @param applyCode
+     * @param orderCode
+     * @param orderName
+     * @return
+     */
+    int getOpeApplyCountWithOrder(String applyCode,String orderCode,String orderName);
+
+    /**
+     * 获取列表  关联订单
+     * @param applyCode
+     * @param orderCode
+     * @param orderName
+     * @param first
+     * @param pageSize
+     * @return
+     */
+    List<OpeApply> getOpeApplyListWithOrder(String applyCode,String orderCode,String orderName,int first, int pageSize);
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
index cd38618..ded8ae7 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
@@ -1,7 +1,6 @@
 package com.nanometer.smartlab.service;
 
-import com.nanometer.smartlab.dao.OpeApplyDao;
-import com.nanometer.smartlab.dao.SysReagentDao;
+import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.entity.enumtype.SeeFlag;
@@ -22,6 +21,8 @@
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.primefaces.event.FileUploadEvent;
 import org.primefaces.model.UploadedFile;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.dao.DataAccessException;
@@ -52,6 +53,10 @@
 
     @Resource(name = "opeApplyDao")
     OpeApplyDao opeApplyDao;
+
+    @Autowired
+    SysProjectDao projectDao;
+
     @Lazy
     @Resource
     OpeOrderService opeOrderService;
@@ -70,13 +75,17 @@
 	private SysUserService sysUserService;
     @Resource
     private BaseMetaService baseMetaService;
+    @Resource
+    private OpeOrderDao opeOrderDao;
+    @Resource
+    private OpeReagentCodeDao opeReagentCodeDao;
 
     @Value("${activeEnv}")
     private String activeEnv;
 
     @Transactional(propagation = Propagation.REQUIRED)
     public List<OpeApply> getOpeApplyList(String reagentName, Timestamp startDeadline, String controlProduct,Timestamp endDeadline, Integer status,
-                                          String applyUserId, String approveUserId, String queryCas,
+                                          Long applyUserId, Long approveUserId, String queryCas,
                                           Integer first, Integer pageSize,String applyCode,String applyUserName,Byte isShow) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
@@ -89,7 +98,7 @@
             params.put("isShow", isShow);
             params.put("controlProduct", controlProduct);
 
-            if (StringUtils.isNotBlank(applyUserId)) {
+            if (applyUserId!=null) {
     			SysUser sysUser = sysUserService.getSysUser(applyUserId);
     			// 不是管理员时,加入applyUserId
     			if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
@@ -119,7 +128,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED)
     public List<OpeApply> getOpeApplyListForApproval(String applyUserName,String approvaUserName,String reagentName, Timestamp startDeadline, Timestamp endDeadline, Integer status,
-                                          String applyUserId, String approveUserId, String queryCas,
+                                          Long applyUserId, Long approveUserId, String queryCas,
                                           Integer first, Integer pageSize,String applyCode,String searchApproval) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
@@ -131,7 +140,7 @@
             params.put("status", status);
             params.put("searchApproval",searchApproval);
 
-            if (StringUtils.isNotBlank(approveUserId)) {
+            if (approveUserId!=null) {
                 SysUser sysUser = sysUserService.getSysUser(approveUserId);
                 // 不是管理员时,加入applyUserId
                 if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
@@ -161,7 +170,7 @@
     }
     @Transactional(propagation = Propagation.REQUIRED)
     public int getOpeApplyTotalCountForApproval(String applyUserName,String approvaUserName,String reagentName, Timestamp startDeadline, Timestamp endDeadline, Integer status,
-                                     String applyUserId, String approveUserId, String queryCas,String applyCode,String searchApproval) {
+                                                Long applyUserId, Long approveUserId, String queryCas,String applyCode,String searchApproval) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             if (StringUtils.isNotBlank(reagentName)) {
@@ -171,7 +180,7 @@
             params.put("endDeadline", endDeadline);
             params.put("status", status);
             params.put("searchApproval",searchApproval);
-            if (StringUtils.isNotBlank(approveUserId)) {
+            if (approveUserId!=null) {
                 SysUser sysUser = sysUserService.getSysUser(approveUserId);
                 // 不是管理员时,加入applyUserId
                 if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
@@ -200,7 +209,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED)
     public int getOpeApplyTotalCount(String reagentName, Timestamp startDeadline,String controlProduct, Timestamp endDeadline, Integer status,
-                                     String applyUserId, String approveUserId, String queryCas,String applyCode,String applyUserName,Byte isShow) {
+                                     Long applyUserId, Long approveUserId, String queryCas,String applyCode,String applyUserName,Byte isShow) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             if (StringUtils.isNotBlank(reagentName)) {
@@ -212,7 +221,7 @@
             params.put("isShow", isShow);
             params.put("controlProduct", controlProduct);
 
-    		if (StringUtils.isNotBlank(applyUserId)) {
+    		if (applyUserId!=null) {
     			SysUser sysUser = sysUserService.getSysUser(applyUserId);
     			// 不是管理员时,加入applyUserId
     			if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
@@ -239,7 +248,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public OpeApply getOpeApply(String id) {
+    public OpeApply getOpeApply(Long id) {
         try {
             return this.opeApplyDao.getOpeApply(id);
         } catch (DataAccessException e) {
@@ -251,7 +260,7 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public OpeApply insertOpeApply(OpeApply opeApply) {
         try {
-            opeApply.setId(IDUtils.uuid());
+           // opeApply.setId(IDUtils.uuid());
             this.opeApplyDao.insertOpeApply(opeApply);
             return opeApply;
         } catch (DuplicateKeyException ex) {
@@ -283,7 +292,7 @@
         }
     }
 
-    @Transactional(propagation = Propagation.REQUIRED)
+
     public boolean updateOpeApply(OpeApply opeApply) {
         try {
             int row = this.opeApplyDao.updateOpeApply(opeApply);
@@ -306,7 +315,7 @@
 
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean updateFirst(String id) {
+    public boolean updateFirst(Long id) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("id",id);
@@ -329,7 +338,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean updateFirst2(String id) {
+    public boolean updateFirst2(Long id) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("id",id);
@@ -373,14 +382,10 @@
     }
 
     @Override
-    public boolean updateSelectedOpeApplyStatus(String memo, List<String> applyIds, String adminUserId, List<String> adminApplyIds,List<String> firstUserIds) {
+    public boolean updateSelectedOpeApplyStatus(String memo, List<Long> applyIds, Long adminUserId, List<Long> adminApplyIds,List<Long> firstUserIds) {
         boolean apply = false, adminApply = false;
         if (!CollectionUtils.isEmpty(applyIds)) {
-            if("gslab".equalsIgnoreCase(activeEnv)){
-                apply = this.updateOpeApplyStatus(ApplyStatus.Price_CONFIRM, memo, applyIds);
-            }else{
-                apply = this.updateOpeApplyStatus(ApplyStatus.APPROVED, memo, applyIds);
-            }
+            apply = this.updateOpeApplyStatus(ApplyStatus.APPROVED, memo, applyIds);
         }
         if (!CollectionUtils.isEmpty(adminApplyIds)) {
             adminApply = this.updateOpeApplyAdminStatus2(memo, adminApplyIds, adminUserId,firstUserIds);
@@ -388,8 +393,7 @@
         return apply || adminApply;
     }
 
-    @Transactional(propagation = Propagation.REQUIRED)
-    public boolean updateOpeApplyStatus(ApplyStatus status, String memo, List<String> applyIds) {
+    public boolean updateOpeApplyStatus(ApplyStatus status, String memo, List<Long> applyIds) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("status", status.getKey());
@@ -417,7 +421,7 @@
 
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean updateOpeApplyAdminStatus2(String memo, List<String> applyIds, String adminUserId,List<String> firstUserIds) {
+    public boolean updateOpeApplyAdminStatus2(String memo, List<Long> applyIds, Long adminUserId,List<Long> firstUserIds) {
         try {
             for(int i=0;i<applyIds.size();i++){
                 Map<String, Object> params = new HashMap<String, Object>();
@@ -446,7 +450,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean updateOpeApplyAdminStatus(String memo, List<String> applyIds, String adminUserId,List<String> firstUserIds) {
+    public boolean updateOpeApplyAdminStatus(String memo, List<Long> applyIds, Long adminUserId,List<Long> firstUserIds) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("userId", adminUserId);
@@ -479,7 +483,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (OpeApply opeApply : opeApplyList) {
                 ids.add(opeApply.getId());
             }
@@ -529,7 +533,7 @@
     }
 
     @Override
-    public OpeApply selectOpeApplyByPrimaryKey(String id) {
+    public OpeApply selectOpeApplyByPrimaryKey(Long id) {
         try {
             OpeApply info = this.opeApplyDao.selectOpeApplyByPrimaryKey(id);
             return info;
@@ -546,7 +550,7 @@
     }
 
 	@Override
-	public int getOpeApplyReserveTotalCountByName(String id,String reagentName, String personName) {
+	public int getOpeApplyReserveTotalCountByName(Long id,String reagentName, String personName) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentName", reagentName);
@@ -561,12 +565,12 @@
 	}
 
     @Override
-    public int getOpeApplyReserveTotalCountByNameFor(String id,String reagentName, String personName,String productSn,String applyCode,Integer status,Integer isAllApply,boolean isExpired) {
+    public int getOpeApplyReserveTotalCountByNameFor(Long userId,String reagentName, String personName,String productSn,String applyCode,Integer status,Integer isAllApply,boolean isExpired) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("reagentName", reagentName);
             params.put("personName", personName);
-            params.put("userId",id);
+            params.put("userId",userId);
             params.put("productSn",productSn);
             params.put("applyCode",applyCode);
             if (isExpired) {
@@ -583,7 +587,7 @@
         }
     }
     @Override
-    public List<OpeApplyReserve> getOpeApplyReserveListByNameFor(String id,String reagentName, String personName, Integer first,
+    public List<OpeApplyReserve> getOpeApplyReserveListByNameFor(Long id,String reagentName, String personName, Integer first,
                                                               Integer pageSize,String productSn,String applyCode,Integer status,Integer isAllApply,boolean isExpired) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
@@ -608,7 +612,7 @@
         }
     }
 	@Override
-	public List<OpeApplyReserve> getOpeApplyReserveListByName(String id,String reagentName, String personName, Integer first,
+	public List<OpeApplyReserve> getOpeApplyReserveListByName(Long id,String reagentName, String personName, Integer first,
 			Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
@@ -626,7 +630,7 @@
 	}
 
     @Transactional(propagation = Propagation.REQUIRED)
-	public boolean updaetOpeApplyPrice(BigDecimal applyPrice, String id){
+	public boolean updaetOpeApplyPrice(BigDecimal applyPrice, Long id){
         try{
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("applyPrice", applyPrice);
@@ -644,7 +648,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean updaetOpeApplyStockFlag(int stockFlag, String id){
+    public boolean updaetOpeApplyStockFlag(int stockFlag, Long id){
         try{
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("stockFlag", stockFlag);
@@ -662,7 +666,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean cancelApply(ApplyStatus status,String id){
+    public boolean cancelApply(ApplyStatus status,Long id){
         try{
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("status", status.getKey());
@@ -680,12 +684,12 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<OpeApply>selectByReId(String id){
+    public List<OpeApply>selectByReId(Long id){
         return this.opeApplyDao.selectByReId(id);
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public void updateByReId(String newReId,String oldReId){
+    public void updateByReId(Long newReId,Long oldReId){
         Map<String, Object> params=new HashMap();
         params.put("newReId",newReId);
         params.put("oldReId",oldReId);
@@ -693,63 +697,75 @@
     }
 
     @Override
-    public OpeApplyReserve getOpeApplyDetail(String id) {
+    public OpeApplyReserve getOpeApplyDetail(Long id) {
         return opeApplyDao.getOpeApplyDetail(id);
     }
 
     @Override
-    public void updateOpeApplyInfo(ApplyStatus storage, String consigneeId, Timestamp arrivalTime, String applyId) {
+    public void updateOpeApplyInfo(ApplyStatus storage, Long consigneeId, Timestamp arrivalTime, Long applyId,Integer arrivalNum) {
         Map<String,Object> params = new HashMap();
         params.put("status", storage);
         params.put("consigneeId", consigneeId);
         params.put("arrivalTime", arrivalTime);
         params.put("applyId", applyId);
+        if(arrivalNum!=null){
+            params.put("arrivalNum",arrivalNum);
+        }
         opeApplyDao.updateOpeApplyInfo(params);
     }
 
     @Override
     @Transactional
-    public void orderInputWarehouse(List<OpeApplyReserve> opeApplyList,String consigneeId,Timestamp arrivalTime) {
+    public void orderInputWarehouse(List<OpeApplyReserve> opeApplyList,Long consigneeId,Timestamp arrivalTime) {
         for (OpeApplyReserve opeApplyReserve:opeApplyList) {
-            //0.1获取该申购单的订单
-            OpeOrder oo = opeOrderService.getOrder(opeApplyReserve.getId());
-            if (oo == null) {
-                throw new BusinessException(ExceptionEnumCode.ORDER_ERROR,"订单不存在");
-            }
-            //0.2检查条码->得到试剂条码列表
-            List<String> codeList = opeReagentStatusService
-                    .checkReagentCode(opeApplyReserve.getStartReagentCode2(), opeApplyReserve.getEndReagentCode2(), opeApplyReserve.getArrivalNum());
-            //1.入库
-            if (codeList == null){
-                //无条码入库 不需要增加状态和流向
-                //1.1库存表增加
-                opeWarehouseReserveService.insertOpeWarehouseReserve2(opeApplyReserve, oo,consigneeId);
-            }else{
-                //条码入库
-                assert codeList.size() > 0;
-                //1.1入库(库存表增加)
-                opeWarehouseReserveService.insertOpeWarehouseReserve2(opeApplyReserve, oo,consigneeId);
-                //1.2试剂状态表增加,流向增加
-                opeReagentStatusService.orderInputWarehouseReagentStatusAndUseFlow(opeApplyReserve,consigneeId,codeList,oo);
-            }
-            //2.更改申购单所属订单状态(判断子订单是否全部完成)
-            //2.1更改该申购单的状态,收货人和到货时间
-            this.updateOpeApplyInfo(ApplyStatus.STORAGE,consigneeId,arrivalTime, opeApplyReserve.getId());
-            //2.2更改订单状态
-            List<OpeApply> oas = opeOrderService.getOpeApplyListByOrder(oo.getId());
-            assert oas.size() > 0;
-            //子订单是否全部入库,是则父单为已入库,否则未完成
-            boolean flag = oas.stream().allMatch(oa -> oa.getStatus() == ApplyStatus.STORAGE);
-            oo.setConsigneeUserId(consigneeId);
-            oo.setArrivalTime(arrivalTime);
-            if (flag){
-                oo.setStatus(ApplyStatus.STORAGE);
-                opeOrderService.updateOpeOrderStatus(oo);
-            }else{
-                oo.setStatus(ApplyStatus.UNCOMPLETED);
-                opeOrderService.updateOpeOrder(oo);
+            int existArrivalNum=this.opeApplyDao.getArrivalNumById(opeApplyReserve.getId());
+            Integer applyNum = opeApplyReserve.getNum();
+            Integer arrivalNum = opeApplyReserve.getArrivalNum();
+
+            if(arrivalNum<=existArrivalNum||arrivalNum>applyNum){
+                throw new BusinessException(ExceptionEnumCode.ORDER_ERROR,"到货数量不正确");
             }
 
+            ApplyStatus flag = ApplyStatus.STORAGE;
+            if(applyNum > arrivalNum)
+            {
+                flag = ApplyStatus.UNCOMPLETED;
+            }
+            //0.1获取该申购单的订单
+            OpeOrder opeOrder = opeOrderService.getOrder(opeApplyReserve.getId());
+            if (opeOrder == null) {
+                throw new BusinessException(ExceptionEnumCode.ORDER_ERROR,"订单不存在");
+            }
+
+            this.updateOpeApplyInfo(flag,consigneeId,arrivalTime, opeApplyReserve.getId(),arrivalNum);
+
+
+            OpeApply opeApply=new OpeApply();
+            BeanUtils.copyProperties(opeApplyReserve,opeApply);
+            OpeReagentCode opeReagentCode=this.opeReagentCodeDao.getReagentCode(opeOrder.getId(),opeApply.getId());
+            if(opeReagentCode==null){
+                throw new BusinessException(ExceptionEnumCode.SYS_ERR, "申购编号:" + opeApply.getApplyCode() + "的试剂条形码未自动生成");
+            }
+
+            List<OpeReagentStatus> opeReagentStatusList=opeOrderService.generateReagentStatus(opeApply,opeReagentCode,opeOrder.getConsigneeUserId(),arrivalNum);
+            opeOrderService.generateOpeUseFlow(opeReagentStatusList);
+            opeOrderService.updateWareHouse(opeApply,arrivalNum-existArrivalNum);
+            this.opeReagentCodeDao.updateStatus(opeOrder.getId(),opeApply.getId(),1);
+
+
+            List<OpeApply> oas = opeOrderService.getOpeApplyListByOrder(opeOrder.getId());
+            assert oas.size() > 0;
+            //子订单是否全部入库,是则父单为已入库,否则未完成
+            boolean orderflag = oas.stream().allMatch(oa -> oa.getStatus() == ApplyStatus.STORAGE);
+            opeOrder.setConsigneeUserId(consigneeId);
+            opeOrder.setArrivalTime(arrivalTime);
+            if (orderflag){
+                opeOrder.setStatus(ApplyStatus.STORAGE);
+                opeOrderService.updateOpeOrderStatus(opeOrder);
+            }else{
+                opeOrder.setStatus(ApplyStatus.UNCOMPLETED);
+                opeOrderService.updateOpeOrder(opeOrder);
+            }
         }
     }
     /**
@@ -862,7 +878,7 @@
                 if (approveUser == null)  throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, i+"行:审批人不存在或者审批人姓名存在重复,导入失败");
 
                 OpeApply opeApply = new OpeApply();
-                opeApply.setId(IDUtils.uuid());
+             //   opeApply.setId(IDUtils.uuid());
                 opeApply.setValidFlag(ValidFlag.VALID);
                 opeApply.setStatus(ApplyStatus.PENDING_APPROVAL);
                 opeApply.setApplyCode(sysSequenceService.getApplyCode());
@@ -880,8 +896,9 @@
                 opeApply.setApplyUserId(applyUser.getId());
                 //选择的审批人
                 opeApply.setApproveUserId(approveUser.getId());
+                SysProject project=projectDao.getSysProjectByName(objective);
                 //选择的课题组信息
-                opeApply.setObjective(objective);
+                opeApply.setProjectId(project!=null?project.getId():null);
 
                 adds.add(opeApply);
 
@@ -894,7 +911,7 @@
     }
 
     @Override
-    public OpeApplyReserve getOpeApplyReserveListByNameForRowData(String rowKey) {
+    public OpeApplyReserve getOpeApplyReserveListByNameForRowData(Long rowKey) {
         return opeApplyDao.getOpeApplyReserveListByNameForRowData(rowKey);
     }
 
@@ -933,4 +950,39 @@
         return this.opeApplyDao.getOpeApplySupplerRequireMngList(params);
     }
 
+    @Override
+    public int updateOpeApplyStatusById(Integer status, Long applyId) {
+        return this.opeApplyDao.updateOpeApplyStatusById(applyId,status);
+    }
+
+    @Override
+    public List<OpeApply> getOpeApplyByOrderId(Long orderId) {
+        return this.opeApplyDao.getOpeApplyByOrderId(orderId);
+    }
+
+    @Override
+    public SysReagent getReagentByApplyId(Long applyId) {
+        return this.opeApplyDao.getReagentByApplyId(applyId);
+    }
+
+    @Override
+    public int getOpeApplyCountWithOrder(String applyCode, String orderCode, String orderName) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("applyCode", applyCode);
+        params.put("orderCode", orderCode);
+        params.put("orderName", orderName);
+        return this.opeApplyDao.getOpeApplyCountWithOrder(params);
+    }
+
+    @Override
+    public List<OpeApply> getOpeApplyListWithOrder(String applyCode, String orderCode, String orderName, int first, int pageSize) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("applyCode", applyCode);
+        params.put("orderCode", orderCode);
+        params.put("orderName", orderName);
+        params.put("first", first);
+        params.put("pageSize", pageSize);
+        return this.opeApplyDao.getOpeApplyListWithOrder(params);
+    }
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveService.java b/src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveService.java
index 571188d..712e4fa 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveService.java
@@ -9,9 +9,10 @@
 
     void insert(OpeLaboratoryReserve opeLaboratoryReserve);
 
-    public List<OpeLaboratoryReserve> selectByReId(String id);
 
-    public void updateByReId(String newReId,String oldReId);
+    public List<OpeLaboratoryReserve> selectByReId(Long id);
 
-    void updateByReagent(String reagentId, String houseId, String containerId, String userId);
+    public void updateByReId(Long newReId,Long oldReId);
+
+    void updateByReagent(Long reagentId, Long houseId, Long containerId, Long userId);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveServiceImpl.java
index 11d0268..58a4999 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeLaboratoryReserveServiceImpl.java
@@ -38,7 +38,7 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public void insert(OpeLaboratoryReserve opeLaboratoryReserve) {
         try {
-            opeLaboratoryReserve.setId(IDUtils.uuid());
+          //  opeLaboratoryReserve.setId(IDUtils.uuid());
             this.opeLaboratoryReserveDao.insertOpeLaboratoryReserve(opeLaboratoryReserve);
         } catch (DuplicateKeyException ex) {
             logger.warn(ex.getMessage(), ex);
@@ -53,12 +53,12 @@
     }
 
     @Override
-    public List<OpeLaboratoryReserve> selectByReId(String id) {
+    public List<OpeLaboratoryReserve> selectByReId(Long id) {
         return this.opeLaboratoryReserveDao.selectByReId(id);
     }
 
     @Override
-    public void updateByReId(String newReId, String oldReId) {
+    public void updateByReId(Long newReId, Long oldReId) {
         Map<String, Object> params=new HashMap();
         params.put("newReId",newReId);
         params.put("oldReId",oldReId);
@@ -66,7 +66,7 @@
     }
 
     @Override
-    public void updateByReagent(String reagentId, String houseId, String containerId, String userId) {
+    public void updateByReagent(Long reagentId, Long houseId, Long containerId, Long userId) {
         Map<String, Object> params=new HashMap();
         params.put("reagentId",reagentId);
         params.put("houseId",houseId);
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeOrderService.java b/src/main/java/com/nanometer/smartlab/service/OpeOrderService.java
index 533afdb..0d34975 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeOrderService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeOrderService.java
@@ -1,9 +1,6 @@
 package com.nanometer.smartlab.service;
 
-import com.nanometer.smartlab.entity.EmailStatus;
-import com.nanometer.smartlab.entity.OpeApply;
-import com.nanometer.smartlab.entity.OpeOrder;
-import com.nanometer.smartlab.entity.SysUser;
+import com.nanometer.smartlab.entity.*;
 
 import java.sql.Timestamp;
 import java.util.List;
@@ -15,14 +12,14 @@
 
     List<OpeOrder> getOpeOrderList(String orderCode, String orderName, Timestamp startTime, Timestamp endTime, Integer status, String orderUserName, Integer first, Integer pageSize);
     int getOpeOrderTotalCount(String orderCode, String orderName, Timestamp startTime, Timestamp endTime, Integer status, String orderUserName);
-    OpeOrder getOpeOrder(String id);
+    OpeOrder getOpeOrder(Long id);
     OpeOrder insertOpeOrder(OpeOrder opeOrder);
     boolean updateOpeOrder(OpeOrder opeOrder);
     boolean deleteOpeOrder(List<OpeOrder> opeOrderList);
 
     void createOpeOrder(OpeOrder opeOrder, List<OpeApply> opeApplyList, SysUser orderUser);
     void rukuOpeOrder(OpeOrder opeOrder, List<OpeApply> opeApplyList);
-    List<OpeApply> getOpeApplyListByOrder(String orderId);
+    List<OpeApply> getOpeApplyListByOrder(Long orderId);
     boolean isOrderPendingPurchase(OpeOrder opeOrder);
     void emailStatusSave (OpeOrder opeOrder, List<OpeApply> opeApplyList);
     List<EmailStatus> getUnsendEmailList();
@@ -31,10 +28,18 @@
 
     void reRukuInfo(OpeOrder opeOrder, List<OpeApply> opeOrderApplyList);
 
-    public List<EmailStatus> selectByReId(String id);
-    public void updateByReId(String newReId,String oldReId);
+    public List<EmailStatus> selectByReId(Long id);
+    public void updateByReId(Long newReId,Long oldReId);
 
-    OpeOrder getOrder(String id);
+    OpeOrder getOrder(Long id);
 
     void updateOpeOrderStatus(OpeOrder oo);
+
+
+    public List<OpeReagentStatus> generateReagentStatus(OpeApply opeApply, OpeReagentCode opeReagentCode, Long consigneeUserId,Integer num);
+
+    public void generateOpeUseFlow(List<OpeReagentStatus>  opeReagentStatusList);
+
+    public void updateWareHouse(OpeApply opeApply,Integer num);
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java
index 9f6172b..f39cf6e 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java
@@ -1,8 +1,6 @@
 package com.nanometer.smartlab.service;
 
-import com.nanometer.smartlab.dao.BaseMetaDao;
-import com.nanometer.smartlab.dao.EmailStatusDao;
-import com.nanometer.smartlab.dao.OpeOrderDao;
+import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
@@ -13,10 +11,11 @@
 import com.nanometer.smartlab.exception.AlarmException;
 import com.nanometer.smartlab.exception.BusinessException;
 import com.nanometer.smartlab.exception.ExceptionEnumCode;
-import com.nanometer.smartlab.util.IDUtils;
 import com.nanometer.smartlab.util.MessageUtil;
+import com.nanometer.smartlab.util.StringToolUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
+import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.DataIntegrityViolationException;
@@ -33,6 +32,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * Created by johnny on 17/12/14.
@@ -64,6 +64,14 @@
 
     @Resource(name="baseMetaDao")
     BaseMetaDao baseMetaDao;
+
+    @Resource
+    DangerousEncodeMapper dangerousEncodeMapper;
+
+    @Resource
+    OpeReagentCodeDao opeReagentCodeDao;
+    @Resource
+    OpeApplyDao opeApplyDao;
 
     @Transactional(propagation = Propagation.REQUIRED)
     public List<OpeOrder> getOpeOrderList(String orderCode, String orderName, Timestamp startTime, Timestamp endTime, Integer status, String orderUserName,
@@ -115,7 +123,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public OpeOrder getOpeOrder(String id) {
+    public OpeOrder getOpeOrder(Long id) {
         try {
             return this.opeOrderDao.getOpeOrder(id);
         } catch (DataAccessException e) {
@@ -127,7 +135,6 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public OpeOrder insertOpeOrder(OpeOrder opeOrder) {
         try {
-            opeOrder.setId(IDUtils.uuid());
             this.opeOrderDao.insertOpeOrder(opeOrder);
             return opeOrder;
         } catch (DuplicateKeyException ex) {
@@ -167,7 +174,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (OpeOrder opeOrder : opeOrderList) {
                 ids.add(opeOrder.getId());
 
@@ -187,31 +194,136 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public void createOpeOrder(OpeOrder opeOrder, List<OpeApply> opeApplyList, SysUser orderUser) {
+    public void  createOpeOrder(OpeOrder opeOrder, List<OpeApply> opeApplyList, SysUser orderUser) {
         if (opeOrder == null
                 || opeApplyList == null
                 || orderUser == null) {
             return;
         }
-
         opeOrder.setOrderCode(this.sysSequenceService.getOrderCode());
         opeOrder.setStatus(ApplyStatus.PENDING_PURCHASE);
         opeOrder.setConsigneeUserId(null);
         opeOrder.setOrderUserId(orderUser.getId());
         opeOrder.setArrivalTime(null);
-        opeOrder.setSupplyId(opeApplyList.get(0).getReagent().getSupplierId());
-        opeOrder.setSupplyName(opeApplyList.get(0).getReagent().getSupplierName());
+        opeOrder.setSupplierId(opeApplyList.get(0).getReagent().getSupplierId());
+        opeOrder.setSupplierName(opeApplyList.get(0).getReagent().getSupplierName());
         this.insertOpeOrder(opeOrder);
-
-        OpeApplyOrder opeApplyOrder = null;
-        for (OpeApply opeApply : opeApplyList) {
-            opeApply.setStatus(ApplyStatus.PENDING_PURCHASE);
-            this.opeApplyService.updateOpeApply(opeApply);
-
-            opeApplyOrder = new OpeApplyOrder();
+        List<OpeApplyOrder> opeApplyOrderList = opeApplyList.stream().map(item -> {
+            OpeApplyOrder opeApplyOrder = new OpeApplyOrder();
             opeApplyOrder.setOpeOrderId(opeOrder.getId());
-            opeApplyOrder.setOpeApplyId(opeApply.getId());
-            this.opeApplyOrderService.insertOpeApplyOrder(opeApplyOrder);
+            opeApplyOrder.setOpeApplyId(item.getId());
+            return opeApplyOrder;
+        }).collect(Collectors.toList());
+        this.opeApplyOrderService.batchInsertOpeApplyOrder(opeApplyOrderList);
+        this.opeApplyService.updateOpeApplyStatus(ApplyStatus.PENDING_PURCHASE,null,opeApplyList.stream().map(OpeApply::getId).collect(Collectors.toList()));
+        synchronized(this) {
+            generateReagentCode(opeOrder.getId(), opeApplyList);
+        }
+    }
+
+//    public void  generateReagentCode(Long orderId,List<OpeApply> opeApplyList){
+//        List<OpeReagentCode> opeReagentCodeList=new ArrayList<>();
+//        for(OpeApply opeApply:opeApplyList) {
+//            String applyCode=opeApply.getApplyCode();
+//            String name = opeApply.getReagent().getName();
+//            if (StringUtils.isBlank(name)) {
+//                throw new BusinessException(ExceptionEnumCode.SYS_ERR, "试剂名称为空");
+//            }
+//            DangerousEncode dangerousEncode = this.dangerousEncodeMapper.selectByName(name);
+//            if (dangerousEncode == null) {
+//                throw new BusinessException(ExceptionEnumCode.SYS_ERR, "未录入危化品编码");
+//            }
+//            String containerNumber = dangerousEncode.getContainerNumber();
+//            if(StringUtils.isBlank(containerNumber)||containerNumber.length()!=2){
+//                throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>柜码不存在或者编码位数不是两位",name));
+//            }
+//            String factoryfactory = "0";
+//            String specifications = "0";
+//            String reagentCode = dangerousEncode.getReagentCode();
+//            if (StringUtils.isBlank(reagentCode)) {
+//                throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>试剂名称码不存在",name));
+//            }
+//            if(reagentCode.length()<4){
+//                reagentCode= StringToolUtils.addZeroForNum(reagentCode,4);
+//            }else{
+//                reagentCode = reagentCode.substring(reagentCode.length() - 4, reagentCode.length());
+//            }
+//            String feature = dangerousEncode.getFeature();
+//            if (StringUtils.isBlank(feature)||feature.length()!=4) {
+//                throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>特性不存在或者编码位数不是四位",name));
+//            }
+//
+//            String avoid = dangerousEncode.getAvoid();
+//            if (StringUtils.isBlank(avoid)||avoid.length()!=2) {
+//                throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>相忌不存在或者编码位数不是两位",name));
+//            }
+//            String status = dangerousEncode.getStatus();
+//            if (StringUtils.isBlank(status)||status.length()!=2) {
+//                throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>状态不存在或者编码位数不是两位",name));
+//            }
+//            String fire = dangerousEncode.getFire();
+//            if (StringUtils.isBlank(fire)||fire.length()!=2) {
+//                throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>灭火器不存在或者编码位数不是两位",name));
+//            }
+//            String packing = "0";
+//            StringBuilder prefixBuilder=new StringBuilder().append(containerNumber)
+//                    .append(factoryfactory)
+//                    .append(specifications)
+//                    .append(reagentCode)
+//                    .append(feature)
+//                    .append(avoid)
+//                    .append(status)
+//                    .append(fire)
+//                    .append(packing);
+//            String codePrex=prefixBuilder.toString();
+//            OpeReagentCode opeReagentCode=this.opeReagentCodeDao.getMaxReagentCode(codePrex);
+//            Integer startCode=0;
+//            Integer endCode=startCode+opeApply.getNum()-1;
+//            if(opeReagentCode!=null){
+//                startCode=opeReagentCode.getEndCode()+1;
+//                endCode=startCode+opeApply.getNum()-1;
+//            }
+//            opeReagentCode=new OpeReagentCode();
+//            opeReagentCode.setOrderId(orderId);
+//            opeReagentCode.setApplyId(opeApply.getId());
+//            opeReagentCode.setStartCode(startCode);
+//            opeReagentCode.setEndCode(endCode);
+//            opeReagentCode.setCodePrex(codePrex);
+//            opeReagentCodeList.add(opeReagentCode);
+//        }
+//        if(opeReagentCodeList.size()>0){
+//            this.opeReagentCodeDao.batchInsertReagentCode(opeReagentCodeList);
+//        }
+//    }
+
+    public void  generateReagentCode(Long orderId,List<OpeApply> opeApplyList){
+        List<OpeReagentCode> opeReagentCodeList=new ArrayList<>();
+        for(OpeApply opeApply:opeApplyList) {
+            String applyCode=opeApply.getApplyCode();
+            applyCode=applyCode.replace("SG","");
+            if (opeApply.getNum()>9999 &opeApply.getNum()<=0) {
+                throw new BusinessException(ExceptionEnumCode.SYS_ERR, "试剂申请数量不能超过9999");
+            }
+            StringBuilder prefixBuilder=new StringBuilder().append("SJ")
+                    .append(applyCode);
+            String codePrex=prefixBuilder.toString();
+            OpeReagentCode opeReagentCode=this.opeReagentCodeDao.getMaxReagentCode(codePrex);
+            Integer startCode=0;
+            Integer endCode=startCode+opeApply.getNum()-1;
+            if(opeReagentCode!=null){
+                startCode=opeReagentCode.getEndCode()+1;
+                endCode=startCode+opeApply.getNum()-1;
+            }
+            opeReagentCode=new OpeReagentCode();
+            opeReagentCode.setOrderId(orderId);
+            opeReagentCode.setApplyId(opeApply.getId());
+            opeReagentCode.setStartCode(startCode);
+            opeReagentCode.setEndCode(endCode);
+            opeReagentCode.setCodePrex(codePrex);
+            opeReagentCodeList.add(opeReagentCode);
+        }
+        if(opeReagentCodeList.size()>0){
+            this.opeReagentCodeDao.batchInsertReagentCode(opeReagentCodeList);
         }
     }
 
@@ -222,107 +334,131 @@
             return;
         }
 
-        Integer applyNum = null;
-        Integer arrivalNum = null;
         ApplyStatus flag = ApplyStatus.STORAGE;
-        // 更新订单所对应的申购状态为已入库
+      //  this.updateOpeOrder(opeOrder);
         for (OpeApply opeApply : opeApplyList) {
-        		applyNum = opeApply.getNum();
-        		arrivalNum = opeApply.getArrivalNum();
-        		if(applyNum > arrivalNum)
-        		{
-        			flag = ApplyStatus.UNCOMPLETED;
-        			opeApply.setStatus(ApplyStatus.UNCOMPLETED);
-        		}else
-        		{
-        			opeApply.setStatus(ApplyStatus.STORAGE);
-        		}
+            int existArrivalNum=this.opeApplyDao.getArrivalNumById(opeApply.getId());
+            Integer applyNum = opeApply.getNum();
+            Integer arrivalNum = opeApply.getArrivalNum();
+            if(arrivalNum<=existArrivalNum||arrivalNum>applyNum){
+                throw new BusinessException(ExceptionEnumCode.ORDER_ERROR,"到货数量不正确");
+            }
+            if(applyNum > arrivalNum)
+            {
+                flag = ApplyStatus.UNCOMPLETED;
+                opeApply.setStatus(ApplyStatus.UNCOMPLETED);
+            }else
+            {
+                opeApply.setStatus(ApplyStatus.STORAGE);
+            }
             this.opeApplyService.updateOpeApply(opeApply);
-        }
 
-     // 更新订单状态为已入库
+            OpeReagentCode opeReagentCode=this.opeReagentCodeDao.getReagentCode(opeOrder.getId(),opeApply.getId());
+            if(opeReagentCode==null){
+                throw new BusinessException(ExceptionEnumCode.SYS_ERR, "申购编号:" + opeApply.getApplyCode() + "的试剂条形码未自动生成");
+            }
+//            if(opeReagentCode.getStatus()==1){
+//                continue;
+//            }
+            List<OpeReagentStatus> opeReagentStatusList=generateReagentStatus(opeApply,opeReagentCode,opeOrder.getConsigneeUserId(),arrivalNum);
+            generateOpeUseFlow(opeReagentStatusList);
+            updateWareHouse(opeApply,arrivalNum-existArrivalNum);
+            this.opeReagentCodeDao.updateStatus(opeOrder.getId(),opeApply.getId(),1);
+        }
+        // 更新订单状态为已入库
         opeOrder.setStatus(flag);
-        this.updateOpeOrder(opeOrder);
+        this.opeOrderDao.updateOpeOrderStatus(opeOrder);
 
-        // 将入库的物品更新库存
-        OpeReagentStatus opeReagentStatus = null;
-        BigInteger startReagentCode = null;
-        BigInteger endReagentCode = null;
-        String reagentCode = null;
-        OpeWarehouseReserve opeWarehouseReserve = null;
-        OpeUseFlow opeUseFlow = null;
-        for (OpeApply opeApply : opeApplyList) {
-            if(StringUtils.isNotBlank(opeApply.getStartReagentCode()) && StringUtils.isNotBlank(opeApply.getEndReagentCode())){
-                startReagentCode = new BigInteger(opeApply.getStartReagentCode());
-                endReagentCode = new BigInteger(opeApply.getEndReagentCode());
-
-                for (BigInteger i = startReagentCode; i.compareTo(endReagentCode) < 1; i = i.add(BigInteger.ONE)) {
-                    reagentCode = String.valueOf(i);
-                    if (this.opeReagentStatusService.isOpeReagentStatusExist(reagentCode)) {
-                        throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_EXIST, "申购编号:" + opeApply.getApplyCode() + "的试剂条形码[" + reagentCode + "]已存在。");
-                    }
-
-                    opeReagentStatus = new OpeReagentStatus();
-                    opeReagentStatus.setReagentId(opeApply.getReagent().getId());
-                    opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
-                    opeReagentStatus.setReagentCode(reagentCode);
-                    opeReagentStatus.setStatus(ArrivalStatus.WAREHOUSE);
-                    opeReagentStatus.setHouseId(opeApply.getHouseId());
-                    opeReagentStatus.setContainerId(opeApply.getContainerId());
-                    opeReagentStatus.setUserId(opeOrder.getConsigneeUserId());
-                    opeReagentStatus.setPlace(opeApply.getPlaceId());
-                    opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering() != null ? (opeApply.getReagent().getMainMetering()) : new BigDecimal(0));
-                    opeReagentStatus.setStoreType(StoreType.APPLY);
-                    this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
-
-                    opeUseFlow = new OpeUseFlow();
-                    opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode());
-                    opeUseFlow.setStatus(opeReagentStatus.getStatus());
-                    opeUseFlow.setHouseId(opeReagentStatus.getHouseId());
-                    opeUseFlow.setContainerId(opeReagentStatus.getContainerId());
-                    opeUseFlow.setUserId(opeReagentStatus.getUserId());
-                    opeUseFlow.setPlace(opeReagentStatus.getPlace());
-                    opeUseFlow.setRemainder(opeApply.getReagent().getMainMetering()!=null?(opeApply.getReagent().getMainMetering()):new BigDecimal(0));
-                    opeUseFlow.setStoreType(StoreType.APPLY);
-
-                    Map<String, String> metaMap = new HashMap<>();
-                    metaMap.put("groupId", "operate_status");
-                    metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-                    List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-                    opeUseFlow.setOperateState(baseMetaList.get(0).getId());
-
-                    this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
-                }
-            }
-
-            opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve(opeApply.getReagent().getId(), opeApply.getArticleNumber());
-            if (opeWarehouseReserve == null) {
-                opeWarehouseReserve = new OpeWarehouseReserve();
-                opeWarehouseReserve.setReagentId(opeApply.getReagent().getId());
-                opeWarehouseReserve.setArticleNumber(opeApply.getArticleNumber());
-                opeWarehouseReserve.setReserve(0);
-                opeWarehouseReserve.setWarehouseId(opeApply.getHouseId());
-                opeWarehouseReserve.setContainerId(opeApply.getContainerId());
-            }
-            opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + opeApply.getArrivalNum());
-            if (StringUtils.isBlank(opeWarehouseReserve.getId())) {
-                this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve);
-            } else {
-                this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
-            }
-        }
 
     }
 
-    public List<OpeApply> getOpeApplyListByOrder(String orderId) {
-        List<OpeApply> result = null;
-        List<OpeApplyOrder> opeApplyOrderList = this.opeApplyOrderService.getOpeApplyOrderList(orderId, null);
-        if (opeApplyOrderList != null && opeApplyOrderList.size() > 0) {
-            result = new ArrayList<OpeApply>();
-            for (OpeApplyOrder opeApplyOrder : opeApplyOrderList) {
-                result.add(this.opeApplyService.getOpeApply(opeApplyOrder.getOpeApplyId()));
+
+
+    /**
+     * 生成试剂流向
+     */
+    @Override
+    public List<OpeReagentStatus> generateReagentStatus(OpeApply opeApply,OpeReagentCode opeReagentCode,Long consigneeUserId,Integer num){
+        int startCode=opeReagentCode.getStartCode();
+        int endCode=opeReagentCode.getEndCode();
+        List<OpeReagentStatus>  opeReagentStatusList=new ArrayList<>();
+        int codeSum=0;
+        for(int i=startCode;i<=endCode;i++){
+            String lastCode=StringToolUtils.addZeroForNum(String.valueOf(i),4);
+            String rcode=String.format("%s%s",opeReagentCode.getCodePrex(),lastCode);
+            codeSum=codeSum+1;
+            if(codeSum>num){
+                break;
             }
+            if (this.opeReagentStatusService.isOpeReagentStatusExist(rcode)) {
+                continue;
+            }
+            OpeReagentStatus opeReagentStatus = new OpeReagentStatus();
+            BeanUtils.copyProperties(opeApply,opeReagentStatus, "id");
+            opeReagentStatus.setReagentId(opeApply.getReagent().getId());
+            opeReagentStatus.setReagentCode(rcode);
+            opeReagentStatus.setStatus(ArrivalStatus.WAREHOUSE.getKey());
+            opeReagentStatus.setUserId(consigneeUserId);
+            opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering() != null ? (opeApply.getReagent().getMainMetering()) : new BigDecimal(0));
+            opeReagentStatus.setStoreType(StoreType.APPLY.getKey());
+            opeReagentStatusList.add(opeReagentStatus);
         }
+        if(opeReagentStatusList.size()>0) {
+            this.opeReagentStatusService.batchInsertOpeReagentStatus(opeReagentStatusList);
+        }
+        return opeReagentStatusList;
+    }
+    /**
+
+    /**
+     * 生成试剂流向
+     */
+    public void generateOpeUseFlow(List<OpeReagentStatus>  opeReagentStatusList){
+        List<OpeUseFlow> opeUseFlowList=new ArrayList<>();
+        for(OpeReagentStatus opeReagentStatus :opeReagentStatusList){
+            OpeUseFlow opeUseFlow = new OpeUseFlow();
+            BeanUtils.copyProperties(opeReagentStatus,opeUseFlow,"id");
+            opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode());
+            opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
+            opeUseFlowList.add(opeUseFlow);
+        }
+        if(opeUseFlowList.size()>0) {
+            this.opeUseFlowService.batchInsertOpeUseFlow(opeUseFlowList);
+        }
+    }
+    /**
+     * 更新库存
+     */
+    public void updateWareHouse(OpeApply opeApply,Integer num){
+        OpeWarehouseReserve opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve(opeApply.getReagent().getId(), opeApply.getArticleNumber());
+        if (opeWarehouseReserve == null) {
+            opeWarehouseReserve = new OpeWarehouseReserve();
+            opeWarehouseReserve.setReagentId(opeApply.getReagent().getId());
+            opeWarehouseReserve.setArticleNumber(opeApply.getArticleNumber());
+            opeWarehouseReserve.setReserve(0);
+            opeWarehouseReserve.setWarehouseId(opeApply.getHouseId());
+            opeWarehouseReserve.setContainerId(opeApply.getContainerId());
+        }
+        opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + num);
+        if (opeWarehouseReserve.getId()==null) {
+            this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve);
+        } else {
+            this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
+        }
+    }
+
+
+    public List<OpeApply> getOpeApplyListByOrder(Long orderId) {
+        List<OpeApply> result = this.opeApplyService.getOpeApplyByOrderId(orderId);
+//        List<OpeApplyOrder> opeApplyOrderList = this.opeApplyOrderService.getOpeApplyOrderList(orderId, null);
+//        if (opeApplyOrderList != null && opeApplyOrderList.size() > 0) {
+//            result = new ArrayList<OpeApply>();
+//            for (OpeApplyOrder opeApplyOrder : opeApplyOrderList) {
+//                result.add(this.opeApplyService.getOpeApply(opeApplyOrder.getOpeApplyId()));
+//            }
+//        }
+//
+//        this.opeApplyService.getOpeApplyByOrderId(orderId);
         return result;
     }
 
@@ -334,7 +470,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public void cancelOrderApply(String orderId) {
+    public void cancelOrderApply(Long orderId) {
         List<OpeApply> opeApplyList = this.getOpeApplyListByOrder(orderId);
         if (opeApplyList != null && opeApplyList.size() > 0) {
             for (OpeApply opeApply : opeApplyList) {
@@ -352,10 +488,9 @@
         for (OpeApply opeApply : opeApplyList) {
 
             emailStatus = new EmailStatus();
-            emailStatus.setId(IDUtils.uuid());
             emailStatus.setOrderCode(opeOrder.getOrderCode());
             emailStatus.setApplyCode(opeApply.getApplyCode());
-            emailStatus.setReagentId(opeApply.getReagent().getId());
+            emailStatus.setReagentId(opeApply.getReagentId());
             emailStatus.setNum(opeApply.getArrivalNum());
             emailStatus.setApplyUserId(opeApply.getApplyUserId());
             emailStatus.setStatus(EmailSendStatus.UN_SEND);
@@ -458,7 +593,7 @@
                 opeWarehouseReserve.setReserve(0);
             }
             opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - opeApply1.getArrivalNum());
-            if (StringUtils.isBlank(opeWarehouseReserve.getId())) {
+            if (opeWarehouseReserve.getId()==null) {
                 this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve);
             } else {
                 this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
@@ -472,12 +607,12 @@
     }
 
     @Override
-    public List<EmailStatus> selectByReId(String id) {
+    public List<EmailStatus> selectByReId(Long id) {
         return this.emailStatusDao.selectByReId(id);
     }
 
     @Override
-    public void updateByReId(String newReId, String oldReId) {
+    public void updateByReId(Long newReId, Long oldReId) {
         Map<String, Object> params=new HashMap();
         params.put("newReId",newReId);
         params.put("oldReId",oldReId);
@@ -485,7 +620,7 @@
     }
 
     @Override
-    public OpeOrder getOrder(String id) {
+    public OpeOrder getOrder(Long id) {
         return opeOrderDao.selectParentOrder(id);
     }
 
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
index 42c2adb..e2f8741 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
@@ -28,30 +28,32 @@
 	 * @param pageSize
 	 * @return
 	 */
-	List<OpeReagentStatus> getOpeReagentStatusList(String reagentId, String articleNumber, Integer status,
-			String reagentCode, String userId, Integer first, Integer pageSize);
+	List<OpeReagentStatus> getOpeReagentStatusList(Long reagentId, String articleNumber, Integer status,
+			String reagentCode, Long userId, Integer first, Integer pageSize);
 
-	int getOpeReagentStatusTotalCount(String reagentId, String articleNumber, Integer status, String reagentCode,
-			String userId);
+	int getOpeReagentStatusTotalCount(Long reagentId, String articleNumber, Integer status, String reagentCode,
+									  Long userId);
 
-	public List<OpeReagentStatus> getOpeReagentStatusListForLab(String name, String articleNumber, Integer status,
-																String reagentCode, String userId, String labName, Integer first, Integer pageSize);
-	public int getOpeReagentStatusTotalCountForLab(String name, String articleNumber, Integer status, String reagentCode,
-												   String userId,String labName);
-	List<OpeReagentStatus> getOpeReagentStatusListByName(String reagentId, String articleNumber, Integer status,
-			String reagentCode, String userId, Integer first, Integer pageSize);
+	public List<OpeReagentStatus> getOpeReagentStatusListForLab(Long reagentId,String name, String articleNumber, Integer status,
+																String reagentCode, Long userId, String labName, Integer first, Integer pageSize);
+	public int getOpeReagentStatusTotalCountForLab(Long reagentId,String name, String articleNumber, Integer status, String reagentCode,
+												   Long userId,String labName);
+	List<OpeReagentStatus> getOpeReagentStatusListByName(Long reagentId, String articleNumber, Integer status,
+			String reagentCode, Long userId, Integer first, Integer pageSize);
 
-	int getOpeReagentStatusTotalCountByName(String reagentId, String articleNumber, Integer status, String reagentCode,
-			String userId);
-	List<OpeReagentStatus> getPersonReagentStatusListByName(String reagentId, String articleNumber,
-			String reagentCode, String userId,String applyPerson,Date startTime,Date endTime, Integer first, Integer pageSize);
+	int getOpeReagentStatusTotalCountByName(Long reagentId, String articleNumber, Integer status, String reagentCode,
+			Long userId);
+	List<OpeReagentStatus> getPersonReagentStatusListByName(Long reagentId, String articleNumber,
+			String reagentCode, Long userId,String applyPerson,Date startTime,Date endTime, Integer first, Integer pageSize);
 
-	int getPersonReagentStatusTotalCountByName(String reagentId, String articleNumber, String reagentCode,
-											   String userId, String applyPerson, Date startTime, Date endTime);
+	int getPersonReagentStatusTotalCountByName(Long reagentId, String articleNumber, String reagentCode,
+											   Long userId, String applyPerson, Date startTime, Date endTime);
 
 	OpeReagentStatus insertOpeReagentStatus(OpeReagentStatus opeReagentStatus);
 
-	OpeReagentStatus getOpeReagentStatus(String id);
+	int batchInsertOpeReagentStatus(List<OpeReagentStatus> OpeReagentStatusList);
+
+	OpeReagentStatus getOpeReagentStatusById(Long id);
 
 	OpeReagentStatus getOpeReagentStatusByReagentCode(String reagentCode);
 
@@ -64,23 +66,23 @@
 
 	boolean isAllowWarehouseUse(OpeReagentStatus opeReagentStatus);
 
-	boolean isAllowWarehouseUseByIds(List<String> ids);
+	boolean isAllowWarehouseUseByIds(List<Long> ids);
 
 	boolean updateReagentStatus(OpeReagentStatus opeReagentStatus,String receiptNumber);
 	boolean updateReagentStatus2(OpeReagentStatus opeReagentStatus);
 
-	boolean updateReagentStatus3(List<String> reagentCodes,String userId,String projectNum,String laboratoryId,String laboratoryContainerId,String receiptNumber);
+	boolean updateReagentStatus3(List<String> reagentCodes,Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber);
 
-	int getLogOpeReagentStatusTotalCount(String reagentLogId, Integer status, String userLogId, String loginId);
+	int getLogOpeReagentStatusTotalCount(Long reagentLogId, Integer status, Long userLogId, Long loginId);
 
-	List<OpeReagentStatus> getLogOpeReagentStatusList(String reagentLogId, Integer status, String userLogId,
-			String loginId, Integer first, Integer pageSize);
+	List<OpeReagentStatus> getLogOpeReagentStatusList(Long reagentLogId, Integer status, Long userLogId,
+													  Long loginId, Integer first, Integer pageSize);
 
-	void putReagentInLaboratory(String reagentCode, String barCode, String containerCode, SysUser sysUser);
+	void putReagentInLaboratory(String reagentCode, Long labId, Long labContainerId, Long userId);
 
-	boolean store(List<OpeReagentStatus> selectedStoreList, String laboratoryId, String laboratoryContainerId);
+	boolean store(List<OpeReagentStatus> selectedStoreList, Long laboratoryId, Long laboratoryContainerId);
 
-	public List<OpeReagentStatus> getOpeReagentStatusInfoList(String startTime,String endTime, String containerid, String status);
+	public List<OpeReagentStatus> getOpeReagentStatusInfoList(String startTime,String endTime, Long containerid, String status);
 
 	public void syncOpeReagentStatus(List<LinkedHashMap> reagentStatusList);
 
@@ -92,13 +94,13 @@
 
 	void batchUpdateStatusByCode(List<PersonUseDetail> list) throws Exception;
 
-	public List<OpeReagentStatus> selectByReId(String id);
-	public void updateByReId(String newReId,String oldReId);
+	public List<OpeReagentStatus> selectByReId(Long id);
+	public void updateByReId(Long newReId,Long oldReId);
 
 
-	List<String> getReagentCodes(String reagentId);
+	List<String> getReagentCodes(Long reagentId);
 	//订单入库 新增试剂状态表 和流向
-    void orderInputWarehouseReagentStatusAndUseFlow(OpeApplyReserve opeApplyReserve, String userId, List<String> reagentCodeList , OpeOrder opeOrder);
+    void orderInputWarehouseReagentStatusAndUseFlow(OpeApplyReserve opeApplyReserve, Long userId, List<String> reagentCodeList , OpeOrder opeOrder);
 
 	List<String> checkReagentCode(String startReagentCode2, String endReagentCode2,Integer arrivalNum) throws BusinessException;
 
@@ -106,15 +108,17 @@
 
 	int updateOpeReagentStatus(OpeReagentStatus opeReagentStatus);
 
-	int getReagentNumInWarehouse(String id, String articleNumber, String warehouseId);
+	int getReagentNumInWarehouse(Long id, String articleNumber, Long warehouseId);
 
     List<Map> selectExportList(String name, String articleNumber, Integer status,
-							   String reagentCode, String userId,String labName);
+							   String reagentCode, Long userId,String labName);
 
 	void exportLabStock2Excel(List<Map> list) throws Exception;
 
-    OpeReagentStatus getStatus(String reagentId, String reagentCode);
+    OpeReagentStatus getStatus(Long reagentId, String reagentCode);
 
-	List<OpeReagentStatus> getOpeReagentStatusList22(String reagentId, String articleNumber, Integer status,
-															String reagentCode, String userId, Integer first, Integer pageSize);
+	List<OpeReagentStatus> getOpeReagentStatusList22(Long reagentId, String articleNumber, Integer status,
+															String reagentCode, Long userId,String applyCode, Integer first, Integer pageSize);
+
+	Integer getReagentStatusCountByApplyCode(String applyCode);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
index c94b1cc..a621b4b 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
@@ -67,8 +67,8 @@
 	@Resource
 	private BaseRoleService baseRoleService;
 
-    @Resource(name="baseMetaDao")
-    BaseMetaDao baseMetaDao;
+	@Resource(name = "baseMetaDao")
+	BaseMetaDao baseMetaDao;
 
 	/*
 	 * (non-Javadoc)
@@ -79,8 +79,8 @@
 	 * java.lang.Integer)
 	 */
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeReagentStatus> getOpeReagentStatusList(String reagentId, String articleNumber, Integer status,
-			String reagentCode, String userId, Integer first, Integer pageSize) {
+	public List<OpeReagentStatus> getOpeReagentStatusList(Long reagentId, String articleNumber, Integer status,
+														  String reagentCode, Long userId, Integer first, Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 
@@ -102,8 +102,8 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeReagentStatus> getOpeReagentStatusList22(String reagentId, String articleNumber, Integer status,
-														  String reagentCode, String userId, Integer first, Integer pageSize) {
+	public List<OpeReagentStatus> getOpeReagentStatusList22(Long reagentId, String articleNumber, Integer status,
+															String reagentCode, Long userId,String applyCode, Integer first, Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 
@@ -116,6 +116,9 @@
 			}
 			params.put("first", first);
 			params.put("pageSize", pageSize);
+			if (StringUtils.isNotBlank(applyCode)) {
+				params.put("applyCode", applyCode);
+			}
 			return this.opeReagentStatusDao.getOpeReagentStatusList22(params);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
@@ -124,9 +127,14 @@
 		}
 	}
 
+	@Override
+	public Integer getReagentStatusCountByApplyCode(String applyCode) {
+		return this.opeReagentStatusDao.getReagentStatusCountByApplyCode(applyCode);
+	}
+
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeReagentStatus> getOpeReagentStatusListForLab(String name, String articleNumber, Integer status,
-														  String reagentCode, String userId,String labName, Integer first, Integer pageSize) {
+	public List<OpeReagentStatus> getOpeReagentStatusListForLab(Long reagentId, String name, String articleNumber, Integer status,
+																String reagentCode, Long userId, String labName, Integer first, Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 
@@ -135,15 +143,15 @@
 			params.put("status", status);
 			params.put("labName", labName);
 //			addParamByUserId(userId, params);
-			if (StringUtils.isNotBlank(userId)) {
+			if (userId != null) {
 				SysUser sysUser = sysUserService.getSysUser(userId);
 				BaseRole baseRole = baseRoleService.getBaseRole(sysUser.getRoleId());
 				//不是系统管理员 根据用户的课题组判断可视(用户所在课题组是否 在实验室的课题组下)
 				if (!"系统管理员".equals(baseRole.getName())) {
-					if (StringUtils.isBlank(sysUser.getProject())) {
+					if (sysUser.getProjectId() != null) {
 						return null;
 					}
-					params.put("project", sysUser.getProject());
+					params.put("project", sysUser.getProjectId());
 				}
 			}
 			if (StringUtils.isNotBlank(reagentCode)) {
@@ -160,30 +168,35 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getOpeReagentStatusTotalCountForLab(String name, String articleNumber, Integer status, String reagentCode,
-											 String userId,String labName) {
+	public int getOpeReagentStatusTotalCountForLab(Long reagentId, String name, String articleNumber, Integer status, String reagentCode,
+												   Long userId, String labName) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
-			params.put("name", "%" + name + "%");
+			if(StringUtils.isNotBlank(name)){
+				params.put("name", "%" + name + "%");
+			}
+
 
 //			addParamByUserId(userId, params);
 			params.put("articleNumber", articleNumber);
-			if (StringUtils.isNotBlank(userId)) {
+			if (userId != null) {
 				SysUser sysUser = sysUserService.getSysUser(userId);
 				BaseRole baseRole = baseRoleService.getBaseRole(sysUser.getRoleId());
 				//不是系统管理员 根据用户的课题组判断可视(用户所在课题组是否 在实验室的课题组下)
 				if (!"系统管理员".equals(baseRole.getName())) {
-					if (StringUtils.isBlank(sysUser.getProject())) {
+					if (sysUser.getProjectId() == null) {
 						return 0;
 					}
-					params.put("project", sysUser.getProject());
+					params.put("project", sysUser.getProjectId());
 				}
 			}
 			if (StringUtils.isNotBlank(reagentCode)) {
 				params.put("reagentCode", "%" + reagentCode + "%");
 			}
 			params.put("status", status);
-			params.put("labName", labName);
+			if(StringUtils.isNotBlank(labName)){
+				params.put("labName", labName);
+			}
 			return this.opeReagentStatusDao.getOpeReagentStatusTotalCountForLab(params);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
@@ -193,8 +206,8 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getOpeReagentStatusTotalCount(String reagentId, String articleNumber, Integer status, String reagentCode,
-			String userId) {
+	public int getOpeReagentStatusTotalCount(Long reagentId, String articleNumber, Integer status, String reagentCode,
+											 Long userId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentId", reagentId);
@@ -213,9 +226,10 @@
 		}
 	}
 
+	@Override
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeReagentStatus> getOpeReagentStatusListByName(String reagentId, String articleNumber, Integer status,
-			String reagentCode, String userId, Integer first, Integer pageSize) {
+	public List<OpeReagentStatus> getOpeReagentStatusListByName(Long reagentId, String articleNumber, Integer status,
+																String reagentCode, Long userId, Integer first, Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 
@@ -237,8 +251,8 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getOpeReagentStatusTotalCountByName(String reagentId, String articleNumber, Integer status, String reagentCode,
-			String userId) {
+	public int getOpeReagentStatusTotalCountByName(Long reagentId, String articleNumber, Integer status, String reagentCode,
+												   Long userId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentName", reagentId);
@@ -259,8 +273,8 @@
 
 
 	@Override
-	public int getPersonReagentStatusTotalCountByName(String reagentId, String articleNumber, String reagentCode,
-			String userId,String applyPerson,Date startTime,Date endTime) {
+	public int getPersonReagentStatusTotalCountByName(Long reagentId, String articleNumber, String reagentCode,
+													  Long userId, String applyPerson, Date startTime, Date endTime) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentName", reagentId);
@@ -282,8 +296,8 @@
 	}
 
 	@Override
-	public List<OpeReagentStatus> getPersonReagentStatusListByName(String reagentId, String articleNumber,
-			String reagentCode, String userId,String applyPerson,Date startTime,Date endTime, Integer first, Integer pageSize) {
+	public List<OpeReagentStatus> getPersonReagentStatusListByName(Long reagentId, String articleNumber,
+																   String reagentCode, Long userId, String applyPerson, Date startTime, Date endTime, Integer first, Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentName", reagentId);
@@ -306,8 +320,8 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeReagentStatus> getLogOpeReagentStatusList(String reagentId, Integer status, String userId,
-			String loginId, Integer first, Integer pageSize) {
+	public List<OpeReagentStatus> getLogOpeReagentStatusList(Long reagentId, Integer status, Long userId,
+															 Long loginId, Integer first, Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 
@@ -325,7 +339,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getLogOpeReagentStatusTotalCount(String reagentId, Integer status, String userId, String loginId) {
+	public int getLogOpeReagentStatusTotalCount(Long reagentId, Integer status, Long userId, Long loginId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentId", reagentId);
@@ -345,10 +359,10 @@
 	 * @param userId
 	 * @param params
 	 */
-	private void addParamByUserId(String userId, Map<String, Object> params) {
+	private void addParamByUserId(Long userId, Map<String, Object> params) {
 		// 领用操作对话框的userid为空
 		// 只有实验室管理时userid才不为空
-		if (StringUtils.isNotBlank(userId)) {
+		if (userId != null) {
 			SysUser sysUser = sysUserService.getSysUser(userId);
 
 //			// 不是管理员时,加入部门
@@ -374,13 +388,13 @@
 	 * @param loginId
 	 * @param params
 	 */
-	private void addParamByLoginId(String userId, String loginId, Map<String, Object> params) {
-		if (StringUtils.isNotBlank(loginId)) {
+	private void addParamByLoginId(Long userId, Long loginId, Map<String, Object> params) {
+		if (loginId != null) {
 			SysUser sysUser = sysUserService.getSysUser(loginId);
 
 			// 负责人,需要把部门的userid传递到SQL
 			if (sysUser.getSeeFlag().getKey() == SeeFlag.LEADING.getKey()) {
-				List<String> departmentUserIds = new ArrayList<String>();
+				List<Long> departmentUserIds = new ArrayList<Long>();
 				List<SysUser> departmentUsers = sysUserService.getSeeUserList(sysUser.getDepartment());
 				for (SysUser departmentUser : departmentUsers) {
 					departmentUserIds.add(departmentUser.getId());
@@ -390,14 +404,14 @@
 					params.put("departmentUserIds", departmentUserIds);
 				}
 
-				if (StringUtils.isNotBlank(userId)) {
+				if (userId != null) {
 					params.put("userId", userId);
 				}
 
 			} else if (sysUser.getSeeFlag().getKey() == SeeFlag.NORMAL.getKey()) {// 管理员,部门的userid和个人id都不需要
 				params.put("userId", userId);
 			} else {
-				if (StringUtils.isNotBlank(userId)) {
+				if (userId != null) {
 					params.put("userId", userId);
 				}
 			}
@@ -407,7 +421,7 @@
 	@Transactional(propagation = Propagation.REQUIRED)
 	public OpeReagentStatus insertOpeReagentStatus(OpeReagentStatus opeReagentStatus) {
 		try {
-			opeReagentStatus.setId(IDUtils.uuid());
+			//opeReagentStatus.setId(IDUtils.uuid());
 			this.opeReagentStatusDao.insertOpeReagentStatus(opeReagentStatus);
 			return opeReagentStatus;
 		} catch (DuplicateKeyException ex) {
@@ -425,6 +439,26 @@
 	}
 
 	@Override
+	public int batchInsertOpeReagentStatus(List<OpeReagentStatus> OpeReagentStatusList) {
+		try {
+			return this.opeReagentStatusDao.batchInsertOpeReagentStatus(OpeReagentStatusList);
+		} catch (DuplicateKeyException ex) {
+			logger.warn(ex.getMessage(), ex);
+			throw new AlarmException(AlarmCode.DATA_DUPLICATE,
+					MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
+		} catch (DataIntegrityViolationException ex) {
+			logger.warn(ex.getMessage(), ex);
+			throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
+		} catch (DataAccessException ex) {
+			logger.error(ex.getMessage(), ex);
+			throw new BusinessException(ExceptionEnumCode.DB_ERR,
+					MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
+		}
+	}
+
+
+
+	@Override
 	@Transactional(propagation = Propagation.REQUIRED)
 	public boolean isOpeReagentStatusExist(String reagentCode) {
 		try {
@@ -440,9 +474,9 @@
 
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED)
-	public OpeReagentStatus getOpeReagentStatusByCode(String reagentCode){
+	public OpeReagentStatus getOpeReagentStatusById(Long id){
 		try {
-			return this.opeReagentStatusDao.getOpeReagentStatusByReagentCode(reagentCode);
+			return this.opeReagentStatusDao.getOpeReagentStatusById(id);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
 			throw new BusinessException(ExceptionEnumCode.DB_ERR,
@@ -450,17 +484,18 @@
 		}
 	}
 
+
 	@Override
 	public boolean isAllowWarehouseUse(OpeReagentStatus opeReagentStatus) {
 		return opeReagentStatus != null && opeReagentStatus.getStatus() != null
-				&& opeReagentStatus.getStatus().getKey() == ArrivalStatus.WAREHOUSE.getKey();
+				&& opeReagentStatus.getStatus() == ArrivalStatus.WAREHOUSE.getKey();
 	}
 
-	public boolean isAllowWarehouseUseByIds(List<String> list) {
+	public boolean isAllowWarehouseUseByIds(List<Long> list) {
 		boolean flag = true;
 		if (list != null && list.size() > 0) {
-			for (String opeReagentStatusId : list) {
-				OpeReagentStatus opeReagentStatus = getOpeReagentStatus(opeReagentStatusId);
+			for (Long opeReagentStatusId : list) {
+				OpeReagentStatus opeReagentStatus = getOpeReagentStatusById(opeReagentStatusId);
 				if (!isAllowWarehouseUse(opeReagentStatus)) {
 					flag = false;
 					break;
@@ -504,11 +539,7 @@
 			opeUseFlow.setPlace(opeReagentStatus.getPlace());
 			opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
 
-			Map<String, String> metaMap = new HashMap<>();
-			metaMap.put("groupId", "operate_status");
-			metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-			List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-			opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+			opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
 
 			this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 
@@ -528,12 +559,12 @@
 	}
 
 	@Override
-	public boolean updateReagentStatus3(List<String> reagentCodes,String userId,String projectNum,String laboratoryId,String laboratoryContainerId,String receiptNumber) {
+	public boolean updateReagentStatus3(List<String> reagentCodes,Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber) {
 		try {
-			for (String opeReagentStatusId : reagentCodes) {
-				OpeReagentStatus opeReagentStatus = this.getOpeReagentStatus(opeReagentStatusId);
+			for (String reagentCode : reagentCodes) {
+				OpeReagentStatus opeReagentStatus = this.getOpeReagentStatusByCode(reagentCode);
 				opeReagentStatus.setUserId(userId);
-				opeReagentStatus.setProjectNum(projectNum);
+				opeReagentStatus.setProjectId(projectId);
 				//1.判断->试剂状态是否为在仓库
 				if (isAllowWarehouseUse(opeReagentStatus)) {
 					//1.1获得 试剂的库存选择批次
@@ -544,7 +575,7 @@
 					this.opeWarehouseReserveService.updateOpeWarehouseReserve(owrList.get(0));
 				}
 				//设置 试剂状态->领用待入库
-				opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+				opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 				opeReagentStatus.setHouseId(laboratoryId);
 				opeReagentStatus.setContainerId(laboratoryContainerId);
 				int row = this.updateOpeReagentStatus(opeReagentStatus);
@@ -563,11 +594,7 @@
 				opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
 				opeUseFlow.setReceiptNumber(receiptNumber);
 
-				Map<String, String> metaMap = new HashMap<>();
-				metaMap.put("groupId", "operate_status");
-				metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-				List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-				opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+				opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
 
 				this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 			}
@@ -603,7 +630,7 @@
 				opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1);
 				this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
 			}
-			opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+			opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 			int row = this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
 			if (row == 0) {
 				return false;
@@ -618,11 +645,7 @@
 			opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
 			opeUseFlow.setReceiptNumber(receiptNumber);
 
-			Map<String, String> metaMap = new HashMap<>();
-			metaMap.put("groupId", "operate_status");
-			metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-			List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-			opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+			opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
 			this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 			return true;
 		} catch (DuplicateKeyException ex) {
@@ -639,9 +662,9 @@
 		}
 	}
 
-	public OpeReagentStatus getOpeReagentStatus(String id) {
+	public OpeReagentStatus getOpeReagentStatusByCode(String reagentCode) {
 		try {
-			return this.opeReagentStatusDao.getOpeReagentStatus(id);
+			return this.opeReagentStatusDao.getOpeReagentStatusByCode(reagentCode);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
 			throw new BusinessException(ExceptionEnumCode.DB_ERR,
@@ -674,7 +697,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public void putReagentInLaboratory(String reagentCode, String barCode, String containerCode, SysUser sysUser) {
+	public void putReagentInLaboratory(String reagentCode, Long labId, Long labContainerId, Long userId) {
 		try {
 			// 检查试剂条码是否存在
 			OpeReagentStatus opeReagentStatus = this.getOpeReagentStatusByReagentCode(reagentCode);
@@ -683,30 +706,30 @@
 						MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "试剂条码", reagentCode));
 			}
 
-			// 检查地点条码是否存在
-			SysLaboratory sysLaboratory = this.sysLaboratoryService.getSysLaboratoryByBarCode(barCode);
-			if (sysLaboratory == null) {
-				throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST,
-						MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "地点条码", barCode));
-			}
+//			// 检查地点条码是否存在
+//			SysLaboratory sysLaboratory = this.sysLaboratoryService.getSysLaboratoryByBarCode(barCode);
+//			if (sysLaboratory == null) {
+//				throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST,
+//						MessageUtil.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "地点条码", barCode));
+//			}
+//
+//			// 检查货柜条码是否存在
+//			SysLaboratoryContainer sysLaboratoryContainer = this.sysLaboratoryContainerService
+//					.getSysLaboratoryContainerByContainerCode(containerCode);
+//			if (sysLaboratoryContainer == null) {
+//				throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, MessageUtil
+//						.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "货柜条码", containerCode));
+//			}
+//
+//			// 检查货柜是否属于该地点
+//			if (!sysLaboratory.getId().equals(sysLaboratoryContainer.getLaboratoryId())) {
+//				throw new BusinessException(ExceptionEnumCode.PARAM_ERR, "货柜不属于该地点");
+//			}
 
-			// 检查货柜条码是否存在
-			SysLaboratoryContainer sysLaboratoryContainer = this.sysLaboratoryContainerService
-					.getSysLaboratoryContainerByContainerCode(containerCode);
-			if (sysLaboratoryContainer == null) {
-				throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, MessageUtil
-						.getMessageByCode(ExceptionEnumCode.PARAM_NO_EXIST.getCode(), "货柜条码", containerCode));
-			}
-
-			// 检查货柜是否属于该地点
-			if (!sysLaboratory.getId().equals(sysLaboratoryContainer.getLaboratoryId())) {
-				throw new BusinessException(ExceptionEnumCode.PARAM_ERR, "货柜不属于该地点");
-			}
-
-			opeReagentStatus.setStatus(ArrivalStatus.LABORATORY);
-			opeReagentStatus.setHouseId(sysLaboratory.getId());
-			opeReagentStatus.setContainerId(sysLaboratoryContainer.getId());
-			opeReagentStatus.setUserId(sysUser.getId());
+			opeReagentStatus.setStatus(ArrivalStatus.LABORATORY.getKey());
+			opeReagentStatus.setHouseId(labId);
+			opeReagentStatus.setContainerId(labContainerId);
+			opeReagentStatus.setUserId(userId);
 			opeReagentStatus.setPlace(null);
 			this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
 
@@ -718,6 +741,7 @@
 			opeUseFlow.setUserId(opeReagentStatus.getUserId());
 			opeUseFlow.setPlace(opeReagentStatus.getPlace());
 			opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
+			opeUseFlow.setOperateState(OperateStatus.LABORATORYIN.getKey());
 			// 接口应新追加操作状态和试剂状态两个参数。
 
 			this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
@@ -737,10 +761,10 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public boolean store(List<OpeReagentStatus> selectedStoreList, String laboratoryId, String laboratoryContainerId) {
+	public boolean store(List<OpeReagentStatus> selectedStoreList, Long laboratoryId, Long laboratoryContainerId) {
 		try {
 			for (OpeReagentStatus opeReagentStatus : selectedStoreList) {
-				opeReagentStatus.setStatus(ArrivalStatus.LABORATORY);
+				opeReagentStatus.setStatus(ArrivalStatus.LABORATORY.getKey());
 				opeReagentStatus.setHouseId(laboratoryId);
 				opeReagentStatus.setContainerId(laboratoryContainerId);
 				int row = this.opeReagentStatusDao.updateOpeReagentStatusDao(opeReagentStatus);
@@ -757,11 +781,7 @@
 				opeUseFlow.setPlace(opeReagentStatus.getPlace());
 				opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
 
-				Map<String, String> metaMap = new HashMap<>();
-                metaMap.put("groupId", "operate_status");
-                metaMap.put("metaKey", String.valueOf(OperateStatus.LABORATORYIN.getKey()));
-                List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-                opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+                opeUseFlow.setOperateState(OperateStatus.LABORATORYIN.getKey());
 
 				this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 			}
@@ -782,7 +802,7 @@
 
 	@Override
 	@Transactional(readOnly = true)
-	public List<OpeReagentStatus> getOpeReagentStatusInfoList(String startTime,String endTime, String containerid, String status){
+	public List<OpeReagentStatus> getOpeReagentStatusInfoList(String startTime,String endTime, Long containerid, String status){
 		Map params = ImmutableMap.of("startTime",startTime,"endTime",endTime,"containerid",containerid,"status",status);
 		return opeReagentStatusDao.getOpeReagentStatusInfoList(params);
 	}
@@ -901,12 +921,12 @@
 	}
 
 	@Override
-	public List<OpeReagentStatus> selectByReId(String id) {
+	public List<OpeReagentStatus> selectByReId(Long id) {
 		return  this.opeReagentStatusDao.selectByReId(id);
 	}
 
 	@Override
-	public void updateByReId(String newReId, String oldReId) {
+	public void updateByReId(Long newReId, Long oldReId) {
 		Map<String, Object> params=new HashMap();
 		params.put("newReId",newReId);
 		params.put("oldReId",oldReId);
@@ -914,7 +934,7 @@
 	}
 
 	@Override
-	public List<String> getReagentCodes(String reagentId) {
+	public List<String> getReagentCodes(Long reagentId) {
 		return opeReagentStatusDao.selectReagentCodesByReId(reagentId);
 	}
 
@@ -924,16 +944,16 @@
 	*/
 	@Transactional
 	public void orderInputWarehouseReagentStatusAndUseFlow
-			(OpeApplyReserve opeApplyReserve,String userId,List<String> reagentCodeList,OpeOrder opeOrder) {
+			(OpeApplyReserve opeApplyReserve,Long userId,List<String> reagentCodeList,OpeOrder opeOrder) {
 
 
 		for (String reagentCode : reagentCodeList) {
 
 			//1.新增试剂状态:在仓库有
 			OpeReagentStatus ors = new OpeReagentStatus();
-			ors.setId(IDUtils.uuid());
+	//		ors.setId(IDUtils.uuid());
 			//状态和用户
-			ors.setStatus(ArrivalStatus.WAREHOUSE);
+			ors.setStatus(ArrivalStatus.WAREHOUSE.getKey());
 			ors.setUserId(userId);
 			//入库场所
 			ors.setHouseId(opeApplyReserve.getHouseId());
@@ -949,17 +969,13 @@
 
 			//2.更新试剂流向
 			OpeUseFlow ouf = new OpeUseFlow();
-			ouf.setId(IDUtils.uuid());
+		//	ouf.setId(IDUtils.uuid());
 			//持有者
 			ouf.setUserId(userId);
 			//在仓库状态
-			ouf.setStatus(ArrivalStatus.WAREHOUSE);
-			//操作状态->仓库入库
-			Map<String, String> metaMap = new HashMap<>();
-			metaMap.put("groupId", "operate_status");
-			metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-			List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-			ouf.setOperateState(baseMetaList.get(0).getId());
+			ouf.setStatus(ArrivalStatus.WAREHOUSE.getKey());
+
+			ouf.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
 			//地点
 			ouf.setHouseId(opeApplyReserve.getHouseId());
 			ouf.setContainerId(opeApplyReserve.getContainerId());
@@ -1107,7 +1123,7 @@
 	}
 
 	@Override
-	public int getReagentNumInWarehouse(String id, String articleNumber, String warehouseId) {
+	public int getReagentNumInWarehouse(Long id, String articleNumber, Long warehouseId) {
 		Map<String, Object> params = new HashMap<>();
 		params.put("reagentId", id);
 		params.put("articleNumber", articleNumber);
@@ -1121,22 +1137,22 @@
 	 * @date 2021/4/22 10:33
 	 */
 	@Override
-	public List<Map> selectExportList(String name, String articleNumber, Integer status, String reagentCode, String userId,String labName) {
+	public List<Map> selectExportList(String name, String articleNumber, Integer status, String reagentCode, Long userId,String labName) {
 
 		Map<String, Object> params = new HashMap<>();
 		params.put("name", name);
 		params.put("articleNumber", articleNumber);
 		params.put("status", status);
 		params.put("labName", labName);
-		if (StringUtils.isNotBlank(userId)) {
+		if (userId!=null) {
 			SysUser sysUser = sysUserService.getSysUser(userId);
 			BaseRole baseRole = baseRoleService.getBaseRole(sysUser.getRoleId());
 			//不是系统管理员 根据用户的课题组判断可视(用户所在课题组是否 在实验室的课题组下)
 			if (!"系统管理员".equals(baseRole.getName())) {
-				if (StringUtils.isBlank(sysUser.getProject())) {
+				if (sysUser.getProjectId()==null) {
 					return null;
 				}
-				params.put("project", sysUser.getProject());
+				params.put("project", sysUser.getProjectId());
 			}
 		}
 		params.put("reagentCode", reagentCode);
@@ -1159,7 +1175,7 @@
 	}
 
     @Override
-    public OpeReagentStatus getStatus(String reagentId, String reagentCode) {
+    public OpeReagentStatus getStatus(Long reagentId, String reagentCode) {
 
 
 		return opeReagentStatusDao.getStatus(reagentId,reagentCode);
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
index 66a8953..4aa4904 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
@@ -20,15 +20,17 @@
 
 	OpeUseFlow insertOpeUseFlow(OpeUseFlow opeUseFlow);
 
-	List<OpeUseFlow> getOpeUseFlowList(String reagentId, String reagentCode, Integer status, String userId,
+	int batchInsertOpeUseFlow(List<OpeUseFlow> opeUseFlowList);
+
+	List<OpeUseFlow> getOpeUseFlowList(Long reagentId, String reagentCode, Integer status, Long userId,
 			Integer first, Integer pageSize);
 
-	int getOpeUseFlowTotalCount(String reagentId, String reagentCode, Integer status, String userId);
+	int getOpeUseFlowTotalCount(Long reagentId, String reagentCode, Integer status, Long userId);
 
-	List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId, Date startDate,Date endDate,
-			Integer first, Integer pageSize,String operatestate);
+	List<OpeUseFlow> getOpeUseFlowListByName(String houseName,Long reagentId, String reagentCode,String containerCode, Integer status, Long userId, Date startDate,Date endDate,
+			Integer first, Integer pageSize,Integer operatestate);
 
-	int getOpeUseFlowTotalCountByName(String houseName, String reagentId, String reagentCode,String containerCode, Integer status, String userId, Date startDate,Date endDate,String operatestate);
+	int getOpeUseFlowTotalCountByName(String houseName, Long reagentId, String reagentCode,String containerCode, Integer status, Long userId, Date startDate,Date endDate,Integer operatestate);
 
 	boolean update(OpeUseFlow opeUseFlow);
 
@@ -44,15 +46,15 @@
 
 	void updateReceiptNumberByCode(List<OpeApplyReserve> codeTmp,String receiptNumber,String note);
 
-	Map<String, Integer> getRegentInfoFromReceiptNumber(String receiptNumber);
+	Map<Long, Integer> getRegentInfoFromReceiptNumber(String receiptNumber);
 
-	Map<String,String>  getApplyUserByReagentCode(String reagentCode);
+	Map<String,Long>  getApplyUserByReagentCode(String reagentCode);
 
     void updateReceiptNumberByCode2(List<OpeWarehouseReserve> codeTmp, String receiptNumber,String note);
 
-	int getPersonalUseInfoCount(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber, String department, String project,String applyPerson,String reagentName);
+	int getPersonalUseInfoCount(String reagentCode,Long userId, Date startTime, Date endTime, String receiptNumber, String department, String project,String applyPerson,String reagentName);
 
-	List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber, String department, String project,String applyPerson,String reagentName, int first, int pageSize);
+	List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,Long userId, Date startTime, Date endTime, String receiptNumber, String department, String project,String applyPerson,String reagentName, int first, int pageSize);
 
     List<PersonUseDetail> getApplyInfo(String receiptNumber);
 
@@ -60,17 +62,17 @@
 
     int getOpeUseFlow(OpeUseFlow opeUseFlow);
 
-    void scrapReagent(String reagentId,String reagentCode, String userId);
+    void scrapReagent(Long reagentId,String reagentCode, Long userId);
 
     OpeUseFlow selectById(String rowKey);
 
-	OpeUseFlow selectByReceiptNumber(String receiptNumber,String userId);
+	OpeUseFlow selectByReceiptNumber(String receiptNumber,Long userId);
 
-    List<Map> selectAll(String houseName, String reagentId, String reagentCode, String containerCode, String userId, Date startDate, Date endDate);
+    List<Map> selectAll(String houseName, Long reagentId, String reagentCode, String containerCode, Long userId, Date startDate, Date endDate);
 
 	boolean export2Excel(List<Map> list) throws Exception;
 
-	List<Map> selectExportDetail(String reagentCode, String userId, Date startTime, Date endTime, String receiptNumber, String department, String project, String applyPerson, String reagentName);
+	List<Map> selectExportDetail(String reagentCode, Long userId, Date startTime, Date endTime, String receiptNumber, String department, String project, String applyPerson, String reagentName);
 
 	boolean export22Excel(List<Map> list) throws Exception;
 
@@ -83,4 +85,14 @@
 	 * @return
 	 */
 	CommonPage<OpeUseFlow> getOpeUseFlowSimpleInfoList(Integer pageNum, Integer pageSize, OpeUseFlowQueryDto opeUseFlowQueryDto);
+
+
+	/**
+	 * 获取最新流向
+	 * @param reagentCode
+	 * @return
+	 */
+	OpeUseFlow getLastUseFlow(String reagentCode);
+
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
index 8cc100f..2b01f35 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
@@ -67,14 +67,6 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public OpeUseFlow insertOpeUseFlow(OpeUseFlow opeUseFlow) {
         try {
-            if (opeUseFlow.getId() == null) {
-                opeUseFlow.setId(IDUtils.uuid());
-            }
-
-            if(opeUseFlow.getCreateTime()==null){
-            	opeUseFlow.setCreateTime(new Timestamp(System.currentTimeMillis()+1000));
-            }
-
             this.opeUseFlowDao.insertOpeUseFlow(opeUseFlow);
             return opeUseFlow;
         } catch (DuplicateKeyException ex) {
@@ -91,8 +83,26 @@
         }
     }
 
+    @Override
+    public int batchInsertOpeUseFlow(List<OpeUseFlow> opeUseFlowList) {
+        try {
+            return this.opeUseFlowDao.batchInsertOpeUseFlow(opeUseFlowList);
+        } catch (DuplicateKeyException ex) {
+            logger.warn(ex.getMessage(), ex);
+            throw new AlarmException(AlarmCode.DATA_DUPLICATE,
+                    MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
+        } catch (DataIntegrityViolationException ex) {
+            logger.warn(ex.getMessage(), ex);
+            throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
+        } catch (DataAccessException ex) {
+            logger.error(ex.getMessage(), ex);
+            throw new BusinessException(ExceptionEnumCode.DB_ERR,
+                    MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
+        }
+    }
+
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<OpeUseFlow> getOpeUseFlowList(String reagentId, String reagentCode, Integer status, String userId,
+    public List<OpeUseFlow> getOpeUseFlowList(Long reagentId, String reagentCode, Integer status, Long userId,
                                               Integer first, Integer pageSize) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
@@ -116,7 +126,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public int getOpeUseFlowTotalCount(String reagentId, String reagentCode, Integer status, String userId) {
+    public int getOpeUseFlowTotalCount(Long reagentId, String reagentCode, Integer status, Long userId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("reagentId", reagentId);
@@ -137,8 +147,8 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,
-                                                    Date startDate,Date endDate,Integer first, Integer pageSize,String operatestate) {
+    public List<OpeUseFlow> getOpeUseFlowListByName(String houseName,Long reagentId, String reagentCode,String containerCode, Integer status, Long userId,
+                                                    Date startDate,Date endDate,Integer first, Integer pageSize,Integer operatestate) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
 
@@ -235,8 +245,13 @@
         return commonPage;
     }
 
+    @Override
+    public OpeUseFlow getLastUseFlow(String reagentCode) {
+        return this.opeUseFlowDao.getLastUseFlow(reagentCode);
+    }
+
     @Transactional(propagation = Propagation.REQUIRED)
-    public int getOpeUseFlowTotalCountByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,Date startDate,Date endDate,String operatestate) {
+    public int getOpeUseFlowTotalCountByName(String houseName,Long reagentId, String reagentCode,String containerCode, Integer status, Long userId,Date startDate,Date endDate,Integer operatestate) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("reagentName", reagentId);
@@ -287,8 +302,8 @@
         }
     }
 
-    private void addParamByUserId(String userId, Map<String, Object> params) {
-        if (StringUtils.isNotBlank(userId)) {
+    private void addParamByUserId(Long userId, Map<String, Object> params) {
+        if (userId!=null) {
             SysUser sysUser = sysUserService.getSysUser(userId);
 
 			// 不是管理员时,加入userid
@@ -343,9 +358,9 @@
             //0:个人领用 1:在库 3:报废
             //<!--0:个人领用 1:在仓库sys_warehouse_container 2:在实验室sys_laboratory_container 3:报废-->
             OpeUseFlow opeUseFlow = new OpeUseFlow();
-            opeUseFlow.setId(IDUtils.uuid());
+       //     opeUseFlow.setId(IDUtils.uuid());
             opeUseFlow.setCreateTime(new Timestamp(DateUtils.parseDate(params.get("updateTime").toString(), Constants.TIME_PATTERN_YYYY_MM_DD_HH_MM_SS).getTime()));
-            opeUseFlow.setStatus(ArrivalStatus.parse(Integer.valueOf(String.valueOf(params.get("status")))));
+            opeUseFlow.setStatus(Integer.valueOf(String.valueOf(params.get("status"))));
             opeUseFlow.setReagentCode((String) params.get("reagentCode"));
             if (params.get("idcard") != null) {
                 SysUser sysUser = sysUserService.getSysUserByIdCard((String) params.get("idcard"));
@@ -354,8 +369,8 @@
                     continue;
                 }
                 opeUseFlow.setUserId(sysUser.getId());
-                opeUseFlow.setContainerId("0");
-                opeUseFlow.setHouseId("0");
+                opeUseFlow.setContainerId(0l);
+                opeUseFlow.setHouseId(0l);
             } else {
                 logger.error("The idcard is empty!");
                 continue;
@@ -364,13 +379,13 @@
                 SysWarehouseContainer container = sysWarehouseContainerDao.getSysWarehouseContainerByContainerCode((String) params.get("containerCode"));
                 if (Objects.isNull(container)==false) {
 					if (params.get("status").toString().equals("1")) {
-						opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE);
+						opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE.getKey());
 					} else {
-						opeUseFlow.setStatus(ArrivalStatus.PERSONAL);
+						opeUseFlow.setStatus(ArrivalStatus.PERSONAL.getKey());
 					}
                     opeUseFlow.setContainerId(container.getId());
                     opeUseFlow.setHouseId(container.getWarehouseId());
-                    opeUseFlow.setPlace(container.getStructure());
+                  //  opeUseFlow.setPlace(container.getStructure());
                 }else{
                     SysLaboratoryContainer sysLaboratoryContainer = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode((String) params.get("containerCode"));
                     if (Objects.isNull(sysLaboratoryContainer)) {
@@ -378,13 +393,13 @@
                         continue;
                     }
 					if (params.get("status").toString().equals("1")) {
-						opeUseFlow.setStatus(ArrivalStatus.LABORATORY);
+						opeUseFlow.setStatus(ArrivalStatus.LABORATORY.getKey());
 					} else {
-						opeUseFlow.setStatus(ArrivalStatus.PERSONAL);
+						opeUseFlow.setStatus(ArrivalStatus.PERSONAL.getKey());
 					}
                     opeUseFlow.setContainerId(sysLaboratoryContainer.getId());
                     opeUseFlow.setHouseId(sysLaboratoryContainer.getLaboratoryId());
-                    opeUseFlow.setPlace(sysLaboratoryContainer.getStructure());
+                   // opeUseFlow.setPlace(sysLaboratoryContainer.getStructure());
                 }
  //           }
 
@@ -425,14 +440,15 @@
         opeUseFlowDao.updateReceiptNumber(code, receiptNumber,note);
     }
 
+    //---------待完善------------20240408
     @Transactional
     public void updateReceiptNumberByCode(List<OpeApplyReserve> selectedTmpOrderList,String receiptNumber,String note) {
 
         for (OpeApplyReserve oar : selectedTmpOrderList) {
             if (oar.getFlag() == 1) {
                 //库中领取 code存的是 试剂状态的id
-                for (String statusId : oar.getReagentCode()) {
-                    String code = opeReagentStatusService.getOpeReagentStatus(statusId).getReagentCode();
+                for (String reagentCode : oar.getReagentCodes()) {
+                    String code = opeReagentStatusService.getOpeReagentStatusByCode(reagentCode).getReagentCode();
                     //此时状态为领用待入库
                     this.updateReceiptNumber(code, receiptNumber,note);
                 }
@@ -451,13 +467,13 @@
     }
 
     @Override
-    public Map<String, Integer> getRegentInfoFromReceiptNumber(String receiptNumber) {
+    public Map<Long, Integer> getRegentInfoFromReceiptNumber(String receiptNumber) {
         List<Map> maps = opeUseFlowDao.getRegentInfoFromReceiptNumber(receiptNumber);
         if (maps.size() > 0) {
-            Map<String, Integer> printInfo = new HashMap<>();
+            Map<Long, Integer> printInfo = new HashMap<>();
             for (Map map : maps) {
                 Integer count =Integer.parseInt(String.valueOf(map.get("count")));;
-                String reagentId = (String) map.get("reagentId");
+                Long reagentId = Long.valueOf(map.get("reagentId").toString());
                 SysReagent reagent = sysReagentService.getSysReagent(reagentId);
                 printInfo.put(reagent.getId(), count);
             }
@@ -470,21 +486,17 @@
     @Override
     public Map getApplyUserByReagentCode(String reagentCode) {
 
-        Map<String, String> metaMap2 = new HashMap<>();
-        metaMap2.put("groupId", "operate_status");
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-        List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
-        String id = baseMetaList2.get(0).getId();
-        return opeUseFlowDao.getUserIdByReagentCode(reagentCode, id);
+        return opeUseFlowDao.getUserIdByReagentCode(reagentCode, OperateStatus.WAREHOUSEOUT.getKey());
     }
 
+    //---------待完善------------20240408
     @Override
     public void updateReceiptNumberByCode2(List<OpeWarehouseReserve> selectTmpList, String receiptNumber,String note) {
         for (OpeWarehouseReserve owr : selectTmpList) {
             if (owr.getFlag() == 1) {
                 //库中领取 code存的是 试剂状态的id
                 for (String statusId : owr.getReagentCodes()) {
-                    String code = opeReagentStatusService.getOpeReagentStatus(statusId).getReagentCode();
+                    String code = opeReagentStatusService.getOpeReagentStatusByCode(statusId).getReagentCode();
                     //此时状态为领用待入库
                     this.updateReceiptNumber(code, receiptNumber,note);
                 }
@@ -502,7 +514,7 @@
     }
 
     @Override
-    public int getPersonalUseInfoCount(String reagentCode,String userId, Date startDate, Date endDate, String receiptNumber,
+    public int getPersonalUseInfoCount(String reagentCode,Long userId, Date startDate, Date endDate, String receiptNumber,
                                        String department, String project,String applyPerson,String reagentName) {
         Map<String,Object> params = new HashMap<>();
 
@@ -541,26 +553,17 @@
         params.put("applyPerson", applyPerson);
         if (StringUtils.isNotBlank(reagentName)) {
             //根据试剂名获取单号
-
         }
         params.put("reagentName", reagentName);
-        //操作状态位仓库领取
-        Map<String, String> metaMap2 = new HashMap<>();
-        metaMap2.put("groupId", "operate_status");
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate", baseMetas.get(0).getId());
-
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
-        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate1", baseMetas1.get(0).getId());
+        params.put("operatestate", OperateStatus.WAREHOUSEOUT.getKey());
+        params.put("operatestate1", OperateStatus.TRANSFER.getKey());
 
         addParamByUserId(userId, params);
         return opeUseFlowDao.countPersonalUseInfo(params);
     }
 
     @Override
-    public List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,String userId, Date startDate, Date endDate, String receiptNumber,
+    public List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,Long userId, Date startDate, Date endDate, String receiptNumber,
                                                    String department, String project,String applyPerson,String reagentName, int first, int pageSize) {
         Map<String, Object> params = new HashMap<>();
         SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
@@ -594,16 +597,9 @@
         params.put("reagentCode", reagentCode);
         params.put("applyPerson", applyPerson);
         params.put("reagentName", reagentName);
-        //操作状态位仓库领取
-        Map<String, String> metaMap2 = new HashMap<>();
-        metaMap2.put("groupId", "operate_status");
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate", baseMetas.get(0).getId());
+        params.put("operatestate", OperateStatus.WAREHOUSEOUT.getKey());
 
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
-        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate1", baseMetas1.get(0).getId());
+        params.put("operatestate1", OperateStatus.TRANSFER.getKey());
 
         params.put("first", first);
         params.put("pageSize", pageSize);
@@ -615,15 +611,9 @@
     @Override
     public List<PersonUseDetail> getApplyInfo(String receiptNumber) {
         Map<String,Object> params = new HashMap<>();
-        Map<String, String> metaMap2 = new HashMap<>();
-        metaMap2.put("groupId", "operate_status");
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate", baseMetas.get(0).getId());
+        params.put("operatestate", OperateStatus.WAREHOUSEOUT.getKey());
 
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
-        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate1", baseMetas1.get(0).getId());
+        params.put("operatestate1", OperateStatus.TRANSFER.getKey());
 
         params.put("receiptNumber", receiptNumber);
 
@@ -635,15 +625,9 @@
     @Override
     public int getApplyInfoSize(String receiptNumber) {
         Map<String,Object> params = new HashMap<>();
-        Map<String, String> metaMap2 = new HashMap<>();
-        metaMap2.put("groupId", "operate_status");
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate", baseMetas.get(0).getId());
+        params.put("operatestate", OperateStatus.WAREHOUSEOUT.getKey());
 
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
-        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate1", baseMetas1.get(0).getId());
+        params.put("operatestate1", OperateStatus.TRANSFER.getKey());
 
         params.put("receiptNumber", receiptNumber);
 
@@ -658,25 +642,20 @@
 
     @Override
     @Transactional
-    public void scrapReagent(String reagentId,String reagentCode, String userId) {
+    public void scrapReagent(Long reagentId,String reagentCode, Long userId) {
         //1.试剂状态表更新试剂状态为报废
         OpeReagentStatus status = opeReagentStatusService.getStatus(reagentId, reagentCode);
-        if (status.getStatus() == ArrivalStatus.SCRAP) {
+        if (status.getStatus() == ArrivalStatus.SCRAP.getKey()) {
             throw new BusinessException(ExceptionEnumCode.PARAM_ERR,"该试剂已是报废状态,无法进行操作");
         }
         //报废
-        status.setStatus(ArrivalStatus.SCRAP);
+        status.setStatus(ArrivalStatus.SCRAP.getKey());
         status.setUserId(userId);
         opeReagentStatusDao.updateOpeReagentStatusDao(status);
 
         //2.插入一条报废的流向记录
         OpeUseFlow useFlow = new OpeUseFlow();
-        //获取报废状态id
-        Map<String, Object> params = new HashMap<>();
-        params.put("groupId", "operate_status");
-        params.put("metaKey", String.valueOf(OperateStatus.SCRAP.getKey()));
-        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(params);
-        useFlow.setOperateState(baseMetas.get(0).getId());
+        useFlow.setOperateState(OperateStatus.SCRAP.getKey());
         useFlow.setReagentCode(reagentCode);
         useFlow.setContainerId(status.getContainerId());
         useFlow.setHouseId(status.getHouseId());
@@ -684,11 +663,11 @@
         useFlow.setPlace(status.getPlace());
         useFlow.setRemainder(status.getRemainder());
         useFlow.setStoreType(status.getStoreType());
-        useFlow.setProject(status.getProjectNum());
+        useFlow.setProjectId(status.getProjectId());
         useFlow.setArticleNumber(status.getArticleNumber());
 
         useFlow.setCreateTime(new Timestamp(new Date().getTime()));
-        useFlow.setId(IDUtils.uuid());
+      //  useFlow.setId(IDUtils.uuid());
         opeUseFlowDao.insertOpeUseFlow(useFlow);
 
     }
@@ -699,21 +678,16 @@
     }
 
     @Override
-    public OpeUseFlow selectByReceiptNumber(String receiptNumber,String userId) {
+    public OpeUseFlow selectByReceiptNumber(String receiptNumber,Long userId) {
 
         Map<String, Object> params = new HashMap<>();
         params.put("userId", userId);
         params.put("receiptNumber", receiptNumber);
         //操作状态位仓库领取
-        Map<String, String> metaMap2 = new HashMap<>();
-        metaMap2.put("groupId", "operate_status");
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate", baseMetas.get(0).getId());
 
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
-        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate1", baseMetas1.get(0).getId());
+        params.put("operatestate", OperateStatus.WAREHOUSEOUT.getKey());
+
+        params.put("operatestate1", OperateStatus.TRANSFER.getKey());
 
         addParamByUserId(userId, params);
 
@@ -721,7 +695,7 @@
     }
 
     @Override
-    public List<Map> selectAll(String houseName, String reagentId, String reagentCode, String containerCode, String userId, Date startDate, Date endDate) {
+    public List<Map> selectAll(String houseName, Long reagentId, String reagentCode, String containerCode, Long userId, Date startDate, Date endDate) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
 
@@ -786,9 +760,8 @@
      * @Description: 查询导出
      */
     @Override
-    public List<Map> selectExportDetail(String reagentCode, String userId, Date startTime, Date endTime, String receiptNumber, String department, String project, String applyPerson, String reagentName) {
+    public List<Map> selectExportDetail(String reagentCode, Long userId, Date startTime, Date endTime, String receiptNumber, String department, String project, String applyPerson, String reagentName) {
         Map<String, Object> params = new HashMap<>();
-        Map<String, String> metaMap2 = new HashMap<>();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         if (startTime != null) {
             params.put("startTime", sdf.format(startTime) +" 00:00:00");
@@ -807,13 +780,10 @@
         params.put("applyPerson", applyPerson);
         params.put("reagentName", reagentName);
         params.put("groupId", "operate_status");
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate", baseMetas.get(0).getId());
 
-        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
-        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
-        params.put("operatestate1", baseMetas1.get(0).getId());
+        params.put("operatestate", OperateStatus.WAREHOUSEOUT.getKey());
+
+        params.put("operatestate1", OperateStatus.TRANSFER.getKey());
         addParamByUserId(userId, params);
         return opeUseFlowDao.selectDetail(params);
     }
@@ -830,7 +800,7 @@
         map.put("productHome", "厂家");
         map.put("articleNumber", "批号");
         map.put("username", "申领人");
-        map.put("project", "课题组");
+        map.put("projectName", "课题组");
         map.put("department", "部门");
         map.put("location", "地点");
         map.put("createTime", "领用时间");
@@ -838,4 +808,7 @@
         return true;
     }
 
+
+
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
index 8ae6466..26f96b9 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java
@@ -12,44 +12,44 @@
  */
 public interface OpeWarehouseReserveService {
 
-	List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String supplierId, Integer first,
+	List<OpeWarehouseReserve> getOpeWarehouseReserveList(Long reagentId, Long supplierId, Integer first,
                                                          Integer pageSize);
-	int getOpeWarehouseReserveTotalCount(String reagentId, String supplierId);
-	List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentId, String supplierId, Integer first,
+	int getOpeWarehouseReserveTotalCount(Long reagentId, Long supplierId);
+	List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentIName, Long supplierId, Integer first,
 			Integer pageSize,String productSn,String warehouseName);
-	int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId,String productSn,String warehouseName);
-	OpeWarehouseReserve getOpeWarehouseReserve(String reagentId, String articleNumber);
-	OpeWarehouseReserve getOpeWarehouseReserve2(String reagentId, String articleNumber,String warehouseId);
+	int getOpeWarehouseReserveTotalCountByName(String reagentName, Long supplierId,String productSn,String warehouseName);
+	OpeWarehouseReserve getOpeWarehouseReserve(Long reagentId, String articleNumber);
+	OpeWarehouseReserve getOpeWarehouseReserve2(Long reagentId, String articleNumber,Long warehouseId);
 
-	List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String articleNumber,String warehouseId);
-	OpeWarehouseReserve getOpeWarehouseReserveBy(String reagentId, String articleNumber);
+	List<OpeWarehouseReserve> getOpeWarehouseReserveList(Long reagentId, String articleNumber,Long warehouseId);
+	OpeWarehouseReserve getOpeWarehouseReserveBy(Long reagentId, String articleNumber);
 
 	OpeWarehouseReserve insertOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve);
 	boolean updateOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve);
-	void claim(List<OpeWarehouseReserve> selectedList, String userId,String projectNum,String receiptNumber);
-	void claimForPerson(List<OpeApplyReserve> selectedListForPerson, String userId,String projectNum,String laboratoryId,String laboratoryContainerId,String receiptNumber);
-	void reagentDStore(List<OpeApply> reagentDStoreList, String loginUserId);
-	void reagentDStore2(List<OpeApply> reagentDStoreList, String loginUserId);
+	void claim(List<OpeWarehouseReserve> selectedList, Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber);
+	void claimForPerson(List<OpeApplyReserve> selectedListForPerson, Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber);
+	void reagentDStore(List<OpeApply> reagentDStoreList, Long loginUserId);
+	void reagentDStore2(List<OpeApply> reagentDStoreList, Long loginUserId);
 
-	void reagentDStore3(List<OpeApply> reagentDStoreList, String loginUserId);
+	void reagentDStore3(List<OpeApply> reagentDStoreList, Long loginUserId);
 
-	void reagentDStore4(List<OpeApply> reagentDStoreList, String loginUserId,String receiptNumber);
+	void reagentDStore4(List<OpeApply> reagentDStoreList, Long loginUserId,String receiptNumber);
 
-	public List<OpeWarehouseReserve> selectByReId(String id);
-	public void updateByReId(String newReId,String oldReId);
+	public List<OpeWarehouseReserve> selectByReId(Long id);
+	public void updateByReId(Long newReId,Long oldReId);
 
-	void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo,String consigneeId);
+	void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo,Long consigneeId);
 
-	List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(String id,String articleNumber,boolean flag);
+	List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(Long id,String articleNumber,boolean flag);
 
 	void btWarehouseReserveReduce(List<OpeApplyReserve> opeList);
 
-	List<OpeWarehouseReserve> selectWarehouseByRidAndArticleNumberAndWarehouse(String id, String articleNumber, String warehouseId);
+	List<OpeWarehouseReserve> selectWarehouseByRidAndArticleNumberAndWarehouse(Long id, String articleNumber, Long warehouseId);
 
-	void updateBtReserve(String id,Integer useNum);
+	void updateBtReserve(Long id,Integer useNum);
 
 	//根据试剂Id查找当前库存
-    int countByReagentId(String id);
+    int countByReagentId(Long id);
 
-    OpeWarehouseReserve getRowData(String rowKey);
+    OpeWarehouseReserve getRowData(Long rowKey);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
index 16c0ca7..4628a07 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
@@ -6,12 +6,12 @@
 
 import javax.annotation.Resource;
 
-import com.nanometer.smartlab.dao.OpeApplyDao;
-import com.nanometer.smartlab.dao.OpeReagentStatusDao;
+import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.enumtype.ValidFlag;
 import com.nanometer.smartlab.exception.AlarmCode;
 import com.nanometer.smartlab.exception.AlarmException;
+import com.nanometer.smartlab.util.FacesUtils;
 import com.nanometer.smartlab.util.IDUtils;
 
 import org.apache.commons.lang.StringUtils;
@@ -24,8 +24,6 @@
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.nanometer.smartlab.dao.BaseMetaDao;
-import com.nanometer.smartlab.dao.OpeWarehouseReserveDao;
 import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
 import com.nanometer.smartlab.entity.enumtype.OperateStatus;
 import com.nanometer.smartlab.entity.enumtype.StoreType;
@@ -61,8 +59,11 @@
 	@Resource
 	private OpeLaboratoryReserveService opeLaboratoryReserveService;
 
+	@Resource
+	private OpeLaboratoryReserveDao opeLaboratoryReserveDao;
+
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String supplierId, Integer first,
+	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(Long reagentId, Long supplierId, Integer first,
 			Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
@@ -79,7 +80,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getOpeWarehouseReserveTotalCount(String reagentId, String supplierId) {
+	public int getOpeWarehouseReserveTotalCount(Long reagentId, Long supplierId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentId", reagentId);
@@ -93,11 +94,11 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentId, String supplierId, Integer first,
+	public List<OpeWarehouseReserve> getOpeWarehouseReserveListByName(String reagentName, Long supplierId, Integer first,
 			Integer pageSize,String productSn,String warehouseName) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
-			params.put("reagentName", reagentId);
+			params.put("reagentName", reagentName);
 			params.put("supplierId", supplierId);
 			params.put("first", first);
 			params.put("pageSize", pageSize);
@@ -112,10 +113,10 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getOpeWarehouseReserveTotalCountByName(String reagentId, String supplierId,String productSn,String warehouseName) {
+	public int getOpeWarehouseReserveTotalCountByName(String reagentName, Long supplierId,String productSn,String warehouseName) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
-			params.put("reagentName", reagentId);
+			params.put("reagentName", reagentName);
 			params.put("supplierId", supplierId);
 			params.put("productSn", productSn);
 			params.put("warehouseName", warehouseName);
@@ -128,7 +129,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public OpeWarehouseReserve getOpeWarehouseReserveBy(String reagentId, String articleNumber){
+	public OpeWarehouseReserve getOpeWarehouseReserveBy(Long reagentId, String articleNumber){
 		OpeWarehouseReserve ope=new OpeWarehouseReserve();
 		ope.setReagentId(reagentId);
 		ope.setArticleNumber(articleNumber);
@@ -136,7 +137,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public OpeWarehouseReserve getOpeWarehouseReserve(String reagentId, String articleNumber) {
+	public OpeWarehouseReserve getOpeWarehouseReserve(Long reagentId, String articleNumber) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentId", reagentId);
@@ -154,7 +155,7 @@
 		}
 	}
 	@Transactional(propagation = Propagation.REQUIRED)
-	public OpeWarehouseReserve getOpeWarehouseReserve2(String reagentId, String articleNumber,String warehouseId) {
+	public OpeWarehouseReserve getOpeWarehouseReserve2(Long reagentId, String articleNumber,Long warehouseId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("reagentId", reagentId);
@@ -174,8 +175,8 @@
 	}
 
 	@Override
-	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(String reagentId, String articleNumber,String warehouseId) {
-		Map<String, String> params = new HashMap<>();
+	public List<OpeWarehouseReserve> getOpeWarehouseReserveList(Long reagentId, String articleNumber,Long warehouseId) {
+		Map<String, Object> params = new HashMap<>();
 		params.put("reagentId", reagentId);
 		params.put("warehouseId", warehouseId);
 		params.put("articleNumber", articleNumber);
@@ -186,9 +187,9 @@
 	@Transactional(propagation = Propagation.REQUIRED)
 	public OpeWarehouseReserve insertOpeWarehouseReserve(OpeWarehouseReserve opeWarehouseReserve) {
 		try {
-			if (opeWarehouseReserve.getId() == null) {
-				opeWarehouseReserve.setId(IDUtils.uuid());
-			}
+//			if (opeWarehouseReserve.getId() == null) {
+//				opeWarehouseReserve.setId(IDUtils.uuid());
+//			}
 			this.opeWarehouseReserveDao.insertOpeWarehouseReserve(opeWarehouseReserve);
 			return opeWarehouseReserve;
 		} catch (DuplicateKeyException ex) {
@@ -226,12 +227,12 @@
 	}
 
 	@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
-	public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,String userId,String projectNum,String laboratoryId,String laboratoryContainerId,String receiptNumber){
+	public void claimForPerson(List<OpeApplyReserve> selectedListForPerson,Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber){
 		try{
 			for(OpeApplyReserve app:selectedListForPerson){
-				List<String> reagentCodes = app.getReagentCode();
+				List<String> reagentCodes = app.getReagentCodes();
 				if (reagentCodes != null && reagentCodes.size() > 0) {
-					this.opeReagentStatusService.updateReagentStatus3(reagentCodes,userId,projectNum,laboratoryId,laboratoryContainerId,receiptNumber);
+					this.opeReagentStatusService.updateReagentStatus3(reagentCodes,userId,projectId,laboratoryId,laboratoryContainerId,receiptNumber);
 
 					//更新是现实库存
 					OpeLaboratoryReserve lr=new OpeLaboratoryReserve();
@@ -290,43 +291,63 @@
 	}
 
 	// 仓库领用
-	@Transactional(propagation = Propagation.REQUIRED)
-	public void claim(List<OpeWarehouseReserve> selectedList, String userId,String projectNum,String receiptNumber) {
-		try {
-			for (OpeWarehouseReserve opeWarehouseReserve : selectedList) {
-				List<String> reagentCodes = opeWarehouseReserve.getReagentCodes();
-				if (reagentCodes != null && reagentCodes.size() > 0) {
-					for (String opeReagentStatusId : reagentCodes) {
-						OpeReagentStatus opeReagentStatus = this.opeReagentStatusService
-								.getOpeReagentStatus(opeReagentStatusId);
-						opeReagentStatus.setUserId(userId);
-						opeReagentStatus.setProjectNum(projectNum);
-						//boolean flag = this.opeReagentStatusService.updateReagentStatus(opeReagentStatus);
-						this.opeReagentStatusService.updateReagentStatus(opeReagentStatus,receiptNumber);
-						//if (flag) {
-							//opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1);
-							//opeWarehouseReserve.setSelectNum(0);
-						//}
+	@Transactional(propagation = Propagation.REQUIRED,rollbackFor = RuntimeException.class)
+	public void claim(List<OpeWarehouseReserve> selectedList, Long userId,Long projectId,Long laboratoryId,Long laboratoryContainerId,String receiptNumber) {
+		for (OpeWarehouseReserve opeWarehouseReserve : selectedList) {
+			List<OpeLaboratoryReserve>lrList=new ArrayList<>();
+			List<Long> reagentStatusIds=new ArrayList<>();
+			List<String> reagentCodes = opeWarehouseReserve.getReagentCodes();
+			List<OpeUseFlow> opeUseFlowList=new ArrayList<>();
+			if (reagentCodes != null && !reagentCodes.isEmpty()) {
+				for (String reagentCode : reagentCodes) {
+					OpeReagentStatus opeReagentStatus = this.opeReagentStatusService
+							.getOpeReagentStatusByCode(reagentCode);
+					if (!this.opeReagentStatusService.isAllowWarehouseUse(opeReagentStatus)) {
+						throw new BusinessException(ExceptionEnumCode.SYS_ERR,"只能申领在仓库的试剂");
 					}
+
+					opeReagentStatus.setUserId(userId);
+					opeReagentStatus.setProjectId(projectId);
+				//	this.opeReagentStatusService.updateReagentStatus(opeReagentStatus,receiptNumber);
+					reagentStatusIds.add(opeReagentStatus.getId());
+					OpeLaboratoryReserve lr = new OpeLaboratoryReserve();
+					lr.setReagentId(opeWarehouseReserve.getReagentId());
+					lr.setHouseId(laboratoryId);
+					lr.setContainerId(laboratoryContainerId);
+					lr.setReserve(opeWarehouseReserve.getSelectNum());
+					lr.setUserId(userId);
+					lr.setValidFlag(ValidFlag.VALID);
+					lrList.add(lr);
+
+					OpeUseFlow opeUseFlow = new OpeUseFlow();
+					opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode());
+					opeUseFlow.setStatus(opeReagentStatus.getStatus());
+					opeUseFlow.setHouseId(opeReagentStatus.getHouseId());
+					opeUseFlow.setContainerId(opeReagentStatus.getContainerId());
+					opeUseFlow.setUserId(opeReagentStatus.getUserId());
+					opeUseFlow.setPlace(opeReagentStatus.getPlace());
+					opeUseFlow.setRemainder(opeReagentStatus.getRemainder());
+					opeUseFlow.setReceiptNumber(receiptNumber);
+					opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
+					opeUseFlowList.add(opeUseFlow);
 				}
-				opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve()-opeWarehouseReserve.getSelectNum());
-				opeWarehouseReserveDao.updateOpeWarehouseReserve(opeWarehouseReserve);
 			}
-		} catch (DuplicateKeyException ex) {
-			logger.warn(ex.getMessage(), ex);
-			throw new AlarmException(AlarmCode.DATA_DUPLICATE,
-					MessageUtil.getMessage(AlarmCode.DATA_DUPLICATE.getCode()));
-		} catch (DataIntegrityViolationException ex) {
-			logger.warn(ex.getMessage(), ex);
-			throw new AlarmException(AlarmCode.DATA_CONFICT, MessageUtil.getMessage(AlarmCode.DATA_CONFICT.getCode()));
-		} catch (DataAccessException ex) {
-			logger.error(ex.getMessage(), ex);
-			throw new BusinessException(ExceptionEnumCode.DB_ERR,
-					MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), ex);
+			if(reagentStatusIds.size()>0){
+				this.opeReagentStatusDao.batchUpdateReagentStatusByIds(reagentStatusIds,laboratoryId,laboratoryContainerId,ArrivalStatus.NOREGISTER.getKey());
+			}
+			if(lrList.size()>0){
+				this.opeLaboratoryReserveDao.batchInsert(lrList);
+			}
+			if(opeUseFlowList.size()>0){
+				this.opeUseFlowService.batchInsertOpeUseFlow(opeUseFlowList);
+			}
+			opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve()-opeWarehouseReserve.getSelectNum());
+			opeWarehouseReserveDao.updateOpeWarehouseReserve(opeWarehouseReserve);
 		}
+
 	}
 
-	public void reagentDStore2(List<OpeApply> reagentDStoreList, String loginUserId){
+	public void reagentDStore2(List<OpeApply> reagentDStoreList, Long loginUserId){
 		if (reagentDStoreList == null) {
 			return;
 		}
@@ -362,7 +383,7 @@
 					//opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
@@ -394,13 +415,13 @@
 					opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
 					//opeReagentStatus.setPlace(opeApply.getPlaceId());
 					//opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
-					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE.getKey());
 					this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
 
 					// 试剂使用情况入库insert
@@ -412,13 +433,9 @@
 					opeUseFlow.setUserId(opeReagentStatus.getUserId());
 					opeUseFlow.setPlace(opeReagentStatus.getPlace());
 					opeUseFlow.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
-					opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+					opeUseFlow.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-					Map<String, String> metaMap = new HashMap<>();
-					metaMap.put("groupId", "operate_status");
-					metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-					List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-					opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+					opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
 					this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 					// 试剂使用情况领用insert
 					OpeUseFlow ouf=new OpeUseFlow();
@@ -429,13 +446,9 @@
 					ouf.setUserId(opeReagentStatus.getUserId());
 					ouf.setPlace(opeReagentStatus.getPlace());
 					ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
-					ouf.setStoreType(StoreType.DIRECTSTORE);
+					ouf.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-					Map<String, String> metaMap2 = new HashMap<>();
-					metaMap2.put("groupId", "operate_status");
-					metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-					List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
-					ouf.setOperateState(baseMetaList2.get(0).getId());
+					ouf.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
 					this.opeUseFlowService.insertOpeUseFlow(ouf);
 				}
 			}
@@ -443,7 +456,7 @@
 		}
 	}
 
-	public void reagentDStore4(List<OpeApply> reagentDStoreList, String loginUserId,String receiptNumber){
+	public void reagentDStore4(List<OpeApply> reagentDStoreList, Long loginUserId,String receiptNumber){
 		if (reagentDStoreList == null) {
 			return;
 		}
@@ -460,7 +473,7 @@
 					//opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
@@ -492,13 +505,13 @@
 					opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
 					//opeReagentStatus.setPlace(opeApply.getPlaceId());
 					//opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(new BigDecimal(opeApply.getReagent().getMainMetering())):new BigDecimal(0));
-					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE.getKey());
 					this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
 
 
@@ -511,13 +524,9 @@
 					ouf.setUserId(opeReagentStatus.getUserId());
 					ouf.setPlace(opeReagentStatus.getPlace());
 					ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
-					ouf.setStoreType(StoreType.DIRECTSTORE);
+					ouf.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-					Map<String, String> metaMap2 = new HashMap<>();
-					metaMap2.put("groupId", "operate_status");
-					metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-					List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
-					ouf.setOperateState(baseMetaList2.get(0).getId());
+					ouf.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
 					ouf.setReceiptNumber(receiptNumber);
 					this.opeUseFlowService.insertOpeUseFlow(ouf);
 				}
@@ -525,7 +534,7 @@
 
 		}
 	}
-	public void reagentDStore3(List<OpeApply> reagentDStoreList, String loginUserId){
+	public void reagentDStore3(List<OpeApply> reagentDStoreList, Long loginUserId){
 		if (reagentDStoreList == null) {
 			return;
 		}
@@ -543,11 +552,11 @@
 					opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER);
+					opeReagentStatus.setStatus(ArrivalStatus.NOREGISTER.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
-					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE.getKey());
 					this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
 
 
@@ -560,13 +569,9 @@
 					ouf.setUserId(opeReagentStatus.getUserId());
 					ouf.setPlace(opeReagentStatus.getPlace());
 					ouf.setRemainder(opeApply.getReagent().getMainMetering()!=null?opeApply.getReagent().getMainMetering():new BigDecimal(0));
-					ouf.setStoreType(StoreType.DIRECTSTORE);
+					ouf.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-					Map<String, String> metaMap2 = new HashMap<>();
-					metaMap2.put("groupId", "operate_status");
-					metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-					List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
-					ouf.setOperateState(baseMetaList2.get(0).getId());
+					ouf.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
 					this.opeUseFlowService.insertOpeUseFlow(ouf);
 				}
 			}
@@ -574,12 +579,12 @@
 		}
 	}
 	@Override
-	public List<OpeWarehouseReserve> selectByReId(String id) {
+	public List<OpeWarehouseReserve> selectByReId(Long id) {
 		return this.opeWarehouseReserveDao.selectByReId(id);
 	}
 
 	@Override
-	public void updateByReId(String newReId, String oldReId) {
+	public void updateByReId(Long newReId, Long oldReId) {
 		Map<String, Object> params=new HashMap();
 		params.put("newReId",newReId);
 		params.put("oldReId",oldReId);
@@ -588,7 +593,7 @@
 
     @Override
 	@Transactional
-    public void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo,String consigneeId) {
+    public void insertOpeWarehouseReserve2(OpeApplyReserve opeApplyReserve, OpeOrder oo,Long consigneeId) {
 
 		OpeWarehouseReserve ope = this.getOpeWarehouseReserve2(opeApplyReserve.getReagent().getId(), opeApplyReserve.getArticleNumber(),opeApplyReserve.getHouseId());
 		if (ope == null) {
@@ -608,7 +613,7 @@
 			ope.setApplyCode(opeApplyReserve.getApplyCode());
 			//批号
 			ope.setArticleNumber(opeApplyReserve.getArticleNumber());
-			ope.setId(IDUtils.uuid());
+			//ope.setId(IDUtils.uuid());
 			//新增收货人 保存在仓库库存表
 			ope.setUserId(consigneeId);
 			opeWarehouseReserveDao.insertOpeWarehouseReserve2(ope);
@@ -623,8 +628,8 @@
     }
 
 	@Override
-	public List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(String id,String articleNumber,boolean flag) {
-		Map<String, String> params = new HashMap<>();
+	public List<OpeWarehouseReserve> selectWarehouseByReagentIdAndArticleNumber(Long id,String articleNumber,boolean flag) {
+		Map<String, Object> params = new HashMap<>();
 		params.put("reagentId", id);
 		params.put("articleNumber", articleNumber);
 		List<OpeWarehouseReserve> reserveList = opeWarehouseReserveDao.selectWarehouseByReagentIdAndArticleNumber(params);
@@ -645,8 +650,8 @@
 	/**
 	* 补贴扣库存去除有条码的数据
 	*/
-	public List<OpeWarehouseReserve> selectWarehouseByRidAndArticleNumberAndWarehouse(String id,String articleNumber,String warehouseId) {
-		Map<String, String> params = new HashMap<>();
+	public List<OpeWarehouseReserve> selectWarehouseByRidAndArticleNumberAndWarehouse(Long id,String articleNumber,Long warehouseId) {
+		Map<String, Object> params = new HashMap<>();
 		params.put("reagentId", id);
 		params.put("articleNumber", articleNumber);
 		params.put("warehouseId", warehouseId);
@@ -665,12 +670,12 @@
 	}
 
 	@Override
-	public void updateBtReserve(String id, Integer useNum) {
+	public void updateBtReserve(Long id, Integer useNum) {
 		opeWarehouseReserveDao.updateBtReserve(id, useNum);
 	}
 
     @Override
-    public int countByReagentId(String id) {
+    public int countByReagentId(Long id) {
 		int num = 0;
 		if (opeWarehouseReserveDao.countByReagentId(id) != null) {
 			num = opeWarehouseReserveDao.countByReagentId(id);
@@ -679,7 +684,7 @@
     }
 
     @Override
-    public OpeWarehouseReserve getRowData(String rowKey) {
+    public OpeWarehouseReserve getRowData(Long rowKey) {
         return opeWarehouseReserveDao.getRowData(rowKey);
     }
 
@@ -689,8 +694,8 @@
 			return;
 		}
 		for (OpeApplyReserve oar : opeList) {
-			String reagentId = oar.getReagent().getId();
-			List<String> reagentCodes = new ArrayList<>(oar.getReagentCode());
+			Long reagentId = oar.getReagent().getId();
+			List<String> reagentCodes = new ArrayList<>(oar.getReagentCodes());
 			//开始库存扣除
 			List<OpeWarehouseReserve> cacheUpdateList = oar.getCacheUpdateList();
 			for (OpeWarehouseReserve owr : cacheUpdateList) {
@@ -718,7 +723,7 @@
 							// 试剂使用情况入库insert TODO 流向需要当时的时间和地点
 							OpeUseFlow opeUseFlow = new OpeUseFlow();
 							opeUseFlow.setReagentCode(reagentCodes.get(0));
-							opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE);
+							opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE.getKey());
 							opeUseFlow.setUserId(warehouseReserve.getUserId());
 							//仓库地点
 							opeUseFlow.setHouseId(warehouseReserve.getWarehouseId());
@@ -726,13 +731,9 @@
 							opeUseFlow.setRemainder(oar.getReagent().getMainMetering()!=null?oar.getReagent().getMainMetering():new BigDecimal(0));
 							//入库时间
 							opeUseFlow.setCreateTime(warehouseReserve.getUpdateTime());
-							opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+							opeUseFlow.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-							Map<String, String> metaMap = new HashMap<>();
-							metaMap.put("groupId", "operate_status");
-							metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-							List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-							opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+							opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
 							this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 							//更新试剂状态表 :批号
 							opeReagentStatusDao.updateArticleNumberByRCode(reagentCodes.get(0),warehouseReserve.getArticleNumber());
@@ -758,7 +759,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public void reagentDStore(List<OpeApply> reagentDStoreList, String loginUserId) {
+	public void reagentDStore(List<OpeApply> reagentDStoreList, Long loginUserId) {
 
 		if (reagentDStoreList == null) {
             return;
@@ -799,13 +800,13 @@
 					opeReagentStatus.setReagentId(opeApply.getReagent().getId());
 					opeReagentStatus.setArticleNumber(opeApply.getArticleNumber());
 					opeReagentStatus.setReagentCode(reagentCode);
-					opeReagentStatus.setStatus(ArrivalStatus.WAREHOUSE);
+					opeReagentStatus.setStatus(ArrivalStatus.WAREHOUSE.getKey());
 					opeReagentStatus.setHouseId(opeApply.getHouseId());
 					opeReagentStatus.setContainerId(opeApply.getContainerId());
 					opeReagentStatus.setUserId(loginUserId);
-					opeReagentStatus.setPlace(opeApply.getPlaceId());
+					opeReagentStatus.setPlace(opeApply.getPlace());
 					opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering()!=null?(opeApply.getReagent().getMainMetering()):new BigDecimal(0));
-					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE);
+					opeReagentStatus.setStoreType(StoreType.DIRECTSTORE.getKey());
 					this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus);
 
 					// 试剂使用情况insert
@@ -817,13 +818,9 @@
 					opeUseFlow.setUserId(opeReagentStatus.getUserId());
 					opeUseFlow.setPlace(opeReagentStatus.getPlace());
 					opeUseFlow.setRemainder(opeApply.getReagent().getMainMetering()!=null?(opeApply.getReagent().getMainMetering()):new BigDecimal(0));
-					opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+					opeUseFlow.setStoreType(StoreType.DIRECTSTORE.getKey());
 
-					Map<String, String> metaMap = new HashMap<>();
-					metaMap.put("groupId", "operate_status");
-					metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-					List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-					opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+					opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
 
 
 					this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
@@ -843,7 +840,7 @@
                 opeWarehouseReserve.setUserId(loginUserId);
             }
             opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + opeApply.getArrivalNum());
-            if (StringUtils.isBlank(opeWarehouseReserve.getId())) {
+            if (opeWarehouseReserve.getId()!=null) {
                 this.insertOpeWarehouseReserve(opeWarehouseReserve);
             } else {
                 this.updateOpeWarehouseReserve(opeWarehouseReserve);
diff --git a/src/main/java/com/nanometer/smartlab/service/SysContainerSensorsServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysContainerSensorsServiceImpl.java
index c684dfd..eff9426 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysContainerSensorsServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysContainerSensorsServiceImpl.java
@@ -52,7 +52,7 @@
         for (Map params : sensorsList) {
             String containerCode = params.containsKey("containerCode")?params.get("containerCode").toString():"";
             SysContainerSensors sensors = new SysContainerSensors();
-            sensors.setId(IDUtils.uuid());
+          //  sensors.setId(IDUtils.uuid());
             sensors.setFlag(params.containsKey("Flag")?String.valueOf(params.get("Flag")):"");
             sensors.setHumidity(params.containsKey("Humidity")?(int) params.get("Humidity"):0);
             sensors.setTemp(params.containsKey("Temp")?(double) params.get("Temp"):0);
diff --git a/src/main/java/com/nanometer/smartlab/service/SysControllerService.java b/src/main/java/com/nanometer/smartlab/service/SysControllerService.java
index 3d656ea..306cec0 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysControllerService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysControllerService.java
@@ -10,7 +10,7 @@
 
 	List<SysController> getAllControllerList();
 	
-    SysController getSysController(Integer id);
+    SysController getSysController(Long id);
 
     boolean getSysControllerByCode(String code);
     
@@ -24,7 +24,7 @@
     
     int getSysControllerListCount(String code,String name);
     
-    int deleteSysControllers(List<Integer> ids);
+    int deleteSysControllers(List<Long> ids);
 
     void uploadFile(FileUploadEvent event) throws Exception;
 
diff --git a/src/main/java/com/nanometer/smartlab/service/SysControllerServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysControllerServiceImpl.java
index 4a1b80d..ab1463e 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysControllerServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysControllerServiceImpl.java
@@ -100,7 +100,7 @@
 	}
 
 	@Override
-	public int deleteSysControllers(List<Integer> ids) {
+	public int deleteSysControllers(List<Long> ids) {
 		try {
 			return this.sysControllerDao.deleteSysControllers(ids);
 		} catch (DataAccessException e) {
@@ -124,7 +124,7 @@
 
 		}
 		//主控类型
-		Map<String, String> typeMap = new HashMap<>();
+		Map<String, Long> typeMap = new HashMap<>();
 		if (typeList != null && typeList.size() > 0) {
 			typeList.forEach(type->{
 				typeMap.put(type.getMetaValue(), type.getId());
@@ -224,7 +224,7 @@
 	}
 
 	@Override
-	public SysController getSysController(Integer id) {
+	public SysController getSysController(Long id) {
 		try {
 			return this.sysControllerDao.getSysController(id);
 		} catch (DataAccessException e) {
diff --git a/src/main/java/com/nanometer/smartlab/service/SysFileService.java b/src/main/java/com/nanometer/smartlab/service/SysFileService.java
index 507ec33..8eaaa9a 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysFileService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysFileService.java
@@ -5,7 +5,7 @@
 import java.util.List;
 
 public interface SysFileService {
-    SysFile getSysFileById(String id);
+    SysFile getSysFileById(Long id);
 
 
     boolean insertSysFile(SysFile SysFile);
diff --git a/src/main/java/com/nanometer/smartlab/service/SysFileServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysFileServiceImpl.java
index 9256ab9..d572a31 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysFileServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysFileServiceImpl.java
@@ -30,13 +30,13 @@
 
 
     @Override
-    public SysFile getSysFileById(String id) {
+    public SysFile getSysFileById(Long id) {
         return sysFileDao.getSysFileById(id);
     }
 
     @Override
     public boolean insertSysFile(SysFile SysFile) {
-        SysFile.setId(IDUtils.uuid());
+     //   SysFile.setId(IDUtils.uuid());
         SysFile.setValidFlag(ValidFlag.VALID);
         return sysFileDao.insertSysFile(SysFile)>0;
     }
@@ -53,7 +53,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (SysFile sysFile : selectedList) {
                 ids.add(sysFile.getId());
             }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerService.java b/src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerService.java
index d2fc092..b9df964 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerService.java
@@ -13,23 +13,23 @@
  */
 public interface SysLaboratoryContainerService {
 
-    List<SysLaboratoryContainer> getSysLaboratoryContainerList(String laboratoryType, String laboratoryName, String laboratoryId
-            ,String project,String controllerName, Integer first, Integer pageSize);
+    List<SysLaboratoryContainer> getSysLaboratoryContainerList(String laboratoryType, String laboratoryName, Long laboratoryId
+            ,String project, Integer first, Integer pageSize);
 
     CommonPage<SysLaboratoryContainer> getSysLaboratoryContainerList(Integer pageNum,Integer pageSize,String name,String controllerName);
-    List<SysLaboratoryContainer> getSysLaboratoryContainerList(String laboratoryId);
-    int getSysLaboratoryContainerTotalCount(String laboratoryType, String laboratoryName,String laboratoryId,String project,String controllerName);
-    SysLaboratoryContainer getSysLaboratoryContainer(String id);
+    List<SysLaboratoryContainer> getSysLaboratoryContainerList(Long laboratoryId);
+    int getSysLaboratoryContainerTotalCount(String laboratoryType, String laboratoryName,Long laboratoryId,String project);
+    SysLaboratoryContainer getSysLaboratoryContainer(Long id);
     SysLaboratoryContainer getSysLaboratoryContainerByContainerCode(String containerCode);
     SysLaboratoryContainer insertSysLaboratoryContainer(SysLaboratoryContainer sysLaboratory);
     boolean updateSysLaboratoryContainer(SysLaboratoryContainer sysLaboratory);
     boolean deleteSysLaboratoryContainer(List<SysLaboratoryContainer> sysLaboratoryList);
-    boolean isSysLaboratoryContainerExist(String containerCode, String editId);
+    boolean isSysLaboratoryContainerExist(String containerCode, Long editId);
     List<SysLaboratoryContainer> getSysLaboratoryContainerInfoList(String startTime, String endTime);
 
     void insertSysReagentList(List<SysLaboratoryContainer> list);
 
-     void updateInfo(Float temp,Float humidity,Float voc1,String code,String flag);
+     void updateInfo(Float temp,Float humidity,Float voc1,Long code,String flag);
 
     List<Map> getContainerPersonInCharge(String containerCode);
 
diff --git a/src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerServiceImpl.java
index 03812b6..4e15afb 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysLaboratoryContainerServiceImpl.java
@@ -37,7 +37,7 @@
 
 	@Transactional(propagation = Propagation.REQUIRED)
 	public List<SysLaboratoryContainer> getSysLaboratoryContainerList(String laboratoryType, String laboratoryName,
-			String laboratoryId,String project,String controllerName, Integer first, Integer pageSize) {
+			Long laboratoryId,String project, Integer first, Integer pageSize) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			if (StringUtils.isNotBlank(laboratoryType)) {
@@ -46,11 +46,10 @@
 			if (StringUtils.isNotBlank(laboratoryName)) {
 				params.put("laboratoryName", "%" + laboratoryName + "%");
 			}
-			if (StringUtils.isNotBlank(laboratoryId)) {
+			if (laboratoryId!=null) {
 				params.put("laboratoryId", laboratoryId);
 			}
 			params.put("project", project);
-			params.put("controllerName", controllerName);
 			params.put("first", first);
 			params.put("pageSize", pageSize);
 			return this.sysLaboratoryContainerDao.getSysLaboratoryContainerList(params);
@@ -95,12 +94,12 @@
 
 	@Transactional(propagation = Propagation.REQUIRED)
 	public List<SysLaboratoryContainer> getSysLaboratoryContainerList(
-			String laboratoryId) {
-		 return getSysLaboratoryContainerList(null,null,laboratoryId,null,null,null,null);
+			Long laboratoryId) {
+		 return getSysLaboratoryContainerList(null,null,laboratoryId,null,null,null);
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public int getSysLaboratoryContainerTotalCount(String laboratoryType, String laboratoryName, String laboratoryId,String project,String controllerName) {
+	public int getSysLaboratoryContainerTotalCount(String laboratoryType, String laboratoryName, Long laboratoryId,String project) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			if (StringUtils.isNotBlank(laboratoryType)) {
@@ -109,11 +108,10 @@
 			if (StringUtils.isNotBlank(laboratoryName)) {
 				params.put("laboratoryName", "%" + laboratoryName + "%");
 			}
-			if (StringUtils.isNotBlank(laboratoryId)) {
+			if (laboratoryId!=null) {
 				params.put("laboratoryId", laboratoryId);
 			}
 			params.put("project", project);
-			params.put("controllerName", controllerName);
 			return this.sysLaboratoryContainerDao.getSysLaboratoryContainerTotalCount(params);
 		} catch (DataAccessException e) {
 			logger.error(e.getMessage(), e);
@@ -123,7 +121,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public SysLaboratoryContainer getSysLaboratoryContainer(String id) {
+	public SysLaboratoryContainer getSysLaboratoryContainer(Long id) {
 		try {
 			return this.sysLaboratoryContainerDao.getSysLaboratoryContainer(id);
 		} catch (DataAccessException e) {
@@ -147,9 +145,9 @@
 	@Transactional(propagation = Propagation.REQUIRED)
 	public SysLaboratoryContainer insertSysLaboratoryContainer(SysLaboratoryContainer sysLaboratoryContainer) {
 		try {
-			if (sysLaboratoryContainer.getId() == null) {
-				sysLaboratoryContainer.setId(IDUtils.uuid());
-			}
+//			if (sysLaboratoryContainer.getId() == null) {
+//				sysLaboratoryContainer.setId(IDUtils.uuid());
+//			}
 			this.sysLaboratoryContainerDao.insertSysLaboratoryContainer(sysLaboratoryContainer);
 			this.sysLaboratoryContainerDao.updateSLContainerUser(sysLaboratoryContainer);
 			return sysLaboratoryContainer;
@@ -194,7 +192,7 @@
 				return false;
 			}
 
-			List<String> ids = new ArrayList<String>();
+			List<Long> ids = new ArrayList<Long>();
 			for (SysLaboratoryContainer sysLaboratoryContainer : sysLaboratoryContainerList) {
 				ids.add(sysLaboratoryContainer.getId());
 				this.sysLaboratoryContainerDao.updateSLContainerUser(sysLaboratoryContainer);
@@ -213,7 +211,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public boolean isSysLaboratoryContainerExist(String containerCode, String editId) {
+	public boolean isSysLaboratoryContainerExist(String containerCode, Long editId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("containerCode", containerCode);
@@ -244,16 +242,16 @@
 				container.setId(containermpl.getId());
 				this.sysLaboratoryContainerDao.updateSysLaboratoryContainer(container);
 			}else{
-				if (containermpl == null) {
-					container.setId(IDUtils.uuid());
-				}
+//				if (containermpl == null) {
+//					container.setId(IDUtils.uuid());
+//				}
 				this.sysLaboratoryContainerDao.insertSysLaboratoryContainer(container);
 			}
 		}
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-	public void updateInfo(Float temp,Float humidity,Float voc1,String containerId,String flag) {
+	public void updateInfo(Float temp,Float humidity,Float voc1,Long containerId,String flag) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("temp", temp);
@@ -339,7 +337,7 @@
 				return false;
 			}
 
-			List<String> ids = new ArrayList<String>();
+			List<Long> ids = new ArrayList<Long>();
 			for (SysLaboratory sysLaboratory : sysLaboratoryList) {
 				ids.add(sysLaboratory.getId());
 			}
diff --git a/src/main/java/com/nanometer/smartlab/service/SysLaboratoryService.java b/src/main/java/com/nanometer/smartlab/service/SysLaboratoryService.java
index 11ca396..98ff162 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysLaboratoryService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysLaboratoryService.java
@@ -18,15 +18,15 @@
 
 	List<SysLaboratory> getAllSysLaboratoryList();
 
-	List<SysLaboratory> getSysLaboratoryListByDep(String depId);
+	List<SysLaboratory> getSysLaboratoryListByDep(Long depId);
 
 	int getSysLaboratoryTotalCount(String type, String name,String project);
 
-	boolean isSysLaboratoryExist(String barCode, String editId);
+	boolean isSysLaboratoryExist(String barCode, Long editId);
 
-	SysLaboratory getSysLaboratory(String id);
+	SysLaboratory getSysLaboratory(Long id);
 
-	SysLaboratory getSysLaboratorySimpleInfo(String id);
+	SysLaboratory getSysLaboratorySimpleInfo(Long id);
 
 	SysLaboratory insertSysLaboratory(SysLaboratory sysLaboratory);
 
@@ -38,14 +38,21 @@
 
 	void insertSysReagentList(List<SysLaboratory> sysLaboratoryList);
 
-    void exportLab2Excel(List<Map> list) throws  Exception;
+    void exportLab2Excel(List<SysLaboratory> list) throws  Exception;
 
-	List<Map> exportLabList(String type, String name,String project);
+	List<SysLaboratory> exportLabList(String type, String name,String project);
 
-	List<LaboratoryVo.Laboratory> getLaboratoryByProject(String project);
+	List<LaboratoryVo.Laboratory> getLaboratoryByProject(Long projectId);
 
-	List<SysLaboratory> getSysLaboratoryListByUserId(String userId);
+	List<SysLaboratory> getSysLaboratoryListByUserId(Long userId);
 
 
     List<Map> getPersonInChargeByProjects(String project);
+
+
+	List<SysLaboratory> getLaboratoryByProjectId(Long projectId);
+
+
+
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysLaboratoryServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysLaboratoryServiceImpl.java
index 2fe86b9..e5fb743 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysLaboratoryServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysLaboratoryServiceImpl.java
@@ -3,6 +3,7 @@
 import com.nanometer.smartlab.dao.SysLaboratoryDao;
 import com.nanometer.smartlab.dao.SysUserDao;
 import com.nanometer.smartlab.entity.SysLaboratory;
+import com.nanometer.smartlab.entity.SysProject;
 import com.nanometer.smartlab.entity.SysUser;
 import com.nanometer.smartlab.entity.dto.LaboratoryVo;
 import com.nanometer.smartlab.exception.AlarmCode;
@@ -24,6 +25,7 @@
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * Created by cmower on 17/11/20.
@@ -105,7 +107,7 @@
 		}
 	}
 
-	public SysLaboratory getSysLaboratory(String id) {
+	public SysLaboratory getSysLaboratory(Long id) {
 		try {
 			return this.sysLaboratoryDao.getSysLaboratory(id);
 		} catch (DataAccessException e) {
@@ -115,7 +117,7 @@
 		}
 	}
 
-	public SysLaboratory getSysLaboratorySimpleInfo(String id) {
+	public SysLaboratory getSysLaboratorySimpleInfo(Long id) {
 		try {
 			return this.sysLaboratoryDao.getSysLaboratorySimpleInfo(id);
 		} catch (DataAccessException e) {
@@ -127,9 +129,9 @@
 
 	public SysLaboratory insertSysLaboratory(SysLaboratory sysLaboratory) {
 		try {
-			if (sysLaboratory.getId() == null) {
-				sysLaboratory.setId(IDUtils.uuid());
-			}
+//			if (sysLaboratory.getId() == null) {
+//				sysLaboratory.setId(IDUtils.uuid());
+//			}
 			this.sysLaboratoryDao.insertSysLaboratory(sysLaboratory);
 			return sysLaboratory;
 		} catch (DuplicateKeyException ex) {
@@ -172,7 +174,7 @@
 				return false;
 			}
 
-			List<String> ids = new ArrayList<String>();
+			List<Long> ids = new ArrayList<Long>();
 			for (SysLaboratory sysLaboratory : sysLaboratoryList) {
 				ids.add(sysLaboratory.getId());
 			}
@@ -200,7 +202,7 @@
 	}
 
 
-	public boolean isSysLaboratoryExist(String barCode, String editId) {
+	public boolean isSysLaboratoryExist(String barCode, Long editId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
 			params.put("barCode", barCode);
@@ -245,9 +247,9 @@
 					sysLaboratory.setId(sysLaboratoryTmpl.getId());
 					this.sysLaboratoryDao.updateLabExport(sysLaboratory);
 				}else{
-					if (sysLaboratoryTmpl == null) {
-						sysLaboratory.setId(IDUtils.uuid());
-					}
+//					if (sysLaboratoryTmpl == null) {
+//						sysLaboratory.setId(IDUtils.uuid());
+//					}
 					this.sysLaboratoryDao.insertSysLaboratory(sysLaboratory);
 				}
 			}
@@ -265,7 +267,7 @@
 	}
 
     @Override
-    public void exportLab2Excel(List<Map> list) throws Exception {
+    public void exportLab2Excel(List<SysLaboratory> list) throws Exception {
 
 		Map<String, String> map = new LinkedHashMap<>();
 		map.put("type", "类型");
@@ -275,13 +277,30 @@
 		map.put("location", "地址");
 		map.put("department", "部门");
 		map.put("project", "课题组");
-		ExcelUtils.export2Excel(list,"实验室信息",map);
+		List<Map> labList=new ArrayList<>();
+		for(SysLaboratory sysLaboratory:list){
+			Map<String,Object> labmap=new HashMap<>();
+			labmap.put("type",sysLaboratory.getTypeName());
+			labmap.put("name",sysLaboratory.getName());
+			labmap.put("infoCode",sysLaboratory.getInfoCode());
+			labmap.put("barCode",sysLaboratory.getBarCode());
+			labmap.put("location",sysLaboratory.getLocation());
+			labmap.put("department",sysLaboratory.getDepartmentName());
+			List<SysProject> projects=sysLaboratory.getProjects();
+			List<String> projectNames=new ArrayList<>();
+			if(projects!=null&&projects.size()>0){
+				projectNames=projects.stream().map(SysProject::getProjectName).collect(Collectors.toList());
+			}
+			labmap.put("project",String.join(",",projectNames));
+			labList.add(labmap);
+		}
+		ExcelUtils.export2Excel(labList,"实验室信息",map);
 
 
 	}
 
 	@Override
-	public List<Map> exportLabList(String type, String name,String project) {
+	public List<SysLaboratory> exportLabList(String type, String name,String project) {
 		Map<String,String> params = new HashMap<>();
 		params.put("type", type);
 		params.put("name", name);
@@ -290,17 +309,17 @@
 	}
 
     @Override
-    public List<LaboratoryVo.Laboratory> getLaboratoryByProject(String project) {
-		return sysLaboratoryDao.getLaboratoryByProject(project);
+    public List<LaboratoryVo.Laboratory> getLaboratoryByProject(Long projectId) {
+		return sysLaboratoryDao.getLaboratoryByProject(projectId);
     }
 
 	@Override
-	public List<SysLaboratory> getSysLaboratoryListByUserId(String userId) {
+	public List<SysLaboratory> getSysLaboratoryListByUserId(Long userId) {
 		//1.根据用户的课题组获取实验室,没有就按照部门
 		SysUser user = sysUserDao.getSysUser(userId);
 		Map<String,Object> params = new HashMap<>();
-		if (StringUtils.isNotBlank(user.getProject())){
-			params.put("project", user.getProject());
+		if (user.getProjectId()!=null){
+			params.put("project", user.getProjectId());
 			List<SysLaboratory> list = sysLaboratoryDao.getSysLaboratoryList(params);
 			if (list.size() < 1) {
 				return this.getSysLaboratoryListByDep(user.getDepartment());
@@ -328,10 +347,17 @@
 	}
 
 	@Override
-	public List<SysLaboratory> getSysLaboratoryListByDep(String depId) {
+	public List<SysLaboratory> getLaboratoryByProjectId(Long projectId) {
+		return sysLaboratoryDao.getLaboratoryByProjectId(projectId);
+	}
+
+
+
+	@Override
+	public List<SysLaboratory> getSysLaboratoryListByDep(Long depId) {
 		try {
 			Map<String, Object> params = new HashMap<String, Object>();
-			if (StringUtils.isNotBlank(depId)) {
+			if (depId!=null) {
 				params.put("department", depId);
 			}
 			return this.sysLaboratoryDao.getSysLaboratoryList(params);
diff --git a/src/main/java/com/nanometer/smartlab/service/SysProjectService.java b/src/main/java/com/nanometer/smartlab/service/SysProjectService.java
index 7aad3f5..1031b1a 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysProjectService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysProjectService.java
@@ -7,7 +7,9 @@
 import java.util.List;
 
 public interface SysProjectService {
-    SysProject getSysProject(String id);
+    SysProject getSysProject(Long id);
+
+    SysProject getProjectByProNo(String projectNo);
 
     boolean isSysProjectExist(String projectName, Object o);
 
@@ -19,17 +21,18 @@
 
     int getSysProjectTotalCount();
 
-    SysProject getProjectByProId(String projectId);
 
     List<SysProject> getSysProjectList(int first, int pageSize);
 
-    List<SysProject> getSysProjectList(String sysUserId);
+    List<SysProject> getSysProjectList(Long sysUserId);
 
-    List<SysProject> getSysProjectListByProjectId(String projectId);
+    List<SysProject> getSysProjectListByProjectNo(String projectNo);
 
-    int getSysProjectTotalCountUpdate(String createrUser,String projectId,String projectName,String sysUserName);
+    SysProject getSysProjectListByProjectId(Long id);
 
-    List<SysProject> getSysProjectListUpdate(int first, int pageSize,String createrUser,String projectId,String projectName,String sysUserName);
+    int getSysProjectTotalCountUpdate(Long createrUser,String projectNo,String projectName,String sysUserName);
+
+    List<SysProject> getSysProjectListUpdate(int first, int pageSize,Long createrUser,String projectNo,String projectName,String sysUserName);
 
     void importProject(FileUploadEvent event, SysUser user) throws  Exception;
 
@@ -37,4 +40,10 @@
 
     //课题组是否存在
     Boolean isExistProject(String project);
+
+    SysProject getProjectByName(String projectName);
+
+    String getProjectNameById(Long projectId);
+
+    List<SysProject> getProjectByIds(List<Long>ids);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysProjectServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysProjectServiceImpl.java
index e82e8a7..09cb108 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysProjectServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysProjectServiceImpl.java
@@ -45,14 +45,19 @@
     private SysUserService sysUserService;
 
     @Override
-    public SysProject getSysProject(String id) {
+    public SysProject getSysProject(Long id) {
         return sysProjectDao.getSysProject(id);
     }
 
     @Override
-    public SysProject getProjectByProId(String projectId) {
-        return sysProjectDao.getProjectByProId(projectId);
+    public SysProject getProjectByProNo(String projectNo){
+        return sysProjectDao.getProjectByProNo(projectNo);
     }
+
+//    @Override
+//    public SysProject getProjectByProNo(String projectNo) {
+//        return sysProjectDao.getProjectByProNo(projectId);
+//    }
 
     @Override
     public boolean isSysProjectExist(String projectName, Object o) {
@@ -70,7 +75,6 @@
 
     @Override
     public boolean insertSysProject(SysProject sysProject) {
-        sysProject.setId(IDUtils.uuid());
         sysProject.setValidFlag(1);
         return sysProjectDao.insertSysProject(sysProject) > 0;
     }
@@ -87,7 +91,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (SysProject sysReagent : selectedList) {
                 ids.add(sysReagent.getId());
             }
@@ -113,11 +117,11 @@
     }
 
     @Override
-    public int getSysProjectTotalCountUpdate(String createrUser,String projectId,String projectName,String sysUserName) {
+    public int getSysProjectTotalCountUpdate(Long createrUser,String projectNo,String projectName,String sysUserName) {
         //Map<String, Object> params = new HashMap<>();
         //String user="";
         Map<String, Object> params = new HashMap<>();
-        if (StringUtils.isNotBlank(createrUser)) {
+        if (createrUser!=null) {
             SysUser sysUser = sysUserService.getSysUser(createrUser);
             // 不是管理员时,加入applyUserId
             if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
@@ -125,7 +129,7 @@
                 params.put("createrUser", createrUser);
             }
         }
-        params.put("projectId", projectId);
+        params.put("projectNo", projectNo);
         if(StringUtils.isNotBlank(projectName)){
             params.put("projectName","%"+ projectName+"%");
         }
@@ -137,12 +141,12 @@
     }
 
     @Override
-    public List<SysProject> getSysProjectListUpdate(int first, int pageSize,String createrUser,String projectId,String projectName,String sysUserName) {
+    public List<SysProject> getSysProjectListUpdate(int first, int pageSize,Long createrUser,String projectNo,String projectName,String sysUserName) {
         Map<String, Object> params = new HashMap<>();
         params.put("first", first);
         params.put("pageSize", pageSize);
 
-        if (StringUtils.isNotBlank(createrUser)) {
+        if (createrUser!=null) {
             SysUser sysUser = sysUserService.getSysUser(createrUser);
             // 不是管理员时,加入applyUserId
             if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()
@@ -150,7 +154,7 @@
                 params.put("createrUser", createrUser);
             }
         }
-        params.put("projectId", projectId);
+        params.put("projectNo", projectNo);
         if(StringUtils.isNotBlank(projectName)){
             params.put("projectName","%"+ projectName+"%");
         }
@@ -167,14 +171,14 @@
 
         List<SysUser> userList = sysUserService.getSysUserList(null, null, null, null, null,null,null);
         List<SysProject> sysProjectList = sysProjectDao.getSysProjectList(new HashMap());
-        Map<String,String> userMap = new HashMap();
+        Map<String,Long> userMap = new HashMap();
         Map<String,String> projectMap = new HashMap();
         userList.forEach(user->{
             userMap.put(user.getName(), user.getId());
         });
 
         sysProjectList.forEach(project->{
-            projectMap.put(project.getProjectId(), project.getProjectId());
+            projectMap.put(project.getProjectNo(), project.getProjectNo());
         });
 
         UploadedFile file = event.getFile();
@@ -229,15 +233,14 @@
             }
 
             SysProject sysProject = new SysProject();
-            sysProject.setId(IDUtils.uuid());
             sysProject.setCreaterUser(currentUser.getId());
-            sysProject.setProjectId(valuesList.get(0));
+            sysProject.setProjectNo(valuesList.get(0));
             sysProject.setProjectName(valuesList.get(1));
             sysProject.setSysUserId(userMap.get(valuesList.get(2)));
             sysProject.setRemark(valuesList.get(3));
             sysProjects.add(sysProject);
             //把excel里插入的更新Map
-            projectMap.put(sysProject.getProjectId(), sysProject.getId());
+            projectMap.put(sysProject.getProjectNo(), sysProject.getProjectNo());//------------------&=***
         }
 
         if (sysProjects.size() > 0) {
@@ -256,6 +259,25 @@
     }
 
     @Override
+    public SysProject getProjectByName(String projectName) {
+        return sysProjectDao.getSysProjectByName(projectName);
+    }
+
+    @Override
+    public String getProjectNameById(Long projectId) {
+        SysProject project=this.sysProjectDao.getSysProject(projectId);
+        if(project!=null){
+            return project.getProjectName();
+        }
+        return "";
+    }
+
+    @Override
+    public List<SysProject> getProjectByIds(List<Long> ids) {
+        return this.sysProjectDao.getProjectByIds(ids);
+    }
+
+    @Override
     public List<SysProject> getSysProjectList(int first, int pageSize) {
         Map<String, Object> params = new HashMap<>();
         params.put("first", first);
@@ -264,16 +286,21 @@
     }
 
     @Override
-    public List<SysProject> getSysProjectList(String sysUserId) {
+    public List<SysProject> getSysProjectList(Long sysUserId) {
         Map<String,Object> params=new HashMap<>();
         params.put("sysUserId",sysUserId);
         return sysProjectDao.getSysProjectList(params);
     }
 
 	@Override
-	public List<SysProject> getSysProjectListByProjectId(String projectId) {
+	public List<SysProject> getSysProjectListByProjectNo(String projectNo) {
 		Map<String,Object> params=new HashMap<>();
-        params.put("projectId",projectId);
-        return sysProjectDao.getSysProjectListByProjectId(params);
+        params.put("projectNo",projectNo);
+        return sysProjectDao.getSysProjectListByProjectNo(params);
 	}
+
+
+    public SysProject getSysProjectListByProjectId(Long id){
+        return sysProjectDao.getSysProjectListByProjectId(id);
+    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
index b684a2f..f3b096b 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
@@ -13,35 +13,35 @@
  */
 public interface SysReagentService {
 
-    public List<SysReagent> getSysReagentList(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize);
-    public int getSysReagentTotalCount(String name, String cas, String supplierId,Integer type);
-    public SysReagent getSysReagent(String id);
+    public List<SysReagent> getSysReagentList(String name, String cas, Long supplierId,Integer type, Integer first, Integer pageSize);
+    public int getSysReagentTotalCount(String name, String cas, Long supplierId,Integer type);
+    public SysReagent getSysReagent(Long id);
     public SysReagent insertSysReagent(SysReagent sysReagent);
     public boolean updateSysReagent(SysReagent sysReagent);
     public boolean deleteSysReagent(List<SysReagent> sysReagentList);
     public int insertSysReagentList(List<SysReagent> sysReagentList);
     public int insertSysReagentList2(List<SysReagent> sysReagentList);
 
-    int getSysReagentTotalCountNew(String name, String cas, String supplierId, Integer type,String productSn);
+    int getSysReagentTotalCountNew(String name, String cas, Long supplierId, Integer type,String productSn);
     public List<SysReagent> query();
 
-    Map getReagentDetail(String id);
+    Map getReagentDetail(Long id);
 
-    public List<SysReagent> getSysReagentListNew(String name, String cas, String supplierId, Integer type, Integer first, Integer pageSize,String productSn);
+    public List<SysReagent> getSysReagentListNew(String name, String cas, Long supplierId, Integer type, Integer first, Integer pageSize,String productSn);
 
-    int favorCount(SysUser user, String name, String cas, String supplierId, String productSn,Integer favorFlag);
+    int favorCount(SysUser user, String name, String cas, Long supplierId, String productSn,Integer favorFlag);
 
-    List<SysReagent> favorList(SysUser user, String name, String cas, String supplierId, String productSn,Integer favorFlag, Integer first, Integer pageSize);
+    List<SysReagent> favorList(SysUser user, String name, String cas, Long supplierId, String productSn,Integer favorFlag, Integer first, Integer pageSize);
 
-    int reagentCount(SysUser user, String name, String cas, String supplierId, String productSn);
+    int reagentCount(SysUser user, String name, String cas, Long supplierId, String productSn);
 
-    List<SysReagent> reagentList(SysUser user, String name, String cas, String supplierId, String productSn, int first, int pageSize,int count);
+    List<SysReagent> reagentList(SysUser user, String name, String cas, Long supplierId, String productSn, int first, int pageSize,int count);
 
     CommonPage<SysReagent> reagentList(Integer pageNum, Integer pageSize, String name, String cas);
 
-    String getReagentUnitByReagentId(String reagentId);
+    String getReagentUnitByReagentId(Long reagentId);
 
-    List<SysReagent>  getReagent(String name, String cas, String factory, String specifications, String packing);
+    List<SysReagent>  getReagent(String name, String cas, Long factory, Long specifications, Long packing);
 
     List<SysReagent> selectReagentSafetyNum();
 
@@ -53,13 +53,13 @@
     */
     SysReagent getReagentByDetail(Map<String, Object> detail);
 
-    SysReagent getRowData(String rowKey);
+    SysReagent getRowData(Long rowKey);
 
-    SysReagent getSysReagentListNewRowData(String rowKey);
+    SysReagent getSysReagentListNewRowData(Long rowKey);
 
     boolean export2Excel(List<Map> list, Integer type) throws Exception;
 
-    List<Map> selectAll(String name, String cas, String supplierId, Integer type, String productSn);
+    List<Map> selectAll(String name, String cas, Long supplierId, Integer type, String productSn);
 
-    void updateSysReagentPrice(String reagentId, BigDecimal applyPrice);
+    void updateSysReagentPrice(Long reagentId, BigDecimal applyPrice);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
index 87ac3c1..298406f 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
@@ -40,7 +40,7 @@
     OpeWarehouseReserveService opeWarehouseReserveService;
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<SysReagent> getSysReagentList(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize) {
+    public List<SysReagent> getSysReagentList(String name, String cas, Long supplierId,Integer type, Integer first, Integer pageSize) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             if (StringUtils.isNotBlank(name)) {
@@ -49,7 +49,7 @@
             if (StringUtils.isNotBlank(cas)) {
                 params.put("cas", "%" + cas + "%");
             }
-            if (StringUtils.isNotBlank(supplierId)) {
+            if (supplierId!=null) {
                 params.put("supplierId", supplierId);
             }
             if(type!=null){
@@ -64,14 +64,14 @@
         }
     }
 
-    public List<SysReagent> getSysReagentListNew(String name, String cas, String supplierId,Integer type, Integer first, Integer pageSize,String productSn) {
+    public List<SysReagent> getSysReagentListNew(String name, String cas, Long supplierId,Integer type, Integer first, Integer pageSize,String productSn) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("name", name);
             params.put("cas", cas);
             params.put("supplierId", supplierId);
-            params.put("type", type);
             params.put("first", first);
+            params.put("type", type);
             params.put("pageSize", pageSize);
             params.put("productSn", productSn);
             return this.sysReagentDao.getSysReagentListNew(params);
@@ -86,7 +86,7 @@
     * @date 2020/12/1 17:04
     */
     @Override
-    public int favorCount(SysUser user, String name, String cas, String supplierId, String productSn, Integer favorFlag) {
+    public int favorCount(SysUser user, String name, String cas, Long supplierId, String productSn, Integer favorFlag) {
 
         Map<String, Object> params = new HashMap<>();
         params.put("user", user.getId());
@@ -103,7 +103,7 @@
     * @date 2020/12/1 17:04
     */
     @Override
-    public List<SysReagent> favorList(SysUser user, String name, String cas, String supplierId, String productSn, Integer favorFlag, Integer first, Integer pageSize) {
+    public List<SysReagent> favorList(SysUser user, String name, String cas, Long supplierId, String productSn, Integer favorFlag, Integer first, Integer pageSize) {
         Map<String, Object> params = new HashMap<>();
         params.put("user", user.getId());
         params.put("favorFlag", favorFlag);
@@ -117,7 +117,7 @@
     }
 
     @Override
-    public int reagentCount(SysUser user, String name, String cas, String supplierId, String productSn) {
+    public int reagentCount(SysUser user, String name, String cas, Long supplierId, String productSn) {
         Map<String, Object> params = new HashMap<>();
         params.put("user", user.getId());
         params.put("name", name);
@@ -128,7 +128,7 @@
     }
 
     @Override
-    public List<SysReagent> reagentList(SysUser user, String name, String cas, String supplierId, String productSn, int first, int pageSize,int count) {
+    public List<SysReagent> reagentList(SysUser user, String name, String cas, Long supplierId, String productSn, int first, int pageSize,int count) {
         Map<String, Object> params = new HashMap<>();
         params.put("user", user.getId());
         params.put("name", name);
@@ -170,13 +170,13 @@
     }
 
     @Override
-    public String getReagentUnitByReagentId(String reagentId) {
+    public String getReagentUnitByReagentId(Long reagentId) {
         return sysReagentDao.getReagentUnitByReagentId(reagentId);
     }
 
     @Override
-    public List<SysReagent> getReagent(String name, String cas, String factory, String specifications, String packing) {
-        Map<String, String> params = new HashMap<>();
+    public List<SysReagent> getReagent(String name, String cas, Long factory, Long specifications, Long packing) {
+        Map<String, Object> params = new HashMap<>();
         params.put("name", name);
         params.put("cas", cas);
         params.put("factory", factory);
@@ -211,47 +211,47 @@
     }
 
     @Override
-    public SysReagent getRowData(String rowKey) {
+    public SysReagent getRowData(Long rowKey) {
         return sysReagentDao.getRowData(rowKey);
     }
 
     @Override
-    public SysReagent getSysReagentListNewRowData(String rowKey) {
+    public SysReagent getSysReagentListNewRowData(Long rowKey) {
         return sysReagentDao.getSysReagentListNewRowData(rowKey);
     }
 
     @Override
     public boolean export2Excel(List<Map> list, Integer type) throws Exception {
         Map<String,String> map = new LinkedHashMap<>();
-        if (type == 0){
+        if (type==null||type == 0){
             map.put("kind", "种类");
             map.put("name", "名称");
-            map.put("productSn", "产品编号");
+            map.put("product_sn", "产品编号");
             map.put("cas", "CAS");
-            map.put("reagentType", "试剂类型");
-            map.put("reagentCharacter", "危险性质");
+            map.put("reagent_type", "试剂类型");
+            map.put("reagent_character", "危险性质");
             map.put("supplierName", "供应商");
-            map.put("productHomeName", "厂家");
-            map.put("reagentFormat", "规格");
-            map.put("reagentUnit", "包装");
+            map.put("product_home", "厂家");
+            map.put("reagent_format", "规格");
+            map.put("reagent_unit", "包装");
             map.put("price", "含税售价");
-            map.put("perBox", "每箱数量");
+            map.put("per_box", "每箱数量");
             ExcelUtils.export2Excel(list,"耗材列表",map);
         }else {
             map.put("kind", "种类");
             map.put("name", "试剂名称");
-            map.put("control_products_name", "管制品");
-            map.put("productSn", "产品编号");
+            map.put("control_products", "管制品");
+            map.put("product_sn", "产品编号");
             map.put("cas", "CAS");
-            map.put("reagentType", "试剂类型");
-            map.put("reagentCharacter", "危险性质");
+            map.put("reagent_type", "试剂类型");
+            map.put("reagent_character", "危险性质");
             map.put("supplierName", "供应商");
-            map.put("productHomeName", "厂家");
-            map.put("reagentFormat", "规格");
-            map.put("reagentUnit", "包装");
+            map.put("product_home", "厂家");
+            map.put("reagent_format", "规格");
+            map.put("reagent_unit", "包装");
             map.put("price", "含税售价");
 //            map.put("originprice", "原始售价");
-            map.put("perBox", "每箱数量");
+            map.put("per_box", "每箱数量");
             map.put("safetynum", "安全库存");
             ExcelUtils.export2Excel(list,"试剂列表",map);
         }
@@ -259,7 +259,7 @@
     }
 
     @Override
-    public List<Map> selectAll(String name, String cas, String supplierId, Integer type, String productSn) {
+    public List<Map> selectAll(String name, String cas, Long supplierId, Integer type, String productSn) {
         Map<String, Object> params = new HashMap<String, Object>();
         params.put("name", name);
         params.put("cas", cas);
@@ -270,13 +270,13 @@
     }
 
     @Override
-    public void updateSysReagentPrice(String reagentId, BigDecimal applyPrice) {
+    public void updateSysReagentPrice(Long reagentId, BigDecimal applyPrice) {
         sysReagentDao.updateSysReagentPriceById(reagentId, applyPrice);
     }
 
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public int getSysReagentTotalCount(String name, String cas, String supplierId,Integer type) {
+    public int getSysReagentTotalCount(String name, String cas, Long supplierId,Integer type) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             if (StringUtils.isNotBlank(name)) {
@@ -297,7 +297,7 @@
     }
 
 
-    public int getSysReagentTotalCountNew(String name, String cas, String supplierId,Integer type,String productSn) {
+    public int getSysReagentTotalCountNew(String name, String cas, Long supplierId,Integer type,String productSn) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("name", name);
@@ -317,7 +317,7 @@
 
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public SysReagent getSysReagent(String id) {
+    public SysReagent getSysReagent(Long id) {
         try {
             return this.sysReagentDao.getSysReagent(id);
         } catch (DataAccessException e) {
@@ -329,9 +329,9 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public SysReagent insertSysReagent(SysReagent sysReagent) {
         try {
-            if (sysReagent.getId() == null) {
-                sysReagent.setId(IDUtils.uuid());
-            }
+//            if (sysReagent.getId() == null) {
+//                sysReagent.setId(IDUtils.uuid());
+//            }
             sysReagent.setName(sysReagent.getName().trim());
             this.sysReagentDao.insertSysReagent(sysReagent);
             return sysReagent;
@@ -376,7 +376,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (SysReagent sysReagent : sysReagentList) {
                 //判断试剂在库中是否存在
                 int count = opeWarehouseReserveService.getOpeWarehouseReserveTotalCount(sysReagent.getId(), sysReagent.getSupplierId());
@@ -418,9 +418,9 @@
                         this.sysReagentDao.updateSysReagentForExport(sysReagent);
                     }
                 }else{
-                    if (sysReagent.getId() == null) {
-                        sysReagent.setId(IDUtils.uuid());
-                    }
+//                    if (sysReagent.getId() == null) {
+//                        sysReagent.setId(IDUtils.uuid());
+//                    }
                     this.sysReagentDao.insertSysReagent(sysReagent);
                 }
                 i++;
@@ -446,7 +446,7 @@
     }
 
     @Override
-    public Map getReagentDetail(String id) {
+    public Map getReagentDetail(Long id) {
         return sysReagentDao.getSysReagentDetail(id);
     }
 
@@ -462,9 +462,9 @@
                     sysReagent.setId(sysReagentTmpl.getId());
                     this.sysReagentDao.updateSysReagentForExport(sysReagent);
                 }else{
-                    if (sysReagent.getId() == null) {
-                        sysReagent.setId(IDUtils.uuid());
-                    }
+//                    if (sysReagent.getId() == null) {
+//                        sysReagent.setId(IDUtils.uuid());
+//                    }
                     this.sysReagentDao.insertSysReagent(sysReagent);
                 }
                 i++;
diff --git a/src/main/java/com/nanometer/smartlab/service/SysSequenceServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysSequenceServiceImpl.java
index e3f93dd..32ddde5 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysSequenceServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysSequenceServiceImpl.java
@@ -27,32 +27,30 @@
     @Resource(name = "sysSequenceDao")
     SysSequenceDao sysSequenceDao;
 
-    @Transactional(propagation = Propagation.REQUIRED)
-    private synchronized int getNextVal(String seqId) {
+    public synchronized int getNextVal(String seqName) {
         int result = -1;
         try {
-            if (StringUtils.isNotBlank(seqId)) {
-                SysSequence sequence = this.sysSequenceDao.getSysSequence(seqId);
+            if (seqName!=null) {
+                SysSequence sequence = this.sysSequenceDao.getSysSequenceByName(seqName);
+                int currentVal =0;
                 if (sequence == null) {
                     sequence = new SysSequence();
-                    sequence.setId(seqId);
-                    sequence.setName(seqId);
+                    sequence.setName(seqName);
                     sequence.setMinVal(0);
                     sequence.setMaxVal(99999);
                     sequence.setStep(1);
-                    sequence.setCurrentVal(0);
+                    currentVal = sequence.getStep();
+                    sequence.setCurrentVal(currentVal);
                     this.sysSequenceDao.insertSysSequence(sequence);
+                }else{
+                    currentVal = sequence.getCurrentVal() + sequence.getStep();
+                    if (currentVal > sequence.getMaxVal()) {
+                        currentVal = sequence.getMinVal();
+                    }
+                    sequence.setCurrentVal(currentVal);
+                    this.sysSequenceDao.updateSysSequence(sequence);
                 }
-
-                int currentVal = sequence.getCurrentVal() + sequence.getStep();
-                if (currentVal > sequence.getMaxVal()) {
-                    currentVal = sequence.getMinVal();
-                }
-
-                sequence.setCurrentVal(currentVal);
                 result = currentVal;
-
-                this.sysSequenceDao.updateSysSequence(sequence);
             }
         } catch (Exception e) {
             logger.error(e.getMessage(), e);
@@ -84,7 +82,6 @@
         return result.toString();
     }
 
-    @Transactional(propagation = Propagation.REQUIRED)
     public String getOrderCode() {
         StringBuffer result = new StringBuffer("");
         result.append("OD");
@@ -100,9 +97,7 @@
                 seqStr = String.format("%05d", seq);
             }
         }
-
         result.append(seqStr);
-
         return result.toString();
     }
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysSupplierService.java b/src/main/java/com/nanometer/smartlab/service/SysSupplierService.java
index e57d758..87d777f 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysSupplierService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysSupplierService.java
@@ -14,9 +14,9 @@
     public List<SysSupplier> getSysSupplierList(String name, Integer first, Integer pageSize);
     public List<SysSupplier> getSysSupplierList();
     public int getSysSupplierTotalCount(String name);
-    public SysSupplier getSysSupplier(String id);
-    public String getSysSupplierId(String name, String groupId);
-    public String getSysSupplierIdByname(String name);
+    public SysSupplier getSysSupplier(Long id);
+    public Long getSysSupplierId(String name, Long groupId);
+    public Long getSysSupplierIdByname(String name);
 
 
     public SysSupplier insertSysSupplier(SysSupplier sysSupplier);
diff --git a/src/main/java/com/nanometer/smartlab/service/SysSupplierServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysSupplierServiceImpl.java
index 0ab77b4..01a3dd0 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysSupplierServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysSupplierServiceImpl.java
@@ -74,7 +74,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public SysSupplier getSysSupplier(String id) {
+    public SysSupplier getSysSupplier(Long id) {
         try {
             return this.sysSupplierDao.getSysSupplier(id);
         } catch (DataAccessException e) {
@@ -84,7 +84,7 @@
     }
 
     @Override
-    public String getSysSupplierId(String name, String groupId) {
+    public Long getSysSupplierId(String name, Long groupId) {
         try {
             return this.sysSupplierDao.getSysSupplierId(name, groupId);
         } catch (DataAccessException e) {
@@ -94,7 +94,7 @@
     }
 
     @Override
-    public String getSysSupplierIdByname(String name) {
+    public Long getSysSupplierIdByname(String name) {
         try {
             return this.sysSupplierDao.getSysSupplierIdByname(name);
         } catch (DataAccessException e) {
@@ -106,9 +106,9 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public SysSupplier insertSysSupplier(SysSupplier sysSupplier) {
         try {
-            if (sysSupplier.getId() == null) {
-                sysSupplier.setId(IDUtils.uuid());
-            }
+//            if (sysSupplier.getId() == null) {
+//                sysSupplier.setId(IDUtils.uuid());
+//            }
             this.sysSupplierDao.insertSysSupplier(sysSupplier);
             return sysSupplier;
         } catch (DuplicateKeyException ex) {
@@ -151,7 +151,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (SysSupplier sysSupplier : sysSupplierList) {
                 ids.add(sysSupplier.getId());
             }
@@ -176,7 +176,7 @@
     public void importSupplier(FileUploadEvent event) throws Exception {
 
         List<SysSupplier> list = sysSupplierDao.getSysSupplierList(new HashMap());
-        Map<String, String> supplierMap = new HashMap();
+        Map<String, Long> supplierMap = new HashMap();
         list.forEach(supplier -> {
             supplierMap.put(supplier.getName(), supplier.getId());
         });
@@ -228,7 +228,7 @@
                 continue;
             }
 
-            sysSupplier.setId(IDUtils.uuid());
+         //   sysSupplier.setId(IDUtils.uuid());
             sysSupplier.setName(valuesList.get(0));
             sysSupplier.setPersonName(valuesList.get(1));
             sysSupplier.setPhone(valuesList.get(2));
diff --git a/src/main/java/com/nanometer/smartlab/service/SysUserService.java b/src/main/java/com/nanometer/smartlab/service/SysUserService.java
index 246d72a..138f64c 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysUserService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysUserService.java
@@ -16,44 +16,44 @@
  */
 public interface SysUserService {
 
-    List<SysUser> getSysUserList(String arp, String name,String departmentName,String project,String company,Integer first, Integer pageSize);
+    List<SysUser> getSysUserList(String arp, String name,String departmentName,String projectName,String company,Integer first, Integer pageSize);
 
     CommonPage<SysUser> getSysUserList(Integer pageNum, Integer pageSize, String name);
-    int getSysUserTotalCount(String arp, String name,String departmentName,String project,String company);
-    int getUserCountInProject(String arp, String name,String departmentName,String project,String company);
-    List<SysUser> getUserInProject(String arp, String name,String departmentName,String project,String company,Integer first, Integer pageSize);
-    SysUser getSysUser(String id);
-    SysUser getSysUserForSuppllier(String id);
+    int getSysUserTotalCount(String arp, String name,String departmentName,String projectName,String company);
+    int getUserCountInProject(String arp, String name,String departmentName,String projectName,String company);
+    List<SysUser> getUserInProject(String arp, String name,String departmentName,String projectName,String company,Integer first, Integer pageSize);
+    SysUser getSysUser(Long id);
+    SysUser getSysUserForSuppllier(Long id);
     SysUser getSysUserByAccount(String account);
     SysUser getSysUserByIdCard(String idCard);
-    boolean isSysUserExist(String arp, String account, String idCard, String editId);
+    boolean isSysUserExist(String arp, String account, String idCard, Long editId);
     List<SysUser> getApproverUserList(String department);
-    List<SysUser> getHasProjectSysUserList(String department,String project);
+    List<SysUser> getHasProjectSysUserList(Long department,Long projectId);
     List<SysUser> getApplyUserList();
-    List<SysUser> getSeeUserList(String department);
+    List<SysUser> getSeeUserList(Long department);
     SysUser insertSysUser(SysUser sysUser);
     boolean updateSysUser(SysUser sysUser);
     boolean deleteSysUser(List<SysUser> sysUserList);
 
     List<SysUser> getSysUserInfoList(String startTime, String endTime);
 
-    void updateUserPointBySelective(Integer point,String id);
+    void updateUserPointBySelective(Integer point,Long id);
 
     public int insertSysUserList(List<SysUser> userList);
 
-    SysUser getUser(String id);
+    SysUser getUser(Long id);
 
     void updateUserFavor(SysReagent reagent, SysUser user) throws Exception;
 
     List<SysUserDto> getUserInfo();
 
-    HazardousWasteUser getUserByAccount(String account,String name);
+    HazardousWasteUser getUserByAccount(String account,Long userId);
 
-    List<LaboratoryVo.LaboratoryUser> getUserByProject(String project);
+    List<LaboratoryVo.LaboratoryUser> getUserByProject(Long projectId);
 
     List<SysUser> getUserByArp(String arp);
 
-    List<Map> getExportUserList(String arp, String name, String departmentName, String project, String company);
+    List<Map> getExportUserList(String arp, String name, String departmentName, Long projectId, String company);
 
     void exportUser2Excel(List<Map> list)throws Exception;
 
diff --git a/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
index 45b1b36..4bd2806 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
@@ -43,7 +43,7 @@
     SysUserDao sysUserDao;
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<SysUser> getSysUserList(String arp, String name,String departmentName,String project,String company, Integer first, Integer pageSize) {
+    public List<SysUser> getSysUserList(String arp, String name,String departmentName,String projectName,String company, Integer first, Integer pageSize) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             if (StringUtils.isNotBlank(arp)) {
@@ -55,7 +55,9 @@
             if (StringUtils.isNotBlank(departmentName)) {
                 params.put("departmentNameLike", "%" + departmentName + "%");
             }
-            params.put("project", project);
+            if (StringUtils.isNotBlank(projectName)) {
+                params.put("projectName", projectName);
+            }
             params.put("company", company);
             params.put("first", first);
             params.put("pageSize", pageSize);
@@ -95,7 +97,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public int getSysUserTotalCount(String arp, String name,String departmentName,String project,String company) {
+    public int getSysUserTotalCount(String arp, String name,String departmentName,String projectName,String company) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             if (StringUtils.isNotBlank(arp)) {
@@ -107,7 +109,7 @@
             if (StringUtils.isNotBlank(departmentName)) {
                 params.put("departmentNameLike", "%" + departmentName + "%");
             }
-            params.put("project", project);
+            params.put("projectName", projectName);
             params.put("company", company);
             return this.sysUserDao.getSysUserTotalCount(params);
         } catch (DataAccessException e) {
@@ -117,29 +119,29 @@
     }
 
     @Override
-    public int getUserCountInProject(String arp, String name, String departmentName, String project, String company) {
+    public int getUserCountInProject(String arp, String name, String departmentName, String projectName, String company) {
         Map<String, Object> params = new HashMap<String, Object>();
         params.put("arp", arp);
         params.put("name", name);
         params.put("departmentNameLike", departmentName);
-        params.put("project", project);
+        params.put("projectName", projectName);
         params.put("company", company);
         return sysUserDao.getUserCountInProject(params);
     }
 
     @Override
-    public List<SysUser> getUserInProject(String arp, String name, String departmentName, String project, String company, Integer first, Integer pageSize) {
+    public List<SysUser> getUserInProject(String arp, String name, String departmentName, String projectName, String company, Integer first, Integer pageSize) {
         Map<String, Object> params = new HashMap<String, Object>();
         params.put("arp", arp);
         params.put("name", name);
         params.put("departmentNameLike", departmentName);
-        params.put("project", project);
+        params.put("projectName", projectName);
         params.put("company", company);
         return sysUserDao.getUserInProject(params);
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public SysUser getSysUser(String id) {
+    public SysUser getSysUser(Long id) {
         try {
             return this.sysUserDao.getSysUser(id);
         } catch (DataAccessException e) {
@@ -149,7 +151,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public SysUser getSysUserForSuppllier(String id) {
+    public SysUser getSysUserForSuppllier(Long id) {
         try {
             return this.sysUserDao.getSysUserForSuppllier(id);
         } catch (DataAccessException e) {
@@ -193,7 +195,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean isSysUserExist(String arp, String account, String idCard, String editId) {
+    public boolean isSysUserExist(String arp, String account, String idCard, Long editId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("arp", arp);
@@ -223,11 +225,11 @@
     }
 
     @Override
-    public List<SysUser> getHasProjectSysUserList(String department, String project) {
+    public List<SysUser> getHasProjectSysUserList(Long department, Long projectId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("department", department);
-            params.put("project", project);
+            params.put("projectId", projectId);
             params.put("approverFlag", ApproverFlag.YES);
             return this.sysUserDao.getHasProjectSysUserList(params);
         } catch (DataAccessException e) {
@@ -248,7 +250,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<SysUser> getSeeUserList(String department) {
+    public List<SysUser> getSeeUserList(Long department) {
     	try {
     		Map<String, Object> params = new HashMap<String, Object>();
     		params.put("department", department);
@@ -262,9 +264,9 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public SysUser insertSysUser(SysUser sysUser) {
         try {
-            if (sysUser.getId() == null) {
-                sysUser.setId(IDUtils.uuid());
-            }
+//            if (sysUser.getId() == null) {
+//                sysUser.setId(IDUtils.uuid());
+//            }
             this.sysUserDao.insertSysUser(sysUser);
             return sysUser;
         } catch (DuplicateKeyException ex) {
@@ -304,7 +306,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (SysUser sysUser : sysUserList) {
                 ids.add(sysUser.getId());
             }
@@ -329,7 +331,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED)
     @Override
-    public void updateUserPointBySelective(Integer point,String id) {
+    public void updateUserPointBySelective(Integer point,Long id) {
         sysUserDao.updateUserPointBySelective(point,id);
     }
 
@@ -347,9 +349,9 @@
                     }else {
                         SysUser sysUser=sysUserDao.selectByAccount(user);
                         if(sysUser==null){
-                            if (user.getId() == null) {
-                                user.setId(IDUtils.uuid());
-                            }
+//                            if (user.getId() == null) {
+//                                user.setId(IDUtils.uuid());
+//                            }
                             sysUserDao.insertSysUser(user);
                         }else {
                             sysUserDao.updateSysUser(user);
@@ -373,7 +375,7 @@
     }
 
     @Override
-    public SysUser getUser(String id) {
+    public SysUser getUser(Long id) {
         try {
             return this.sysUserDao.getUser(id);
         } catch (DataAccessException e) {
@@ -409,16 +411,16 @@
     }
 
     @Override
-    public HazardousWasteUser getUserByAccount(String account,String name) {
-        Map<String, String> params = new HashMap<>();
+    public HazardousWasteUser getUserByAccount(String account,Long userId) {
+        Map<String, Object> params = new HashMap<>();
         params.put("account", account);
-        params.put("name", name);
+        params.put("useId", userId);
         return sysUserDao.getUserByAccount(params);
     }
 
     @Override
-    public List<LaboratoryVo.LaboratoryUser> getUserByProject(String project) {
-        return sysUserDao.getUserByProject(project);
+    public List<LaboratoryVo.LaboratoryUser> getUserByProject(Long projectId) {
+        return sysUserDao.getUserByProject(projectId);
     }
 
     @Override
@@ -427,8 +429,8 @@
     }
 
     @Override
-    public List<Map> getExportUserList(String arp, String name, String departmentName, String project, String company) {
-        return sysUserDao.getExportUserList(arp, name, departmentName, project, company);
+    public List<Map> getExportUserList(String arp, String name, String departmentName, Long projectId, String company) {
+        return sysUserDao.getExportUserList(arp, name, departmentName, projectId, company);
     }
 
     @Override
@@ -436,7 +438,7 @@
         Map<String, String> map = new LinkedHashMap<>();
         map.put("companyName", "单位");
         map.put("departmentName", "部门");
-        map.put("project", "课题组");
+        map.put("projectName", "课题组");
         map.put("arp", "ARP");
         map.put("name", "姓名");
         map.put("account", "账号");
diff --git a/src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerService.java b/src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerService.java
index 3769606..dc6e748 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerService.java
@@ -10,14 +10,14 @@
  */
 public interface SysWarehouseContainerService {
 
-    public List<SysWarehouseContainer> getSysWarehouseContainerList(String warehouseType, String warehouseName, String warehouseId, Integer first, Integer pageSize);
-    List<SysWarehouseContainer> getSysWarehouseContainerList(String warehouseId);
+    public List<SysWarehouseContainer> getSysWarehouseContainerList(String warehouseType, String warehouseName, Long warehouseId, Integer first, Integer pageSize);
+    List<SysWarehouseContainer> getSysWarehouseContainerList(Long warehouseId);
     public int getSysWarehouseContainerTotalCount(String warehouseType, String warehouseName);
-    public SysWarehouseContainer getSysWarehouseContainer(String id);
+    public SysWarehouseContainer getSysWarehouseContainer(Long id);
     public SysWarehouseContainer insertSysWarehouseContainer(SysWarehouseContainer sysWarehouse);
     public boolean updateSysWarehouseContainer(SysWarehouseContainer sysWarehouse);
     public boolean deleteSysWarehouseContainer(List<SysWarehouseContainer> sysWarehouseList);
-    public boolean isSysWarehouseContainerExist(String containerCode, String editId);
+    public boolean isSysWarehouseContainerExist(String containerCode, Long editId);
 
     public List<SysWarehouseContainer> getSysWarehouseContainerInfoList(String startTime, String endTime);
     SysWarehouseContainer getSysWarehouseContainerByContainerCode(String containerCode);
diff --git a/src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerServiceImpl.java
index df9e821..dec2a85 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysWarehouseContainerServiceImpl.java
@@ -53,7 +53,7 @@
     SysWarehouseService sysWarehouseService;
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<SysWarehouseContainer> getSysWarehouseContainerList(String warehouseType, String warehouseName, String warehouseId, Integer first, Integer pageSize) {
+    public List<SysWarehouseContainer> getSysWarehouseContainerList(String warehouseType, String warehouseName, Long warehouseId, Integer first, Integer pageSize) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             if (StringUtils.isNotBlank(warehouseType)) {
@@ -62,7 +62,7 @@
             if (StringUtils.isNotBlank(warehouseName)) {
                 params.put("warehouseName", "%" + warehouseName + "%");
             }
-            if (StringUtils.isNotBlank(warehouseId)) {
+            if (warehouseId!=null) {
                 params.put("warehouseId", warehouseId);
             }
             params.put("first", first);
@@ -75,7 +75,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<SysWarehouseContainer> getSysWarehouseContainerList(String warehouseId){
+    public List<SysWarehouseContainer> getSysWarehouseContainerList(Long warehouseId){
         return getSysWarehouseContainerList(null,null,warehouseId,null,null);
     }
 
@@ -97,7 +97,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public SysWarehouseContainer getSysWarehouseContainer(String id) {
+    public SysWarehouseContainer getSysWarehouseContainer(Long id) {
         try {
             return this.sysWarehouseContainerDao.getSysWarehouseContainer(id);
         } catch (DataAccessException e) {
@@ -109,9 +109,9 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public SysWarehouseContainer insertSysWarehouseContainer(SysWarehouseContainer sysWarehouseContainer) {
         try {
-            if (sysWarehouseContainer.getId() == null) {
-                sysWarehouseContainer.setId(IDUtils.uuid());
-            }
+//            if (sysWarehouseContainer.getId() == null) {
+//                sysWarehouseContainer.setId(IDUtils.uuid());
+//            }
             this.sysWarehouseContainerDao.insertSysWarehouseContainer(sysWarehouseContainer);
             return sysWarehouseContainer;
         } catch (DuplicateKeyException ex) {
@@ -154,7 +154,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (SysWarehouseContainer sysWarehouseContainer : sysWarehouseContainerList) {
                 ids.add(sysWarehouseContainer.getId());
             }
@@ -175,7 +175,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public boolean isSysWarehouseContainerExist(String containerCode, String editId) {
+    public boolean isSysWarehouseContainerExist(String containerCode, Long editId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("containerCode", containerCode);
@@ -217,7 +217,7 @@
         //1.新建实验室
         SysLaboratory sl = new SysLaboratory();
 
-        sl.setId(IDUtils.uuid());
+        //sl.setId(IDUtils.uuid());
         sl.setType(baseMetaService.getBaseMetaList(Constants.BASE_META_GROUP_LABORATORY_TYPE).get(0).getId());
         //判断是否已经存在该名称实验室
         SysLaboratory sysLaboratory = sysLaboratoryDao.getSysLaboratoryByName(sysWarehouse.getName());
@@ -241,7 +241,7 @@
         //判断是否已经存在该条码柜子
         if (count < 1) {
             SysLaboratoryContainer slc = new SysLaboratoryContainer();
-            slc.setId(IDUtils.uuid());
+       //     slc.setId(IDUtils.uuid());
             // (#{id}, #{laboratoryId}, #{type}, #{containerCode}, #{infoCode}, #{structure},
             // #{name}, 1, #{characterLeft}, #{characterRight}, now(), now(), #{controllerCode},#{project})
             slc.setLaboratoryId(sl.getId());
@@ -280,7 +280,7 @@
     public void deleteSysWarehouseContainer2(List<SysWarehouseContainer> selectedList) {
         //1.删除自己
         this.deleteSysWarehouseContainer(selectedList);
-        List<String> ids = new ArrayList<>();
+        List<Long> ids = new ArrayList<>();
         for (SysWarehouseContainer swc : selectedList) {
             SysLaboratoryContainer slc = sysLaboratoryContainerDao.getSysLaboratoryContainerByContainerCode(swc.getContainerCode());
             if (slc != null) {
diff --git a/src/main/java/com/nanometer/smartlab/service/SysWarehouseService.java b/src/main/java/com/nanometer/smartlab/service/SysWarehouseService.java
index d6e1f42..ca34c01 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysWarehouseService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysWarehouseService.java
@@ -17,11 +17,11 @@
     public List<SysWarehouse> getSysWarehouseList(String type, String name, Integer first, Integer pageSize);
     public List<SysWarehouse> getAllSysWarehouseList();
     public int getSysWarehouseTotalCount(String type, String name);
-    public SysWarehouse getSysWarehouse(String id);
+    public SysWarehouse getSysWarehouse(Long id);
     public SysWarehouse insertSysWarehouse(SysWarehouse sysWarehouse);
     public boolean updateSysWarehouse(SysWarehouse sysWarehouse);
     public boolean deleteSysWarehouse(List<SysWarehouse> sysWarehouseList);
-    public boolean isSysWarehouseExist(String barCode, String editId);
+    public boolean isSysWarehouseExist(String barCode, Long editId);
 
     List<SysWarehouseDto> getWarehouseList();
 
diff --git a/src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java
index 0115716..646f52e 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysWarehouseServiceImpl.java
@@ -92,7 +92,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public SysWarehouse getSysWarehouse(String id) {
+    public SysWarehouse getSysWarehouse(Long id) {
         try {
             return this.sysWarehouseDao.getSysWarehouse(id);
         } catch (DataAccessException e) {
@@ -104,9 +104,9 @@
     @Transactional(propagation = Propagation.REQUIRED)
     public SysWarehouse insertSysWarehouse(SysWarehouse sysWarehouse) {
         try {
-            if (sysWarehouse.getId() == null) {
-                sysWarehouse.setId(IDUtils.uuid());
-            }
+//            if (sysWarehouse.getId() == null) {
+//                sysWarehouse.setId(IDUtils.uuid());
+//            }
             this.sysWarehouseDao.insertSysWarehouse(sysWarehouse);
             return sysWarehouse;
         } catch (DuplicateKeyException ex) {
@@ -149,7 +149,7 @@
                 return false;
             }
 
-            List<String> ids = new ArrayList<String>();
+            List<Long> ids = new ArrayList<Long>();
             for (SysWarehouse sysWarehouse : sysWarehouseList) {
                 ids.add(sysWarehouse.getId());
             }
@@ -173,7 +173,7 @@
 	}
 
 	@Transactional(propagation = Propagation.REQUIRED)
-    public boolean isSysWarehouseExist(String barCode, String editId) {
+    public boolean isSysWarehouseExist(String barCode, Long editId) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("barCode", barCode);
@@ -193,7 +193,7 @@
     }
 
     @Override
-    @Transactional
+    @Transactional(propagation = Propagation.REQUIRED)
     public void putInWarehouse(InWarehouseInfoDto inWarehouseInfo) throws Exception {
         List<String> codes = inWarehouseInfo.getReagentCode();
         if (codes !=null && codes.size()>0){
@@ -232,8 +232,8 @@
                 BaseMeta meta = baseMetaService.getBaseMeta("reagent_character", null, dangerousInfo);
                 BaseMeta baseMeta = new BaseMeta();
                 if (meta == null){
-                    baseMeta.setId(IDUtils.uuid());
-                    baseMeta.setGroupId("reagent_character");
+                 //   baseMeta.setId(IDUtils.uuid());
+                    baseMeta.setGroupCode("reagent_character");
                     baseMeta.setValidFlag(ValidFlag.VALID);
                     baseMeta.setMetaValue(dangerousInfo);
                     baseMeta.setMetaKey(dangerousInfo);
@@ -249,34 +249,34 @@
                     OpeReagentStatus ors = new OpeReagentStatus();
                 if (reagent != null &&reagent.size()>0){
                     //存在试剂
-                    String reagentId = reagent.get(0).getId();
+                    Long reagentId = reagent.get(0).getId();
                     ors.setReagentId(reagentId);
 
                 }else{
                     //试剂不存在
                     SysReagent sr = new SysReagent();
-                    sr.setId(IDUtils.uuid());
+                 //   sr.setId(IDUtils.uuid());
                     sr.setCas(cas);
                     sr.setName(reagentName);
-                    sr.setProductHome(factory.getId());
-                    sr.setReagentFormat(specifications.getId());
-                    sr.setReagentUnit(packing.getId());
-                    //危险性质
-                    sr.setReagentCharacter(baseMeta.getId());
+                //    sr.setProductHome(factory.getId());
+//                    sr.setReagentFormat(specifications.getId());
+//                    sr.setReagentUnit(packing.getId());
+//                    //危险性质
+//                    sr.setReagentCharacter(baseMeta.getId());
                     //设备生成试剂类型 为3
                     sr.setType(3);
                     sr.setDangerousFlag(DangerousFlag.NORMAL);
                     SysReagent sysReagent = sysReagentService.insertSysReagent(sr);
-                    String reagentId = sysReagent.getId();
+                    Long reagentId = sysReagent.getId();
                     ors.setReagentId(reagentId);
                 }
 
-                ors.setId(IDUtils.uuid());
+              //  ors.setId(IDUtils.uuid());
                 //入仓库
-                ors.setStatus(ArrivalStatus.WAREHOUSE);
+                ors.setStatus(ArrivalStatus.WAREHOUSE.getKey());
                 //批号
                 ors.setArticleNumber(inWarehouseInfo.getArticleNumber());
-                ors.setValidFlag(ValidFlag.VALID);
+                ors.setValidFlag(ValidFlag.VALID.getKey());
                 ors.setContainerId(inWarehouseInfo.getContainerId());
                 ors.setHouseId(inWarehouseInfo.getWarehouseId());
                 ors.setUserId(inWarehouseInfo.getUser());
@@ -286,18 +286,14 @@
                 //更新试剂流向
                 OpeUseFlow opeUseFlow = new OpeUseFlow();
                 //入仓库
-                opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE);
+                opeUseFlow.setStatus(ArrivalStatus.WAREHOUSE.getKey());
                 opeUseFlow.setContainerId(inWarehouseInfo.getContainerId());
                 opeUseFlow.setHouseId(inWarehouseInfo.getWarehouseId());
-                opeUseFlow.setStoreType(StoreType.DIRECTSTORE);
+                opeUseFlow.setStoreType(StoreType.DIRECTSTORE.getKey());
                 opeUseFlow.setReagentCode(code);
                 //持有者
                 opeUseFlow.setUserId(inWarehouseInfo.getUser());
-                Map<String, String> metaMap = new HashMap<>();
-                metaMap.put("groupId", "operate_status");
-                metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey()));
-                List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-                opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+                opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey());
                 opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 
                 //更新仓库库存
@@ -310,11 +306,11 @@
                     opeWarehouseReserve.setArticleNumber(inWarehouseInfo.getArticleNumber());
                     opeWarehouseReserve.setReserve(0);
                     opeWarehouseReserve.setWarehouseId(inWarehouseInfo.getWarehouseId());
-                    opeWarehouseReserve.setUserId("admin");
+                    opeWarehouseReserve.setUserId(1L);
                 }
                 //库存加1
                 opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + 1);
-                if (StringUtils.isBlank(opeWarehouseReserve.getId())) {
+                if (opeWarehouseReserve.getId()!=null) {
                     this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve);
                 } else {
                     this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
@@ -326,8 +322,11 @@
     }
 
     @Override
-    @Transactional
+    @Transactional(propagation = Propagation.REQUIRED)
     public void reagentReceiving(ReagentReceivingDto reagentReceiving) {
+
+
+
         String number = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
         String receiptNum = "BS" + number;
 
@@ -347,7 +346,7 @@
                 opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - 1);
                 opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve);
             }
-            ors.setStatus(ArrivalStatus.NOREGISTER);
+            ors.setStatus(ArrivalStatus.NOREGISTER.getKey());
             opeReagentStatusDao.updateOpeReagentStatusDao(ors);
             OpeUseFlow opeUseFlow = new OpeUseFlow();
             opeUseFlow.setReagentCode(ors.getReagentCode());
@@ -360,11 +359,8 @@
             //新增 领用单号
             opeUseFlow.setReceiptNumber(receiptNum);
 
-            Map<String, String> metaMap = new HashMap<>();
-            metaMap.put("groupId", "operate_status");
-            metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
-            List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap);
-            opeUseFlow.setOperateState(baseMetaList.get(0).getId());
+
+            opeUseFlow.setOperateState(OperateStatus.WAREHOUSEOUT.getKey());
             this.opeUseFlowService.insertOpeUseFlow(opeUseFlow);
 
         });
diff --git a/src/main/java/com/nanometer/smartlab/service/SysWarningService.java b/src/main/java/com/nanometer/smartlab/service/SysWarningService.java
index 6c8b0b4..ebae063 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysWarningService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysWarningService.java
@@ -13,7 +13,7 @@
     int getSysWarningTotalCount(String code, Timestamp startTime,Timestamp endTime);
     List<SysWarning> getSysWarningList(String code, Timestamp startTime,Timestamp endTime, Integer first, Integer pageSize);
 
-    SysWarning getSysWarning(String id);
+    SysWarning getSysWarning(Long id);
 
     void updateSysWarning(SysWarning selectedWarning) throws IOException;
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysWarningServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysWarningServiceImpl.java
index 4a51065..210c373 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysWarningServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysWarningServiceImpl.java
@@ -65,7 +65,7 @@
     }
 
     @Override
-    public SysWarning getSysWarning(String id) {
+    public SysWarning getSysWarning(Long id) {
         try {
             return this.sysWarningDao.getSysWarning(id);
         } catch (DataAccessException e) {
@@ -83,10 +83,10 @@
             params.put("id", selectedWarning.getId());
             //给大屏信息发送处理信息
             //页面只允许修改完成转台
-            if (StringUtils.isNotBlank(selectedWarning.getAlarmId()) && StringUtils.isNotBlank(alarmUrl)){
+            if (selectedWarning.getDapingAlarmId()!=null && StringUtils.isNotBlank(alarmUrl)){
                 JSONObject json=new JSONObject();
                 json.put("dataType", "data");
-                json.put("id", selectedWarning.getAlarmId());
+                json.put("id", selectedWarning.getDapingAlarmId());
                 CloseableHttpClient client2 = HttpClients.createDefault();
                 HttpPost post2 = new HttpPost(alarmUrl);
                 post2.setHeader("Content-Type", "application/json;charset=UTF-8");
diff --git a/src/main/java/com/nanometer/smartlab/util/ExcelUtils.java b/src/main/java/com/nanometer/smartlab/util/ExcelUtils.java
index c2cff47..f739039 100644
--- a/src/main/java/com/nanometer/smartlab/util/ExcelUtils.java
+++ b/src/main/java/com/nanometer/smartlab/util/ExcelUtils.java
@@ -3,6 +3,7 @@
 import org.apache.poi.hssf.usermodel.HSSFRow;
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xssf.streaming.SXSSFRow;
 import org.apache.poi.xssf.streaming.SXSSFSheet;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
@@ -23,12 +24,15 @@
         System.setProperty("java.awt.headless", "false");
     }
 
-    public static SXSSFWorkbook exportExcelNew(Map<String, String> map, List<Map> dataList, String name){
-        SXSSFWorkbook sb = new SXSSFWorkbook(1000);
+    public static HSSFWorkbook exportExcelNew(Map<String, String> map, List<Map> dataList, String name){
+     //   SXSSFWorkbook sb = new SXSSFWorkbook(1000);
         Integer total = null;
         //sheet名字
-        SXSSFSheet sheet = sb.createSheet(name);
-        SXSSFRow titlerRow = sheet.createRow(0);
+//        SXSSFSheet sheet = sb.createSheet(name);
+//        SXSSFRow titlerRow = sheet.createRow(0);
+        HSSFWorkbook sb = new HSSFWorkbook();
+        HSSFSheet sheet = sb.createSheet(name);
+        HSSFRow titlerRow = sheet.createRow(0);
 
         int k = 0;
         for(Map.Entry<String, String> entry:map.entrySet()){
@@ -38,7 +42,8 @@
         }
         //数据
         for (int i = 0; i < dataList.size(); i++) {
-            SXSSFRow dataRow = sheet.createRow(i + 1);
+           // SXSSFRow dataRow = sheet.createRow(i + 1);
+            HSSFRow dataRow = sheet.createRow(i + 1);
             int j = 0;
             for(Map.Entry<String, String> entry:map.entrySet()){
                 //表头
@@ -77,10 +82,10 @@
                     new String(contentDisposition.toString().getBytes(
                             System.getProperty("file.encoding")), "ISO8859-1"));
             out = response.getOutputStream();
-            SXSSFWorkbook sb = ExcelUtils.exportExcelNew(map, list, name);
+            Workbook sb = ExcelUtils.exportExcelNew(map, list, name);
             sb.write(out);
             out.flush();
-            sb.dispose();// 释放workbook所占用的所有windows资源
+       //     sb.dispose();// 释放workbook所占用的所有windows资源
             ctx.responseComplete();
         } catch (Exception e) {
             if (is != null) {
diff --git a/src/main/java/com/nanometer/smartlab/util/SpringUtil.java b/src/main/java/com/nanometer/smartlab/util/SpringUtil.java
index 2f023e5..495c4d8 100644
--- a/src/main/java/com/nanometer/smartlab/util/SpringUtil.java
+++ b/src/main/java/com/nanometer/smartlab/util/SpringUtil.java
@@ -16,4 +16,5 @@
 		return (T) bean;
 	}
 
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/util/StringToolUtils.java b/src/main/java/com/nanometer/smartlab/util/StringToolUtils.java
new file mode 100644
index 0000000..79aa063
--- /dev/null
+++ b/src/main/java/com/nanometer/smartlab/util/StringToolUtils.java
@@ -0,0 +1,18 @@
+package com.nanometer.smartlab.util;
+
+public class StringToolUtils extends org.apache.commons.lang.StringUtils {
+    public static String addZeroForNum(String str, int strLength) {
+        int strLen = str.length();
+        if (strLen < strLength) {
+            while (strLen < strLength) {
+                StringBuffer sb = new StringBuffer();
+                sb.append("0").append(str);// 左补0
+                // sb.append(str).append("0");//右补0
+                str = sb.toString();
+                strLen = str.length();
+            }
+        }
+
+        return str;
+    }
+}
diff --git a/src/main/webapp/WEB-INF/aky/aky.properties b/src/main/webapp/WEB-INF/aky/aky.properties
deleted file mode 100644
index 01f3e94..0000000
--- a/src/main/webapp/WEB-INF/aky/aky.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://sinanoaq.com:23306/aky_smartlab?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-jdbc.username=root
-jdbc.password=NMS@uss20201!
-
-institute.id =
-institute.name =\u65B0\u7586\u7EF4\u543E\u5C14\u81EA\u6CBB\u533A\u5B89\u5168\u79D1\u5B66\u6280\u672F\u7814\u7A76\u9662
-institute.logo =
-institute.url  = http://aq.sinanoaq.com:8005
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u65B0\u7586\u7EF4\u543E\u5C14\u81EA\u6CBB\u533A\u5B89\u5168\u79D1\u5B66\u6280\u672F\u7814\u7A76\u9662\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = aky
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/config-mybatis.xml b/src/main/webapp/WEB-INF/config-mybatis.xml
index 861a53f..7f8da1c 100644
--- a/src/main/webapp/WEB-INF/config-mybatis.xml
+++ b/src/main/webapp/WEB-INF/config-mybatis.xml
@@ -16,6 +16,7 @@
 		<setting name="defaultExecutorType" value="SIMPLE"/>
 		<setting name="defaultStatementTimeout" value="25000"/>
 		<setting name="logImpl" value="LOG4J" />
+		<setting name="mapUnderscoreToCamelCase" value="true" />
 	</settings>
 
 	<typeHandlers>
diff --git a/src/main/webapp/WEB-INF/cq/cq.properties b/src/main/webapp/WEB-INF/cq/cq.properties
deleted file mode 100644
index 068d45c..0000000
--- a/src/main/webapp/WEB-INF/cq/cq.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-#jdbc.url=jdbc:mysql://121.239.169.27:23306/cq_smartlab?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-#jdbc.username=root
-#jdbc.password=NMS@uss20201!
-jdbc.url=jdbc:mysql://127.0.0.1:33306/cq_smartlab?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-jdbc.username=cq_smartlab
-jdbc.password=FbsXhNzRFs8KNHyk
-
-institute.id =
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u91CD\u5E86\u7EFF\u8272\u667A\u80FD\u6280\u672F\u7814\u7A76\u9662
-institute.logo = /resources/images/\u4E2D\u56FD\u79D1\u5B66\u9662\u91CD\u5E86\u7EFF\u8272\u667A\u80FD\u6280\u672F\u7814\u7A76\u9662logo.png
-institute.url  = http://sinanoaq.com
-institute.app.id = wx81a00e3350861b25
-institute.app.secret = c307d394875af2cbbe25e01b9e43dcb2
-alarm.url = http://sinanoaq.com/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = cq
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/gcs/gcs.properties b/src/main/webapp/WEB-INF/gcs/gcs.properties
deleted file mode 100644
index e65d70e..0000000
--- a/src/main/webapp/WEB-INF/gcs/gcs.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=Sinanoaq#415
-
-institute.id = 11
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u5317\u4EAC\u8FC7\u7A0B\u5DE5\u7A0B\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://gcs.sinanoaq.com
-institute.app.id = wx7ab4d938ce5ce618
-institute.app.secret = c66b740b60220698570767c807361d3a
-alarm.url = http://gcs.sinanoaq.com/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u5317\u4EAC\u8FC7\u7A0B\u5DE5\u7A0B\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = gcs
diff --git a/src/main/webapp/WEB-INF/gslab/gslab.properties b/src/main/webapp/WEB-INF/gslab/gslab.properties
index c307205..829aef7 100644
--- a/src/main/webapp/WEB-INF/gslab/gslab.properties
+++ b/src/main/webapp/WEB-INF/gslab/gslab.properties
@@ -1,7 +1,7 @@
-jdbc.url=jdbc:mysql://192.168.0.228:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-#jdbc.url=jdbc:mysql://222.92.16.2:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-jdbc.username=root
-jdbc.password=Gslab@uss2021!
+jdbc.url=jdbc:mysql://192.168.0.16:39231/smartlab_promote?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
+jdbc.username=smartlab_promote
+jdbc.password=SfLz8ninXMdPSMhD
+
 
 institute.id = 38
 institute.name = \u59D1\u82CF\u5B9E\u9A8C\u5BA4
diff --git a/src/main/webapp/WEB-INF/guotai/guotai.properties b/src/main/webapp/WEB-INF/guotai/guotai.properties
deleted file mode 100644
index a392f5c..0000000
--- a/src/main/webapp/WEB-INF/guotai/guotai.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-jdbc.url=jdbc:mysql://sinanoaq.com:23306/safeplatform.smartlab.guotai?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false
-jdbc.username=root
-jdbc.password=NMS@uss20201!
-
-institute.id = 10
-institute.name = \u65B0\u7586\u56FD\u6CF0\u65B0\u534E\u5316\u5DE5\u6709\u9650\u8D23\u4EFB\u516C\u53F8
-institute.logo =
-institute.url  = http://222.92.213.22:18001
-institute.app.id = wxef5464cb3cd407ea
-institute.app.secret = f0b8dec4bc340a9863ed7de08cf2dcf1
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92022 \u65B0\u7586\u56FD\u6CF0\u65B0\u534E\u5316\u5DE5\u6709\u9650\u8D23\u4EFB\u516C\u53F8
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-
-envTag = guotai
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/hws/hws.properties b/src/main/webapp/WEB-INF/hws/hws.properties
deleted file mode 100644
index 7360152..0000000
--- a/src/main/webapp/WEB-INF/hws/hws.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=Sinanoaq#415
-
-institute.id = 9
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u5927\u8FDE\u5316\u5B66\u7269\u7406\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://hws.sinanoaq.com
-institute.app.id = wx7ab4d938ce5ce618
-institute.app.secret = c66b740b60220698570767c807361d3a
-alarm.url = http://hws.sinanoaq.com/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u5927\u8FDE\u5316\u5B66\u7269\u7406\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = hws
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/levena/levena.properties b/src/main/webapp/WEB-INF/levena/levena.properties
new file mode 100644
index 0000000..6c7a29d
--- /dev/null
+++ b/src/main/webapp/WEB-INF/levena/levena.properties
@@ -0,0 +1,25 @@
+#jdbc.url=jdbc:mysql://192.168.0.16:39231/smartlab_promote?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
+#jdbc.username=smartlab_promote
+#jdbc.password=SfLz8ninXMdPSMhD
+
+
+jdbc.url=jdbc:mysql://localhost:3306/smartlab_promote?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai
+jdbc.username=smartlab_promote
+jdbc.password=hMTZXRn6hkKfdWdG
+
+SfLz8ninXMdPSMhD
+
+institute.id = 38
+institute.name = \u8054\u5B81\u751F\u7269
+institute.logo = /resources/images/levena_biopharma.jpg
+institute.url  =
+institute.app.id =
+institute.app.secret =
+alarm.url =
+reagent.detail.price.api = https://www.reagent.com.cn/reagent-front/goodsApi/getGoodsListExact
+institute.copyright= Copyright\u00A92021 \u8054\u5B81\u751F\u7269
+
+message.url=
+personImgPath = /opt/file/smartlab/img/
+
+envTag = levena
diff --git a/src/main/webapp/WEB-INF/lhs/lhs.properties b/src/main/webapp/WEB-INF/lhs/lhs.properties
deleted file mode 100644
index 05c3255..0000000
--- a/src/main/webapp/WEB-INF/lhs/lhs.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=Sinanoaq#415
-#\uFFFD\u0439\uFFFD\uFFFD\uFFFD\u0467\u053A\uFFFD\u00BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u043E\uFFFD\uFFFD\uFFFD
-institute.id = 12
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u65B0\u7586\u7406\u5316\u6280\u672F\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://lhs.sinanoaq.com
-institute.app.id = wxc1c97c50f32a13f9
-institute.app.secret = fc932330d22c3bc8e94b9f9b790fec98
-alarm.url = http://lhs.sinanoaq.com/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u65B0\u7586\u7406\u5316\u6280\u672F\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = lhs
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/lzhws/lzhws.properties b/src/main/webapp/WEB-INF/lzhws/lzhws.properties
deleted file mode 100644
index 5ed894f..0000000
--- a/src/main/webapp/WEB-INF/lzhws/lzhws.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=LZHWS@uss20201!
-
-institute.id = 30
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u5170\u5DDE\u5316\u5B66\u7269\u7406\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://210.77.65.12:8001
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u5170\u5DDE\u5316\u5B66\u7269\u7406\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = lzhws
diff --git a/src/main/webapp/WEB-INF/qhyhs/qhyhs.properties b/src/main/webapp/WEB-INF/qhyhs/qhyhs.properties
deleted file mode 100644
index 9fce309..0000000
--- a/src/main/webapp/WEB-INF/qhyhs/qhyhs.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/qhyhs_smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=GKHY@root20201!
-#\u7EB3\u7C73\u6240
-institute.id = 29
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u9752\u6D77\u76D0\u6E56\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://yhs.sinanoaq.cn:8001
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u9752\u6D77\u76D0\u6E56\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = qhyhs
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/sds/sds.properties b/src/main/webapp/WEB-INF/sds/sds.properties
deleted file mode 100644
index b7dee58..0000000
--- a/src/main/webapp/WEB-INF/sds/sds.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://sds.sinanoaq.com:13306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=Sinanoaq#415
-#\uFFFD\u0439\uFFFD\uFFFD\uFFFD\u0467\u053A\uFFFD\u00BD\uFFFD\uFFFD\uFFFD\u032C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u043E\uFFFD\uFFFD\uFFFD
-institute.id = 9
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u65B0\u7586\u751F\u6001\u4E0E\u5730\u7406\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://sds.sinanoaq.com
-institute.app.id = wx33de06d906c68d43
-institute.app.secret = 0170d9126bcd16bda4f171bc4a33251f
-alarm.url = http://sds.sinanoaq.com/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u65B0\u7586\u751F\u6001\u4E0E\u5730\u7406\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = sds
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/sdy/sdy.properties b/src/main/webapp/WEB-INF/sdy/sdy.properties
deleted file mode 100644
index 1c103c1..0000000
--- a/src/main/webapp/WEB-INF/sdy/sdy.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-jdbc.url=jdbc:mysql://127.0.01:33306/sdy_smartlab?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-#jdbc.url=jdbc:mysql://sinanoaq.com:23306/cq_smartlab?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-jdbc.username=sdy_smartlab
-jdbc.password=nDa384hwK4z547NM
-
-institute.id =
-institute.name = \u82CF\u5DDE\u76DB\u8FEA\u4E9A\u751F\u7269\u533B\u836F\u6709\u9650\u516C\u53F8
-institute.logo =
-institute.url  = http://sinanoaq.com
-institute.app.id = wx81a00e3350861b25
-institute.app.secret = c307d394875af2cbbe25e01b9e43dcb2
-alarm.url = http://sinanoaq.com/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = sdy
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/shgjs/shgjs.properties b/src/main/webapp/WEB-INF/shgjs/shgjs.properties
deleted file mode 100644
index 0bef934..0000000
--- a/src/main/webapp/WEB-INF/shgjs/shgjs.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://210.72.9.174:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=SHGJS@uss20201!
-
-institute.id = 27
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u4E0A\u6D77\u5149\u5B66\u7CBE\u5BC6\u673A\u68B0\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://210.72.9.173:8001/
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u4E0A\u6D77\u5149\u5B66\u7CBE\u5BC6\u673A\u68B0\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = shgjs
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/silkroad/silkroad.properties b/src/main/webapp/WEB-INF/silkroad/silkroad.properties
deleted file mode 100644
index f3be0b8..0000000
--- a/src/main/webapp/WEB-INF/silkroad/silkroad.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlab.silkroad?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=Sinanoaq#415
-
-institute.id = 10
-institute.name = \u4E1D\u7EF8\u4E4B\u8DEF\u521B\u65B0\u53D1\u5C55\u7814\u7A76\u9662
-institute.logo =
-institute.url  = http://222.92.213.22:18001
-institute.app.id = wxef5464cb3cd407ea
-institute.app.secret = f0b8dec4bc340a9863ed7de08cf2dcf1
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E1D\u7EF8\u4E4B\u8DEF\u521B\u65B0\u53D1\u5C55\u7814\u7A76\u9662\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = silkroad
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/sin/sin.properties b/src/main/webapp/WEB-INF/sin/sin.properties
deleted file mode 100644
index 0798900..0000000
--- a/src/main/webapp/WEB-INF/sin/sin.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc\:mysql\://124.221.143.185\:23306/smartlb?useUnicode\=true&amp;characterEncoding\=utf-8&amp;autoReconnect\=true&amp;useSSL\=false
-jdbc.username=smartlb
-jdbc.password=kabAG6TmMhrmB7MJ
-
-institute.id = 2
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240
-institute.logo = /resources/images/\u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240logo.png
-institute.url  = http://sinanoaq.com
-institute.app.id = wx81a00e3350861b25
-institute.app.secret = c307d394875af2cbbe25e01b9e43dcb2
-alarm.url = http://sinanoaq.com/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = sin
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/sin_ma/sin_ma.properties b/src/main/webapp/WEB-INF/sin_ma/sin_ma.properties
deleted file mode 100644
index 8e0f358..0000000
--- a/src/main/webapp/WEB-INF/sin_ma/sin_ma.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc\:mysql\://localhost\:33306/smartlb?useUnicode\=true&amp;characterEncoding\=utf-8&amp;autoReconnect\=true&amp;useSSL\=false
-jdbc.username=smartlb
-jdbc.password=kabAG6TmMhrmB7MJ
-
-institute.id = 2
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240\u9A6C\u660C\u671F\u8BFE\u9898\u7EC4
-institute.logo = /resources/images/\u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240logo.png
-institute.url  = http://sinanoaq.com
-institute.app.id =
-institute.app.secret = 
-alarm.url = http://sinanoaq.com/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = sin
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/spring-db.xml b/src/main/webapp/WEB-INF/spring-db.xml
index 6bf1e6c..7a1b392 100644
--- a/src/main/webapp/WEB-INF/spring-db.xml
+++ b/src/main/webapp/WEB-INF/spring-db.xml
@@ -15,9 +15,6 @@
           init-method="init" destroy-method="close">
         <!--mysql 5连接驱动-->
         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
-<!--        <property name="url" value="jdbc:mysql://222.92.213.22:13306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false" />-->
-<!--                <property name="username" value="root" />-->
-<!--        <property name="password" value="Sinanoaq#415" />-->
 
         <property name="url" value="${jdbc.url}" />
         <property name="username" value="${jdbc.username}" />
diff --git a/src/main/webapp/WEB-INF/spring-menu.xml b/src/main/webapp/WEB-INF/spring-menu.xml
index 35b8aaa..037ba83 100644
--- a/src/main/webapp/WEB-INF/spring-menu.xml
+++ b/src/main/webapp/WEB-INF/spring-menu.xml
@@ -56,6 +56,12 @@
                         <property name="page" value="order_mng"></property>
                         <property name="privilegeCode" value="order_mng"></property>
                     </bean>
+                    <bean class="com.nanometer.smartlab.model.MenuModel">
+                        <property name="id" value="barcode_mng"></property>
+                        <property name="title" value="打印条码"></property>
+                        <property name="page" value="barcode_mng"></property>
+                        <property name="privilegeCode" value="barcode_mng"></property>
+                    </bean>
                 </list>
             </property>
         </bean>
@@ -96,28 +102,28 @@
             <property name="icon" value="icon_sidebar2"></property>
             <property name="subMenu">
                 <list value-type="com.nanometer.smartlab.model.MenuModel">
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="laboratory_stock_mng"></property>
-                        <property name="title" value="实验室库存管理"></property>
-                        <property name="page" value="laboratory_stock_mng"></property>
-                        <property name="privilegeCode" value="laboratory_stock_mng"></property>
-                        <property name="initMethod" value="initPage"></property>
-                    </bean>
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="container_status_mng"></property>
-                        <property name="title" value="试剂柜状态管理"></property>
-                        <property name="page" value="container_status_mng"></property>
-                        <property name="privilegeCode" value="container_status_mng"></property>
-                        <property name="initMethod" value="initPage"></property>
-                    </bean>
+<!--                    <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--                        <property name="id" value="laboratory_stock_mng"></property>-->
+<!--                        <property name="title" value="实验室库存管理"></property>-->
+<!--                        <property name="page" value="laboratory_stock_mng"></property>-->
+<!--                        <property name="privilegeCode" value="laboratory_stock_mng"></property>-->
+<!--                        <property name="initMethod" value="initPage"></property>-->
+<!--                    </bean>-->
+<!--                    <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--                        <property name="id" value="container_status_mng"></property>-->
+<!--                        <property name="title" value="试剂柜状态管理"></property>-->
+<!--                        <property name="page" value="container_status_mng"></property>-->
+<!--                        <property name="privilegeCode" value="container_status_mng"></property>-->
+<!--                        <property name="initMethod" value="initPage"></property>-->
+<!--                    </bean>-->
 
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="warehouse_status_mng"></property>
-                        <property name="title" value="库房状态管理"></property>
-                        <property name="page" value="warehouse_status_mng"></property>
-                        <property name="privilegeCode" value="warehouse_status_mng"></property>
-                        <property name="initMethod" value="initPage"></property>
-                    </bean>
+<!--                    <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--                        <property name="id" value="warehouse_status_mng"></property>-->
+<!--                        <property name="title" value="库房状态管理"></property>-->
+<!--                        <property name="page" value="warehouse_status_mng"></property>-->
+<!--                        <property name="privilegeCode" value="warehouse_status_mng"></property>-->
+<!--                        <property name="initMethod" value="initPage"></property>-->
+<!--                    </bean>-->
                     <bean class="com.nanometer.smartlab.model.MenuModel">
                         <property name="id" value="laboratory_store"></property>
                         <property name="dispInMenuList" value="false"></property>
@@ -192,21 +198,6 @@
             <property name="initMethod" value="initDirectStorePage"></property>
         </bean>
 
-        <bean class="com.nanometer.smartlab.model.MenuModel">
-            <property name="id" value="base_info_mng"></property>
-            <property name="title" value="危废处理"></property>
-            <property name="icon" value="icon_sidebar1"></property>
-            <property name="subMenu">
-                <list value-type="com.nanometer.smartlab.model.MenuModel">
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="sys_hazardous_waste"></property>
-                        <property name="title" value="危废处理信息"></property>
-                        <property name="page" value="sys_hazardous_waste"></property>
-                        <property name="privilegeCode" value="sys_hazardous_waste"></property>
-                    </bean>
-                </list>
-            </property>
-        </bean>
 
         <bean class="com.nanometer.smartlab.model.MenuModel">
             <property name="id" value="base_info_mng"></property>
@@ -252,24 +243,18 @@
                         <property name="page" value="supplier_info_mng"></property>
                         <property name="privilegeCode" value="supplier_info_mng"></property>
                     </bean>
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="sys_controller_mng"></property>
-                        <property name="title" value="主控设备管理"></property>
-                        <property name="page" value="sys_controller_mng"></property>
-                        <property name="privilegeCode" value="sys_controller_mng"></property>
-                    </bean>
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="sys_dangerous_encode"></property>
-                        <property name="title" value="危化品编码"></property>
-                        <property name="page" value="sys_dangerous_encode"></property>
-                        <property name="privilegeCode" value="sys_dangerous_encode"></property>
-                    </bean>
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="sys_encode_replace_dict"></property>
-                        <property name="title" value="编码替换字典"></property>
-                        <property name="page" value="sys_encode_replace_dict"></property>
-                        <property name="privilegeCode" value="sys_encode_replace_dict"></property>
-                    </bean>
+<!--                    <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--                        <property name="id" value="sys_dangerous_encode"></property>-->
+<!--                        <property name="title" value="危化品编码"></property>-->
+<!--                        <property name="page" value="sys_dangerous_encode"></property>-->
+<!--                        <property name="privilegeCode" value="sys_dangerous_encode"></property>-->
+<!--                    </bean>-->
+<!--                    <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--                        <property name="id" value="sys_encode_replace_dict"></property>-->
+<!--                        <property name="title" value="编码替换字典"></property>-->
+<!--                        <property name="page" value="sys_encode_replace_dict"></property>-->
+<!--                        <property name="privilegeCode" value="sys_encode_replace_dict"></property>-->
+<!--                    </bean>-->
                 </list>
             </property>
         </bean>
@@ -360,45 +345,61 @@
                 </list>
             </property>
         </bean>
-
         <bean class="com.nanometer.smartlab.model.MenuModel">
-            <property name="id" value="alarms_mng"></property>
-            <property name="title" value="预警管理"></property>
-            <property name="icon" value="icon_sidebar4"></property>
+            <property name="id" value="base_info_mng"></property>
+            <property name="title" value="危废处理"></property>
+            <property name="icon" value="icon_sidebar1"></property>
             <property name="subMenu">
                 <list value-type="com.nanometer.smartlab.model.MenuModel">
                     <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="user_violate_mng"></property>
-                        <property name="title" value="人员违规操作预警"></property>
-                        <property name="page" value="sys_warning_mng"></property>
-                        <property name="privilegeCode" value="user_violate_mng"></property>
-                    </bean>
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="sys_alarm"></property>
-                        <property name="title" value="货柜预警"></property>
-                        <property name="page" value="sys_alarm_mng"></property>
-                        <property name="privilegeCode" value="sys_alarm"></property>
+                        <property name="id" value="sys_hazardous_waste"></property>
+                        <property name="title" value="危废处理信息"></property>
+                        <property name="page" value="sys_hazardous_waste"></property>
+                        <property name="privilegeCode" value="sys_hazardous_waste"></property>
                     </bean>
                 </list>
             </property>
         </bean>
+
+
+        <!--        <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--            <property name="id" value="alarms_mng"></property>-->
+<!--            <property name="title" value="预警管理"></property>-->
+<!--            <property name="icon" value="icon_sidebar4"></property>-->
+<!--            <property name="subMenu">-->
+<!--                <list value-type="com.nanometer.smartlab.model.MenuModel">-->
+<!--                    <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--                        <property name="id" value="user_violate_mng"></property>-->
+<!--                        <property name="title" value="人员违规操作预警"></property>-->
+<!--                        <property name="page" value="sys_warning_mng"></property>-->
+<!--                        <property name="privilegeCode" value="user_violate_mng"></property>-->
+<!--                    </bean>-->
+<!--&lt;!&ndash;                    <bean class="com.nanometer.smartlab.model.MenuModel">&ndash;&gt;-->
+<!--&lt;!&ndash;                        <property name="id" value="sys_alarm"></property>&ndash;&gt;-->
+<!--&lt;!&ndash;                        <property name="title" value="货柜预警"></property>&ndash;&gt;-->
+<!--&lt;!&ndash;                        <property name="page" value="sys_alarm_mng"></property>&ndash;&gt;-->
+<!--&lt;!&ndash;                        <property name="privilegeCode" value="sys_alarm"></property>&ndash;&gt;-->
+<!--&lt;!&ndash;                    </bean>&ndash;&gt;-->
+<!--                </list>-->
+<!--            </property>-->
+<!--        </bean>-->
+<!--        -->
         
-        
-         <bean class="com.nanometer.smartlab.model.MenuModel">
-            <property name="id" value="system_link"></property>
-            <property name="title" value="风险辨识和评估"></property>
-            <property name="icon" value="icon_link"></property>
-            <property name="subMenu">
-                <list value-type="com.nanometer.smartlab.model.MenuModel">
-                    <bean class="com.nanometer.smartlab.model.MenuModel">
-                        <property name="id" value="system_link"></property>
-                        <property name="title" value="化学实验室安全风险辨识和评估"></property>
-                        <property name="page" value="system_link"></property>
-                        <property name="privilegeCode" value="user_violate_mng"></property>
-                    </bean>
-                </list>
-            </property>
-        </bean>
+<!--         <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--            <property name="id" value="system_link"></property>-->
+<!--            <property name="title" value="风险辨识和评估"></property>-->
+<!--            <property name="icon" value="icon_link"></property>-->
+<!--            <property name="subMenu">-->
+<!--                <list value-type="com.nanometer.smartlab.model.MenuModel">-->
+<!--                    <bean class="com.nanometer.smartlab.model.MenuModel">-->
+<!--                        <property name="id" value="system_link"></property>-->
+<!--                        <property name="title" value="化学实验室安全风险辨识和评估"></property>-->
+<!--                        <property name="page" value="system_link"></property>-->
+<!--                        <property name="privilegeCode" value="user_violate_mng"></property>-->
+<!--                    </bean>-->
+<!--                </list>-->
+<!--            </property>-->
+<!--        </bean>-->
         
 
 <!--        <bean class="com.nanometer.smartlab.model.MenuModel">-->
diff --git a/src/main/webapp/WEB-INF/szygs/szygs.properties b/src/main/webapp/WEB-INF/szygs/szygs.properties
deleted file mode 100644
index 050fb71..0000000
--- a/src/main/webapp/WEB-INF/szygs/szygs.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=SZYGS@uss20201!
-
-institute.id = 28
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u751F\u7269\u533B\u5B66\u5DE5\u7A0B\u6280\u672F\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://58.210.42.60:8001/
-institute.app.id =
-institute.app.secret =
-alarm.url = http://58.210.42.60:8001/daping/sendWarnInfo.json
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u751F\u7269\u533B\u5B66\u5DE5\u7A0B\u6280\u672F\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = szygs
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/test/test.properties b/src/main/webapp/WEB-INF/test/test.properties
deleted file mode 100644
index 4e80ae2..0000000
--- a/src/main/webapp/WEB-INF/test/test.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlb?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false
-jdbc.username=root
-jdbc.password=password
-
-institute.id = 2
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240
-institute.logo = /resources/images/\u4E2D\u56FD\u79D1\u5B66\u9662\u91CD\u5E86\u7EFF\u8272\u667A\u80FD\u6280\u672F\u7814\u7A76\u9662logo.png
-institute.url  = https://sinanoaq.cn:8002
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api = https://www.reagent.com.cn/reagent-front/goodsApi/getGoodsListExact
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u82CF\u5DDE\u7EB3\u7C73\u6280\u672F\u4E0E\u7EB3\u7C73\u4EFF\u751F\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = d:/opt/file/smartlab/img/
-
-envTag = test
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/twt/twt.properties b/src/main/webapp/WEB-INF/twt/twt.properties
deleted file mode 100644
index a54f476..0000000
--- a/src/main/webapp/WEB-INF/twt/twt.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=Sinanoaq#415
-#\uFFFD\u0439\uFFFD\uFFFD\uFFFD\u0467\u053A\uFFFD\u00BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0328
-institute.id = 10
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u65B0\u7586\u5929\u6587\u53F0
-institute.logo =
-institute.url  = http://twt.sinanoaq.com
-institute.app.id = wxef5464cb3cd407ea
-institute.app.secret = f0b8dec4bc340a9863ed7de08cf2dcf1
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u65B0\u7586\u5929\u6587\u53F0\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = twt
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index bef408e..d84dddd 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -7,7 +7,7 @@
         metadata-complete="true">
     <context-param>
         <param-name>webAppRootKey</param-name>
-        <param-value>smartlab</param-value>
+        <param-value>smartlab_promote</param-value>
     </context-param>
 
     <context-param>
diff --git a/src/main/webapp/WEB-INF/xjdx/xjdx.properties b/src/main/webapp/WEB-INF/xjdx/xjdx.properties
deleted file mode 100644
index d9bde24..0000000
--- a/src/main/webapp/WEB-INF/xjdx/xjdx.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://sinanoaq.com:23306/xjdx_smartlab?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-jdbc.username=root
-jdbc.password=NMS@uss20201!
-
-institute.id =
-institute.name =\u65B0\u7586\u5927\u5B66
-institute.logo =
-institute.url  = http://aq.sinanoaq.com:8003
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u65B0\u7586\u5927\u5B66\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = xjdx
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/zkdsz/zkdsz.properties b/src/main/webapp/WEB-INF/zkdsz/zkdsz.properties
deleted file mode 100644
index 259ff75..0000000
--- a/src/main/webapp/WEB-INF/zkdsz/zkdsz.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://139.196.181.203:3306/zkdsz_smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-jdbc.username=root
-jdbc.password=GKHY@root20201!
-
-institute.id = 2
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u6280\u672F\u5927\u5B66\u82CF\u5DDE\u9AD8\u7B49\u7814\u7A76\u9662
-institute.logo =
-institute.url  = http://zkdsz.sinanoaq.cn:8005
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u6280\u672F\u5927\u5B66\u82CF\u5DDE\u9AD8\u7B49\u7814\u7A76\u9662\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = zkdsz
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/zkysh/zkysh.properties b/src/main/webapp/WEB-INF/zkysh/zkysh.properties
deleted file mode 100644
index 21bcdc4..0000000
--- a/src/main/webapp/WEB-INF/zkysh/zkysh.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://nmy.sinanoaq.cn:3306/zkysh_smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true&amp;useSSL=false
-jdbc.username=root
-jdbc.password=GKHY@root20201!
-#\u4E2D\u56FD\u79D1\u5B66\u9662\u751F\u6001\u73AF\u5883\u7814\u7A76\u4E2D\u5FC3
-institute.id = 35
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u751F\u6001\u73AF\u5883\u7814\u7A76\u4E2D\u5FC3
-institute.logo =
-institute.url  = http://sinanoaq.com:8002
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u751F\u6001\u73AF\u5883\u7814\u7A76\u4E2D\u5FC3\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = zkysh
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/zkyshs/zkyshs.properties b/src/main/webapp/WEB-INF/zkyshs/zkyshs.properties
deleted file mode 100644
index 396baf5..0000000
--- a/src/main/webapp/WEB-INF/zkyshs/zkyshs.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-jdbc.url=jdbc:mysql://localhost:3306/smartlabdb?useUnicode=true&amp;characterEncoding=utf-8&amp;autoReconnect=true
-jdbc.username=root
-jdbc.password=ZKYSHS@uss20201!
-
-institute.id = 37
-institute.name = \u4E2D\u56FD\u79D1\u5B66\u9662\u6C34\u751F\u751F\u7269\u7814\u7A76\u6240
-institute.logo =
-institute.url  = http://159.226.163.234:8001
-institute.app.id =
-institute.app.secret =
-alarm.url =
-reagent.detail.price.api =
-institute.copyright= Copyright\u00A92017 \u4E2D\u56FD\u79D1\u5B66\u9662\u6C34\u751F\u751F\u7269\u7814\u7A76\u6240\u00A0\u82CFICP\u590710220403\u53F7-6
-
-message.url= https://sinanoaq.com:8095/api/sendmessage
-personImgPath = /opt/file/smartlab/img/
-
-envTag = zkyshs
\ No newline at end of file
diff --git a/src/main/webapp/apply_mng.xhtml b/src/main/webapp/apply_mng.xhtml
index e1fa86b..7b81d3e 100644
--- a/src/main/webapp/apply_mng.xhtml
+++ b/src/main/webapp/apply_mng.xhtml
@@ -88,8 +88,8 @@
                 <p:commandButton update=":centerRootPanel" actionListener="#{applyMngController.onExportFileBtnClickNew}"
                                  ajax="false" value="导出" styleClass="new-btn" />
 
-                <p:commandButton  onclick="importApply()"  value="导入" styleClass="import-btn" />
-                <a href="resources/template/申购导入模板.xlsx" style="display: inline-block;"><img src="resources/images/xlsx.png" width="30px;" alt=""/></a>
+<!--                <p:commandButton  onclick="importApply()"  value="导入" styleClass="import-btn" />-->
+<!--                <a href="resources/template/申购导入模板.xlsx" style="display: inline-block;"><img src="resources/images/xlsx.png" width="30px;" alt=""/></a>-->
             </p:panelGrid>
             <script type="text/javascript">
                 function importApply(){
@@ -125,15 +125,15 @@
                 </p:column>
 
                 <p:column headerText="管制品">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.controlProducts):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.controlProducts:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格型号">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="含税售价" width="50px;">
@@ -145,14 +145,14 @@
                 </p:column>
 
                 <p:column headerText="危险性质" width="79px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}" style="white-space: normal;font-size: 13px;"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentCharacter}" style="white-space: normal;font-size: 13px;"></h:outputText>
                 </p:column>
                 <p:column headerText="厂家">
-                    <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productHome:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="试剂类型" width="38px;" style="text-align: center;white-space: normal">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购数量" width="38px;" style="white-space: normal">
diff --git a/src/main/webapp/apply_mng_new.xhtml b/src/main/webapp/apply_mng_new.xhtml
index ee2bafd..92efbb4 100644
--- a/src/main/webapp/apply_mng_new.xhtml
+++ b/src/main/webapp/apply_mng_new.xhtml
@@ -56,15 +56,15 @@
 	                </p:column>
 
                     <p:column headerText="管制品">
-                        <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.controlProducts):''}"></h:outputText>
+                        <h:outputText value="#{row.reagent!=null?row.reagent.controlProducts:''}"></h:outputText>
                     </p:column>
 
                     <p:column headerText="规格型号">
-                        <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+                        <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
                     </p:column>
 
                     <p:column headerText="包装">
-                        <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                        <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                     </p:column>
 
                     <p:column headerText="含税售价">
@@ -76,15 +76,15 @@
                     </p:column>
 
                     <p:column headerText="危险性质">
-                        <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"></h:outputText>
+                        <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
                     </p:column>
 
                     <p:column headerText="厂家">
-                        <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                        <h:outputText value="#{row.reagent!=null?row.reagent.productHome:''}"></h:outputText>
                     </p:column>
 
                     <p:column headerText="试剂类型">
-                        <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                        <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
                     </p:column>
 
 	            </p:dataTable>
@@ -107,7 +107,7 @@
                             <p:outputLabel value="厂商:"></p:outputLabel>
                         </p:column>
                         <p:column>
-                            <p:inputText value="#{applyMngController.opeApply.reagent.productHomeName}" disabled="true"></p:inputText>
+                            <p:inputText value="#{applyMngController.opeApply.reagent.productHome}" disabled="true"></p:inputText>
                         </p:column>
                     </p:row>
 
@@ -116,13 +116,13 @@
                             <p:outputLabel value="规格:"></p:outputLabel>
                         </p:column>
                         <p:column>
-                            <p:inputText value="#{baseMetaService.getBaseMetaValue(applyMngController.opeApply.reagent.reagentFormat)}" disabled="true"></p:inputText>
+                            <p:inputText value="#{applyMngController.opeApply.reagent.reagentFormat}" disabled="true"></p:inputText>
                         </p:column>
                         <p:column>
                             <p:outputLabel value="包装:"></p:outputLabel>
                         </p:column>
                         <p:column>
-                            <p:inputText value="#{''.concat(applyMngController.opeApply.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(applyMngController.opeApply.reagent.reagentUnit))}"
+                            <p:inputText value="#{''.concat(applyMngController.opeApply.reagent.mainMetering).concat(applyMngController.opeApply.reagent.reagentUnit)}"
                                          disabled="true"></p:inputText>
                         </p:column>
                     </p:row>
@@ -180,10 +180,10 @@
 
                             </p:column>
                             <p:column>
-                                <p:selectOneMenu value="#{applyMngController.opeApply.objective}"
+                                <p:selectOneMenu value="#{applyMngController.opeApply.projectId}"
                                                  required="true" requiredMessage="请选则课题组" id="projectIdSel1">
                                     <f:selectItems value="#{applyMngController.sysProjectList}"
-                                                   var="item" itemLabel="#{item.projectName}" itemValue="#{item.projectId}"></f:selectItems>
+                                                   var="item" itemLabel="#{item.projectName}" itemValue="#{item.id}"></f:selectItems>
                                 </p:selectOneMenu>
                             </p:column>
                             <p:column>
@@ -223,13 +223,13 @@
                     <p:inputText value="#{applyMngController.opeApply.reagent.name}" disabled="true"></p:inputText>
 
                     <p:outputLabel value="厂商:"></p:outputLabel>
-                    <p:inputText value="#{applyMngController.opeApply.reagent.productHomeName}" disabled="true"></p:inputText>
+                    <p:inputText value="#{applyMngController.opeApply.reagent.productHome}" disabled="true"></p:inputText>
 
                     <p:outputLabel value="规格:"></p:outputLabel>
-                    <p:inputText value="#{baseMetaService.getBaseMetaValue(applyMngController.opeApply.reagent.reagentFormat)}" disabled="true"></p:inputText>
+                    <p:inputText value="#{applyMngController.opeApply.reagent.reagentFormat}" disabled="true"></p:inputText>
 
                     <p:outputLabel value="包装:"></p:outputLabel>
-                    <p:inputText value="#{''.concat(applyMngController.opeApply.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(applyMngController.opeApply.reagent.reagentUnit))}"
+                    <p:inputText value="#{''.concat(applyMngController.opeApply.reagent.mainMetering).concat(applyMngController.opeApply.reagent.reagentUnit)}"
                                  disabled="true"></p:inputText>
 
 
@@ -262,7 +262,7 @@
                     <p:selectOneMenu value="#{applyMngController.opeApply.objective}"
                                      required="true" requiredMessage="请选择课题组" id="projectIdSel">
                         <f:selectItems value="#{applyMngController.sysProjectList}"
-                                       var="item" itemLabel="#{item.projectName}" itemValue="#{item.projectId}"></f:selectItems>
+                                       var="item" itemLabel="#{item.projectName}" itemValue="#{item.id}"></f:selectItems>
                     </p:selectOneMenu>
                 </p:panelGrid>
 
@@ -312,22 +312,13 @@
                             <h:outputText value="收藏" readonly="true" rendered="#{row.favor!=null}" styleClass="favor"></h:outputText>
                         </p:column>
                         <p:column headerText="管制品">
-                            <h:outputText value="#{baseMetaService.getBaseMetaValue(row.controlProducts)}"></h:outputText>
+                            <h:outputText value="#{row.controlProducts}"></h:outputText>
                         </p:column>
-                        <!--<p:column headerText="试剂类型">-->
-                            <!--<h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentType)}"></h:outputText>-->
-                        <!--</p:column>-->
-                        <!--<p:column headerText="危险性质">-->
-                            <!--<h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentCharacter)}"></h:outputText>-->
-                        <!--</p:column>-->
-                        <!--  <p:column headerText="供应商">
-                            <h:outputText value="#{row.supplierName}"></h:outputText>
-                        </p:column>-->
                         <p:column headerText="规格型号">
-                            <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentFormat)}"></h:outputText>
+                            <h:outputText value="#{row.reagentFormat}"></h:outputText>
                         </p:column>
                         <p:column headerText="包装">
-                            <h:outputText value="#{''.concat(row.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagentUnit))}"></h:outputText>
+                            <h:outputText value="#{''.concat(row.mainMetering).concat(row.reagentUnit)}"></h:outputText>
                         </p:column>
                         <p:column headerText="含税售价">
                             <h:outputText value="#{row.price}"></h:outputText>
@@ -336,13 +327,13 @@
                             <h:outputText value="#{row.cas}"></h:outputText>
                         </p:column>
                         <p:column headerText="危险性质">
-                            <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentCharacter)}"></h:outputText>
+                            <h:outputText value="#{row.reagentCharacter}"></h:outputText>
                         </p:column>
                         <p:column headerText="厂家">
-                            <h:outputText value="#{row.productHomeName}"></h:outputText>
+                            <h:outputText value="#{row.productHome}"></h:outputText>
                         </p:column>
                         <p:column headerText="试剂类型">
-                            <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentType)}"></h:outputText>
+                            <h:outputText value="#{row.reagentType}"></h:outputText>
                         </p:column>
                         <p:column headerText="操作" style="text-align: center;">
                             <h:commandButton  styleClass="favor-btn-common #{row.favor == null?'favor-btn':'not-favor-btn'}"  value="#{row.favor == null?'加入收藏':'取消收藏'}"  update="@this">
@@ -477,11 +468,11 @@
                         </p:column>
 
                         <p:column headerText="规格">
-                            <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+                            <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
                         </p:column>
 
                         <p:column headerText="包装">
-                            <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                            <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                         </p:column>
 
                         <p:column headerText="试剂单价">
@@ -542,22 +533,13 @@
                             <h:outputText value="收藏" readonly="true" rendered="#{row.favor!=null}" styleClass="favor"></h:outputText>
                         </p:column>
                         <p:column headerText="管制品">
-                            <h:outputText value="#{baseMetaService.getBaseMetaValue(row.controlProducts)}"></h:outputText>
+                            <h:outputText value="#{row.controlProducts}"></h:outputText>
                         </p:column>
-                        <!--<p:column headerText="试剂类型">-->
-                        <!--<h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentType)}"></h:outputText>-->
-                        <!--</p:column>-->
-                        <!--<p:column headerText="危险性质">-->
-                        <!--<h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentCharacter)}"></h:outputText>-->
-                        <!--</p:column>-->
-                        <!--  <p:column headerText="供应商">
-                            <h:outputText value="#{row.supplierName}"></h:outputText>
-                        </p:column>-->
                         <p:column headerText="规格型号">
-                            <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentFormat)}"></h:outputText>
+                            <h:outputText value="#{row.reagentFormat}"></h:outputText>
                         </p:column>
                         <p:column headerText="包装">
-                            <h:outputText value="#{''.concat(row.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagentUnit))}"></h:outputText>
+                            <h:outputText value="#{''.concat(row.mainMetering).concat(row.reagentUnit)}"></h:outputText>
                         </p:column>
                         <p:column headerText="含税售价">
                             <h:outputText value="#{row.price}"></h:outputText>
@@ -566,13 +548,13 @@
                             <h:outputText value="#{row.cas}"></h:outputText>
                         </p:column>
                         <p:column headerText="危险性质">
-                            <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentCharacter)}"></h:outputText>
+                            <h:outputText value="#{row.reagentCharacter}"></h:outputText>
                         </p:column>
                         <p:column headerText="厂家">
-                            <h:outputText value="#{row.productHomeName}"></h:outputText>
+                            <h:outputText value="#{row.productHome}"></h:outputText>
                         </p:column>
                         <p:column headerText="试剂类型">
-                            <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentType)}"></h:outputText>
+                            <h:outputText value="#{row.reagentType}"></h:outputText>
                         </p:column>
                         <p:column headerText="操作" style="text-align: center;">
                             <p:commandButton  styleClass="favor-btn-common #{row.favor == null?'favor-btn':'not-favor-btn'}"
diff --git a/src/main/webapp/approval_mng.xhtml b/src/main/webapp/approval_mng.xhtml
index 80a71a1..eefb27b 100644
--- a/src/main/webapp/approval_mng.xhtml
+++ b/src/main/webapp/approval_mng.xhtml
@@ -88,16 +88,16 @@
                 </p:column>
 
                 <p:column headerText="管制品">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.controlProducts):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.controlProducts:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格型号" width="84px;">
                     <h:outputText
-                            value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentFormat)}" style="font-size:13px"></h:outputText>
+                            value="#{row.reagent.reagentFormat}" style="font-size:13px"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="含税售价" width="60px;">
@@ -113,11 +113,11 @@
                 </p:column>
 
                 <p:column headerText="危险性质" width="85px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="厂家">
-                    <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productHome:''}"></h:outputText>
                 </p:column>
 
                 <!--<p:column headerText="供应商">-->
@@ -125,7 +125,7 @@
                 <!--</p:column>-->
 
                 <p:column headerText="试剂类型" width="60px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购人" style="text-align: center">
@@ -175,11 +175,11 @@
 	                </p:column>-->
 
 	                <p:column headerText="规格">
-	                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+	                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
 	                </p:column>
 
 	                <p:column headerText="包装">
-	                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+	                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
 	                </p:column>
 
 	                <p:column headerText="参考价格">
diff --git a/src/main/webapp/barcode_mng.xhtml b/src/main/webapp/barcode_mng.xhtml
new file mode 100644
index 0000000..25f349c
--- /dev/null
+++ b/src/main/webapp/barcode_mng.xhtml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:p="http://primefaces.org/ui"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:c="http://java.sun.com/jsp/jstl/core">
+<head></head>
+<ui:composition>
+    <h:form id="barcodeMngForm">
+        <p:panel styleClass="center-header">
+            <p:outputLabel styleClass="title" value="打印条码"></p:outputLabel>
+            <p:panelGrid styleClass="filter" columns="8">
+                <p:outputLabel value="订单编号:"></p:outputLabel>
+                <p:inputText value="#{barcodeMngController.orderCode}"></p:inputText>
+
+                <p:outputLabel value="订单名称:"></p:outputLabel>
+                <p:inputText value="#{barcodeMngController.orderName}"></p:inputText>
+
+                <p:outputLabel value="申请编号:"></p:outputLabel>
+                <p:inputText value="#{barcodeMngController.applyCode}"></p:inputText>
+                <p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
+            </p:panelGrid>
+        </p:panel>
+        <p:panel styleClass="center-body">
+            <p:panelGrid columns="5" styleClass="btn">
+                <p:commandButton value="查看条码" styleClass="edit-btn"
+                                 process="@form"
+                                 actionListener="#{barcodeMngController.onViewBarcodeClick}"
+                                 update=":viewPrintReagentCodeList,:dialogViewPrintReagentCodeForm">
+                </p:commandButton>
+                <p:commandButton value="打印二维码" styleClass="edit-btn"
+                                 process="@form"
+                                 actionListener="#{barcodeMngController.onPrintBarcodeClick}"
+                                 update=":dialogPrintReagentCode,:dialogPrintReagentCodeForm">
+                </p:commandButton>
+            </p:panelGrid>
+            <p:dataTable id="barcodeMngDataTable" styleClass="data-table"
+                         paginator="true" paginatorAlwaysVisible="false"
+                         paginatorPosition="bottom" lazy="true"
+                         value="#{barcodeMngController.dataModel}"
+                         var="row" rowKey="#{row.id}" emptyMessage="无数据" rows="10"
+                         selection="#{barcodeMngController.selectedViewList}"
+                         pageLinks="5">
+                <p:column selectionMode="multiple" style="width: 30px;text-align: center;"/>
+                <p:column headerText="申购编号">
+                    <h:outputText value="#{row.applyCode}"></h:outputText>
+                </p:column>
+                <p:column headerText="申请数量" width="50px;">
+                    <h:outputText value="#{row.num}"></h:outputText>
+                </p:column>
+                <p:column headerText="订单名称">
+                    <h:outputText value="#{row.order.orderName}"></h:outputText>
+                </p:column>
+                <p:column headerText="订单编号">
+                    <h:outputText value="#{row.order.orderCode}"></h:outputText>
+                </p:column>
+<!--                <p:column headerText="产品编号">-->
+<!--                    <h:outputText value="#{row.reagent.productSn}"></h:outputText>-->
+<!--                </p:column>-->
+                <p:column headerText="试剂名称">
+                    <h:outputText value="#{row.reagent.name}"></h:outputText>
+                </p:column>
+<!--                <p:column headerText="CAS号">-->
+<!--                    <h:outputText value="#{row.reagent.cas}"></h:outputText>-->
+<!--                </p:column>-->
+
+                <p:column headerText="危险性质">
+                    <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="厂家">
+                    <h:outputText value="#{row.reagent.productHome}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="试剂类型">
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="申购人">
+                    <h:outputText value="#{row.applyUserName}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="申购日期">
+                    <h:outputText value="#{row.createTime}">
+                        <f:convertDateTime pattern="yyyy-MM-dd" locale="zh_CN"></f:convertDateTime>
+                    </h:outputText>
+                </p:column>
+
+            </p:dataTable>
+        </p:panel>
+    </h:form>
+    <p:dialog modal="true" header="打印条码" appendTo="@(body)"
+              id="dialogPrintReagentCode" widgetVar="dialogPrintReagentCode"
+              resizable="false" width="500">
+        <h:form id="dialogPrintReagentCodeForm">
+            <!--50*40 label尺寸 -->
+            <p:panel styleClass="center-body">
+                <div style="max-height: 800px;overflow: auto;height: 500px;width: 100%;">
+                    <div id="printReagentCodeContent" style="width: 190px;">
+                        <c:if test="#{barcodeMngController.reagentCodeList!=null and barcodeMngController.reagentCodeList.size()>0}">
+                            <c:forEach items="#{barcodeMngController.reagentCodeList[0].reagentCodes}" var="reagentCode">
+                                <div style="margin-bottom: 5px;">
+                                    <table style="height: 130px;width: 100%;text-align: center;border:1px solid #000;" cellspacing="0" cellpadding="0">
+                                        <tbody>
+                                        <tr>
+                                            <td colspan="2" style="border:1px solid #000;">
+                                                <div><h:outputText value="#{barcodeMngController.reagentCodeList[0].reagent.name}" style="font-size:14px;font-weight: bold;"></h:outputText></div>
+                                                <div><h:graphicImage  value="data:image/png;base64,#{barcodeMngController.getQrcode(reagentCode)}" style="width: 50px; height: 50px;" dataURI="true"/></div>
+                                                <div><h:outputText value="#{reagentCode}" style="font-size:10px;"></h:outputText></div>
+                                            </td>
+                                        </tr>
+                                        <tr><td style="border:1px solid #000;">【CAS号】</td><td style="border:1px solid #000;"><h:outputText value="#{barcodeMngController.reagentCodeList[0].reagent.cas}"></h:outputText></td></tr>
+                                        <tr><td style="border:1px solid #000;">【危险性质】</td><td style="border:1px solid #000;"><h:outputText value="#{barcodeMngController.reagentCodeList[0].reagent.reagentCharacter}"></h:outputText></td></tr>
+                                        </tbody>
+                                    </table>
+                                </div>
+
+                            </c:forEach>
+                        </c:if>
+                    </div>
+                </div>
+            </p:panel>
+            <p:panel styleClass="btn  no-print">
+                <div class="div-btn cancel" id="barcodeCancel">关闭</div>
+                <div class="div-btn print" id="barcodePrint">打印</div>
+                <script type="text/javascript" src="resources/js/print.js"/>
+                <script type="text/javascript">
+                    $(function () {
+                        $("#barcodePrint").on("click", function () {
+                            jQuery.print('#printReagentCodeContent')
+                        })
+                        $("#barcodeCancel").on("click", function () {
+                            $("#dialogPrintReagentCode a").click();
+                        })
+                    })
+                </script>
+            </p:panel>
+        </h:form>
+    </p:dialog>
+
+
+
+    <p:dialog modal="true" header="条码列表" appendTo="@(body)"
+              id="viewPrintReagentCodeList" widgetVar="viewPrintReagentCodeList"
+              resizable="false" width="1000">
+        <h:form id="dialogViewPrintReagentCodeForm">
+            <p:dataTable styleClass="data-table"
+                         paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
+                         value="#{barcodeMngController.viewReagentCodeList}" var="row" rowKey="#{row.reagentCode}"
+                         emptyMessage="无数据">
+                <p:column headerText="试剂名称">
+                    <h:outputText value="#{row.name}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="CAS号">
+                    <h:outputText value="#{row.cas}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="危险性质">
+                    <h:outputText value="#{row.reagentCharacter}"></h:outputText>
+                </p:column>
+                <p:column headerText="条码" width="280px;">
+                    <h:outputText value="#{row.reagentCode}"></h:outputText>
+                </p:column>
+                <p:column headerText="条形码" >
+                    <p:commandButton value="打印条码" styleClass="edit-btn" process="@form"
+                                     actionListener="#{barcodeMngController.onPrintSingleBarcodeClick(row.reagentCode)}"
+                                     update=":dialogPrintReagentCode,:dialogPrintReagentCodeForm">
+                    </p:commandButton>
+                </p:column>
+            </p:dataTable>
+        </h:form>
+    </p:dialog>
+
+</ui:composition>
+</html>
\ No newline at end of file
diff --git a/src/main/webapp/base_meta_data.xhtml b/src/main/webapp/base_meta_data.xhtml
index 2036427..db82f52 100644
--- a/src/main/webapp/base_meta_data.xhtml
+++ b/src/main/webapp/base_meta_data.xhtml
@@ -17,10 +17,10 @@
 
             <p:panelGrid styleClass="filter" columns="5">
                 <p:outputLabel value="种类:"></p:outputLabel>
-                <p:selectOneMenu value="#{baseMetaController.groupId}">
+                <p:selectOneMenu value="#{baseMetaController.groupCode}">
                     <f:selectItem itemLabel="全部" itemValue="#{null}" noSelectionOption="true"></f:selectItem>
                     <f:selectItems value="#{baseMetaService.baseMetaGroupList}" var="item"
-                                   itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
+                                   itemLabel="#{item.name}" itemValue="#{item.code}"></f:selectItems>
                 </p:selectOneMenu>
 
                 <p:outputLabel value="字典名称:"></p:outputLabel>
@@ -55,7 +55,7 @@
                          rows="20" pageLinks="5">
                 <p:column selectionMode="multiple" style="width: 30px;text-align: center;"/>
                 <p:column headerText="种类">
-                    <h:outputText value="#{baseMetaService.getBaseMetaGroupName(row.groupId)}"></h:outputText>
+                    <h:outputText value="#{baseMetaService.getBaseMetaGroupName(row.groupCode)}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="字典编码">
@@ -83,10 +83,10 @@
         <h:form id="dialogForm">
             <p:panelGrid columns="1" styleClass="content">
                 <p:outputLabel value="种类"></p:outputLabel>
-                <p:selectOneMenu value="#{baseMetaController.baseMeta.groupId}"
+                <p:selectOneMenu value="#{baseMetaController.baseMeta.groupCode}"
                                  required="true" requiredMessage="请选择种类">
                     <f:selectItems value="#{baseMetaService.baseMetaGroupList}" var="item"
-                                   itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
+                                   itemLabel="#{item.name}" itemValue="#{item.code}"></f:selectItems>
                 </p:selectOneMenu>
 
                 <p:outputLabel value="字典编码"></p:outputLabel>
diff --git a/src/main/webapp/cancel_order_mng.xhtml b/src/main/webapp/cancel_order_mng.xhtml
index ffe41a5..93267f5 100644
--- a/src/main/webapp/cancel_order_mng.xhtml
+++ b/src/main/webapp/cancel_order_mng.xhtml
@@ -49,12 +49,12 @@
 
 				<p:column headerText="规格">
 					<h:outputText
-						value="#{baseMetaService.getBaseMetaValue(row.reagentFormat)}"></h:outputText>
+						value="#{row.reagentFormat}"></h:outputText>
 				</p:column>
 
 				<p:column headerText="包装">
 					<h:outputText
-						value="#{''.concat(row.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagentUnit))}"></h:outputText>
+						value="#{''.concat(row.mainMetering).concat(row.reagentUnit)}"></h:outputText>
 				</p:column>
 
 				<p:column headerText="申购数量">
diff --git a/src/main/webapp/confirm_order_mng.xhtml b/src/main/webapp/confirm_order_mng.xhtml
index b0f3601..416ae7b 100644
--- a/src/main/webapp/confirm_order_mng.xhtml
+++ b/src/main/webapp/confirm_order_mng.xhtml
@@ -50,12 +50,12 @@
 
 				<p:column headerText="规格">
 					<h:outputText
-						value="#{baseMetaService.getBaseMetaValue(row.reagentFormat)}"></h:outputText>
+						value="#{row.reagentFormat}"></h:outputText>
 				</p:column>
 
 				<p:column headerText="包装">
 					<h:outputText
-						value="#{''.concat(row.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagentUnit))}"></h:outputText>
+						value="#{''.concat(row.mainMetering).concat(row.reagentUnit)}"></h:outputText>
 				</p:column>
 
 				<p:column headerText="申购数量">
diff --git a/src/main/webapp/laboratory_container_mng.xhtml b/src/main/webapp/laboratory_container_mng.xhtml
index 51dd735..767adfc 100644
--- a/src/main/webapp/laboratory_container_mng.xhtml
+++ b/src/main/webapp/laboratory_container_mng.xhtml
@@ -27,8 +27,6 @@
 				<p:outputLabel value="课题名称:"></p:outputLabel>
 				<p:inputText value="#{laboratoryContainerMngController.project}"></p:inputText>
 
-				<p:outputLabel value="主控名称:"></p:outputLabel>
-				<p:inputText value="#{laboratoryContainerMngController.controllerName}"></p:inputText>
 
 				<p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
 			</p:panelGrid>
@@ -48,8 +46,7 @@
 				</p:commandButton>
 				<p:commandButton value="导入" styleClass="import-btn" onclick="importCon()"
 				></p:commandButton>
-				<p:commandButton value="导出" styleClass="new-btn" ajax="false" actionListener="${laboratoryContainerMngController.export2Excel}"
-				/>
+
 				<a href="resources/template/实验室临时存储库导入模板.xlsx" style="display: inline-block;"><img src="resources/images/xlsx.png" width="30px;" alt=""/></a>
 
 				<script>
@@ -67,21 +64,12 @@
 				selection="#{laboratoryContainerMngController.selectedList}" rows="20"
 				pageLinks="5">
 				<p:column selectionMode="multiple" style="width: 30px;text-align: center;" />
-
-<!--				<p:column headerText="实验室类型">-->
-<!--					<h:outputText value="#{baseMetaService.getBaseMetaValue(row.laboratoryType)}"></h:outputText>-->
-<!--				</p:column>-->
-
 				<p:column headerText="实验室名">
 					<h:outputText value="#{row.laboratoryName}"></h:outputText>
 				</p:column>
 
 				<p:column headerText="课题组">
 					<h:outputText value="#{row.project}"></h:outputText>
-				</p:column>
-
-				<p:column headerText="主控名称">
-					<h:outputText value="#{row.controllerName}"></h:outputText>
 				</p:column>
 				<p:column headerText="临时存储库条码">
 					<h:outputText value="#{row.containerCode}"></h:outputText>
@@ -124,14 +112,6 @@
 					required="true" requiredMessage="请选择实验室">
 					<f:selectItems value="#{sysLaboratoryService.getAllSysLaboratoryList()}" var="item"
 						itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
-				</p:selectOneMenu>
-
-				<p:outputLabel value="主控名"></p:outputLabel>
-				<p:selectOneMenu
-					value="#{laboratoryContainerMngController.sysLaboratoryContainer.controllerCode}"
-					required="true" requiredMessage="请选择主控设备">
-					<f:selectItems value="#{laboratoryContainerMngController.controllers}" var="item"
-						itemLabel="#{item.controllerName}" itemValue="#{item.controllerCode}"></f:selectItems>
 				</p:selectOneMenu>
 
 				<p:outputLabel value="临时存储库条码"></p:outputLabel>
@@ -190,11 +170,10 @@
 						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
 				</p:selectOneMenu>
 
-				<p:outputLabel value="课题组" for="multiple"/>
-				<p:selectCheckboxMenu id="multiple" value="#{laboratoryContainerMngController.sysLaboratoryContainer.projects}" label="Cities" multiple="true"
-									  filter="true" filterMatchMode="startsWith" panelStyle="width:250px">
+				<p:outputLabel value="课题组"/>
+				<p:selectOneMenu  value="#{laboratoryContainerMngController.sysLaboratoryContainer.project}" requiredMessage="请选择课题组">
 					<f:selectItems value="#{sysProjectServiceImpl.getAll()}" var="item" itemValue="#{item.project}" itemLabel="#{item.project}"/>
-				</p:selectCheckboxMenu>
+				</p:selectOneMenu>
 
 			</p:panelGrid>
 			<p:panel styleClass="btn">
diff --git a/src/main/webapp/laboratory_container_mng1.xhtml b/src/main/webapp/laboratory_container_mng1.xhtml
new file mode 100644
index 0000000..37fe307
--- /dev/null
+++ b/src/main/webapp/laboratory_container_mng1.xhtml
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui"
+	xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:c="http://java.sun.com/jsp/jstl/core">
+<head></head>
+<ui:composition>
+	<h:form id="laboratoryContainerMngForm">
+		<p:panel styleClass="center-header">
+			<p:outputLabel styleClass="title" value="实验室临时存储库管理"></p:outputLabel>
+			<p:panelGrid styleClass="filter" columns="9">
+				<p:outputLabel value="实验室类型:"></p:outputLabel>
+				<p:selectOneMenu value="#{laboratoryContainerMngController.laboratoryType}">
+					<f:selectItem itemLabel="全部" itemValue="#{null}" noSelectionOption="true"></f:selectItem>
+					<f:selectItems
+						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_LABORATORY_TYPE)}"
+						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+				</p:selectOneMenu>
+
+				<p:outputLabel value="实验室名:"></p:outputLabel>
+				<p:inputText value="#{laboratoryContainerMngController.laboratoryName}"></p:inputText>
+
+				<p:outputLabel value="课题名称:"></p:outputLabel>
+				<p:inputText value="#{laboratoryContainerMngController.project}"></p:inputText>
+
+
+				<p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
+			</p:panelGrid>
+		</p:panel>
+		<p:panel styleClass="center-body">
+			<p:panelGrid columns="6" styleClass="btn">
+				<p:commandButton value="新建" styleClass="new-btn" process="@form"
+					actionListener="#{laboratoryContainerMngController.onNewBtnClick}"
+					 update=":dialog,:dialogForm"></p:commandButton>
+				<p:commandButton value="修改" styleClass="edit-btn" process="@form"
+					actionListener="#{laboratoryContainerMngController.onEditBtnClick}"
+					update=":dialog,:dialogForm"></p:commandButton>
+				<p:commandButton value="删除" styleClass="del-btn" process="@form"
+					actionListener="#{laboratoryContainerMngController.onDeleteBtnClick}"
+					update="@form">
+					<p:confirm header="确认" message="确认操作?"></p:confirm>
+				</p:commandButton>
+				<p:commandButton value="导入" styleClass="import-btn" onclick="importCon()"
+				></p:commandButton>
+<!--				<p:commandButton value="导出" styleClass="new-btn" ajax="false" actionListener="${laboratoryContainerMngController.export2Excel}"-->
+<!--				/>-->
+				<a href="resources/template/实验室临时存储库导入模板.xlsx" style="display: inline-block;"><img src="resources/images/xlsx.png" width="30px;" alt=""/></a>
+
+				<script>
+					function importCon(){
+						$("#laboratoryContainerMngForm\\:importReagentBtn_input").click();
+					}
+
+				</script>
+			</p:panelGrid>
+
+			<p:dataTable id="laboratoryContainerMngDataTable" styleClass="data-table"
+				paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
+				lazy="true" value="#{laboratoryContainerMngController.dataModel}" var="row"
+				rowKey="#{row.id}" emptyMessage="无数据"
+				selection="#{laboratoryContainerMngController.selectedList}" rows="20"
+				pageLinks="5">
+				<p:column selectionMode="multiple" style="width: 30px;text-align: center;" />
+				<p:column headerText="实验室名">
+					<h:outputText value="#{row.laboratoryName}"></h:outputText>
+				</p:column>
+
+				<p:column headerText="课题组">
+					<h:outputText value="#{row.project}"></h:outputText>
+				</p:column>
+				<p:column headerText="临时存储库条码">
+					<h:outputText value="#{row.containerCode}"></h:outputText>
+				</p:column>
+
+				<p:column headerText="临时存储库类型">
+					<h:outputText value="#{baseMetaService.getBaseMetaValue(row.type)}"></h:outputText>
+				</p:column>
+
+				<p:column headerText="临时存储库状态码">
+					<h:outputText value="#{row.infoCode}"></h:outputText>
+				</p:column>
+
+				<p:column headerText="临时存储库结构">
+					<h:outputText value="#{baseMetaService.getBaseMetaValue(row.structure)}"></h:outputText>
+				</p:column>
+
+				<p:column headerText="临时存储库名称">
+					<h:outputText value="#{row.name}"></h:outputText>
+				</p:column>
+			</p:dataTable>
+		</p:panel>
+		<div style="display: none" id='importDv'>
+			<p:fileUpload fileUploadListener="#{laboratoryContainerMngController.uploadFile}"
+						  dragDropSupport="false" id="importReagentBtn"  label="导入"
+						  update="@form" auto="true" sizeLimit="5000000"
+						  mode="advanced"/>
+		</div>
+	</h:form>
+	<p:dialog modal="true"
+		header="#{laboratoryContainerMngController.action==constants.ACTION_ADD?'新建':'修改'}"
+		appendTo="@(body)" id="dialog" widgetVar="dialog" resizable="false"
+		width="1000">
+		<h:form id="dialogForm">
+			<p:panelGrid columns="4" styleClass="content2 grid-padding-bottom2">
+
+				<p:outputLabel value="实验室"></p:outputLabel>
+				<p:selectOneMenu
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.laboratoryId}"
+					required="true" requiredMessage="请选择实验室">
+					<f:selectItems value="#{sysLaboratoryService.getAllSysLaboratoryList()}" var="item"
+						itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
+				</p:selectOneMenu>
+
+				<p:outputLabel value="主控名"></p:outputLabel>
+				<p:selectOneMenu
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.controllerCode}"
+					requiredMessage="请选择主控设备">
+					<f:selectItems value="#{laboratoryContainerMngController.controllers}" var="item"
+						itemLabel="#{item.controllerName}" itemValue="#{item.controllerCode}"></f:selectItems>
+				</p:selectOneMenu>
+
+				<p:outputLabel value="临时存储库条码"></p:outputLabel>
+				<p:inputText
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.containerCode}"
+					maxlength="100"></p:inputText>
+
+				<p:outputLabel value="临时存储库类型"></p:outputLabel>
+				<p:selectOneMenu
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.type}"
+					required="true" requiredMessage="请选择临时存储库类型">
+					<p:ajax event="change" listener="#{laboratoryContainerMngController.containerTypeChanged}" process="@form" update="@form"/>
+					<f:selectItems
+						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_CONTAINER_TYPE)}"
+						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+				</p:selectOneMenu>
+
+				<p:outputLabel value="临时存储库状态码"></p:outputLabel>
+				<p:inputText
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.infoCode}"
+					maxlength="100"></p:inputText>
+
+				<p:outputLabel value="临时存储库结构"></p:outputLabel>
+				<p:selectOneMenu
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.structure}"
+					required="true" requiredMessage="请选择临时存储库结构">
+					<f:selectItems
+						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_CONTAINER_STRUCTURE)}"
+						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+				</p:selectOneMenu>
+
+				<p:outputLabel value="临时存储库名称"></p:outputLabel>
+				<p:inputText
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.name}"
+					maxlength="100"></p:inputText>
+
+				<p:outputLabel value="左门危险性质" rendered="#{laboratoryContainerMngController.characterRenderedFlag==1}"></p:outputLabel>
+				<p:selectOneMenu
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.characterLeft}"
+				    required="#{laboratoryContainerMngController.characterRenderedFlag==1}"
+					requiredMessage="左门危险性质"
+					rendered="#{laboratoryContainerMngController.characterRenderedFlag==1}">
+					<f:selectItems
+						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_REAGENT_CHARACTER)}"
+						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+				</p:selectOneMenu>
+
+				<p:outputLabel value="右门危险性质" rendered="#{laboratoryContainerMngController.characterRenderedFlag==1}"></p:outputLabel>
+				<p:selectOneMenu
+					value="#{laboratoryContainerMngController.sysLaboratoryContainer.characterRight}"
+					required="#{laboratoryContainerMngController.characterRenderedFlag==1}"
+					requiredMessage="右门危险性质"
+					rendered="#{laboratoryContainerMngController.characterRenderedFlag==1}">
+					<f:selectItems
+						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_REAGENT_CHARACTER)}"
+						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+				</p:selectOneMenu>
+
+				<p:outputLabel value="课题组" for="multiple"/>
+				<p:selectCheckboxMenu id="multiple" value="#{laboratoryContainerMngController.sysLaboratoryContainer.projects}" label="Cities" multiple="true"
+									  filter="true" filterMatchMode="startsWith" panelStyle="width:250px">
+					<f:selectItems value="#{sysProjectServiceImpl.getAll()}" var="item" itemValue="#{item.project}" itemLabel="#{item.project}"/>
+				</p:selectCheckboxMenu>
+
+			</p:panelGrid>
+			<p:panel styleClass="btn">
+				<p:commandButton value="保存"
+					actionListener="#{laboratoryContainerMngController.onSaveBtnClick}"
+					process="@form"
+					update=":laboratoryContainerMngForm:laboratoryContainerMngDataTable">
+					<p:confirm header="确认" message="确认操作?"></p:confirm>
+				</p:commandButton>
+			</p:panel>
+		</h:form>
+	</p:dialog>
+</ui:composition>
+</html>
diff --git a/src/main/webapp/laboratory_mng.xhtml b/src/main/webapp/laboratory_mng.xhtml
index b93d58d..9a50116 100644
--- a/src/main/webapp/laboratory_mng.xhtml
+++ b/src/main/webapp/laboratory_mng.xhtml
@@ -71,7 +71,7 @@
 				</p:column>
 
 				<p:column headerText="课题组">
-					<h:outputText value="#{row.project}"></h:outputText>
+					<h:outputText value="#{laboratoryMngController.getProjectName(row.project)}"></h:outputText>
 				</p:column>
 
 				<p:column headerText="状态码">
@@ -134,17 +134,18 @@
 
                  <p:outputLabel value="负责部门"></p:outputLabel>
                 <p:selectOneMenu value="#{laboratoryMngController.sysLaboratory.department}"
-                                 required="true" requiredMessage="请选择负责部门">
+                                  requiredMessage="请选择负责部门">
                     <f:selectItems value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_USER_DEPARTMENT)}"
                                    var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
                 </p:selectOneMenu>
 
 
-				<p:outputLabel value="所属课题组"  for="multiple"/>
-				<p:selectCheckboxMenu id="multiple" value="#{laboratoryMngController.sysLaboratory.projects}" label="Cities" multiple="true"
-									  filter="true" filterMatchMode="startsWith" panelStyle="width:250px">
-					<f:selectItems value="#{sysProjectServiceImpl.getAll()}" var="item" itemValue="#{item.project}" itemLabel="#{item.project}"/>
-				</p:selectCheckboxMenu>
+				<p:outputLabel value="所属课题组"/>
+				<p:selectOneMenu value="#{laboratoryMngController.sysLaboratory.project}"
+								 requiredMessage="请选择课题组">
+					<f:selectItems value="#{sysProjectServiceImpl.getAll()}"
+								   var="item" itemLabel="#{item.project}" itemValue="#{item.id}"></f:selectItems>
+				</p:selectOneMenu>
 			</p:panelGrid>
 			<p:panel styleClass="btn">
 				<p:commandButton value="保存"
diff --git a/src/main/webapp/laboratory_reagent_reserve.xhtml b/src/main/webapp/laboratory_reagent_reserve.xhtml
index 21436b3..f411e95 100644
--- a/src/main/webapp/laboratory_reagent_reserve.xhtml
+++ b/src/main/webapp/laboratory_reagent_reserve.xhtml
@@ -46,19 +46,19 @@
                 </p:column>
                 <p:column headerText="厂家">
                     <h:outputText
-                            value="#{baseMetaService.getBaseMetaValue(row.sysReagent.productHome)}"></h:outputText>
+                            value="#{row.sysReagent.productHome}"></h:outputText>
                 </p:column>
                 <p:column headerText="供应商">
                     <h:outputText value="#{row.sysReagent.supplierName}"></h:outputText>
                 </p:column>
                 <p:column headerText="规格">
                     <h:outputText
-                            value="#{baseMetaService.getBaseMetaValue(row.sysReagent.reagentFormat)}"></h:outputText>
+                            value="#{row.sysReagent.reagentFormat}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
                     <h:outputText
-                            value="#{''.concat(row.sysReagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.sysReagent.reagentUnit))}"></h:outputText>
+                            value="#{''.concat(row.sysReagent.mainMetering).concat(row.sysReagent.reagentUnit)}"></h:outputText>
                 </p:column>
                 <p:column headerText="存量">
                     <h:outputText value="#{row.reserve}"></h:outputText>
diff --git a/src/main/webapp/order_input_warehouse.xhtml b/src/main/webapp/order_input_warehouse.xhtml
index ee15bf2..e47274e 100644
--- a/src/main/webapp/order_input_warehouse.xhtml
+++ b/src/main/webapp/order_input_warehouse.xhtml
@@ -79,7 +79,7 @@
                 </p:column>
 
                 <p:column headerText="包装" width="80">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"/>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"/>
                 </p:column>
 
                 <p:column headerText="CAS" width="80">
@@ -98,20 +98,23 @@
                     <h:outputText value="#{sysUserService.getSysUser(row.applyUserId).getName()}"/>
                 </p:column>
 
+                <p:column headerText="条形码开始" width="120">
+                    <h:outputText value="#{row.startReagentCode}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="条形码结束" width="120">
+                    <h:outputText value="#{row.endReagentCode}"></h:outputText>
+                </p:column>
+
                 <p:column headerText="到货数量" width="80">
                     <p:cellEditor>
                         <f:facet name="output">
                             <h:outputText value="#{row.arrivalNum}" />
                         </f:facet>
                         <f:facet name="input">
-                            <p:inputText value="#{row.arrivalNum}"
-                                           styleClass="arrivalNum"
-                                           minValue="0"
-                                           required="true"
-                                           requiredMessage="请输入到货数量"
-                                           onkeyup="this.value = #{row.num}">
-                                <p:ajax event="keyup" listener="#{warehouseStockMngController.setArrival(row)}"/>
-                            </p:inputText>
+                            <p:inputNumber value="#{row.arrivalNum}"
+                                           minValue="0" decimalPlaces="0" style="width: 100%"
+                                           required="true" requiredMessage="请输入到货数量"/>
                         </f:facet>
                     </p:cellEditor>
                 </p:column>
@@ -128,38 +131,7 @@
                     </p:cellEditor>
                 </p:column>
 
-                <p:column headerText="条形码开始" width="200">
-                    <p:cellEditor>
-                        <f:facet name="output">
-                            <h:outputText value="#{row.startReagentCode2}"/>
-                        </f:facet>
-                        <f:facet name="input">
-                            <p:inputText value="#{row.startReagentCode2}"
-                                         maxlength="24"
-                                         size="24"
-                                         styleClass="reagentCodeStart"
-                                         onkeyup="this.value = this.value.replace(/[^0-9A-F]/,'')">
-                                <p:ajax event="change" listener="#{warehouseStockMngController.reagentStartCodeChange(row)}" update="@this,@(.reagentCodeEnd),@(.arrivalNum)"/>
-                            </p:inputText>
-                        </f:facet>
-                    </p:cellEditor>
-                </p:column>
 
-                <p:column headerText="条形码结束" width="200">
-                    <p:cellEditor>
-                        <f:facet name="output">
-                            <h:outputText value="#{row.endReagentCode2}" />
-                        </f:facet>
-                        <f:facet name="input">
-                            <p:inputText value="#{row.endReagentCode2}"
-                                         maxlength="24"
-                                         size="24"
-                                         onkeyup="this.value = this.value.replace(/\D/g,'')"
-                                         styleClass="reagentCodeEnd">
-                            </p:inputText>
-                        </f:facet>
-                    </p:cellEditor>
-                </p:column>
 
                 <p:column headerText="仓库名" width="120">
                     <p:cellEditor>
@@ -167,7 +139,7 @@
                             <h:outputText value="#{warehouseStockMngController.formatWarehouseName(row.houseId)}"/>
                         </f:facet>
                         <f:facet name="input">
-                            <p:selectOneMenu value="#{row.houseId}" style="width: 110px">
+                            <p:selectOneMenu value="#{row.houseId}" style="width: 110px" required="true" requiredMessage="请选择仓库">
                                 <p:ajax event="change" process="@this"
                                         listener="#{warehouseStockMngController.onWarehouseSelectChange(row.houseId)}"
                                         update="containerSelect"/>
@@ -184,7 +156,7 @@
                             <h:outputText value="#{warehouseStockMngController.formatWarehouseContainerName(row.containerId)}" />
                         </f:facet>
                         <f:facet name="input">
-                            <p:selectOneMenu id="containerSelect" value="#{row.containerId}" style="width: 110px">
+                            <p:selectOneMenu id="containerSelect" value="#{row.containerId}" style="width: 110px" required="true" requiredMessage="请选择货柜">
                                 <f:selectItems value="#{warehouseStockMngController.warehouseContainerList}" var="item"
                                                itemValue="#{item.id}" itemLabel="#{item.containerCode}"/>
                             </p:selectOneMenu>
diff --git a/src/main/webapp/order_mng.xhtml b/src/main/webapp/order_mng.xhtml
index 49edf0a..9fa7b97 100644
--- a/src/main/webapp/order_mng.xhtml
+++ b/src/main/webapp/order_mng.xhtml
@@ -52,10 +52,7 @@
                                  process="@form"
                                  actionListener="#{orderMngController.onViewBtnClick}"
                                  update=":dialog,:dialogForm"></p:commandButton>
-                <p:commandButton value="变更条形码" styleClass="edit-btn"
-                                 process="@form"
-                                 actionListener="#{orderMngController.onChangeCodeBtnClick}"
-                                 update=":centerRootPanel" style="width: 148px; "></p:commandButton>
+
                 <p:commandButton value="删除" styleClass="del-btn"
                                  process="@form"
                                  actionListener="#{orderMngController.onDeleteBtnClick}"
@@ -80,7 +77,7 @@
                 </p:column>
                 
                 <p:column headerText="供应商">
-                    <h:outputText value="#{row.supplyName}"></h:outputText>
+                    <h:outputText value="#{row.supplierName}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="下单时间">
@@ -160,15 +157,15 @@
                 </p:column>
 
                 <p:column headerText="管制品">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.controlProducts):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.controlProducts:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格型号">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="含税售价">
@@ -180,15 +177,15 @@
                 </p:column>
 
                 <p:column headerText="危险性质">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="厂家">
-                    <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productHome:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="试剂类型">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购人">
diff --git a/src/main/webapp/order_mng_chanege_code.xhtml b/src/main/webapp/order_mng_chanege_code.xhtml
index aeeb03f..414ef47 100644
--- a/src/main/webapp/order_mng_chanege_code.xhtml
+++ b/src/main/webapp/order_mng_chanege_code.xhtml
@@ -71,15 +71,15 @@
                 </p:column>
 
                 <p:column headerText="厂家" width="80">
-                    <h:outputText value="#{row.reagent.productHomeName}"></h:outputText>
+                    <h:outputText value="#{row.reagent.productHome}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格" width="200">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装" width="80">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购数量" width="80">
diff --git a/src/main/webapp/order_mng_ruku.xhtml b/src/main/webapp/order_mng_ruku.xhtml
index f472738..a60cec2 100644
--- a/src/main/webapp/order_mng_ruku.xhtml
+++ b/src/main/webapp/order_mng_ruku.xhtml
@@ -9,7 +9,11 @@
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:c="http://java.sun.com/jsp/jstl/core">
-<head></head>
+<!--<h:head>-->
+<!--    <f:facet name="first">-->
+<!--    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>-->
+<!--    </f:facet>-->
+<!--</h:head>-->
 <ui:composition>
     <h:form id="orderMngRukuForm">
         <p:panel styleClass="center-header">
@@ -74,15 +78,15 @@
                     <h:outputText value="#{row.reagent!=null?row.reagent.supplierName:''}"></h:outputText>
                 </p:column>-->
                 <p:column headerText="厂家" width="80">
-                    <h:outputText value="#{row.reagent.productHomeName}"></h:outputText>
+                    <h:outputText value="#{row.reagent.productHome}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格" width="200">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装" width="80">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购数量" width="80">
@@ -97,6 +101,13 @@
 
                 <p:column headerText="申购人" width="80">
                     <h:outputText value="#{row.applyUserName}"></h:outputText>
+                </p:column>
+                <p:column headerText="条形码开始" width="120">
+                    <h:outputText value="#{row.startReagentCode}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="条形码结束" width="120">
+                    <h:outputText value="#{row.endReagentCode}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="到货数量" width="80">
@@ -123,37 +134,7 @@
                     </p:cellEditor>
                 </p:column>
 
-                <p:column headerText="条形码开始" width="120">
-                    <p:cellEditor>
-                        <f:facet name="output">
-                            <h:outputText value="#{row.startReagentCode}" />
-                        </f:facet>
-                        <f:facet name="input">
-                            <p:inputText value="#{row.startReagentCode}" style="width: 100%" required="true" requiredMessage="请输入条形码开始"
-                                         maxlength="24"
-                                         size="24"
-                                         decimalPlaces="0"  thousandSeparator=""
-                                         onkeyup="this.value = this.value.replace(/\D/g,'')" >
-                            </p:inputText>
-                        </f:facet>
-                    </p:cellEditor>
-                </p:column>
 
-                <p:column headerText="条形码结束" width="120">
-                    <p:cellEditor>
-                        <f:facet name="output">
-                            <h:outputText value="#{row.endReagentCode}" />
-                        </f:facet>
-                        <f:facet name="input">
-                            <p:inputText value="#{row.endReagentCode}" style="width: 100%" required="true" requiredMessage="请输入条形码结束"
-                                         maxlength="24"
-                                         size="24"
-                                         decimalPlaces="0"  thousandSeparator=""
-                                         onkeyup="this.value = this.value.replace(/\D/g,'')" >
-                            </p:inputText>
-                        </f:facet>
-                    </p:cellEditor>
-                </p:column>
 
                 <p:column headerText="仓库名" width="120">
                     <p:cellEditor>
@@ -165,7 +146,7 @@
                                              required="true" requiredMessage="请选择仓库">
                                 <p:ajax event="change" process="@this"
                                         listener="#{orderMngController.onWarehouseSelectChange(row.houseId)}"
-                                        update="containerSelect,placeSelect"></p:ajax>
+                                        update="containerSelect"></p:ajax>
                                 <f:selectItems value="#{orderMngController.warehouseList}" var="item"
                                                itemValue="#{item.id}" itemLabel="#{item.name}"></f:selectItems>
                             </p:selectOneMenu>
@@ -181,9 +162,7 @@
                         <f:facet name="input">
                             <p:selectOneMenu id="containerSelect" value="#{row.containerId}" style="width: 110px"
                                              required="true" requiredMessage="请选择货柜">
-                                <p:ajax event="change" process="@this"
-                                        listener="#{orderMngController.onWarehouseContainerSelectChange(row.containerId)}"
-                                        update="placeSelect"></p:ajax>
+
                                 <f:selectItems value="#{orderMngController.warehouseContainerList}" var="item"
                                                itemValue="#{item.id}" itemLabel="#{item.containerCode}"></f:selectItems>
                             </p:selectOneMenu>
@@ -194,14 +173,10 @@
                 <p:column headerText="货柜位置" width="120">
                     <p:cellEditor>
                         <f:facet name="output">
-                            <h:outputText value="#{orderMngController.formatWarehouseContainerPlaceName(row.placeId)}" />
+                            <h:outputText value="#{row.place}" />
                         </f:facet>
                         <f:facet name="input">
-                            <p:selectOneMenu id="placeSelect" value="#{row.placeId}" style="width: 110px"
-                                             required="true" requiredMessage="请选择货柜位置">
-                                <f:selectItems value="#{orderMngController.warehouseContainerPlaceList}" var="item"
-                                               itemValue="#{item.id}" itemLabel="#{item.metaValue}"></f:selectItems>
-                            </p:selectOneMenu>
+                            <p:inputText value="#{row.place}" maxlength="32" style="width: 100%" required="true" requiredMessage="请输入货柜位置"/>
                         </f:facet>
                     </p:cellEditor>
                 </p:column>
diff --git a/src/main/webapp/personal_use_info.xhtml b/src/main/webapp/personal_use_info.xhtml
index 9b9c981..6689128 100644
--- a/src/main/webapp/personal_use_info.xhtml
+++ b/src/main/webapp/personal_use_info.xhtml
@@ -140,7 +140,7 @@
 				</p:column>
 
 				<p:column headerText="课题组">
-					<h:outputText value="#{row.project}"/>
+					<h:outputText value="#{row.projectName}"/>
 				</p:column>
 
 				<p:column headerText="部门">
@@ -212,7 +212,7 @@
 	<p:dialog id="apply-ui" header="领用单" widgetVar="printDialog" appendTo="@(body)" modal="true" resizable="false"
 			  width="1258">
 		<div id="printTarget">
-			<div style=" margin: 20mm 16mm 0mm 10mm;">
+			<div style="margin: 20mm 16mm 0mm 10mm;">
 				<h:form id="printDialog" style="width: 1100px">
 
 					<p:outputPanel style="text-align: center;font-size: 17px;font-weight: 700;">#{personalUseInfoController.printTable['head']}</p:outputPanel>
diff --git a/src/main/webapp/price_mng.xhtml b/src/main/webapp/price_mng.xhtml
index d2260c5..f2ac26c 100644
--- a/src/main/webapp/price_mng.xhtml
+++ b/src/main/webapp/price_mng.xhtml
@@ -78,16 +78,16 @@
                 </p:column>
 
                 <p:column headerText="管制品">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.controlProducts):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.controlProducts:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格型号" width="84px;">
                     <h:outputText
-                            value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentFormat)}" style="font-size:13px"></h:outputText>
+                            value="#{row.reagent.reagentFormat}" style="font-size:13px"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="含税售价" width="60px;">
@@ -103,11 +103,11 @@
                 </p:column>
 
                 <p:column headerText="危险性质" width="85px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="厂家">
-                    <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productHome:''}"></h:outputText>
                 </p:column>
 
                 <!--<p:column headerText="供应商">-->
@@ -115,7 +115,7 @@
                 <!--</p:column>-->
 
                 <p:column headerText="试剂类型" width="60px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购人" style="text-align: center">
@@ -161,11 +161,11 @@
 	                </p:column>
 
 	                <p:column headerText="规格">
-	                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+	                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
 	                </p:column>
 
 	                <p:column headerText="包装">
-	                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+	                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
 	                </p:column>
 
 	                <p:column headerText="含税价格">
diff --git a/src/main/webapp/project_mng.xhtml b/src/main/webapp/project_mng.xhtml
index 5d4ed3b..3bdd44b 100644
--- a/src/main/webapp/project_mng.xhtml
+++ b/src/main/webapp/project_mng.xhtml
@@ -16,7 +16,7 @@
             <p:outputLabel styleClass="title" value="课题管理"></p:outputLabel>
             <p:panelGrid styleClass="filter" columns="8">
                 <p:outputLabel value="课题编号:"></p:outputLabel>
-                <p:inputText value="#{projectMngController.projectId}"></p:inputText>
+                <p:inputText value="#{projectMngController.projectNo}"></p:inputText>
 
                 <p:outputLabel value="课题名称:"></p:outputLabel>
                 <p:inputText value="#{projectMngController.projectName}"></p:inputText>
@@ -67,7 +67,7 @@
                          rows="20" pageLinks="5">
                 <p:column selectionMode="multiple" style="width: 30px;text-align: center;"/>
                 <p:column headerText="课题编号">
-                    <h:outputText value="#{row.projectId}"></h:outputText>
+                    <h:outputText value="#{row.projectNo}"></h:outputText>
                 </p:column>
                 <p:column headerText="课题名称">
                     <h:outputText value="#{row.projectName}"></h:outputText>
@@ -96,7 +96,7 @@
                         <p:outputLabel value="课题编号"></p:outputLabel>
                     </p:column>
                     <p:column>
-                        <p:inputText value="#{projectMngController.sysProject.projectId}" required="true" requiredMessage="请填写课题编号"></p:inputText>
+                        <p:inputText value="#{projectMngController.sysProject.projectNo}" required="true" requiredMessage="请填写课题编号"></p:inputText>
                     </p:column>
                 </p:row>
                 <p:row>
diff --git a/src/main/webapp/reagent_mng.xhtml b/src/main/webapp/reagent_mng.xhtml
index c893130..5080b1e 100644
--- a/src/main/webapp/reagent_mng.xhtml
+++ b/src/main/webapp/reagent_mng.xhtml
@@ -28,6 +28,7 @@
                 </p:selectOneMenu>
                 <p:outputLabel value="种类:"></p:outputLabel>
                 <p:selectOneMenu value="#{reagentMngController.type}">
+                    <f:selectItem itemLabel="全部" itemValue="#{null}" noSelectionOption="true"></f:selectItem>
                     <f:selectItems value="#{reagentMngController.typeList}" var="item"
                                    itemLabel="#{item.text}" itemValue="#{item.key}"></f:selectItems>
                 </p:selectOneMenu>
@@ -86,6 +87,7 @@
 					}
 				</script>
             </p:panelGrid>
+
             <p:dataTable id="reagentMngDataTable" styleClass="data-table"
                          paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
                          lazy="true" value="#{reagentMngController.dataModel}" var="row" rowKey="#{row.id}"
@@ -109,22 +111,22 @@
                     <h:outputText value="#{row.productSn}"></h:outputText>
                 </p:column>-->
                 <p:column headerText="试剂类型">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentType)}"></h:outputText>
+                    <h:outputText value="#{row.reagentType}"></h:outputText>
                 </p:column>
                 <p:column headerText="危险性质">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentCharacter)}"></h:outputText>
+                    <h:outputText value="#{row.reagentCharacter}"></h:outputText>
                 </p:column>
                 <p:column headerText="供应商">
                     <h:outputText value="#{row.supplierName}"></h:outputText>
                 </p:column>
                 <p:column headerText="厂家">
-                    <h:outputText value="#{row.productHomeName}"></h:outputText>
+                    <h:outputText value="#{row.productHome}"></h:outputText>
                 </p:column>
                 <p:column headerText="规格">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentFormat)}"></h:outputText>
+                    <h:outputText value="#{row.reagentFormat}"></h:outputText>
                 </p:column>
                 <p:column headerText="包装">
-                    <h:outputText value="#{''.concat(row.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagentUnit))}"></h:outputText>
+                    <h:outputText value="#{''.concat(row.mainMetering).concat(row.reagentUnit)}"></h:outputText>
                 </p:column>
                 <p:column headerText="含税售价">
                     <h:outputText value="#{row.price}"></h:outputText>
@@ -133,15 +135,6 @@
                 <p:column headerText="密度g/ml"  rendered="#{reagentMngController.type == 1}">
                     <h:outputText value="#{row.density}"  decimalPlaces="4" minValue="0" maxlength="6" ></h:outputText>
                 </p:column>
-                <!--<p:column headerText="每箱数量">
-                    <h:outputText value="#{row.perBox}"></h:outputText>
-                </p:column>
-                <p:column headerText="管制品">
-                    <h:outputText value="#{row.controlProductsName}"></h:outputText>
-                </p:column>
-                <p:column headerText="备注">
-                    <h:outputText value="#{row.memo}"></h:outputText>
-                </p:column>-->
                    <p:column headerText="每箱数量">
                             <h:outputText value="#{row.perBox}"></h:outputText>
                         </p:column>
@@ -149,7 +142,7 @@
                     <h:outputText value="#{row.safetynum}" ></h:outputText>
                 </p:column>
                 <p:column headerText="管制品" rendered="#{reagentMngController.type == 1}">
-                    <h:outputText value="#{row.controlProductsName}" ></h:outputText>
+                    <h:outputText value="#{row.controlProducts}" ></h:outputText>
                 </p:column>
 <!--                        <p:column headerText="库存">-->
 <!--                            <h:outputText value="#{row.reserve}"></h:outputText>-->
@@ -221,22 +214,10 @@
                         </p:selectOneMenu>-->
                     </p:column>
                     <p:column>
-                        <p:autoComplete id="reagentType" value="#{reagentMngController.sysReagent.reagentType}" completeMethod="#{reagentMngController.getReagentTypeBaseMeta}"
-                                        var="item"
-                                        dropdown="true"
-                                        styleClass="apply-user-autocomplete"
-                                        required="true" requiredMessage="请输入试剂类型"   forceSelection="true"
-                                        itemLabel="#{!empty reagentMngController.sysReagent.reagentType ?baseMetaService.getBaseMetaValue(reagentMngController.sysReagent.reagentType) : item.metaValue}"
-                                        itemValue="#{item.id}">
-                            <p:ajax event="itemSelect" process="@this" update="@this" />
-                            <!--<p:column>
-                                <h:outputText value="#{item.metaKey}" />
-                            </p:column>-->
-                            <p:column>
-                                <h:outputText value="#{item.metaValue}" />
-                            </p:column>
-                        </p:autoComplete>
-
+                        <p:selectOneMenu value="#{reagentMngController.sysReagent.reagentType}" required="true" requiredMessage="请选择试剂类型">
+                        <f:selectItems value="#{reagentMngController.reagentTypeFlagList}"
+                                       var="item" itemLabel="#{item.value}" itemValue="#{item.value}"></f:selectItems>
+                         </p:selectOneMenu>
                     </p:column>
                 </p:row>
                 <p:row>
@@ -249,41 +230,15 @@
                         </p:selectOneMenu>-->
                     </p:column>
                     <p:column>
-                        <p:autoComplete id="reagentCharacter" value="#{reagentMngController.sysReagent.reagentCharacter}" completeMethod="#{reagentMngController.getReagentCharacterBaseMeta}"
-                                        required="true" requiredMessage="请输入危险性质"   forceSelection="true"
-                                        var="item"
-                                        dropdown="true"
-                                        styleClass="apply-user-autocomplete"
-                                        itemLabel="#{!empty reagentMngController.sysReagent.reagentCharacter ?baseMetaService.getBaseMetaValue(reagentMngController.sysReagent.reagentCharacter) : item.metaValue}"
-                                        itemValue="#{item.id}">
-                            <p:ajax event="itemSelect" process="@this" update="@this" />
-                            <!--<p:column>
-                                <h:outputText value="#{item.metaKey}" />
-                            </p:column>-->
-                            <p:column>
-                                <h:outputText value="#{item.metaValue}" />
-                            </p:column>
-                        </p:autoComplete>
+                        <p:inputText value="#{reagentMngController.sysReagent.reagentCharacter}" maxlength="100"
+                                     required="true" requiredMessage="请输入危险性质"></p:inputText>
                     </p:column>
                     <p:column>
                         <p:outputLabel value="厂家"></p:outputLabel>
                     </p:column>
                     <p:column>
-                        <p:autoComplete id="productHome" value="#{reagentMngController.sysReagent.productHome}" completeMethod="#{reagentMngController.getProductName}"
-                                        required="true" requiredMessage="请输入厂家"   forceSelection="true"
-                                        var="item"
-                                        dropdown="true"
-                                        styleClass="apply-user-autocomplete"
-                                        itemLabel="#{!empty reagentMngController.sysReagent.productHome ?baseMetaService.getBaseMetaValue(reagentMngController.sysReagent.productHome) : item.metaValue}"
-                                        itemValue="#{item.id}">
-                            <p:ajax event="itemSelect" process="@this" update="@this" />
-                            <!--<p:column>
-                                <h:outputText value="#{item.metaKey}" />
-                            </p:column>-->
-                            <p:column>
-                                <h:outputText value="#{item.metaValue}" />
-                            </p:column>
-                        </p:autoComplete>
+                        <p:inputText value="#{reagentMngController.sysReagent.productHome}" maxlength="100"
+                                     required="true" requiredMessage="请输入厂家"></p:inputText>
                     </p:column>
                         <!--<p:selectOneMenu value="#{reagentMngController.sysReagent.productHome}"
                                          required="true" requiredMessage="请选择厂家">
@@ -326,22 +281,8 @@
                         <p:outputLabel value="规格"></p:outputLabel>
                     </p:column>
                     <p:column>
-                        <p:autoComplete id="reagentFormat" value="#{reagentMngController.sysReagent.reagentFormat}" completeMethod="#{reagentMngController.getReagentFormat}"
-                                        required="true" requiredMessage="请输入规格"   forceSelection="true"
-                                        var="item"
-                                        dropdown="true"
-                                        styleClass="apply-user-autocomplete"
-                                        itemLabel="#{!empty reagentMngController.sysReagent.reagentFormat ?baseMetaService.getBaseMetaValue(reagentMngController.sysReagent.reagentFormat) : item.metaValue}"
-                                        itemValue="#{item.id}">
-                            <p:ajax event="itemSelect" process="@this" update="@this" />
-                            <!--<p:column>
-                                <h:outputText value="#{item.metaKey}" />
-                            </p:column>-->
-                            <p:column>
-                                <h:outputText value="#{item.metaValue}" />
-                            </p:column>
-
-                        </p:autoComplete>
+                        <p:inputText value="#{reagentMngController.sysReagent.reagentFormat}" maxlength="100"
+                                     required="true" requiredMessage="请输入规格"></p:inputText>
                     </p:column>
                         <!--<p:selectOneMenu value="#{reagentMngController.sysReagent.reagentFormat}"
                                          required="true"  requiredMessage="请选择规格">
@@ -364,21 +305,8 @@
                         <p:outputLabel value="主计单位"></p:outputLabel>
                     </p:column>
                     <p:column>
-                        <p:autoComplete id="reagentUnit" value="#{reagentMngController.sysReagent.reagentUnit}" completeMethod="#{reagentMngController.getReagentUnit}"
-                                        required="true" requiredMessage="请输入主计单位"   forceSelection="true"
-                                        var="item"
-                                        dropdown="true"
-                                        styleClass="apply-user-autocomplete"
-                                        itemLabel="#{!empty reagentMngController.sysReagent.reagentUnit ?baseMetaService.getBaseMetaValue(reagentMngController.sysReagent.reagentUnit) : item.metaValue}"
-                                        itemValue="#{item.id}">
-                            <p:ajax event="itemSelect" process="@this" update="@this" />
-                            <!--<p:column>
-                                <h:outputText value="#{item.metaKey}" />
-                            </p:column>-->
-                            <p:column>
-                                <h:outputText value="#{item.metaValue}" />
-                            </p:column>
-                        </p:autoComplete>
+                        <p:inputText value="#{reagentMngController.sysReagent.reagentUnit}" maxlength="100"
+                                     required="true" requiredMessage="请输入主计单位"></p:inputText>
                     </p:column>
                         <!--<p:selectOneMenu value="#{reagentMngController.sysReagent.reagentUnit}"
                                          required="true" requiredMessage="请选择主计单位">
@@ -439,21 +367,12 @@
                         <p:outputLabel value="管制品"></p:outputLabel>
                     </p:column>
                     <p:column>
-                        <p:autoComplete id="controlProducts" value="#{reagentMngController.sysReagent.controlProducts}" completeMethod="#{reagentMngController.getControlProducts}"
-                                          forceSelection="true"
-                                        var="item"
-                                        dropdown="true"
-                                        styleClass="apply-user-autocomplete"
-                                        itemLabel="#{!empty reagentMngController.sysReagent.controlProducts ?baseMetaService.getBaseMetaValue(reagentMngController.sysReagent.controlProducts) : item.metaValue}"
-                                        itemValue="#{item.id}">
-                            <p:ajax event="itemSelect" process="@this" update="@this" />
-                            <!--<p:column>
-                                <h:outputText value="#{item.metaKey}" />
-                            </p:column>-->
-                            <p:column>
-                                <h:outputText value="#{item.metaValue}" />
-                            </p:column>
-                        </p:autoComplete>
+                        <p:selectOneMenu value="#{reagentMngController.sysReagent.controlProducts}"  requiredMessage="请选择管制品">
+                            <f:selectItem itemLabel="请选择管制品" itemValue="#{null}" noSelectionOption="true" ></f:selectItem>
+                            <f:selectItem itemLabel="易制毒" itemValue="易制毒" ></f:selectItem>
+                            <f:selectItem itemLabel="易制爆" itemValue="易制爆" ></f:selectItem>
+                            <f:selectItem itemLabel="剧毒" itemValue="剧毒" ></f:selectItem>
+                        </p:selectOneMenu>
                     </p:column>
                 <!--<p:selectOneMenu value="#{reagentMngController.sysReagent.controlProducts}"
                                  required="true" requiredMessage="请选择是否是管制品">
diff --git a/src/main/webapp/reagent_user_flow_info.xhtml b/src/main/webapp/reagent_user_flow_info.xhtml
index be73b4f..fc4907a 100644
--- a/src/main/webapp/reagent_user_flow_info.xhtml
+++ b/src/main/webapp/reagent_user_flow_info.xhtml
@@ -45,8 +45,8 @@
 					<p:outputLabel value="操作状态:"></p:outputLabel>
 					<p:selectOneMenu value="#{opeUseFlowInfoController.operatestate}" style="width: 60px;">
 						<f:selectItem itemLabel="全部" itemValue="#{null}" noSelectionOption="true"></f:selectItem>
-						<f:selectItems value="#{baseMetaService.getBaseMetaList(constants.OPERATE_STATUS)}"
-									   var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+						<f:selectItems value="#{opeUseFlowInfoController.getOperatestateList()}"
+									   var="item" itemLabel="#{item.value}" itemValue="#{item.key}"></f:selectItems>
 					</p:selectOneMenu>
 
 
diff --git a/src/main/webapp/require_mng.xhtml b/src/main/webapp/require_mng.xhtml
index 9f4826f..2255a70 100644
--- a/src/main/webapp/require_mng.xhtml
+++ b/src/main/webapp/require_mng.xhtml
@@ -66,15 +66,15 @@
                 </p:column>
 
                 <p:column headerText="管制品">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.controlProducts):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.controlProducts:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格型号" width="66px;">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"  style="font-size:13px"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"  style="font-size:13px"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="含税售价">
@@ -86,11 +86,11 @@
                 </p:column>
 
                 <p:column headerText="危险性质"  width="85px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="厂家" width="64px;">
-                    <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productHome:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="供应商" width="92px;">
@@ -98,7 +98,7 @@
                 </p:column>
 
                 <p:column headerText="试剂类型" width="29px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购数量" width="29px;">
@@ -147,10 +147,10 @@
                 <p:inputText value="#{requireMngController.opeApply.reagent.supplierName}" disabled="true"></p:inputText>
 
                 <p:outputLabel value="规格"></p:outputLabel>
-                <p:inputText value="#{baseMetaService.getBaseMetaValue(requireMngController.opeApply.reagent.reagentFormat)}" disabled="true"></p:inputText>
+                <p:inputText value="#{requireMngController.opeApply.reagent.reagentFormat}" disabled="true"></p:inputText>
 
                 <p:outputLabel value="包装"></p:outputLabel>
-                <p:inputText value="#{''.concat(requireMngController.opeApply.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(requireMngController.opeApply.reagent.reagentUnit))}"
+                <p:inputText value="#{''.concat(requireMngController.opeApply.reagent.mainMetering).concat(requireMngController.opeApply.reagent.reagentUnit)}"
                              disabled="true"></p:inputText>
 
                 <p:outputLabel value="含税价格"></p:outputLabel>
@@ -171,7 +171,7 @@
                 <p:inputText value="#{requireMngController.opeApply.applyUserName}" disabled="true"></p:inputText>
 
                 <p:outputLabel value="申购目的"></p:outputLabel>
-                <p:inputText value="#{baseMetaService.getBaseMetaValue(requireMngController.opeApply.objective)}" disabled="true"></p:inputText>
+                <p:inputText value="#{requireMngController.getProjectName(requireMngController.opeApply.projectId)}" disabled="true"></p:inputText>
 
                 <p:outputLabel value="申购日期"></p:outputLabel>
                 <p:inputText value="#{requireMngController.opeApply.createTime}" disabled="true">
diff --git a/src/main/webapp/require_mng_new.xhtml b/src/main/webapp/require_mng_new.xhtml
index 6012fed..c0e63d5 100644
--- a/src/main/webapp/require_mng_new.xhtml
+++ b/src/main/webapp/require_mng_new.xhtml
@@ -60,15 +60,15 @@
                     <h:outputText value="#{row.reagent!=null?row.reagent.supplierName:''}"></h:outputText>
                 </p:column>
                 <p:column headerText="厂家">
-                    <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productHome:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="含税售价">
diff --git a/src/main/webapp/resources/css/default.css b/src/main/webapp/resources/css/default.css
index 37d79a1..aaf9c3c 100644
--- a/src/main/webapp/resources/css/default.css
+++ b/src/main/webapp/resources/css/default.css
@@ -1117,3 +1117,13 @@
     border-radius: 0 !important;
     color: #ffffff !important;
 }
+
+
+
+@media print {
+    @page{
+        margin:10px;
+        /*margin-top:5nm;*/
+        /*margin-bottom: 5nm;*/
+    }
+}
\ No newline at end of file
diff --git a/src/main/webapp/resources/css/mybootstrap.css b/src/main/webapp/resources/css/mybootstrap.css
index a059eac..be34239 100644
--- a/src/main/webapp/resources/css/mybootstrap.css
+++ b/src/main/webapp/resources/css/mybootstrap.css
@@ -139,7 +139,7 @@
 
 .ui-row-editor .ui-icon,
 .ui-cell-editor-input .ui-icon {
-    background-image: url("/smartlab/javax.faces.resource/images/ui-icons_333333_256x240.png.xhtml?ln=primefaces-bootstrap")!important;
+    background-image: url("/smartlab_promote/javax.faces.resource/images/ui-icons_333333_256x240.png.xhtml?ln=primefaces-bootstrap")!important;
 }
 
 .apply-list .ui-state-default{
diff --git a/src/main/webapp/resources/images/levena_biopharma.jpg b/src/main/webapp/resources/images/levena_biopharma.jpg
new file mode 100644
index 0000000..911ab62
--- /dev/null
+++ b/src/main/webapp/resources/images/levena_biopharma.jpg
Binary files differ
diff --git a/src/main/webapp/supplier_order_mng.xhtml b/src/main/webapp/supplier_order_mng.xhtml
index 68fba91..0ca1471 100644
--- a/src/main/webapp/supplier_order_mng.xhtml
+++ b/src/main/webapp/supplier_order_mng.xhtml
@@ -61,6 +61,7 @@
                                  styleClass="new-btn">
                     <p:confirm header="确认" message="确认报销?"></p:confirm>
                 </p:commandButton>
+
             </p:panelGrid>
 
             <p:dataTable id="supplierOrderMngDataTable" styleClass="data-table"
diff --git a/src/main/webapp/supplier_require_mng.xhtml b/src/main/webapp/supplier_require_mng.xhtml
index c0b2154..63b33a0 100644
--- a/src/main/webapp/supplier_require_mng.xhtml
+++ b/src/main/webapp/supplier_require_mng.xhtml
@@ -66,15 +66,15 @@
                 </p:column>
 
                 <p:column headerText="管制品">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.controlProducts):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.controlProducts:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格型号" width="66px;">
-                    <h:outputText value="#{row.reagent!=null?baseMetaService.getBaseMetaValue(row.reagent.reagentFormat):''}"  style="font-size:13px"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.reagentFormat:''}"  style="font-size:13px"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
-                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))):''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?(''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)):''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="含税售价">
@@ -86,11 +86,11 @@
                 </p:column>
 
                 <p:column headerText="危险性质"  width="85px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="厂家" width="64px;">
-                    <h:outputText value="#{row.reagent!=null?row.reagent.productHomeName:''}"></h:outputText>
+                    <h:outputText value="#{row.reagent!=null?row.reagent.productHome:''}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="供应商" width="92px;">
@@ -98,7 +98,7 @@
                 </p:column>
 
                 <p:column headerText="试剂类型" width="29px;">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购数量" width="29px;">
@@ -140,10 +140,10 @@
                 <p:inputText value="#{requireMngController.opeApply.reagent.supplierName}" disabled="true"></p:inputText>
 
                 <p:outputLabel value="规格"></p:outputLabel>
-                <p:inputText value="#{baseMetaService.getBaseMetaValue(requireMngController.opeApply.reagent.reagentFormat)}" disabled="true"></p:inputText>
+                <p:inputText value="#{requireMngController.opeApply.reagent.reagentFormat}" disabled="true"></p:inputText>
 
                 <p:outputLabel value="包装"></p:outputLabel>
-                <p:inputText value="#{''.concat(requireMngController.opeApply.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(requireMngController.opeApply.reagent.reagentUnit))}"
+                <p:inputText value="#{''.concat(requireMngController.opeApply.reagent.mainMetering).concat(requireMngController.opeApply.reagent.reagentUnit)}"
                              disabled="true"></p:inputText>
 
                 <p:outputLabel value="含税价格"></p:outputLabel>
@@ -161,7 +161,7 @@
                 </p:inputText>
 
                 <p:outputLabel value="申购目的"></p:outputLabel>
-                <p:inputText value="#{baseMetaService.getBaseMetaValue(requireMngController.opeApply.objective)}" disabled="true"></p:inputText>
+                <p:inputText value="#{requireMngController.getProjectName(requireMngController.opeApply.projectId)}" disabled="true"></p:inputText>
 
                 <p:outputLabel value="申购日期"></p:outputLabel>
                 <p:inputText value="#{requireMngController.opeApply.createTime}" disabled="true">
diff --git a/src/main/webapp/sys_hazardous_waste.xhtml b/src/main/webapp/sys_hazardous_waste.xhtml
index 92ce344..ae003c3 100644
--- a/src/main/webapp/sys_hazardous_waste.xhtml
+++ b/src/main/webapp/sys_hazardous_waste.xhtml
@@ -37,12 +37,12 @@
 
                         <p:outputLabel value="单号:"/>
                         <p:inputText value="#{hazardousWasteController.tid}" style="width: 120px"/>
-                        <p:outputLabel value="课题组"></p:outputLabel>
-                        <p:selectOneMenu value="#{hazardousWasteController.project}" filter="true" filterMatchMode="startsWith">
-                            <f:selectItem itemLabel="不选择课题组" />
-                            <f:selectItems value="#{sysProjectServiceImpl.getAll()}"
-                                           var="item" itemLabel="#{item.project}"  itemValue="#{item.project}"/>
-                        </p:selectOneMenu>
+<!--                        <p:outputLabel value="课题组"></p:outputLabel>-->
+<!--                        <p:selectOneMenu value="#{hazardousWasteController.projectId}" filter="true" filterMatchMode="startsWith">-->
+<!--                            <f:selectItem itemLabel="不选择课题组" />-->
+<!--                            <f:selectItems value="#{sysProjectServiceImpl.getAll()}"-->
+<!--                                           var="item" itemLabel="#{item.projectName}"  itemValue="#{item.id}"/>-->
+<!--                        </p:selectOneMenu>-->
 
                         <p:outputLabel value="部门"></p:outputLabel>
                         <p:selectOneMenu value="#{hazardousWasteController.department}" requiredMessage="请选择部门">
@@ -57,6 +57,15 @@
                 </p:panel>
                 <p:panel styleClass="center-body">
                     <p:panelGrid columns="5" styleClass="btn">
+                        <p:commandButton value="新增" styleClass="new-btn"
+                                         process="@form"
+                                         actionListener="#{hazardousWasteController.addHazardousWaste}"
+                                         oncomplete="PF('wastedialog').show();"
+                                         update=":wastedialog,:dialogForm"></p:commandButton>
+                        <p:commandButton value="编辑" styleClass="edit-btn"
+                                         process="@form"
+                                         actionListener="#{hazardousWasteController.editHazardousWaste}"
+                                         update=":wastedialog,:dialogForm"></p:commandButton>
                         <p:commandButton value="导出" styleClass="new-btn"   ajax="false" actionListener="#{hazardousWasteController.export2Excel}" />
                         <p:commandButton value="取消" styleClass="del-btn"   ajax="false" actionListener="#{hazardousWasteController.cancelOne}" />
                         <p:commandButton value="恢复" styleClass="edit-btn"   ajax="false" actionListener="#{hazardousWasteController.recoverOne}" />
@@ -67,13 +76,14 @@
                                  paginatorAlwaysVisible="false"
                                  paginatorPosition="bottom"
                                  lazy="true" value="#{hazardousWasteController.dataModel}"
-                                 selection="#{hazardousWasteController.selectedOne}"
+                                 selection="#{hazardousWasteController.selectedList}"
                                  var="row"
                                  rowKey="#{row.id}"
                                  emptyMessage="无数据"
                                  rows="20"
-                                 selectionMode="single"
-                                 pageLinks="5">
+                                 pageLinks="5"
+                                 resizableColumns="true">
+                        <p:column selectionMode="multiple" style="width: 30px;text-align: center;"/>
                         <p:column headerText="单号" width="150">
                             <h:outputText value="#{row.tid}"/>
                         </p:column>
@@ -100,7 +110,7 @@
                             <h:outputText value="#{row.medical}"/>
                         </p:column>
                         <p:column headerText="确认者">
-                            <h:outputText value="#{row.applyPerson}"/>
+                            <h:outputText value="#{row.applyPersonName}"/>
                         </p:column>
                         <p:column headerText="确认时间">
                             <h:outputText value="#{row.updatetime}">
@@ -108,14 +118,14 @@
                             </h:outputText>
                         </p:column>
                         <p:column headerText="课题组">
-                            <h:outputText value="#{row.project}"/>
+                            <h:outputText value="#{row.projectName}"/>
                         </p:column>
                         <p:column headerText="部门">
                             <h:outputText value="#{row.department}"/>
                         </p:column>
 
                         <p:column headerText="单位">
-                            <h:outputText value="#{row.unit}"/>
+                            <h:outputText value="#{row.unitName}"/>
                         </p:column>
 
                         <p:column headerText="创建者">
@@ -130,6 +140,7 @@
                     </p:dataTable>
                 </p:panel>
             </h:form>
+
         </p:tab>
         <p:tab title="统计分析">
             <h:form id="hazardousWasteAnalysisForm">
@@ -154,12 +165,12 @@
                         <p:outputLabel value="确认者:"/>
                         <p:inputText value="#{hazardousWasteController.applyPerson}"/>
 
-                        <p:outputLabel value="课题组"></p:outputLabel>
-                        <p:selectOneMenu value="#{hazardousWasteController.project}" filter="true" filterMatchMode="startsWith">
-                            <f:selectItem itemLabel="不选择课题组" />
-                            <f:selectItems value="#{sysProjectServiceImpl.getAll()}"
-                                           var="item" itemLabel="#{item.project}"  itemValue="#{item.project}"/>
-                        </p:selectOneMenu>
+<!--                        <p:outputLabel value="课题组"></p:outputLabel>-->
+<!--                        <p:selectOneMenu value="#{hazardousWasteController.projectId}" filter="true">-->
+<!--                            <f:selectItem itemLabel="不选择课题组" />-->
+<!--                            <f:selectItems value="#{sysProjectServiceImpl.getAll()}"-->
+<!--                                           var="item" itemLabel="#{item.projectName}"  itemValue="#{item.id}"/>-->
+<!--                        </p:selectOneMenu>-->
 
                         <p:outputLabel value="部门"></p:outputLabel>
                         <p:selectOneMenu value="#{hazardousWasteController.department}" requiredMessage="请选择部门">
@@ -236,5 +247,70 @@
             min-width: 100px !important;
         }
     </style>
+
+    <p:dialog modal="true"
+              header="#{hazardousWasteController.action==constants.ACTION_ADD?'新建':'修改'}"
+              appendTo="@(body)" id="wastedialog" widgetVar="wastedialog" resizable="false"
+              width="800">
+        <h:form id="dialogForm">
+            <p:panelGrid columns="4" styleClass="content2 grid-padding-bottom2">
+                <p:outputLabel value="确认者"></p:outputLabel>
+                <p:autoComplete value="#{hazardousWasteController.hazardousWaste.applyPerson}" completeMethod="#{hazardousWasteController.getUserSelectList()}"
+                                var="item"
+                                dropdown="true"
+                                styleClass="apply-user-autocomplete"
+                                itemLabel="#{!empty hazardousWasteController.hazardousWaste and !empty hazardousWasteController.hazardousWaste.applyPerson ? hazardousWasteController.getSelectedUserById(hazardousWasteController.hazardousWaste.applyPerson).name: (!empty item?item.name:'')}"
+                                itemValue="#{!empty item ? item.id:''}" forceSelection="true">
+                    <p:ajax event="itemSelect" process="@this" update="@this" />
+                    <p:column>
+                        <h:outputText value="#{item.name}" required="true" requiredMessage="请填写确认者"/>
+                    </p:column>
+                </p:autoComplete>
+
+
+                <p:outputLabel value="部门"></p:outputLabel>
+                <p:selectOneMenu value="#{hazardousWasteController.hazardousWaste.department}"
+                                 required="true" requiredMessage="请选择部门">
+                    <f:selectItems value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_USER_DEPARTMENT)}"
+                                   var="item" itemLabel="#{item.metaValue}" itemValue="#{item.metaValue}"></f:selectItems>
+                </p:selectOneMenu>
+
+                <p:outputLabel value="课题组"></p:outputLabel>
+                <p:selectOneMenu value="#{hazardousWasteController.hazardousWaste.projectId}" filter="true" filterMatchMode="startsWith" required="true" requiredMessage="请选择课题组">
+                    <f:selectItem itemLabel="不选择课题组" />
+                    <f:selectItems value="#{sysProjectServiceImpl.getAll()}"
+                                   var="item" itemLabel="#{item.projectName}"  itemValue="#{item.id}"></f:selectItems>
+                </p:selectOneMenu>
+
+
+                <p:outputLabel value="酸性废液"></p:outputLabel>
+                <p:inputText value="#{hazardousWasteController.hazardousWaste.acid}" maxlength="100"
+                             required="true" requiredMessage="请输入酸性废液"></p:inputText>
+
+                <p:outputLabel value="碱性废液"></p:outputLabel>
+                <p:inputText value="#{hazardousWasteController.hazardousWaste.alkali}" maxlength="100"
+                             required="true" requiredMessage="请输入碱性废液"></p:inputText>
+
+                <p:outputLabel value="有机废液"></p:outputLabel>
+                <p:inputText value="#{hazardousWasteController.hazardousWaste.organic}" maxlength="100"
+                             required="true" requiredMessage="请输入有机废液"></p:inputText>
+
+                <p:outputLabel value="固体废弃物"></p:outputLabel>
+                <p:inputText value="#{hazardousWasteController.hazardousWaste.solid}" maxlength="100"
+                             required="true" requiredMessage="请输入固体废弃物"></p:inputText>
+
+                <p:outputLabel value="医疗废弃物"></p:outputLabel>
+                <p:inputText value="#{hazardousWasteController.hazardousWaste.medical}" maxlength="100"
+                             required="true" requiredMessage="请输入医疗废弃物"></p:inputText>
+            </p:panelGrid>
+            <p:panel styleClass="btn">
+                <p:commandButton value="保存"
+                                 actionListener="#{hazardousWasteController.onSaveBtnClick}" process="@form" >
+                    <p:confirm header="确认" message="确认操作?"></p:confirm>
+                </p:commandButton>
+            </p:panel>
+        </h:form>
+    </p:dialog>
+
 </ui:composition>
 </html>
diff --git a/src/main/webapp/user_mng.xhtml b/src/main/webapp/user_mng.xhtml
index 3071e72..1c6c326 100644
--- a/src/main/webapp/user_mng.xhtml
+++ b/src/main/webapp/user_mng.xhtml
@@ -23,7 +23,7 @@
                 <p:inputText value="#{userMngController.name}"></p:inputText>
 
                 <p:outputLabel value="课题组:"></p:outputLabel>
-                <p:inputText value="#{userMngController.project}"></p:inputText>
+                <p:inputText value="#{userMngController.projectName}"></p:inputText>
 
                 <p:outputLabel value="部门:"></p:outputLabel>
                 <p:inputText value="#{userMngController.departmentName}"></p:inputText>
@@ -102,7 +102,7 @@
                 </p:column>
 
                 <p:column headerText="课题组">
-                    <h:outputText value="#{row.project}"></h:outputText>
+                    <h:outputText value="#{row.projectName}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="ARP">
@@ -188,10 +188,10 @@
                              required="true" requiredMessage="请输入ARP号"></p:inputText>
 
                 <p:outputLabel value="课题组"></p:outputLabel>
-                <p:selectOneMenu value="#{userMngController.sysUser.project}" filter="true" filterMatchMode="startsWith">
+                <p:selectOneMenu value="#{userMngController.sysUser.projectId}" filter="true" filterMatchMode="startsWith" required="true" requiredMessage="请选择课题组">
                     <f:selectItem itemLabel="不选择课题组" />
                     <f:selectItems value="#{sysProjectServiceImpl.getAll()}"
-                                   var="item" itemLabel="#{item.project}"  itemValue="#{item.project}"></f:selectItems>
+                                   var="item" itemLabel="#{item.projectName}"  itemValue="#{item.id}"></f:selectItems>
                 </p:selectOneMenu>
 
                 <p:outputLabel value="姓名"></p:outputLabel>
@@ -216,8 +216,6 @@
                 <p:outputLabel value="ID卡号"></p:outputLabel>
                 <p:inputText value="#{userMngController.sysUser.idCard}" maxlength="32"></p:inputText>
 
-                <p:outputLabel value="分数"></p:outputLabel>
-                <p:inputText value="#{userMngController.sysUser.point}" maxlength="32"></p:inputText>
 
                 <p:outputLabel value="角色"></p:outputLabel>
                 <p:selectOneMenu value="#{userMngController.sysUser.roleId}"
@@ -255,9 +253,6 @@
                                    var="item" itemLabel="#{item.text}" itemValue="#{item}"></f:selectItems>
                 </p:selectOneMenu>
 
-                <p:outputLabel value="考试分数"/>
-                <p:inputNumber value="#{userMngController.sysUser.score}"  decimalPlaces="0" minValue="0"
-                               > </p:inputNumber>
 
                 <p:outputLabel />
                 <p:outputLabel />
diff --git a/src/main/webapp/view_order_mng.xhtml b/src/main/webapp/view_order_mng.xhtml
index 236c10c..462b68f 100644
--- a/src/main/webapp/view_order_mng.xhtml
+++ b/src/main/webapp/view_order_mng.xhtml
@@ -6,6 +6,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml"
 	xmlns:ui="http://java.sun.com/jsf/facelets"
 	xmlns:p="http://primefaces.org/ui"
+
 	xmlns:h="http://java.sun.com/jsf/html"
 	xmlns:f="http://java.sun.com/jsf/core"
 	xmlns:c="http://java.sun.com/jsp/jstl/core">
@@ -27,6 +28,16 @@
                                  process="@form"
                                  actionListener="#{supplierOrderMngController.onUpdateStockClick}"
                 update=":dialogStock,:dialogFormStock">
+                </p:commandButton>
+                <p:commandButton value="查看条码" styleClass="edit-btn"
+                                 process="@form"
+                                 actionListener="#{supplierOrderMngController.onViewBarcodeClick}"
+                                 update=":viewReagentCodeList,:dialogViewReagentCodeForm">
+                </p:commandButton>
+                <p:commandButton value="打印二维码" styleClass="edit-btn"
+                                 process="@form"
+                                 actionListener="#{supplierOrderMngController.onPrintBarcodeClick}"
+                                 update=":dialogReagentCode,:dialogReagentCodeForm">
                 </p:commandButton>
             </p:panelGrid>
 			<p:dataTable id="confirmOrderMngDataTable" styleClass="data-table"
@@ -50,17 +61,17 @@
 				</p:column>
 
                 <p:column headerText="管制品">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.controlProducts)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.controlProducts}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="规格型号">
                     <h:outputText
-                            value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentFormat)}"></h:outputText>
+                            value="#{row.reagent.reagentFormat}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="包装">
                     <h:outputText
-                            value="#{''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))}"></h:outputText>
+                            value="#{''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="含税售价">
@@ -78,15 +89,15 @@
 				</p:column>
 
                 <p:column headerText="危险性质">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="厂家">
-                    <h:outputText value="#{row.reagent.productHomeName}"></h:outputText>
+                    <h:outputText value="#{row.reagent.productHome}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="试剂类型">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentType)}"></h:outputText>
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
                 </p:column>
 
                 <p:column headerText="申购人">
@@ -241,5 +252,88 @@
             </p:panel>
         </h:form>
     </p:dialog>
+
+    <p:dialog modal="true" header="打印条码" appendTo="@(body)"
+              id="dialogReagentCode" widgetVar="dialogReagentCode"
+              resizable="false" width="500">
+        <h:form id="dialogReagentCodeForm">
+            <!--50*40 label尺寸 -->
+            <p:panel styleClass="center-body">
+                <div style="max-height: 800px;overflow: auto;height: 500px;width: 100%;">
+                    <div id="reagentCodeContent" style="width: 190px;">
+                        <c:if test="#{supplierOrderMngController.reagentCodeList!=null and supplierOrderMngController.reagentCodeList.size()>0}">
+                            <c:forEach items="#{supplierOrderMngController.reagentCodeList[0].reagentCodes}" var="reagentCode">
+                                <div style="margin-bottom: 5px;">
+                                <table style="height: 130px;width: 100%;text-align: center;border:1px solid #000;" cellspacing="0" cellpadding="0">
+                                    <tbody>
+                                        <tr>
+                                            <td colspan="2" style="border:1px solid #000;">
+                                                <div><h:outputText value="#{supplierOrderMngController.reagentCodeList[0].reagent.name}" style="font-size:14px;font-weight: bold;"></h:outputText></div>
+                                                <div><h:graphicImage  value="data:image/png;base64,#{supplierOrderMngController.getQrcode(reagentCode)}" style="width: 50px; height: 50px;" dataURI="true"/></div>
+                                                <div><h:outputText value="#{reagentCode}" style="font-size:10px;"></h:outputText></div>
+                                            </td>
+                                        </tr>
+                                        <tr><td style="border:1px solid #000;">【CAS号】</td><td style="border:1px solid #000;"><h:outputText value="#{supplierOrderMngController.reagentCodeList[0].reagent.cas}"></h:outputText></td></tr>
+                                        <tr><td style="border:1px solid #000;">【危险性质】</td><td style="border:1px solid #000;"><h:outputText value="#{supplierOrderMngController.reagentCodeList[0].reagent.reagentCharacter}"></h:outputText></td></tr>
+                                    </tbody>
+                                </table>
+                                </div>
+
+                            </c:forEach>
+                        </c:if>
+                    </div>
+                </div>
+            </p:panel>
+            <p:panel styleClass="btn  no-print">
+                <div class="div-btn cancel" id="codeCancel">关闭</div>
+                <div class="div-btn print" id="codePrint">打印</div>
+                <script type="text/javascript" src="resources/js/print.js"/>
+                <script type="text/javascript">
+                    $(function () {
+                        $("#codePrint").on("click", function () {
+                            jQuery.print('#reagentCodeContent')
+                        })
+                        $("#codeCancel").on("click", function () {
+                            $("#dialogReagentCode a").click();
+                        })
+                    })
+                </script>
+            </p:panel>
+        </h:form>
+    </p:dialog>
+
+
+
+    <p:dialog modal="true" header="条码列表" appendTo="@(body)"
+              id="viewReagentCodeList" widgetVar="viewReagentCodeList"
+              resizable="false" width="1000">
+        <h:form id="dialogViewReagentCodeForm">
+            <p:dataTable styleClass="data-table"
+                         paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
+                         value="#{supplierOrderMngController.viewReagentCodeList}" var="row" rowKey="#{row.reagentCode}"
+                         emptyMessage="无数据">
+                <p:column headerText="试剂名称">
+                    <h:outputText value="#{row.name}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="CAS号">
+                    <h:outputText value="#{row.cas}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="危险性质">
+                    <h:outputText value="#{row.reagentCharacter}"></h:outputText>
+                </p:column>
+                <p:column headerText="条码" width="280px;">
+                    <h:outputText value="#{row.reagentCode}"></h:outputText>
+                </p:column>
+                <p:column headerText="条形码" >
+                    <p:commandButton value="打印条码" styleClass="edit-btn" process="@form"
+                                     actionListener="#{supplierOrderMngController.onPrintSingleBarcodeClick(row.reagentCode)}"
+                                     update=":dialogReagentCode,:dialogReagentCodeForm">
+                    </p:commandButton>
+                </p:column>
+            </p:dataTable>
+        </h:form>
+    </p:dialog>
 </ui:composition>
 </html>
diff --git a/src/main/webapp/view_order_mng_1.xhtml b/src/main/webapp/view_order_mng_1.xhtml
new file mode 100644
index 0000000..5f4a944
--- /dev/null
+++ b/src/main/webapp/view_order_mng_1.xhtml
@@ -0,0 +1,297 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:p="http://primefaces.org/ui"
+
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:c="http://java.sun.com/jsp/jstl/core">
+<head></head>
+<ui:composition>
+	<h:form id="laboratoryStockMngForm">
+		<p:panel styleClass="center-header">
+			<p:outputLabel styleClass="title" value="供应商订单管理 -> 查看订单"></p:outputLabel>
+		</p:panel>
+		<p:panel styleClass="center-body">
+            <p:panelGrid columns="5" styleClass="btn">
+                <p:commandButton value="修改价格" styleClass="edit-btn"
+                                 process="@form"
+                                 actionListener="#{supplierOrderMngController.onUpdatePrice}"
+                                 update=":dialog,:dialogForm">
+
+                </p:commandButton>
+                <p:commandButton value="缺货" styleClass="edit-btn"
+                                 process="@form"
+                                 actionListener="#{supplierOrderMngController.onUpdateStockClick}"
+                update=":dialogStock,:dialogFormStock">
+                </p:commandButton>
+                <p:commandButton value="打印二维码" styleClass="edit-btn"
+                                 process="@form"
+                                 actionListener="#{supplierOrderMngController.onPrintBarcodeClick}"
+                                 update=":dialogReagentCode,:dialogReagentCodeForm">
+                </p:commandButton>
+            </p:panelGrid>
+			<p:dataTable id="confirmOrderMngDataTable" styleClass="data-table"
+				paginator="true" paginatorAlwaysVisible="false"
+				paginatorPosition="bottom" lazy="true"
+				value="#{supplierOrderMngController.opeApplyList}"
+				var="row" rowKey="#{row.id}" emptyMessage="无数据" rows="20"
+                         selection="#{supplierOrderMngController.selectedViewList}"
+				pageLinks="5">
+                <p:column selectionMode="multiple" style="width: 30px;text-align: center;"/>
+                <p:column headerText="申购编号">
+                    <h:outputText value="#{row.applyCode}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="产品编号">
+                    <h:outputText value="#{row.reagent.productSn}"></h:outputText>
+                </p:column>
+
+				<p:column headerText="试剂名称">
+					<h:outputText value="#{row.reagent.name}"></h:outputText>
+				</p:column>
+
+                <p:column headerText="管制品">
+                    <h:outputText value="#{row.reagent.controlProducts}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="规格型号">
+                    <h:outputText
+                            value="#{row.reagent.reagentFormat}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="包装">
+                    <h:outputText
+                            value="#{''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="含税售价">
+                    <h:outputText value="#{row.reagent.price}"></h:outputText>
+                </p:column>
+                <p:column headerText="实际售价">
+                    <h:outputText value="#{row.applyPrice}"></h:outputText>
+                </p:column>
+                <p:column headerText="数量">
+                    <h:outputText value="#{row.num}"></h:outputText>
+                </p:column>
+
+				<p:column headerText="CAS号">
+					<h:outputText value="#{row.reagent.cas}"></h:outputText>
+				</p:column>
+
+                <p:column headerText="危险性质">
+                    <h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="厂家">
+                    <h:outputText value="#{row.reagent.productHome}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="试剂类型">
+                    <h:outputText value="#{row.reagent.reagentType}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="申购人">
+                    <h:outputText value="#{row.applyUserName}"></h:outputText>
+                </p:column>
+
+                <p:column headerText="申购日期">
+                    <h:outputText value="#{row.createTime}">
+                        <f:convertDateTime pattern="yyyy-MM-dd" locale="zh_CN"></f:convertDateTime>
+                    </h:outputText>
+                </p:column>
+                <p:column headerText="是否缺货">
+                    <h:outputText value="#{row.stockFlagValue}"></h:outputText>
+                </p:column>
+			</p:dataTable>
+			<p:panelGrid columns="3" styleClass="btn">
+                <p:commandButton value="返回" styleClass="cancel-btn"
+                                 process="@form"
+                                 actionListener="#{supplierOrderMngController.onBackBtnClick}"
+                                 update=":centerRootPanel">
+                </p:commandButton>
+              </p:panelGrid>
+		</p:panel>
+	</h:form>
+
+    <p:dialog modal="true" header="修改实际售价" appendTo="@(body)"
+              id="dialog" widgetVar="dialog"
+              resizable="false" width="1000">
+        <h:outputScript>
+            window.onload=function(){
+                var test = document.getElementById("dialogForm:j_idt182");
+                if(test!=null){
+                    alert(test.innerHTML);
+                }
+            }
+
+        </h:outputScript>
+        <h:form id="dialogForm">
+            <p:panelGrid styleClass="content2 grid-padding-bottom2">
+                <p:row>
+                    <p:column>
+                        <p:outputLabel value="申购编号"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.applyCode}" maxlength="100"
+                                     disabled="true"></p:inputText>
+                    </p:column>
+                    <p:column>
+                        <p:outputLabel value="产品编号"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.reagent.productSn}" maxlength="100"
+                        disabled="true"></p:inputText>
+                    </p:column>
+                </p:row>
+                <p:row>
+                    <p:column>
+                        <p:outputLabel value="试剂名称"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.reagent.name}" maxlength="100"
+                                     disabled="true"       ></p:inputText>
+                    </p:column>
+                    <p:column>
+                        <p:outputLabel value="CAS"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.reagent.cas}" maxlength="100"
+                                     disabled="true"></p:inputText>
+                    </p:column>
+                </p:row>
+                <p:row>
+                    <p:column>
+                        <p:outputLabel value="含税售价"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.reagent.price}" maxlength="100"
+                                     disabled="true"></p:inputText>
+                    </p:column>
+                    <p:column>
+                        <p:outputLabel value="实际售价"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.applyPrice}" maxlength="100"
+                             required="true" requiredMessage="请输入实际售价"    ></p:inputText>
+                    </p:column>
+                </p:row>
+            </p:panelGrid>
+            <p:panel styleClass="btn">
+                <p:commandButton value="保存" actionListener="#{supplierOrderMngController.onSavePrice}"
+                                 process="@form" update=":laboratoryStockMngForm:confirmOrderMngDataTable">
+                    <p:confirm header="确认" message="确认操作?"></p:confirm>
+                </p:commandButton>
+            </p:panel>
+        </h:form>
+    </p:dialog>
+
+    <p:dialog modal="true" header="是否缺货" appendTo="@(body)"
+              id="dialogStock" widgetVar="dialogStock"
+              resizable="false" width="1000">
+        <h:form id="dialogFormStock">
+            <p:panelGrid styleClass="content2 grid-padding-bottom2">
+                <p:row>
+                    <p:column>
+                        <p:outputLabel value="申购编号"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.applyCode}" maxlength="100"
+                                     disabled="true"></p:inputText>
+                    </p:column>
+                    <p:column>
+                        <p:outputLabel value="产品编号"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.reagent.productSn}" maxlength="100"
+                                     disabled="true"></p:inputText>
+                    </p:column>
+                </p:row>
+                <p:row>
+                    <p:column>
+                        <p:outputLabel value="试剂名称"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.reagent.name}" maxlength="100"
+                                     disabled="true"       ></p:inputText>
+                    </p:column>
+                    <p:column>
+                        <p:outputLabel value="CAS"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:inputText value="#{supplierOrderMngController.viewOpeApply.reagent.cas}" maxlength="100"
+                                     disabled="true"></p:inputText>
+                    </p:column>
+                </p:row>
+                <p:row>
+                    <p:column>
+                        <p:outputLabel value="是否缺货"></p:outputLabel>
+                    </p:column>
+                    <p:column>
+                        <p:selectOneMenu id="console" value="#{supplierOrderMngController.viewOpeApply.stockFlag}" maxlength="100">
+                            <f:selectItem itemLabel="缺货" itemValue="0" />
+                            <f:selectItem itemLabel="不缺货" itemValue="1" />
+                        </p:selectOneMenu>
+                    </p:column>
+                </p:row>
+            </p:panelGrid>
+            <p:panel styleClass="btn">
+                <p:commandButton value="保存" actionListener="#{supplierOrderMngController.onOutOfStock}"
+                                 process="@form" update=":laboratoryStockMngForm:confirmOrderMngDataTable">
+                    <p:confirm header="确认" message="确认操作?"></p:confirm>
+                </p:commandButton>
+            </p:panel>
+        </h:form>
+    </p:dialog>
+
+    <p:dialog modal="true" header="打印条码" appendTo="@(body)"
+              id="dialogReagentCode" widgetVar="dialogReagentCode"
+              resizable="false" width="500">
+        <h:form id="dialogReagentCodeForm">
+            <!--80*60 label尺寸 -->
+            <p:panel styleClass="center-body">
+                <div style="max-height: 800px;overflow: auto;height: 500px;width: 100%;">
+                    <div id="reagentCodeContent" style="width: 300px;">
+                        <c:if test="#{supplierOrderMngController.reagentCodeList!=null and supplierOrderMngController.reagentCodeList.size()>0}">
+                            <c:forEach items="#{supplierOrderMngController.reagentCodeList[0].reagentCodes}" var="reagentCode">
+                                <table style="height: 210px;width: 100%;text-align: center;border:1px solid #000;margin-bottom: 5px;margin-top: 5px;" cellspacing="0" cellpadding="0">
+                                    <tbody>
+                                        <tr>
+                                            <td colspan="2" style="border:1px solid #000;">
+                                                <div><h:outputText value="#{supplierOrderMngController.reagentCodeList[0].reagent.name}" style="font-size:14px;font-weight: bold;"></h:outputText></div>
+                                                <div><h:graphicImage  value="data:image/png;base64,#{supplierOrderMngController.getQrcode(reagentCode)}" style="width: 80px; height: 80px;" dataURI="true"/></div>
+                                                <div><h:outputText value="#{reagentCode}" style="font-size:10px;"></h:outputText></div>
+                                            </td>
+                                        </tr>
+                                        <tr><td style="border:1px solid #000;">【CAS号】</td><td style="border:1px solid #000;"><h:outputText value="#{supplierOrderMngController.reagentCodeList[0].reagent.cas}"></h:outputText></td></tr>
+                                        <tr><td style="border:1px solid #000;">【危险性质】</td><td style="border:1px solid #000;"><h:outputText value="#{supplierOrderMngController.reagentCodeList[0].reagent.reagentCharacter}"></h:outputText></td></tr>
+                                    </tbody>
+                                </table>
+                            </c:forEach>
+                        </c:if>
+                    </div>
+                </div>
+            </p:panel>
+            <p:panel styleClass="btn  no-print">
+                <div class="div-btn cancel" id="codeCancel">关闭</div>
+                <div class="div-btn print" id="codePrint">打印</div>
+                <script type="text/javascript" src="resources/js/print.js"/>
+                <script type="text/javascript">
+                    $(function () {
+                        $("#codePrint").on("click", function () {
+                            jQuery.print('#reagentCodeContent')
+                        })
+                        $("#codeCancel").on("click", function () {
+                            $("#dialogReagentCode a").click();
+                        })
+                    })
+                </script>
+            </p:panel>
+        </h:form>
+    </p:dialog>
+</ui:composition>
+</html>
diff --git a/src/main/webapp/warehouse_container_mng.xhtml b/src/main/webapp/warehouse_container_mng.xhtml
index a5f388b..53946f2 100644
--- a/src/main/webapp/warehouse_container_mng.xhtml
+++ b/src/main/webapp/warehouse_container_mng.xhtml
@@ -58,9 +58,9 @@
 					<h:outputText value="#{row.warehouseName}"></h:outputText>
 				</p:column>
 
-				<p:column headerText="主控名">
-					<h:outputText value="#{row.controllerName}"></h:outputText>
-				</p:column>
+<!--				<p:column headerText="主控名">-->
+<!--					<h:outputText value="#{row.controllerName}"></h:outputText>-->
+<!--				</p:column>-->
 
 				<p:column headerText="货柜条码">
 					<h:outputText value="#{row.containerCode}"></h:outputText>
@@ -87,79 +87,105 @@
 	<p:dialog modal="true"
 		header="#{warehouseContainerMngController.action==constants.ACTION_ADD?'新建':'修改'}"
 		appendTo="@(body)" id="dialog" widgetVar="dialog" resizable="false"
-		width="800">
+		width="600">
 		<h:form id="dialogForm">
-			<p:panelGrid columns="4" styleClass="content2 grid-padding-bottom2">
-
-				<p:outputLabel value="仓库"></p:outputLabel>
-				<p:selectOneMenu
-					value="#{warehouseContainerMngController.sysWarehouseContainer.warehouseId}"
-					required="true" requiredMessage="请选择仓库" disabled="#{warehouseContainerMngController.action==constants.ACTION_ADD?false:true}">
-					<f:selectItems value="#{sysWarehouseService.getAllSysWarehouseList()}"
-						var="item" itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
-				</p:selectOneMenu>
-				<p:outputLabel value="主控名"></p:outputLabel>
-				<p:selectOneMenu
-					value="#{warehouseContainerMngController.sysWarehouseContainer.controllerCode}"
-					required="true" requiredMessage="请选择主控设备">
-					<f:selectItems value="#{warehouseContainerMngController.controllers}" var="item"
-						itemLabel="#{item.controllerName}" itemValue="#{item.controllerCode}"></f:selectItems>
-				</p:selectOneMenu>
-				<p:outputLabel value="货柜条码"></p:outputLabel>
-				<p:inputText
-					value="#{warehouseContainerMngController.sysWarehouseContainer.containerCode}"
-					maxlength="100" disabled="#{warehouseContainerMngController.action==constants.ACTION_ADD?false:true}"></p:inputText>
-
-				<p:outputLabel value="货柜类型"></p:outputLabel>
-				<p:selectOneMenu
-					value="#{warehouseContainerMngController.sysWarehouseContainer.type}"
-					required="true" requiredMessage="请选择货柜类型" disabled="#{warehouseContainerMngController.action==constants.ACTION_ADD?false:true}">
-					<p:ajax event="change" listener="#{warehouseContainerMngController.containerTypeChanged}" process="@form" update="@form"/>
-					<f:selectItems
-						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_CONTAINER_TYPE)}"
-						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
-				</p:selectOneMenu>
-
-				<p:outputLabel value="货柜状态码"></p:outputLabel>
-				<p:inputText
-					value="#{warehouseContainerMngController.sysWarehouseContainer.infoCode}"
-					maxlength="100"></p:inputText>
-
-				<p:outputLabel value="货柜结构"></p:outputLabel>
-				<p:selectOneMenu
-					value="#{warehouseContainerMngController.sysWarehouseContainer.structure}"
-					required="true" requiredMessage="请选择货柜结构">
-					<f:selectItems
-						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_CONTAINER_STRUCTURE)}"
-						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
-				</p:selectOneMenu>
-				
-				<p:outputLabel value="货柜名称"></p:outputLabel>
-				<p:inputText
-					value="#{warehouseContainerMngController.sysWarehouseContainer.name}"
-					maxlength="100"></p:inputText>
-					
-				<p:outputLabel value="左门危险性质" rendered="#{warehouseContainerMngController.characterRenderedFlag==1}"></p:outputLabel>
-				<p:selectOneMenu
-					value="#{warehouseContainerMngController.sysWarehouseContainer.characterLeft}"
-				    required="#{warehouseContainerMngController.characterRenderedFlag==1}"
-					requiredMessage="左门危险性质" 
-					rendered="#{warehouseContainerMngController.characterRenderedFlag==1}">
-					<f:selectItems
-						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_REAGENT_CHARACTER)}"
-						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
-				</p:selectOneMenu>
-				
-				<p:outputLabel value="右门危险性质" rendered="#{warehouseContainerMngController.characterRenderedFlag==1}"></p:outputLabel>
-				<p:selectOneMenu
-					value="#{warehouseContainerMngController.sysWarehouseContainer.characterRight}"
-					required="#{warehouseContainerMngController.characterRenderedFlag==1}" 
-					requiredMessage="右门危险性质" 
-					rendered="#{warehouseContainerMngController.characterRenderedFlag==1}">
-					<f:selectItems
-						value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_REAGENT_CHARACTER)}"
-						var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
-				</p:selectOneMenu>						
+			<p:panelGrid columns="2" styleClass="content2 grid-padding-bottom2">
+				<p:row>
+					<p:column>
+					<p:outputLabel value="仓库"></p:outputLabel>
+					</p:column>
+					<p:column>
+					<p:selectOneMenu
+						value="#{warehouseContainerMngController.sysWarehouseContainer.warehouseId}"
+						required="true" requiredMessage="请选择仓库" disabled="#{warehouseContainerMngController.action==constants.ACTION_ADD?false:true}">
+						<f:selectItems value="#{sysWarehouseService.getAllSysWarehouseList()}"
+							var="item" itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
+					</p:selectOneMenu>
+					</p:column>
+					<p:column>
+					<p:outputLabel value="货柜条码"></p:outputLabel>
+				    </p:column>
+					<p:column>
+					<p:inputText
+						value="#{warehouseContainerMngController.sysWarehouseContainer.containerCode}"
+						maxlength="100" disabled="#{warehouseContainerMngController.action==constants.ACTION_ADD?false:true}"></p:inputText>
+					</p:column>
+				</p:row>
+				<p:row>
+					<p:column>
+					<p:outputLabel value="货柜类型"></p:outputLabel>
+					</p:column>
+					<p:column>
+					<p:selectOneMenu
+						value="#{warehouseContainerMngController.sysWarehouseContainer.type}"
+						required="true" requiredMessage="请选择货柜类型" disabled="#{warehouseContainerMngController.action==constants.ACTION_ADD?false:true}">
+						<p:ajax event="change" listener="#{warehouseContainerMngController.containerTypeChanged}" process="@form" update="@form"/>
+						<f:selectItems
+							value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_CONTAINER_TYPE)}"
+							var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+					</p:selectOneMenu>
+					</p:column>
+					<p:column>
+					<p:outputLabel value="货柜状态码"></p:outputLabel>
+					</p:column>
+					<p:column>
+					<p:inputText
+						value="#{warehouseContainerMngController.sysWarehouseContainer.infoCode}"
+						maxlength="100"></p:inputText>
+					</p:column>
+				</p:row>
+				<p:row>
+					<p:column>
+					<p:outputLabel value="货柜结构"></p:outputLabel>
+					</p:column>
+					<p:column>
+					<p:selectOneMenu
+						value="#{warehouseContainerMngController.sysWarehouseContainer.structure}"
+						required="true" requiredMessage="请选择货柜结构">
+						<f:selectItems
+							value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_CONTAINER_STRUCTURE)}"
+							var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+					</p:selectOneMenu>
+					</p:column>
+					<p:column>
+					<p:outputLabel value="货柜名称"></p:outputLabel>
+					</p:column>
+					<p:column>
+					<p:inputText
+						value="#{warehouseContainerMngController.sysWarehouseContainer.name}"
+						maxlength="100"></p:inputText>
+					</p:column>
+				</p:row>
+				<p:row>
+					<p:column>
+					<p:outputLabel value="左门危险性质" rendered="#{warehouseContainerMngController.characterRenderedFlag==1}"></p:outputLabel>
+					</p:column>
+					<p:column>
+					<p:selectOneMenu
+						value="#{warehouseContainerMngController.sysWarehouseContainer.characterLeft}"
+						required="#{warehouseContainerMngController.characterRenderedFlag==1}"
+						requiredMessage="左门危险性质"
+						rendered="#{warehouseContainerMngController.characterRenderedFlag==1}">
+						<f:selectItems
+							value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_REAGENT_CHARACTER)}"
+							var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+					</p:selectOneMenu>
+					</p:column>
+					<p:column>
+					<p:outputLabel value="右门危险性质" rendered="#{warehouseContainerMngController.characterRenderedFlag==1}"></p:outputLabel>
+					</p:column>
+					<p:column>
+					<p:selectOneMenu
+						value="#{warehouseContainerMngController.sysWarehouseContainer.characterRight}"
+						required="#{warehouseContainerMngController.characterRenderedFlag==1}"
+						requiredMessage="右门危险性质"
+						rendered="#{warehouseContainerMngController.characterRenderedFlag==1}">
+						<f:selectItems
+							value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_REAGENT_CHARACTER)}"
+							var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+					</p:selectOneMenu>
+					</p:column>
+				</p:row>
 			</p:panelGrid>
 			
 			<p:panel styleClass="btn">
diff --git a/src/main/webapp/warehouse_reagent_direct_store.xhtml b/src/main/webapp/warehouse_reagent_direct_store.xhtml
index d36987c..45268ff 100644
--- a/src/main/webapp/warehouse_reagent_direct_store.xhtml
+++ b/src/main/webapp/warehouse_reagent_direct_store.xhtml
@@ -222,7 +222,7 @@
                             <h:outputText value="#{row.supplierName}"></h:outputText>
                         </p:column>
 						<p:column headerText="厂家">
-							<h:outputText value="#{row.productHomeName}"></h:outputText>
+							<h:outputText value="#{row.productHome}"></h:outputText>
 						</p:column>
                         <p:column headerText="规格">
                             <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagentFormat)}"></h:outputText>
diff --git a/src/main/webapp/warehouse_reagent_use.xhtml b/src/main/webapp/warehouse_reagent_use.xhtml
index df2a1bf..4dbcc6a 100644
--- a/src/main/webapp/warehouse_reagent_use.xhtml
+++ b/src/main/webapp/warehouse_reagent_use.xhtml
@@ -32,12 +32,7 @@
 						</p:column>
 					</p:autoComplete>
 
-					<!--  <p:outputLabel value="课题名称:"></p:outputLabel>
-					<p:selectOneMenu value="#{warehouseStockMngController.projectNum}"
-						required="true" requiredMessage="请选择课题名称">
-						<f:selectItems value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_PROJECT_NUM)}"
-							var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
-					</p:selectOneMenu>-->
+
 					<p:outputLabel value="实验室:" style="margin-left: 20px"></p:outputLabel>
 					<p:selectOneMenu value="#{warehouseStockMngController.laboratoryId}"
 						 id="experments">
@@ -117,6 +112,7 @@
 							if (number === "" || number> all.size()){
 								alert("输入不合法");
 							}
+							console.log(number,'number')
 							//选中前面几个
 							for (var i = 0;i &lt; number;i++){
 								all.eq(i)['0'].checked = true;
@@ -172,12 +168,12 @@
 
 				<p:column headerText="规格">
 					<h:outputText
-						value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentFormat)}"></h:outputText>
+						value="#{row.reagent.reagentFormat}"></h:outputText>
 				</p:column>
 
 				<p:column headerText="包装">
 					<h:outputText
-						value="#{''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))}"></h:outputText>
+						value="#{''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)}"></h:outputText>
 				</p:column>
 
 				<p:column headerText="批号">
@@ -358,59 +354,59 @@
 		widgetVar="reagentCodeDialog" resizable="false" width="800" class="ui-dialog">
 
 		<p:tabView dynamic="true" style="margin-left: 26px">
-			<p:tab title="补贴条码">
-				<h:form id="reagentCodeDialogForm2">
-					<!--<p:panel styleClass="center-header content2">-->
-					<p:panelGrid styleClass="center-header content2">
-						<p:row>
-							<p:column><p:outputLabel value="领用数量:"></p:outputLabel></p:column>
-							<p:column><p:inputNumber value="#{warehouseStockMngController.useNum}"
-													 minValue="0" decimalPlaces="0"
-													 required="true" requiredMessage="请输入领用数量" id="useNum">
-								<p:ajax event="change" listener="#{warehouseStockMngController.handleEvent2}" update="endReagentCode"/>
-						</p:inputNumber></p:column>
-<!--							<p:column><p:outputLabel  value="条码情况" /></p:column>-->
-<!--							<p:column><p:selectOneMenu id="advanced"   panelStyle="width:180px"-->
-<!--											 effect="fade"  style="width:160px" filter="true" filterMatchMode="startsWith">-->
-<!--								<f:selectItems value="#{warehouseStockMngController.showCodes}" var="code"  itemValue="#{code}" />-->
+<!--			<p:tab title="补贴条码">-->
+<!--				<h:form id="reagentCodeDialogForm2">-->
+<!--					&lt;!&ndash;<p:panel styleClass="center-header content2">&ndash;&gt;-->
+<!--					<p:panelGrid styleClass="center-header content2">-->
+<!--						<p:row>-->
+<!--							<p:column><p:outputLabel value="领用数量:"></p:outputLabel></p:column>-->
+<!--							<p:column><p:inputNumber value="#{warehouseStockMngController.useNum}"-->
+<!--													 minValue="0" decimalPlaces="0"-->
+<!--													 required="true" requiredMessage="请输入领用数量" id="useNum">-->
+<!--								<p:ajax event="change" listener="#{warehouseStockMngController.handleEvent2}" update="endReagentCode"/>-->
+<!--						</p:inputNumber></p:column>-->
+<!--&lt;!&ndash;							<p:column><p:outputLabel  value="条码情况" /></p:column>&ndash;&gt;-->
+<!--&lt;!&ndash;							<p:column><p:selectOneMenu id="advanced"   panelStyle="width:180px"&ndash;&gt;-->
+<!--&lt;!&ndash;											 effect="fade"  style="width:160px" filter="true" filterMatchMode="startsWith">&ndash;&gt;-->
+<!--&lt;!&ndash;								<f:selectItems value="#{warehouseStockMngController.showCodes}" var="code"  itemValue="#{code}" />&ndash;&gt;-->
 
 
-<!--								<p:column>-->
-<!--									<f:facet name="header">-->
-<!--										<h:outputText value="Name"/>-->
-<!--									</f:facet>-->
-<!--								</p:column>-->
+<!--&lt;!&ndash;								<p:column>&ndash;&gt;-->
+<!--&lt;!&ndash;									<f:facet name="header">&ndash;&gt;-->
+<!--&lt;!&ndash;										<h:outputText value="Name"/>&ndash;&gt;-->
+<!--&lt;!&ndash;									</f:facet>&ndash;&gt;-->
+<!--&lt;!&ndash;								</p:column>&ndash;&gt;-->
 
-<!--								<f:facet name="footer">-->
-<!--									<p:separator />-->
-<!--									<h:outputText value="#{warehouseStockMngController.showCodes.size()} themes" style="font-weight:bold;"/>-->
-<!--								</f:facet>-->
-<!--							</p:selectOneMenu>-->
+<!--&lt;!&ndash;								<f:facet name="footer">&ndash;&gt;-->
+<!--&lt;!&ndash;									<p:separator />&ndash;&gt;-->
+<!--&lt;!&ndash;									<h:outputText value="#{warehouseStockMngController.showCodes.size()} themes" style="font-weight:bold;"/>&ndash;&gt;-->
+<!--&lt;!&ndash;								</f:facet>&ndash;&gt;-->
+<!--&lt;!&ndash;							</p:selectOneMenu>&ndash;&gt;-->
+<!--&lt;!&ndash;							</p:column>&ndash;&gt;-->
+<!--						</p:row>-->
+<!--						<p:row>-->
+<!--							<p:column><p:outputLabel value="条形码开始">-->
+<!--							</p:outputLabel></p:column>-->
+<!--							<p:column>-->
+<!--								<p:inputText id="startReagentCode" value="#{warehouseStockMngController.startReagentCode}" maxlength="32" required="true" requiredMessage="请输入条形码开始">-->
+<!--									<p:ajax event="change" listener="#{warehouseStockMngController.handleEvent2}" update="endReagentCode"/>-->
+<!--								</p:inputText>-->
 <!--							</p:column>-->
-						</p:row>
-						<p:row>
-							<p:column><p:outputLabel value="条形码开始">
-							</p:outputLabel></p:column>
-							<p:column>
-								<p:inputText id="startReagentCode" value="#{warehouseStockMngController.startReagentCode}" maxlength="32" required="true" requiredMessage="请输入条形码开始">
-									<p:ajax event="change" listener="#{warehouseStockMngController.handleEvent2}" update="endReagentCode"/>
-								</p:inputText>
-							</p:column>
-							<p:column><p:outputLabel value="条形码结束"></p:outputLabel></p:column>
-							<p:column><p:inputText id="endReagentCode" value="#{warehouseStockMngController.endReagentCode}" maxlength="32" required="true" requiredMessage="请输入条形码结束"/></p:column>
-						</p:row>
-					</p:panelGrid>
-					<!--</p:panel>-->
-					<p:panel styleClass="btn" style="text-align: right">
-						<p:commandButton value="确定"
-										 actionListener="#{warehouseStockMngController.onYesBtnClick2}"
-										 process="@form"
-										 update=":warehouseReagentUseForm:warehouseReagentUseDataTable"
-										 styleClass="yes-btn">
-						</p:commandButton>
-					</p:panel>
-				</h:form>
-			</p:tab>
+<!--							<p:column><p:outputLabel value="条形码结束"></p:outputLabel></p:column>-->
+<!--							<p:column><p:inputText id="endReagentCode" value="#{warehouseStockMngController.endReagentCode}" maxlength="32" required="true" requiredMessage="请输入条形码结束"/></p:column>-->
+<!--						</p:row>-->
+<!--					</p:panelGrid>-->
+<!--					&lt;!&ndash;</p:panel>&ndash;&gt;-->
+<!--					<p:panel styleClass="btn" style="text-align: right">-->
+<!--						<p:commandButton value="确定"-->
+<!--										 actionListener="#{warehouseStockMngController.onYesBtnClick2}"-->
+<!--										 process="@form"-->
+<!--										 update=":warehouseReagentUseForm:warehouseReagentUseDataTable"-->
+<!--										 styleClass="yes-btn">-->
+<!--						</p:commandButton>-->
+<!--					</p:panel>-->
+<!--				</h:form>-->
+<!--			</p:tab>-->
 			<p:tab title="库中领取">
 				<h:form id="reagentCodeDialogForm">
 					<p:panel styleClass="center-header content2">
@@ -433,7 +429,7 @@
 											  layout="grid" columns="4" onchange="change(this)">
 							<f:selectItems
 									value="#{warehouseStockMngController.reagentStatusSelectList}" var="item"
-									itemLabel="#{item.reagentCode}" itemValue="#{item.id}" />
+									itemLabel="#{item.reagentCode}" itemValue="#{item.reagentCode}" />
 						</p:selectManyCheckbox>
 					</p:panel>
 
diff --git a/src/main/webapp/warehouse_reagent_use_person.xhtml b/src/main/webapp/warehouse_reagent_use_person.xhtml
index d5c5e24..915507d 100644
--- a/src/main/webapp/warehouse_reagent_use_person.xhtml
+++ b/src/main/webapp/warehouse_reagent_use_person.xhtml
@@ -29,12 +29,7 @@
 							<h:outputText value="#{item.name}" />
 						</p:column>
 					</p:autoComplete>
-					<!--  <p:outputLabel value="课题名称:"></p:outputLabel>
-					<p:selectOneMenu value="#{warehouseStockMngController.projectNum}"
-						required="true" requiredMessage="请选择课题名称">
-						<f:selectItems value="#{baseMetaService.getBaseMetaList(constants.BASE_META_GROUP_PROJECT_NUM)}"
-							var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
-					</p:selectOneMenu>-->
+
 					<p:outputLabel value="实验室:" style="margin-left: 20px"></p:outputLabel>
 					<p:selectOneMenu value="#{warehouseStockMngController.laboratoryId}"
 						 id="experments">
@@ -271,103 +266,103 @@
 	<p:dialog modal="true" header="领用详情" appendTo="@(body)" id="reagentCodeDialogForPerson"
 		widgetVar="reagentCodeDialogForPerson" resizable="false" width="1000" class="ui-dialog">
 		<p:tabView dynamic="true" style="margin-left: 26px">
-			<p:tab title="补贴条码" id="applyInOrder">
-				<h:form id="reagentCodeDialogForm2">
-					<p:panelGrid styleClass="center-header content2" columns="6">
-						<p:column style="width: 60px !important;"><p:outputLabel value="仓库名:"/></p:column>
-							<p:selectOneMenu value="#{warehouseStockMngController.opeWarehouseReserve.warehouseId}" >
-									<p:ajax event="change" process="@this" listener="#{warehouseStockMngController.selectChangeReserve(warehouseStockMngController.opeWarehouseReserve.warehouseId)}"
-											update="reserve"/>
-									<f:selectItems value="#{warehouseStockMngController.warehouseReserveList}"
-												   var="item"
-												   itemValue="#{item.warehouseId}"
-												   itemLabel="#{item.warehouseName}"/>
-							</p:selectOneMenu>
+<!--			<p:tab title="补贴条码" id="applyInOrder">-->
+<!--				<h:form id="reagentCodeDialogForm2">-->
+<!--					<p:panelGrid styleClass="center-header content2" columns="6">-->
+<!--						<p:column style="width: 60px !important;"><p:outputLabel value="仓库名:"/></p:column>-->
+<!--							<p:selectOneMenu value="#{warehouseStockMngController.opeWarehouseReserve.warehouseId}" >-->
+<!--									<p:ajax event="change" process="@this" listener="#{warehouseStockMngController.selectChangeReserve(warehouseStockMngController.opeWarehouseReserve.warehouseId)}"-->
+<!--											update="reserve"/>-->
+<!--									<f:selectItems value="#{warehouseStockMngController.warehouseReserveList}"-->
+<!--												   var="item"-->
+<!--												   itemValue="#{item.warehouseId}"-->
+<!--												   itemLabel="#{item.warehouseName}"/>-->
+<!--							</p:selectOneMenu>-->
 
 
-							<p:column>
-								<p:outputLabel id="reserve"  value="可供库存:" style="width: 100px;">
-									<span style="color: #1c427b;font-weight: bolder;font-size: 20px">#{warehouseStockMngController.opeWarehouseReserve.reserve}</span>
-								</p:outputLabel>
-							</p:column>
+<!--							<p:column>-->
+<!--								<p:outputLabel id="reserve"  value="可供库存:" style="width: 100px;">-->
+<!--									<span style="color: #1c427b;font-weight: bolder;font-size: 20px">#{warehouseStockMngController.opeWarehouseReserve.reserve}</span>-->
+<!--								</p:outputLabel>-->
+<!--							</p:column>-->
 
 
-							<p:outputLabel value="领用数量:" style="width: 80px;"/>
-							<p:inputNumber value="#{warehouseStockMngController.useNum}"
-													 minValue="0" decimalPlaces="0"
-													 required="true" requiredMessage="请输入领用数量" id="useNum"/>
-							<p:column>
-								<p:panel styleClass="btn" style="text-align: right">
-							  <p:commandButton value="添加"
-											   process="@this,useNum"
-											   styleClass="yes-btn"
-											   actionListener="#{warehouseStockMngController.add2()}"
-											   update="@(.reagentCode),endReagentCode"
-											   style="position: relative;left: -8px;width: 62px;height: 34px;font-size: 12px;background-color: #ee7135">
-							  </p:commandButton>
-								</p:panel>
-							</p:column>
-					</p:panelGrid>
-					<p:separator style="margin: 15px"/>
-					<p:dataTable id="reagentCode" styleClass="reagentCode"
-									 paginatorPosition="bottom"
-									 lazy="true"
-									 value="#{warehouseStockMngController.getDataTmp()}"
-									 var="row"
-									 rowKey="#{row.id}"
-								     scrollable="false"
-								     rows="5" pageLinks="5"
-									 emptyMessage="无领用数据">
+<!--							<p:outputLabel value="领用数量:" style="width: 80px;"/>-->
+<!--							<p:inputNumber value="#{warehouseStockMngController.useNum}"-->
+<!--													 minValue="0" decimalPlaces="0"-->
+<!--													 required="true" requiredMessage="请输入领用数量" id="useNum"/>-->
+<!--							<p:column>-->
+<!--								<p:panel styleClass="btn" style="text-align: right">-->
+<!--							  <p:commandButton value="添加"-->
+<!--											   process="@this,useNum"-->
+<!--											   styleClass="yes-btn"-->
+<!--											   actionListener="#{warehouseStockMngController.add2()}"-->
+<!--											   update="@(.reagentCode),endReagentCode"-->
+<!--											   style="position: relative;left: -8px;width: 62px;height: 34px;font-size: 12px;background-color: #ee7135">-->
+<!--							  </p:commandButton>-->
+<!--								</p:panel>-->
+<!--							</p:column>-->
+<!--					</p:panelGrid>-->
+<!--					<p:separator style="margin: 15px"/>-->
+<!--					<p:dataTable id="reagentCode" styleClass="reagentCode"-->
+<!--									 paginatorPosition="bottom"-->
+<!--									 lazy="true"-->
+<!--									 value="#{warehouseStockMngController.getDataTmp()}"-->
+<!--									 var="row"-->
+<!--									 rowKey="#{row.id}"-->
+<!--								     scrollable="false"-->
+<!--								     rows="5" pageLinks="5"-->
+<!--									 emptyMessage="无领用数据">-->
 
-							<p:column headerText="操作"  style="text-align: center;">
-								<p:commandButton  style="background: #e68280; border: 1px solid #e68280;color: white;" styleClass="store-btn"
-												  value="取消"
-												  actionListener="#{warehouseStockMngController.remove2(row)}"
-												  process="@this"
-												  update="@(.reagentCode),@(.endReagentCode)">
-								</p:commandButton>
-							</p:column>
+<!--							<p:column headerText="操作"  style="text-align: center;">-->
+<!--								<p:commandButton  style="background: #e68280; border: 1px solid #e68280;color: white;" styleClass="store-btn"-->
+<!--												  value="取消"-->
+<!--												  actionListener="#{warehouseStockMngController.remove2(row)}"-->
+<!--												  process="@this"-->
+<!--												  update="@(.reagentCode),@(.endReagentCode)">-->
+<!--								</p:commandButton>-->
+<!--							</p:column>-->
 
-							<p:column headerText="仓库名" style="text-align: center;">
-								<h:outputText value="#{row.warehouseName}" />
-							</p:column>
-							<p:column headerText="试剂名称"  style="text-align: center;">
-								<h:outputText value="#{sysReagentService.getSysReagent(row.reagentId).name}" />
-							</p:column>
+<!--							<p:column headerText="仓库名" style="text-align: center;">-->
+<!--								<h:outputText value="#{row.warehouseName}" />-->
+<!--							</p:column>-->
+<!--							<p:column headerText="试剂名称"  style="text-align: center;">-->
+<!--								<h:outputText value="#{sysReagentService.getSysReagent(row.reagentId).name}" />-->
+<!--							</p:column>-->
 
-							<p:column headerText="库存"  style="text-align: center;">
-								<h:outputText value="#{row.reserve}" />
-							</p:column>
+<!--							<p:column headerText="库存"  style="text-align: center;">-->
+<!--								<h:outputText value="#{row.reserve}" />-->
+<!--							</p:column>-->
 
-							<p:column headerText="领用数量" style="text-align: center;">
-								<h:outputText value="#{row.useNum}" />
-							</p:column>
-						</p:dataTable>
+<!--							<p:column headerText="领用数量" style="text-align: center;">-->
+<!--								<h:outputText value="#{row.useNum}" />-->
+<!--							</p:column>-->
+<!--						</p:dataTable>-->
 
-					<p:panelGrid styleClass="center-header content2" columns="4" id="code" style="margin-top:20px;">
+<!--					<p:panelGrid styleClass="center-header content2" columns="4" id="code" style="margin-top:20px;">-->
 
-						<p:outputLabel value="条形码开始"/>
-						<p:inputText id="startReagentCode" styleClass="startReagentCode" value="#{warehouseStockMngController.startReagentCodeForPerson}" maxlength="32" required="true" requiredMessage="请输入条形码开始">
-							<p:ajax event="change" listener="#{warehouseStockMngController.btCodeChange()}" update="endReagentCode"/>
-						</p:inputText>
+<!--						<p:outputLabel value="条形码开始"/>-->
+<!--						<p:inputText id="startReagentCode" styleClass="startReagentCode" value="#{warehouseStockMngController.startReagentCodeForPerson}" maxlength="32" required="true" requiredMessage="请输入条形码开始">-->
+<!--							<p:ajax event="change" listener="#{warehouseStockMngController.btCodeChange()}" update="endReagentCode"/>-->
+<!--						</p:inputText>-->
 
-						<p:outputLabel value="条形码结束"/>
-						<p:inputText id="endReagentCode" styleClass="endReagentCode" value="#{warehouseStockMngController.endReagentCodeForPerson}" maxlength="32" required="true" requiredMessage="请输入条形码结束"/>
-					</p:panelGrid>
+<!--						<p:outputLabel value="条形码结束"/>-->
+<!--						<p:inputText id="endReagentCode" styleClass="endReagentCode" value="#{warehouseStockMngController.endReagentCodeForPerson}" maxlength="32" required="true" requiredMessage="请输入条形码结束"/>-->
+<!--					</p:panelGrid>-->
 
 
 
-					<!--</p:panel>-->
-					<p:panel styleClass="btn" style="text-align: right">
-						<p:commandButton value="确定"
-										 actionListener="#{warehouseStockMngController.onYesBtnClickForPerson2}"
-										 process="@form"
-										 update=":warehouseReagentUseForm:warehouseReagentUseDataTableForPerson"
-										 styleClass="yes-btn">
-						</p:commandButton>
-					</p:panel>
-				</h:form>
-			</p:tab>
+<!--					&lt;!&ndash;</p:panel>&ndash;&gt;-->
+<!--					<p:panel styleClass="btn" style="text-align: right">-->
+<!--						<p:commandButton value="确定"-->
+<!--										 actionListener="#{warehouseStockMngController.onYesBtnClickForPerson2}"-->
+<!--										 process="@form"-->
+<!--										 update=":warehouseReagentUseForm:warehouseReagentUseDataTableForPerson"-->
+<!--										 styleClass="yes-btn">-->
+<!--						</p:commandButton>-->
+<!--					</p:panel>-->
+<!--				</h:form>-->
+<!--			</p:tab>-->
 			<p:tab title="库中领取" id="applyInWarehouse">
 				<h:form id="reagentCodeDialogForm">
 					<p:panel styleClass="center-header content2">
@@ -388,7 +383,7 @@
 											  layout="grid" columns="4">
 							<f:selectItems
 									value="#{warehouseStockMngController.reagentStatusSelectListForPerson}" var="item"
-									itemLabel="#{item.reagentCode}" itemValue="#{item.id}" />
+									itemLabel="#{item.reagentCode}" itemValue="#{item.reagentCode}" />
 						</p:selectManyCheckbox>
 					</p:panel>
 
diff --git a/src/main/webapp/warehouse_stock_mng.xhtml b/src/main/webapp/warehouse_stock_mng.xhtml
index 1be7e1a..8f23efc 100644
--- a/src/main/webapp/warehouse_stock_mng.xhtml
+++ b/src/main/webapp/warehouse_stock_mng.xhtml
@@ -49,7 +49,7 @@
 							</p:column>
 
 							<p:column headerText="厂家">
-								<h:outputText value="#{row.reagent.productHomeName}"/>
+								<h:outputText value="#{row.reagent.productHome}"/>
 							</p:column>
 							<p:column headerText="供应商">
 								<h:outputText value="#{row.reagent.supplierName}"/>
@@ -57,12 +57,12 @@
 
 							<p:column headerText="规格">
 								<h:outputText
-										value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentFormat)}"/>
+										value="#{row.reagent.reagentFormat}"/>
 							</p:column>
 
 							<p:column headerText="包装">
 								<h:outputText
-										value="#{''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))}"/>
+										value="#{''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)}"/>
 							</p:column>
 
 							<p:column headerText="批号">
@@ -85,7 +85,7 @@
 					<p:panelGrid styleClass="filter" columns="9">
 
 						<p:outputLabel value="试剂名称:"></p:outputLabel>
-						<p:inputText value="#{warehouseStockMngController.reagentId}"></p:inputText>
+						<p:inputText value="#{warehouseStockMngController.reagentName}"></p:inputText>
 
 						<p:outputLabel value="供应商:"></p:outputLabel>
 						<p:selectOneMenu value="#{warehouseStockMngController.supplierId}">
@@ -110,11 +110,6 @@
 										 disabled="#{warehouseStockMngController.editFlag==0}"
 										 oncomplete="$('#showTab').css('display','block');"
 										 update="@(.tempTable)"></p:commandButton>
-						<p:commandButton value="入库" styleClass="ruku-btn"
-										 process="@form"
-										 disabled="#{warehouseStockMngController.editFlag==0}"
-										 actionListener="#{warehouseStockMngController.onDStoreBtnClick}"
-										 update=":centerRootPanel"></p:commandButton>
 						<p:commandButton update=":centerRootPanel" actionListener="#{warehouseStockMngController.onExportFileBtnClickNew}"
 										 ajax="false" value="导出" styleClass="new-btn" />
 						<!--<p:commandButton value="导入" styleClass="import-btn" onclick="importStock()"
@@ -169,24 +164,24 @@
 						</p:column>
 
 						<p:column headerText="厂家">
-							<h:outputText value="#{row.reagent.productHomeName}"></h:outputText>
+							<h:outputText value="#{row.reagent.productHome}"></h:outputText>
 						</p:column>
 						<p:column headerText="供应商">
 							<h:outputText value="#{row.reagent.supplierName}"></h:outputText>
 						</p:column>
 
 						<p:column headerText="危险性质">
-							<h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentCharacter)}"/>
+							<h:outputText value="#{row.reagent.reagentCharacter}"/>
 						</p:column>
 
 						<p:column headerText="规格">
 							<h:outputText
-									value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentFormat)}"></h:outputText>
+									value="#{row.reagent.reagentFormat}"></h:outputText>
 						</p:column>
 
 						<p:column headerText="包装">
 							<h:outputText
-									value="#{''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))}"></h:outputText>
+									value="#{''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)}"></h:outputText>
 						</p:column>
 
 						<p:column headerText="批号">
@@ -267,7 +262,7 @@
 
 							<p:column headerText="包装">
 								<h:outputText
-										value="#{''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))}"/>
+										value="#{''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)}"/>
 							</p:column>
 
 							<p:column headerText="批号">
@@ -328,7 +323,7 @@
 
 							<p:column headerText="包装">
 								<h:outputText
-										value="#{''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))}"/>
+										value="#{''.concat(row.reagent.mainMetering).concat(row.reagent.reagentUnit)}"/>
 							</p:column>
 
 							<p:column headerText="价格">
@@ -385,7 +380,7 @@
 						</style>
 
 						<p:outputLabel value="试剂名称:"></p:outputLabel>
-						<p:inputText value="#{warehouseStockMngController.reagentId}"></p:inputText>
+						<p:inputText value="#{warehouseStockMngController.reagentName}"></p:inputText>
 						<p:outputLabel value="申领人:"></p:outputLabel>
 						<p:inputText value="#{warehouseStockMngController.userName}"></p:inputText>
 						<p:outputLabel value="申购编号:"></p:outputLabel>
@@ -447,7 +442,7 @@
 								 paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
 								 lazy="true" value="#{warehouseStockMngController.dataModelForPerson}" var="row"
 								 selection="#{warehouseStockMngController.selectedListForPerson}" rowKey="#{row.id}"
-								 emptyMessage="无数据" rows="20" pageLinks="5">
+								 emptyMessage="无数据" rows="10" pageLinks="5">
 						<p:column selectionMode="multiple" style="width: 30px;text-align: center;" />
 
 						<p:column headerText="申购编号" width="150">
@@ -496,19 +491,23 @@
 							<h:outputText value="#{row.num}"></h:outputText>
 						</p:column>
 
+<!--						<p:column headerText="已领用数量">-->
+<!--							<h:outputText value="#{row.used}"></h:outputText>-->
+<!--						</p:column>-->
 						<p:column headerText="已领用数量">
-							<h:outputText value="#{row.used}"></h:outputText>
+							<h:outputText value="#{warehouseStockMngController.getUsedCount(row.applyCode)}"></h:outputText>
 						</p:column>
+						getUsedCount
 
 						<p:column headerText="申领人">
-							<h:outputText value="#{row.applyUserId}" />
+							<h:outputText value="#{row.applyUser}" />
 						</p:column>
 						<p:column headerText="订单状态">
 							<h:outputText value="#{row.status!=null?row.status.text:''}"></h:outputText>
 						</p:column>
 
 						<p:column headerText="课题组">
-							<h:outputText value="#{row.project}" />
+							<h:outputText value="#{row.projectName}" />
 						</p:column>
 						<p:column headerText="课题组负责人">
 							<h:outputText value="#{row.projectManage}" />
@@ -523,165 +522,6 @@
 				</p:panel>
 			</h:form>
 		</p:tab>
-
-
-
-		<!-- 目前领取记录查询是最新状态试剂表,应该是试剂履历表。目前客户不太需要这个画面,所以先去掉了 -->
-		<!--
-		<p:tab title="领取记录">
-			<h:form id="warehouseStockLogForm">
-				<p:panel styleClass="center-header" style="border-bottom:none;">
-					<p:panelGrid styleClass="filter" columns="5">
-
-						<p:outputLabel value="试剂名称:"></p:outputLabel>
-						<p:selectOneMenu value="#{warehouseStockMngController.reagentLogId}">
-							<f:selectItem itemLabel="全部" itemValue="#{null}" noSelectionOption="true"></f:selectItem>
-							<f:selectItems value="#{warehouseStockMngController.reagentSelectList}"
-								var="item" itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
-						</p:selectOneMenu>
-
-						<p:outputLabel value="申领人:"></p:outputLabel>
-						<p:selectOneMenu value="#{warehouseStockMngController.userLogId}">
-							<f:selectItem itemLabel="全部" itemValue="#{null}" noSelectionOption="true"></f:selectItem>
-							<f:selectItems value="#{warehouseStockMngController.applyUserSelectList}"
-								var="item" itemLabel="#{item.name}" itemValue="#{item.id}"></f:selectItems>
-						</p:selectOneMenu>
-
-						<p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
-					</p:panelGrid>
-				</p:panel>
-
-				<p:panel styleClass="center-body">
-					<p:dataTable id="warehouseStockLogDataTable" styleClass="data-table"
-						paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
-						lazy="true" value="#{warehouseStockMngController.reagentStatusDataModel}"
-						var="row" rowKey="#{row.id}" emptyMessage="无数据" rows="20" pageLinks="5">
-						<p:column headerText="试剂名称">
-							<h:outputText value="#{row.reagent.name}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="CAS">
-							<h:outputText value="#{row.reagent.cas}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="供应商">
-							<h:outputText value="#{row.reagent.supplierName}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="规格">
-							<h:outputText
-								value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentFormat)}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="包装">
-							<h:outputText
-								value="#{''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="批号">
-							<h:outputText value="#{row.articleNumber}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="价格">
-							<h:outputText value="#{row.reagent.price}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="条形码">
-							<h:outputText value="#{row.reagentCode}" />
-						</p:column>
-
-						<p:column headerText="申领人">
-							<h:outputText value="#{row.userName}" />
-						</p:column>
-					</p:dataTable>
-				</p:panel>
-			</h:form>
-		</p:tab>
-		-->
-		<!--
-
-		<p:tab title="订单领取">
-			<h:form id="warehouseStockMngFormForPerson">
-				<p:panel styleClass="center-header" style="border-bottom:none;">
-					<p:panelGrid styleClass="filter" columns="5">
-
-						<p:outputLabel value="试剂名称:"></p:outputLabel>
-						<p:inputText value="#{warehouseStockMngController.reagentId}"></p:inputText>
-						<p:outputLabel value="申领人:"></p:outputLabel>
-						<p:inputText value="#{warehouseStockMngController.userLogId}"></p:inputText>
-
-						<p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
-					</p:panelGrid>
-				</p:panel>
-
-				<p:panel styleClass="center-body">
-					<p:dataTable id="warehouseStockMngDataTableForPerson" styleClass="data-table"
-						paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
-						lazy="true" value="#{warehouseStockMngController.dataModelForPerson}" var="row"
-						selection="#{warehouseStockMngController.selectedListForPerson}" rowKey="#{row.id}"
-						emptyMessage="无数据" rows="20" pageLinks="5">
-						<p:column selectionMode="multiple" style="width: 30px;text-align: center;" />
-
-						<p:column headerText="申购编号">
-							<h:outputText value="#{row.applyCode}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="产品编号">
-							<h:outputText value="#{row.reagent.productSn}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="试剂名称">
-							<h:outputText value="#{row.reagent.name}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="管制品">
-							<h:outputText value="#{row.reagent.controlProducts}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="规格型号">
-							<h:outputText
-								value="#{row.reagent.reagentFormat}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="包装">
-							<h:outputText
-								value="#{row.reagent.mainMetering}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="价格">
-							<h:outputText value="#{row.reagent.price}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="CAS">
-							<h:outputText value="#{row.reagent.cas}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="危险性质">
-							<h:outputText value="#{row.reagent.reagentCharacter}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="厂家">
-							<h:outputText value="#{row.reagent.productHome}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="申请数量">
-							<h:outputText value="#{row.num}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="已领用数量">
-							<h:outputText value="#{row.used}"></h:outputText>
-						</p:column>
-
-						<p:column headerText="申领人">
-							<h:outputText value="#{row.applyUserId}" />
-						</p:column>
-
-					</p:dataTable>
-				</p:panel>
-			</h:form>
-		</p:tab>
-
-		-->
 	</p:tabView>
 </ui:composition>
 </html>
diff --git a/src/sql/update.sql b/src/sql/update.sql
index f746a00..1fe0689 100644
--- a/src/sql/update.sql
+++ b/src/sql/update.sql
@@ -1,6 +1,720 @@
---2023-11-10
-ALTER TABLE `smartlabdb`.`sys_reagent`
-MODIFY COLUMN `price` decimal(16, 4) NULL DEFAULT NULL COMMENT '含税售价' AFTER `reagent_unit`;
+drop table if exists `base_meta`;
+CREATE TABLE `base_meta`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`group_id` bigint(20) NULL DEFAULT NULL COMMENT '种类ID',
+`meta_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Key值',
+`meta_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'Value值',
+`order_index` int(11) NULL DEFAULT 0 COMMENT '排序',
+`memo` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`group_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '种类code',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `group_code`(`group_code`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
 
-ALTER TABLE `smartlb`.`ope_apply`
-MODIFY COLUMN `apply_price` decimal(16, 4) NULL DEFAULT NULL COMMENT '申购价格' AFTER `apply_goal`;
\ No newline at end of file
+
+drop table if exists `base_meta_group`;
+CREATE TABLE `base_meta_group`  (
+`id` bigint(20) NOT NULL  AUTO_INCREMENT COMMENT '主键ID',
+`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '种类名称',
+`order_index` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`edit_flag` int(1) NULL DEFAULT 1 COMMENT '修改标识(0:不可修改、1:可修改)',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '种类编码',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('alarm_type', '报警类型', 20);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('apply_objective', '申购目的', 10);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('containerversion', '试剂柜版本', 1);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('container_structure', '货柜结构', 9);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('container_structure_A', '2*2货柜位置', 11);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('container_structure_B', '一体柜货柜位置', 12);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('container_structure_C', '2*3货柜位置', 13);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('container_type', '货柜类型', 8);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('control_products', '管控品', 15);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('encode_replace_1', '厂商', 22);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('encode_replace_2', '规格', 23);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('encode_replace_3', '包装', 24);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('laboratory_type', '实验室类型', 6);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('operate_status', '操作状态', 21);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('product_name', '厂商', 15);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('project_num', '课题号', 14);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('reagent_character', '危险性质', 3);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('reagent_format', '试剂规格', 4);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('reagent_type', '试剂类型', 2);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('reagent_unit', '主计单位', 5);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('securityManager', '安全管理员', 0);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('sync_reagent_recorder', '接口同步时间', 0);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('user_company', '公司单位', 0);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('user_department', '负责部门', 1);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('user_violate_type', '人员违规类型', 19);
+INSERT INTO `base_meta_group`(`code`, `name`, `order_index`) VALUES ('warehouse_type', '仓库类型', 7);
+
+
+
+drop table if exists `base_page`;
+CREATE TABLE `base_page`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '父ID',
+`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '画面名',
+`level_type` int(5) NULL DEFAULT NULL COMMENT '当前节点级别',
+`level_index` int(5) NULL DEFAULT 0 COMMENT '节点序号',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (1,'apply_mng', '申购管理', 0, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (2,'approval_mng', '审批管理', 1, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (3,'base_meta_data', '数据字典', 15, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (4,'container_status_mng', '试剂柜状态管理', 5, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (5,'laboratory_container_mng', '实验室货柜管理', 11, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (6,'laboratory_mng', '实验室管理', 10, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (7,'laboratory_reagent_reserve', '实验室试剂库存', 22, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (8,'laboratory_stock_mng', '实验室库存管理', 5, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (9,'order_mng', '订单管理', 3, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (10,'personal_use_info', '个人领用情况', 7, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (11,'price_mng', '价格管理', 1, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (12,'project_mng', '课题管理', 18, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (13,'reagent_mng', '试剂管理', 9, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (14,'reagent_user_flow_info', '试剂流向追踪', 8, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (15,'require_mng', '需求管理', 2, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (16,'role_mng', '角色管理', 17, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (17,'supplier_info_mng', '供应商信息管理', 14, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (18,'supplier_order_mng', '供应商订单管理', 18, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (20,'sysFile_mng', 'app文件管理', 0, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (21,'sys_alarm', '货柜预警', 20, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (23,'sys_dangerous_encode', '危化品编码', 23, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (24,'sys_encode_replace_dict', '编码替换字典', 24, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (25,'sys_hazardous_waste', '危废处理信息', 25, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (26,'user_mng', '人员管理', 16, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (27,'user_violate_mng', '人员违规操作预警', 21, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (28,'warehouse_container_mng', '仓库货柜管理', 13, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (29,'warehouse_mng', '仓库管理', 12, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (30,'warehouse_status_mng', '库房状态管理', 27, 1);
+INSERT INTO `base_page`(`id`,`code`, `name`, `level_index`, `valid_flag`) VALUES (31,'warehouse_stock_mng', '仓库库存管理', 6, 1);
+
+
+
+
+
+drop table if exists `base_role`;
+CREATE TABLE `base_role`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名',
+`memo` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`btn_permission` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '新增,修改,删除,导入' COMMENT '按钮权限,分割',
+`user_permission` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '所有人员' COMMENT '人员可见权限,分割',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+INSERT INTO `base_role`(`id`,`name`, `memo`, `valid_flag`, `btn_permission`, `user_permission`) VALUES (1,'系统管理员', '具有所有权限', 1, '新增,修改,删除,导入', '所有人员');
+INSERT INTO `base_role`(`id`,`name`, `memo`, `valid_flag`, `btn_permission`, `user_permission`) VALUES (2,'试剂统一管理员', '试剂统一管理员\r\n', 1, '新增,修改,删除,导入', '所有人员');
+INSERT INTO `base_role`(`id`,`name`, `memo`, `valid_flag`, `btn_permission`, `user_permission`) VALUES (3,'实验负责人', '实验负责人', 1, '新增,修改,删除,导入', '课题组');
+INSERT INTO `base_role`(`id`,`name`, `memo`, `valid_flag`, `btn_permission`, `user_permission`) VALUES (4,'供应商', '', 1, '新增,修改,删除,导入', '所有人员');
+INSERT INTO `base_role`(`id`,`name`, `memo`, `valid_flag`, `btn_permission`, `user_permission`) VALUES (5,'采购员', '只有采购管理的权限', 1, '新增,修改,删除,导入', '所有人员');
+INSERT INTO `base_role`(`id`,`name`, `memo`, `valid_flag`, `btn_permission`, `user_permission`) VALUES (6,'实验员', '实验员', 1, '新增,修改,删除,导入', '所有人员');
+INSERT INTO `base_role`(`id`,`name`, `memo`, `valid_flag`, `btn_permission`, `user_permission`) VALUES (7,'库管员', '', 1, '新增,修改,删除,导入', '所有人员');
+
+drop table if exists `base_role_page`;
+CREATE TABLE `base_role_page`  (
+`id` bigint(20) NOT NULL  AUTO_INCREMENT COMMENT '主键ID',
+`role_id` bigint(20) NOT NULL COMMENT '角色ID',
+`page_id` bigint(20) NOT NULL COMMENT '画面ID',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `role_id`(`role_id`) USING BTREE,
+INDEX `page_id`(`page_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 1);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 2);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 3);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 4);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 5);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 6);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 7);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 8);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 9);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 10);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 11);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 12);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 13);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 14);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 15);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 16);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 17);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 18);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 19);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 20);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 21);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 22);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 23);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 24);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 25);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 26);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 27);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 28);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 29);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 30);
+INSERT INTO `base_role_page`(`role_id`, `page_id`) VALUES (1, 31);
+
+drop table if exists `favor`;
+CREATE TABLE `favor`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`user_id` bigint(20) NOT NULL,
+`reagent_id` bigint(20) NOT NULL,
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `regeant_id`(`reagent_id`) USING BTREE,
+INDEX `create_time`(`create_time`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `ope_apply`;
+CREATE TABLE `ope_apply`  (
+`id` bigint(20) NOT NULL  AUTO_INCREMENT COMMENT '主键ID',
+`apply_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '申购编号',
+`reagent_id` bigint(20) NOT NULL COMMENT '试剂ID',
+`used` int NULL DEFAULT 0 COMMENT '已从仓库中领取数',
+`num` int NULL DEFAULT NULL COMMENT '申购数量',
+`deadline` timestamp(0) NULL DEFAULT NULL COMMENT '货期',
+`apply_user_id` bigint(20) NOT NULL COMMENT '申购人',
+`objective` bigint(20) NULL DEFAULT NULL COMMENT '课题ID(参照base_meta,种类为apply_objective)',
+`status` int(2) NULL DEFAULT NULL COMMENT '4.已入库,6.已确认,10.过期',
+`create_time` timestamp(0) NULL DEFAULT NULL COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT NULL COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`approve_user_id` bigint(32) NULL DEFAULT NULL COMMENT '审批者',
+`memo` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '批注',
+`before_approve_user_id` bigint(32) NULL DEFAULT NULL,
+`before_memo` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`start_reagent_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '条形码开始',
+`end_reagent_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '条形码结束',
+`arrival_num` int NULL DEFAULT NULL,
+`house_id` bigint(20) NULL DEFAULT NULL COMMENT '场所ID',
+`place` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '货柜位置(参照base_meta,种类根据货柜类型变化)',
+`container_id` bigint(20) NULL DEFAULT NULL COMMENT '货柜ID',
+`article_number` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '货号',
+`apply_goal` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '申购目的',
+`apply_price` decimal(12, 2) NULL DEFAULT NULL COMMENT '申购价格',
+`stock_flag` int(1) NULL DEFAULT 1 COMMENT '是否缺货(0:缺货,1:不缺货)',
+`first_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`arrival_time` timestamp(0) NULL DEFAULT NULL COMMENT '到货时间',
+`consignee_id` bigint(20) NULL DEFAULT NULL COMMENT '收货人id',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `reagent_id`(`reagent_id`) USING BTREE,
+INDEX `apply_user_id`(`apply_user_id`) USING BTREE,
+INDEX `approve_user_id`(`approve_user_id`) USING BTREE,
+INDEX `status`(`status`) USING BTREE,
+INDEX `apply_code`(`apply_code`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+drop table if exists `ope_apply_order`;
+CREATE TABLE `ope_apply_order`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`ope_order_id` bigint(20) NOT NULL COMMENT '订单ID',
+`ope_apply_id` bigint(20) NOT NULL COMMENT '申购ID',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `ope_order_id`(`ope_order_id`) USING BTREE,
+INDEX `ope_apply_id`(`ope_apply_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `ope_email_status`;
+CREATE TABLE `ope_email_status`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
+`order_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '订单编号',
+`apply_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '申购编号',
+`reagent_id` bigint(20) NOT NULL COMMENT '试剂ID',
+`num` int(11) NULL DEFAULT NULL COMMENT '到货数量',
+`apply_user_id` bigint(20) NULL DEFAULT NULL COMMENT '申购人ID',
+`status` int(1) NULL DEFAULT NULL COMMENT '状态',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `ope_laboratory_reserve`;
+CREATE TABLE `ope_laboratory_reserve`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`reagent_id` bigint(20) NOT NULL COMMENT '试剂ID',
+`article_number` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '货号',
+`reserve` int(11) NULL DEFAULT 0 COMMENT '库存数量',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户id',
+`house_id` bigint(20) NULL DEFAULT NULL COMMENT '场所id',
+`container_id` bigint(20) NULL DEFAULT NULL COMMENT '货柜id',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `reagent_id`(`reagent_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+drop table if exists `ope_order`;
+CREATE TABLE `ope_order`  (
+`id` bigint(20) NOT NULL  AUTO_INCREMENT COMMENT '主键ID',
+`order_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '订单编号',
+`order_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '订单名称',
+`status` int(1) NULL DEFAULT NULL COMMENT '状态(3:待采购、4:已入库)',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`memo` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '批注',
+`consignee_user_id` bigint(20) NULL DEFAULT NULL COMMENT '收货人ID',
+`order_user_id` bigint(20) NULL DEFAULT NULL COMMENT '下单人ID',
+`supplier_id` bigint(20) NULL DEFAULT NULL,
+`supplier_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`arrival_time` timestamp(0) NULL DEFAULT NULL COMMENT '到货时间',
+`destory_flag` int(1) NULL DEFAULT 0 COMMENT '报销状态(0:未报销 1:已报销)',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `ope_reagent_status`;
+CREATE TABLE `ope_reagent_status`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`reagent_id` bigint(20) NOT NULL COMMENT '试剂ID',
+`article_number` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '货号',
+`reagent_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '试剂条形码',
+`realstatus` int(11) NULL DEFAULT NULL,
+`status` int(1) NULL DEFAULT NULL COMMENT '状态(0:个人领用、1:在仓库、2:在实验室、3:报废)',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`house_id` bigint(20) NULL DEFAULT NULL COMMENT '场所ID',
+`container_id` bigint(20) NULL DEFAULT NULL COMMENT '货柜ID',
+`user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`remainder` decimal(12, 2) NULL DEFAULT NULL COMMENT '残存量',
+`place` varchar(150) NULL DEFAULT NULL COMMENT '货柜位置',
+`project_num` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`store_type` int(1) NULL DEFAULT NULL COMMENT '入库类型(1:申购、2:直接入库)',
+`apply_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '申购编号',
+`order_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '订单编号',
+`start_reagent_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '条形码开始',
+`end_reagent_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '条形码结束',
+`arrival_num` int(11) NULL DEFAULT NULL COMMENT '到货数量',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `reagent_id`(`reagent_id`) USING BTREE,
+INDEX `user_id`(`user_id`) USING BTREE,
+INDEX `oreagent_code`(`reagent_code`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+drop table if exists `ope_use_flow`;
+CREATE TABLE `ope_use_flow`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`reagent_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '试剂条形码',
+`status` int(1) NULL DEFAULT NULL COMMENT '状态(0:个人领用、1:在仓库、2:在实验室、3:报废)',
+`realstatus` int NULL DEFAULT NULL,
+`house_id` bigint(20) NULL DEFAULT NULL COMMENT '场所ID',
+`container_id` bigint(20) NULL DEFAULT NULL COMMENT '货柜ID',
+`user_id` bigint(20) NULL DEFAULT NULL COMMENT '用户ID',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`remainder` decimal(12, 2) NULL DEFAULT NULL COMMENT '残存量',
+`place` varchar(150) NULL DEFAULT NULL COMMENT '货柜位置',
+`operatestate` bigint(20) NULL DEFAULT NULL,
+`store_type` int(1) NULL DEFAULT NULL COMMENT '入库类型(1:申购、2:直接入库)',
+`receipt_number` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '领用单号',
+`note` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '领用备注',
+`volume` decimal(10, 4) NULL DEFAULT NULL COMMENT '体积',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `user_id`(`user_id`) USING BTREE,
+INDEX `oreagent_code`(`reagent_code`) USING BTREE,
+INDEX `ocontainer_id`(`container_id`) USING BTREE,
+INDEX `ooperatestate`(`operatestate`) USING BTREE,
+INDEX `create_time`(`create_time`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `ope_warehouse_reserve`;
+CREATE TABLE `ope_warehouse_reserve`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`reagent_id` bigint(20) NULL DEFAULT NULL COMMENT '试剂ID',
+`article_number` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '货号',
+`reserve` int(11) NULL DEFAULT 0 COMMENT '库存数量',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`apply_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '申购编号',
+`order_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '订单编号',
+`warehouseId` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '仓库id',
+`container_id` bigint(20) NULL DEFAULT NULL COMMENT '货柜id',
+`user_id` bigint(20) NULL DEFAULT NULL COMMENT '收货人id',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `reagent_id`(`reagent_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+drop table if exists `sys_alarm`;
+CREATE TABLE `sys_alarm`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`container_id` bigint(20) NOT NULL COMMENT '货柜ID',
+`warning_id` bigint(20) NULL DEFAULT NULL COMMENT '告警类别',
+`warning_time` timestamp(0) NULL DEFAULT NULL COMMENT '创建时间',
+`warning_level` int(1) NULL DEFAULT NULL COMMENT '报警级别',
+`controller_code` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+drop table if exists `sys_container_sensors`;
+CREATE TABLE `sys_container_sensors`  (
+`id` bigint(20) NOT NULL  AUTO_INCREMENT COMMENT '主键ID',
+`container_id` bigint(20) NOT NULL COMMENT '货柜ID',
+`temp` float NULL DEFAULT NULL COMMENT '温度值',
+`humidity` float NULL DEFAULT NULL COMMENT '湿度值',
+`voc1` float NULL DEFAULT NULL COMMENT '气体浓度',
+`flag` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报警信息 0表示没有报警,非0值看哪些比特位被置位,定义如下:Bit0:温度低报警; Bit1:温度高报警; Bit2:湿度低报警; Bit3:湿度高报警; Bit4:VOC1',
+`type` tinyint(4) NULL DEFAULT NULL COMMENT '1:sys_laboratory_container 2:sys_warehouse_container',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `container_id`(`container_id`) USING BTREE,
+INDEX `update_time`(`update_time`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+drop table if exists `sys_controller`;
+CREATE TABLE `sys_controller`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`controller_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主控编码',
+`controller_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主控名称',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`type` bigint(20) NULL DEFAULT NULL COMMENT '主控柜类型(数据字典:controller_type)',
+PRIMARY KEY (`id`) USING BTREE,
+UNIQUE INDEX `sys_controller_unique_code`(`controller_code`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '主控库' ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_dangerous_encode`;
+CREATE TABLE `sys_dangerous_encode`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
+`container_number` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '柜码',
+`reagent_code` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '试剂名称码',
+`reagent_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '试剂名称',
+`cas` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'CAS号',
+`memo` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+`property` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性状',
+`feature` varchar(4) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '特性',
+`avoid` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '相忌',
+`status` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '状态',
+`fire` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '灭火器',
+`random` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '随机码',
+`code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码',
+`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
+`creator` bigint(20) NULL DEFAULT NULL COMMENT '创建用户',
+`count` int(11) NULL DEFAULT NULL COMMENT '使用次数',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `sreagent_code`(`reagent_code`) USING BTREE,
+INDEX `sreagent_name`(`reagent_name`) USING BTREE,
+INDEX `scas`(`cas`) USING BTREE,
+INDEX `suptime`(`update_time`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_encode_replace_dict`;
+CREATE TABLE `sys_encode_replace_dict`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
+`type` int(1) NULL DEFAULT NULL COMMENT '三种类型:1.厂家,2.规格,3.包装',
+`number` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编号',
+`info` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '信息',
+`abbreviation` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '信息简写',
+`creator` bigint(20) NULL DEFAULT NULL COMMENT '创建者',
+`update_time` datetime(6) NULL DEFAULT NULL COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT NULL,
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+drop table if exists `sys_file`;
+CREATE TABLE `sys_file`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT,
+`valid_flag` int(1) NULL DEFAULT NULL,
+`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`fileName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`createTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
+`updateTime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
+`remark` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`version` int(11) NULL DEFAULT NULL,
+`newOrOld` int(11) NULL DEFAULT NULL COMMENT '1新2旧',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_swedish_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_hazardous_waste`;
+CREATE TABLE `sys_hazardous_waste`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT,
+`acid` double(12, 4) NULL DEFAULT NULL COMMENT '酸',
+`alkali` double(12, 4) NULL DEFAULT NULL COMMENT '碱',
+`organic` double(12, 4) NULL DEFAULT NULL COMMENT '有机',
+`solid` double(12, 4) NULL DEFAULT NULL COMMENT '固废',
+`medical` double(12, 4) NULL DEFAULT NULL COMMENT '医疗',
+`apply_person` varchar(64) NULL DEFAULT NULL COMMENT '确认者名称',
+`project_id` bigint(20) NULL DEFAULT NULL COMMENT '课题组id',
+`department` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '部门',
+`unit` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '单位',
+`tid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '单号',
+`status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态  待解决、已解决、已拒绝',
+`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建者',
+`updator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新者',
+`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`updatetime` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `sstatus`(`status`) USING BTREE,
+INDEX `sapply_person`(`apply_person`) USING BTREE,
+INDEX `sproject`(`project_id`) USING BTREE,
+INDEX `sdepartment`(`department`) USING BTREE,
+INDEX `screate_time`(`create_time`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_laboratory`;
+CREATE TABLE `sys_laboratory`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`type` bigint(20) NULL COMMENT '实验室类型(参照base_meta,种类为laboratory_type)',
+`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '实验室名',
+`info_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态码',
+`bar_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地点条码',
+`location1` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '使用地点-楼号',
+`location2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '使用地点-地址号',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`department` bigint(20) NULL DEFAULT NULL COMMENT '负责部门(参照base_meta,种类为user_department)',
+`project` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课题组字符串,分隔',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_laboratory_container`;
+CREATE TABLE `sys_laboratory_container`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`laboratory_id` bigint(32) NULL DEFAULT NULL COMMENT '实验室ID',
+`type` bigint(20)  NULL DEFAULT NULL COMMENT '货柜类型(参照base_meta,种类为container_type)',
+`container_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '货柜条码',
+`info_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态码',
+`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '临时存储库名称',
+`structure` bigint(20) NULL DEFAULT NULL COMMENT '货柜结构(参照base_meta,种类为container_structure)',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`character_left` bigint(20) NULL DEFAULT NULL COMMENT '危险性质(参照base_meta,种类为reagent_character)',
+`character_right` bigint(20) NULL DEFAULT NULL COMMENT '危险性质(参照base_meta,种类为reagent_character)',
+`controller_code` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '主控条码',
+`temp` float NULL DEFAULT NULL COMMENT '温度值',
+`humidity` float NULL DEFAULT NULL COMMENT '湿度值',
+`voc1` float NULL DEFAULT NULL COMMENT '气体浓度',
+`flag` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报警信息 0表示没有报警,非0值看哪些比特位被置位,定义如下:Bit0:温度低报警; Bit1:温度高报警; Bit2:湿度低报警; Bit3:湿度高报警; Bit4:VOC1',
+`project` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课题组字符串,分隔',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `laboratory_id`(`laboratory_id`) USING BTREE,
+INDEX `container_code_unique`(`container_code`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '实验室临时存储库' ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_project`;
+CREATE TABLE `sys_project`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`project_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课题号',
+`project_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课题名称',
+`sys_user_id` bigint(32) NULL DEFAULT NULL COMMENT '课题负责人,对应sys_user主键ID',
+`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注说明',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`creater_user` bigint(32) NULL DEFAULT NULL COMMENT '创建人id',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0),
+`project` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '课题组',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = DYNAMIC;
+INSERT INTO `smartlab_promote`.`sys_project`(`project_no`, `project_name`, `sys_user_id`, `valid_flag`,  `project`) VALUES ('Y6DDG31001', '吴晓东课题', 1,  1, '吴晓东课题组');
+
+drop table if exists `sys_reagent`;
+CREATE TABLE `sys_reagent`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '试剂名称',
+`cas` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'CAS编号',
+`reagent_type` varchar(50) NULL DEFAULT NULL COMMENT '试剂类型',
+`reagent_character` varchar(50) NULL DEFAULT NULL COMMENT '危险性质',
+`supplier_id` bigint(20) NULL DEFAULT NULL COMMENT '供应商ID',
+`reagent_format` varchar(50) NULL DEFAULT NULL COMMENT '试剂规格',
+`main_metering` decimal(12, 2) NULL DEFAULT NULL COMMENT '主计量',
+`reagent_unit` varchar(50) NULL DEFAULT NULL COMMENT '主计单位',
+`price` decimal(12, 2) NULL DEFAULT NULL COMMENT '含税售价',
+`per_box` int(11) NULL DEFAULT NULL COMMENT '每箱数量',
+`memo` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`deadline` int(11) NULL DEFAULT 0 COMMENT '货期(天数)',
+`product_sn` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '产品编号',
+`dangerous_flag` int(11) NOT NULL DEFAULT 0 COMMENT '危险品标识\n0:普通试剂\n1:危险试剂',
+`control_products` varchar(40) NULL DEFAULT NULL COMMENT '管制品',
+`product_home` varchar(40) NULL DEFAULT NULL COMMENT '厂家',
+`type` int(11) NULL DEFAULT NULL,
+`safetynum` int(8) NULL DEFAULT 0 COMMENT '安全库存数量',
+`originprice` decimal(10, 2) NULL DEFAULT NULL COMMENT '原始价格',
+`density` decimal(10, 4) NULL DEFAULT NULL COMMENT '密度',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `supplier_id`(`supplier_id`) USING BTREE,
+INDEX `export`(`cas`, `supplier_id`, `reagent_format`, `main_metering`, `reagent_unit`) USING BTREE COMMENT '根据字段去判断数据是否重复',
+INDEX `create_time`(`create_time`) USING BTREE,
+INDEX `price`(`price`) USING BTREE,
+INDEX `sproduct_home`(`product_home`) USING BTREE,
+INDEX `scontrol_products`(`control_products`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_sequence`;
+CREATE TABLE `sys_sequence`  (
+`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '主键ID',
+`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '序列名',
+`min_val` int(11) NOT NULL DEFAULT 0 COMMENT '最小值',
+`max_val` int(11) NOT NULL DEFAULT 0 COMMENT '最大值',
+`current_val` int(11) NOT NULL DEFAULT 0 COMMENT '当前值',
+`step` int(11) NOT NULL DEFAULT 1 COMMENT '增长值',
+`update_time` timestamp(0) NULL DEFAULT NULL COMMENT '更新时间',
+PRIMARY KEY (`id`) USING BTREE,
+UNIQUE INDEX `name`(`name`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_supplier`;
+CREATE TABLE `sys_supplier`  (
+`id` bigint(20) NOT NULL  AUTO_INCREMENT COMMENT '主键ID',
+`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '供应商名',
+`person_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系人',
+`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电话',
+`memo` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_user`;
+CREATE TABLE `sys_user`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`arp` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ARP号',
+`account` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '登陆账号',
+`password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '登陆密码',
+`company` bigint(20) NULL DEFAULT NULL COMMENT '负责公司(参照base_meta,种类为user_company)',
+`department` bigint(20) NULL DEFAULT NULL COMMENT '负责部门(参照base_meta,种类为user_department)',
+`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
+`phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电话',
+`email` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮箱',
+`memo` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
+`id_card` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'ID卡号',
+`approver_flag` int(1) NULL DEFAULT 0 COMMENT '是否审批者(0:不是、1:是)',
+`role_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色ID',
+`see_flag` int(1) NULL DEFAULT 0 COMMENT '可见度(0一般人员,1负责人,2管理员)',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`point` int(11) NULL DEFAULT 20,
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`project_id` bigint(20) NULL DEFAULT NULL COMMENT '课题组id',
+`waster` int(1) NULL DEFAULT NULL COMMENT '1危废处置人员 2危废管理员',
+`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图片url',
+`score` decimal(6, 2) NULL DEFAULT NULL COMMENT '考试分数',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `company`(`company`) USING BTREE,
+INDEX `department`(`department`) USING BTREE,
+INDEX `role_id`(`role_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+INSERT INTO sys_user(`arp`, `account`, `password`,  `name`, `waster`,`role_id`) VALUES ('ADMIN', 'admin', '7e6d414341e084973de15d75f4c91bc1', '管理员',  2,1);
+
+
+drop table if exists `sys_warehouse`;
+CREATE TABLE `sys_warehouse`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '仓库类型(参照base_meta,种类为warehouse_type)',
+`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '仓库名',
+`info_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态码',
+`bar_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地点条码',
+`location1` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '使用地点-楼号',
+`location2` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '使用地点-地址号',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`department` bigint(20) NULL DEFAULT NULL COMMENT '部门id',
+`temperature_max` decimal(8, 4) NULL DEFAULT NULL COMMENT '温度最大值',
+`temperature_min` decimal(8, 4) NULL DEFAULT NULL COMMENT '温度最小值',
+`humidity_max` decimal(8, 4) NULL DEFAULT NULL COMMENT '湿度最大值',
+`humidity_min` decimal(8, 4) NULL DEFAULT NULL COMMENT '湿度最小值',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_warehouse_container`;
+CREATE TABLE `sys_warehouse_container`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`warehouse_id` bigint(20) NULL DEFAULT NULL COMMENT '仓库ID',
+`type` bigint(20) NULL DEFAULT NULL COMMENT '货柜类型(参照base_meta,种类为container_type)',
+`container_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '货柜条码',
+`info_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '状态码',
+`structure` bigint(20) NULL DEFAULT NULL COMMENT '货柜结构(参照base_meta,种类为container_structure)',
+`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '货柜名称',
+`create_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
+`update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
+`valid_flag` int(1) NULL DEFAULT 1 COMMENT '有效标识(0:无效、1:有效)',
+`character_left` bigint(20) NULL DEFAULT NULL COMMENT '危险性质(参照base_meta,种类为reagent_character)',
+`character_right` bigint(20) NULL DEFAULT NULL COMMENT '危险性质(参照base_meta,种类为reagent_character)',
+`controller_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '主控代码',
+PRIMARY KEY (`id`) USING BTREE,
+INDEX `warehouse_id`(`warehouse_id`) USING BTREE,
+INDEX `container_code_unique`(`container_code`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_warehouse_status`;
+CREATE TABLE `sys_warehouse_status`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT,
+`type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '仓库类型',
+`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '仓库名称',
+`temperature` decimal(7, 4) NULL DEFAULT NULL COMMENT '温度',
+`humidity` decimal(7, 4) NULL DEFAULT NULL COMMENT '湿度',
+`creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人',
+`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建日期',
+`valid_flag` tinyint(3) NULL DEFAULT NULL COMMENT '有效标识',
+`warehouse_id` bigint(20) NULL DEFAULT NULL COMMENT '仓库id',
+`select_date` datetime(0) NULL DEFAULT NULL COMMENT '指定日期',
+`warning` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报警信息',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+
+drop table if exists `sys_warning`;
+CREATE TABLE `sys_warning`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+`user_id` bigint(32) NULL DEFAULT NULL COMMENT '用户ID',
+`container_id` bigint(32) NULL DEFAULT NULL COMMENT '柜台ID',
+`warning_id` bigint(32) NULL DEFAULT NULL COMMENT '报警类别',
+`warning_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT 'yyyy-MM-dd HH:mm:ss',
+`warning_level` int(4) NULL DEFAULT NULL COMMENT '1:警告\r\n2:错误\r\n3:危险\r\n4:严重危险',
+`warning_point` int(4) NULL DEFAULT NULL COMMENT '实验人员“信誉”扣分',
+`status` int(4) NULL DEFAULT NULL COMMENT '0:未处理 1:已处理',
+`memo` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
+`daping_alarm_id` bigint(32) NULL DEFAULT NULL COMMENT '大屏关联Id',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
+
+drop table if exists `ope_reagent_code`;
+CREATE TABLE `ope_reagent_code`  (
+`id` bigint(20) NOT NULL AUTO_INCREMENT,
+`order_id` bigint(20) NOT NULL COMMENT '订单id',
+`apply_id` bigint(20) NOT NULL COMMENT '申请id',
+`end_code` int(11) NOT NULL COMMENT '试剂标签编码结束位置',
+`start_code` int(11) NOT NULL COMMENT '试剂标签编码开始位置',
+`code_prex` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
+`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
+`update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
+`status` int(11) NOT NULL DEFAULT 0 COMMENT '状态',
+PRIMARY KEY (`id`) USING BTREE,
+UNIQUE INDEX `order_id`(`order_id`) USING BTREE,
+UNIQUE INDEX `apply_id`(`apply_id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
+

--
Gitblit v1.9.2