From ed36af4d4cc5feac72a384d85f9032fc6dc1223a Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期六, 14 九月 2024 17:01:55 +0800
Subject: [PATCH] update

---
 hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/SysCompanyMapper.java                      |    8 
 hazmat-system/src/main/resources/mapper/system/HzProductBasicMapper.xml                              |    3 
 hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/HazmatKindEnum.java                         |   54 +++
 hazmat-system/src/main/resources/mapper/system/HzHazmatBasicMapper.xml                               |    3 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java        |   31 +
 hazmat-admin/src/test/java/com/gkhy/hazmat/admin/PasswordTest.java                                   |   26 +
 hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/OperateStatusEnum.java                      |    3 
 hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/HazmatPackageEnum.java                      |   55 +++
 hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/ProductBasicExcelDataListener.java          |   17 +
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductEntryRecordServiceImpl.java |   31 +
 pom.xml                                                                                              |    7 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductEntryRecord.java                  |    6 
 hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatController.java              |   13 
 hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicExcelData.java                   |   72 ++++
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java         |    3 
 hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatBasicController.java         |   11 
 hazmat-admin/src/main/resources/db/migration/V20240906001_change_company.sql                         |    2 
 hazmat-common/src/main/java/com/gkhy/hazmat/common/domain/TableSupport.java                          |    6 
 hazmat-system/src/main/resources/mapper/system/SysDictTypeMapper.xml                                 |    0 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/SysCompany.java                            |    6 
 hazmat-system/src/main/resources/mapper/system/HzEntryRecordMapper.xml                               |    3 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatBasicService.java                 |    8 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzProductBasicService.java                |   10 
 hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/app/AppUserController.java               |    2 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatBasicServiceImpl.java        |  142 +++++++++
 hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/ProductBasicExcelData.java                  |   61 ++++
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/SysCompanyServiceImpl.java           |   19 +
 hazmat-admin/src/main/resources/db/migration/V20240914001_change_hazmat_basic.sql                    |    5 
 hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzProductBasicController.java        |   13 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductBasic.java                        |    6 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzHazmatBasic.java                         |    8 
 hazmat-system/src/main/resources/mapper/system/SysCompanyMapper.xml                                  |    7 
 hazmat-framework/src/main/java/com/gkhy/hazmat/framework/interceptor/LogInterceptor.java             |   37 ++
 hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/HzHazmatFlowMapper.java                    |    2 
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatService.java                      |    6 
 hazmat-common/pom.xml                                                                                |    5 
 hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicExcelDataListener.java           |   17 +
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductBasicServiceImpl.java       |  129 ++++++++
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java             |   37 ++
 hazmat-system/src/main/resources/mapper/system/SysDeptMapper.xml                                     |    2 
 hazmat-system/src/main/resources/mapper/system/HzProductEntryRecordMapper.xml                        |    3 
 hazmat-system/src/main/resources/mapper/system/SysUserMapper.xml                                     |    8 
 42 files changed, 847 insertions(+), 40 deletions(-)

diff --git a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/app/AppUserController.java b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/app/AppUserController.java
index 5fcf3d6..dd73e14 100644
--- a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/app/AppUserController.java
+++ b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/app/AppUserController.java
@@ -27,7 +27,7 @@
     @Autowired
     private SysUserService userService;
 
-    @PreAuthorize("hasAnyAuthority('hazmat:manage:company','hazmat:manage:common')")
+    @PreAuthorize("hasAnyAuthority('hazmat:manage:common')")
     @ApiOperation(value = "重置密码")
     @PutMapping(value = "/resetPwd")
     public CommonResult restPwd(@RequestBody SysUser user){
diff --git a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatBasicController.java b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatBasicController.java
index 78d98f6..105dd20 100644
--- a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatBasicController.java
+++ b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatBasicController.java
@@ -13,6 +13,9 @@
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
 
 /**
  * <p>
@@ -74,4 +77,12 @@
     }
 
 
+    @RepeatSubmit
+    @PreAuthorize("hasAnyAuthority('hazmat:manage:company','hazmat:manage:common')")
+    @ApiOperation(value = "危化品基础数据Excel导入")
+    @PostMapping("/importExcel")
+    public CommonResult importExcel(MultipartFile file) throws IOException {
+        return CommonResult.success(hazmatBasicService.importExcel(file));
+    }
+
 }
diff --git a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatController.java b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatController.java
index 554d645..441cb06 100644
--- a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatController.java
+++ b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzHazmatController.java
@@ -71,13 +71,24 @@
         return CommonResult.success();
     }
 
+    @PreAuthorize("hasAnyAuthority('hazmat:manage:company','hazmat:manage:common')")
+    @RepeatSubmit
+    @ApiOperation(value = "零头修改")
+    @PostMapping(value = { "/changeRemaining" })
+    public CommonResult changeRemaining(@RequestBody HzHazmat hazmat){
+        hazmatService.changeRemaining(hazmat);
+        return CommonResult.success();
+    }
+
 
     @PreAuthorize("hasAnyAuthority('hazmat:manage:company','hazmat:manage:common')")
     @RepeatSubmit
     @ApiOperation(value = "修改状态")
     @PostMapping(value = { "/changeState" })
-    public CommonResult changeState(HzHazmat hazmat){
+    public CommonResult changeState(@RequestBody HzHazmat hazmat){
         hazmatService.changeState(hazmat);
         return CommonResult.success();
     }
+
+
 }
diff --git a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzProductBasicController.java b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzProductBasicController.java
index 4e426e2..c016a8c 100644
--- a/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzProductBasicController.java
+++ b/hazmat-admin/src/main/java/com/gkhy/hazmat/admin/controller/web/HzProductBasicController.java
@@ -13,6 +13,9 @@
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
 
 /**
  * <p>
@@ -74,4 +77,14 @@
     }
 
 
+    @RepeatSubmit
+    @PreAuthorize("hasAnyAuthority('hazmat:manage:company','hazmat:manage:common')")
+    @ApiOperation(value = "危化品基础数据Excel导入")
+    @PostMapping("/importExcel")
+    public CommonResult importExcel( MultipartFile file) throws IOException {
+        return CommonResult.success(productBasicService.importExcel(file));
+    }
+
+
+
 }
diff --git a/hazmat-admin/src/main/resources/db/migration/V20240906001_change_company.sql b/hazmat-admin/src/main/resources/db/migration/V20240906001_change_company.sql
new file mode 100644
index 0000000..d7fe8da
--- /dev/null
+++ b/hazmat-admin/src/main/resources/db/migration/V20240906001_change_company.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `hazmat_manage`.`sys_company`
+ADD COLUMN `code` varchar(2) NULL COMMENT '公司唯一编码(2位)' AFTER `version`;
\ No newline at end of file
diff --git a/hazmat-admin/src/main/resources/db/migration/V20240914001_change_hazmat_basic.sql b/hazmat-admin/src/main/resources/db/migration/V20240914001_change_hazmat_basic.sql
new file mode 100644
index 0000000..003d734
--- /dev/null
+++ b/hazmat-admin/src/main/resources/db/migration/V20240914001_change_hazmat_basic.sql
@@ -0,0 +1,5 @@
+ALTER TABLE `hazmat_manage`.`hz_hazmat_basic`
+ADD COLUMN `max_entry` int NOT NULL DEFAULT 150 COMMENT '单次入库最大数量' AFTER `version`;
+
+ALTER TABLE `hazmat_manage`.`hz_product_basic`
+ADD COLUMN `max_entry` int NOT NULL DEFAULT 150 COMMENT '单次入库最大数量' AFTER `version`;
\ No newline at end of file
diff --git a/hazmat-admin/src/test/java/com/gkhy/hazmat/admin/PasswordTest.java b/hazmat-admin/src/test/java/com/gkhy/hazmat/admin/PasswordTest.java
index 7d94f80..12b32a3 100644
--- a/hazmat-admin/src/test/java/com/gkhy/hazmat/admin/PasswordTest.java
+++ b/hazmat-admin/src/test/java/com/gkhy/hazmat/admin/PasswordTest.java
@@ -77,4 +77,30 @@
             System.out.println("hhhhhh");
         }
     }
+
+
+    @Test
+    public void testList(){
+        List<Integer> tmpList=new ArrayList<>();
+        tmpList.add(1);
+        tmpList.add(2);
+        tmpList.add(3);
+        tmpList.add(4);
+        tmpList.add(5);
+        tmpList.add(6);
+        tmpList.add(7);
+        tmpList.add(8);
+        tmpList.add(9);
+        Integer pageSize=3;
+        while(true){
+            List<Integer> subLIst=tmpList.subList(0,tmpList.size()>pageSize?pageSize:tmpList.size());
+            System.out.println("subSize="+subLIst.size());
+            if(subLIst.size()<pageSize){
+                break;
+            }
+            tmpList=tmpList.subList(pageSize,tmpList.size());
+            System.out.println("size="+tmpList.size());
+
+        }
+    }
 }
diff --git a/hazmat-common/pom.xml b/hazmat-common/pom.xml
index 09dc694..a87cf24 100644
--- a/hazmat-common/pom.xml
+++ b/hazmat-common/pom.xml
@@ -135,6 +135,11 @@
             <artifactId>jaudiotagger</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/domain/TableSupport.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/domain/TableSupport.java
index c4980e1..ecc34d6 100644
--- a/hazmat-common/src/main/java/com/gkhy/hazmat/common/domain/TableSupport.java
+++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/domain/TableSupport.java
@@ -42,7 +42,11 @@
     {
         PageDomain pageDomain = new PageDomain();
         pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
-        pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
+        Integer pageSize=Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10);
+        if(pageSize>100){
+            pageSize=100;
+        }
+        pageDomain.setPageSize(pageSize);
         pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
         pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
         pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/HazmatKindEnum.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/HazmatKindEnum.java
new file mode 100644
index 0000000..74852ac
--- /dev/null
+++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/HazmatKindEnum.java
@@ -0,0 +1,54 @@
+package com.gkhy.hazmat.common.enums;
+
+import java.util.Objects;
+
+/**
+ * 危化品最小包装
+ *
+ */
+public enum HazmatKindEnum
+{
+    REAGENT(0, "试剂"),
+    STOCK(1, "原料"),
+    SIMIGOOD(2, "半成品"),
+    GOOD(3, "成品"),
+    OTHER(4, "其他");
+
+    private final Integer code;
+    private final String info;
+
+    HazmatKindEnum(Integer code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public Integer getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+
+
+    public static String getInfoByCode(Integer code){
+        for(HazmatKindEnum hazmatKindEnum:HazmatKindEnum.values()){
+            if(Objects.equals(hazmatKindEnum.getCode(), code)){
+                return hazmatKindEnum.getInfo();
+            }
+        }
+        return "";
+    }
+
+    public static Integer getCodeByInfo(String info){
+        for(HazmatKindEnum hazmatKindEnum:HazmatKindEnum.values()){
+            if(info.equals(hazmatKindEnum.getInfo())){
+                return hazmatKindEnum.getCode();
+            }
+        }
+        return null;
+    }
+}
diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/HazmatPackageEnum.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/HazmatPackageEnum.java
new file mode 100644
index 0000000..ee3255c
--- /dev/null
+++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/HazmatPackageEnum.java
@@ -0,0 +1,55 @@
+package com.gkhy.hazmat.common.enums;
+
+import java.util.Objects;
+
+/**
+ * 危化品最小包装
+ *
+ */
+public enum HazmatPackageEnum
+{
+    PING(0, "瓶"),
+    DAI(1, "袋"),
+    TONG(2, "桶"),
+    HE(3, "盒"),
+    XIANG(4, "箱"),
+    OTHER(5,"其他");
+
+    private final Integer code;
+    private final String info;
+
+    HazmatPackageEnum(Integer code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public Integer getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+
+
+    public static String getInfoByCode(Integer code){
+        for(HazmatPackageEnum hazmatPackageEnum: HazmatPackageEnum.values()){
+            if(Objects.equals(hazmatPackageEnum.getCode(), code)){
+                return hazmatPackageEnum.getInfo();
+            }
+        }
+        return "";
+    }
+
+    public static Integer getCodeByInfo(String info){
+        for(HazmatPackageEnum hazmatPackageEnum:HazmatPackageEnum.values()){
+            if(info.equals(hazmatPackageEnum.getInfo())){
+                return hazmatPackageEnum.getCode();
+            }
+        }
+        return null;
+    }
+}
diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/OperateStatusEnum.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/OperateStatusEnum.java
index 0c3d85e..9bc9f13 100644
--- a/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/OperateStatusEnum.java
+++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/enums/OperateStatusEnum.java
@@ -11,7 +11,8 @@
     RETURN(2, "归还"),
     DISCARD(3, "标签作废"),
     USE_UP(4, "用尽登记"),
-    SOLD(5,"销售");
+    SOLD(5,"销售"),
+    REMNANT(6,"零头入库");
 
     private final Integer code;
     private final String info;
diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicExcelData.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicExcelData.java
new file mode 100644
index 0000000..558f523
--- /dev/null
+++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicExcelData.java
@@ -0,0 +1,72 @@
+package com.gkhy.hazmat.common.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+public class HazmatBasicExcelData {
+    @ExcelProperty("序号")
+    private Integer index;
+
+    @ExcelProperty("名称")
+    private String name;
+
+    @ExcelProperty("产品编号")
+    private String productSn;
+
+    @ExcelProperty("种类")
+    private String kind;
+
+    @ExcelProperty("CAS")
+    private String cas;
+
+    @ExcelProperty("试剂类型")
+    private String hazmatType;
+
+    @ExcelProperty("危险性质")
+    private String hazmatCharacter;
+
+    @ExcelProperty("供应商")
+    private String supplier;
+
+    @ExcelProperty("厂家")
+    private String manufacturer;
+
+    @ExcelProperty("规格")
+    private String hazmatFormat;
+
+
+    @ExcelProperty("包装数量")
+    private BigDecimal metering;
+
+    @ExcelProperty("包装单位")
+    private String unit;
+
+    @ExcelProperty("含税价格")
+    private BigDecimal price;
+
+    @ExcelProperty("每箱数量")
+    private Integer perBox;
+
+
+    @ExcelProperty("最小包装类型")
+    private String minPackage;
+
+
+    @ExcelProperty("安全库存")
+    private Integer safeNum;
+
+
+    @ExcelProperty("超期阀值(小时)")
+    private Integer threshold;
+
+
+    @ExcelProperty("单次入库最大数量")
+    private Integer maxEntry;
+
+
+}
diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicExcelDataListener.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicExcelDataListener.java
new file mode 100644
index 0000000..e8b6fb9
--- /dev/null
+++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/HazmatBasicExcelDataListener.java
@@ -0,0 +1,17 @@
+package com.gkhy.hazmat.common.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+
+public class HazmatBasicExcelDataListener extends AnalysisEventListener<HazmatBasicExcelData> {
+    @Override
+    public void invoke(HazmatBasicExcelData hazmatBasicExcelData, AnalysisContext analysisContext) {
+        System.out.println("invoke");
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        //所有数据解析完成后的操作
+        System.out.println("doAfterAllAnalysed");
+    }
+}
diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/ProductBasicExcelData.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/ProductBasicExcelData.java
new file mode 100644
index 0000000..d15a042
--- /dev/null
+++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/ProductBasicExcelData.java
@@ -0,0 +1,61 @@
+package com.gkhy.hazmat.common.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Getter
+@Setter
+public class ProductBasicExcelData {
+    @ExcelProperty("序号")
+    private Integer index;
+
+    @ExcelProperty("名称")
+    private String name;
+
+    @ExcelProperty("产品编号")
+    private String productSn;
+
+    @ExcelProperty("种类")
+    private String kind;
+
+    @ExcelProperty("CAS")
+    private String cas;
+
+    @ExcelProperty("试剂类型")
+    private String productType;
+
+    @ExcelProperty("危险性质")
+    private String productCharacter;
+
+    @ExcelProperty("供应商")
+    private String supplier;
+
+    @ExcelProperty("厂家")
+    private String manufacturer;
+
+    @ExcelProperty("规格")
+    private String productFormat;
+
+
+    @ExcelProperty("包装数量")
+    private BigDecimal metering;
+
+    @ExcelProperty("包装单位")
+    private String unit;
+
+    @ExcelProperty("含税价格")
+    private BigDecimal price;
+
+    @ExcelProperty("每箱数量")
+    private Integer perBox;
+
+
+    @ExcelProperty("最小包装类型")
+    private String minPackage;
+
+    @ExcelProperty("单次入库最大数量")
+    private Integer maxEntry;
+}
diff --git a/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/ProductBasicExcelDataListener.java b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/ProductBasicExcelDataListener.java
new file mode 100644
index 0000000..eb83eea
--- /dev/null
+++ b/hazmat-common/src/main/java/com/gkhy/hazmat/common/excel/ProductBasicExcelDataListener.java
@@ -0,0 +1,17 @@
+package com.gkhy.hazmat.common.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+
+public class ProductBasicExcelDataListener extends AnalysisEventListener<ProductBasicExcelData> {
+    @Override
+    public void invoke(ProductBasicExcelData productBasicExcelData, AnalysisContext analysisContext) {
+        System.out.println("invoke");
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+        //所有数据解析完成后的操作
+        System.out.println("doAfterAllAnalysed");
+    }
+}
diff --git a/hazmat-framework/src/main/java/com/gkhy/hazmat/framework/interceptor/LogInterceptor.java b/hazmat-framework/src/main/java/com/gkhy/hazmat/framework/interceptor/LogInterceptor.java
new file mode 100644
index 0000000..b66d4e1
--- /dev/null
+++ b/hazmat-framework/src/main/java/com/gkhy/hazmat/framework/interceptor/LogInterceptor.java
@@ -0,0 +1,37 @@
+package com.gkhy.hazmat.framework.interceptor;
+
+import cn.hutool.extra.servlet.ServletUtil;
+import com.gkhy.hazmat.common.utils.SecurityUtils;
+import org.slf4j.MDC;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.UUID;
+
+/**
+ * @ClassName LogInterceptor
+ * @Description TODO
+ **/
+@Component
+public class LogInterceptor implements HandlerInterceptor {
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        String requestId = UUID.randomUUID().toString();
+        String ip = ServletUtil.getClientIP(request,null);
+        String url=request.getRequestURI();
+
+        MDC.put("requestId", requestId);
+        MDC.put("clientIP", ip);
+        MDC.put("url", url);
+        String userId= SecurityUtils.getLoginUserWithoutError()!=null?String.valueOf(SecurityUtils.getLoginUserWithoutError().getUser().getId()):"";
+        MDC.put("userId", userId);
+        return true;
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+        MDC.clear();
+    }
+}
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzHazmatBasic.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzHazmatBasic.java
index e44a5a7..4a5e723 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzHazmatBasic.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzHazmatBasic.java
@@ -6,6 +6,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
@@ -25,6 +26,7 @@
  */
 @Getter
 @Setter
+@Accessors(chain = true)
 @TableName("hz_hazmat_basic")
 @ApiModel(value = "HzHazmatBasic对象", description = "危化品基础数据表")
 @JsonInclude(NON_NULL)
@@ -99,7 +101,7 @@
     @TableField("price")
     private BigDecimal price;
 
-    @NotNull(message = "每箱数量不能为空")
+  //  @NotNull(message = "每箱数量不能为空")
     @ApiModelProperty(value = "每箱数量",required = true)
     @TableField("per_box")
     private Integer perBox;
@@ -143,6 +145,10 @@
     @TableField("remark")
     private String remark;
 
+    @ApiModelProperty("单次入库最大数量")
+    @TableField("max_entry")
+    private Integer maxEntry;
+
     @Version
     @TableField("version")
     private Integer version;
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductBasic.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductBasic.java
index fbfe6f4..dced607 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductBasic.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductBasic.java
@@ -6,6 +6,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotNull;
 import java.io.Serializable;
@@ -24,6 +25,7 @@
  */
 @Getter
 @Setter
+@Accessors(chain = true)
 @TableName("hz_product_basic")
 @ApiModel(value = "HzProductBasic对象", description = "成品基础数据表")
 @JsonInclude(NON_NULL)
@@ -120,6 +122,10 @@
     @TableField("remark")
     private String remark;
 
+    @ApiModelProperty("单次入库最大数量")
+    @TableField("max_entry")
+    private Integer maxEntry;
+
     @Version
     @TableField("version")
     private Integer version;
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductEntryRecord.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductEntryRecord.java
index 5201b65..7711408 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductEntryRecord.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/HzProductEntryRecord.java
@@ -1,9 +1,6 @@
 package com.gkhy.hazmat.system.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.gkhy.hazmat.common.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
@@ -78,6 +75,7 @@
     @TableField("company_id")
     private Long companyId;
 
+    @Version
     @TableField("version")
     private Integer version;
 
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/SysCompany.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/SysCompany.java
index 255f27d..d383b22 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/SysCompany.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/domain/SysCompany.java
@@ -63,6 +63,12 @@
     @TableField("del_flag")
     private Integer delFlag;
 
+    @NotBlank(message = "公司唯一编码为空")
+    @Length(min = 2, max = 2, message = "公司唯一编码只能为2位")
+    @ApiModelProperty("公司唯一编码(2位)")
+    @TableField("code")
+    private String code;
+
     @Version
     @ApiModelProperty("乐观锁")
     @TableField("version")
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/HzHazmatFlowMapper.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/HzHazmatFlowMapper.java
index 610edcc..c7ff187 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/HzHazmatFlowMapper.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/HzHazmatFlowMapper.java
@@ -52,4 +52,6 @@
      * @return
      */
     HzHazmatFlow selectLastFlow(@Param("slice") Integer slice,@Param("hazmatId") Long hazmatId, @Param("state")Integer state);
+
+
 }
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/SysCompanyMapper.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/SysCompanyMapper.java
index 6d48b12..af18e12 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/SysCompanyMapper.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/mapper/SysCompanyMapper.java
@@ -47,6 +47,10 @@
      */
     SysCompany checkNameUnique(String name);
 
-
-
+    /**
+     * 校验公司编码是否唯一
+     * @param code
+     * @return
+     */
+    SysCompany checkCodeUnique(String code);
 }
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatBasicService.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatBasicService.java
index 62c92d4..a6a0e2f 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatBasicService.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatBasicService.java
@@ -3,6 +3,9 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gkhy.hazmat.common.api.CommonPage;
 import com.gkhy.hazmat.system.domain.HzHazmatBasic;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
 
 /**
  * <p>
@@ -65,4 +68,9 @@
      */
     public boolean checkProductSnUnique(HzHazmatBasic hazmatBasic);
 
+    /**
+     *  excel导入
+     * @param file
+     */
+    Integer importExcel(MultipartFile file) throws IOException;
 }
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatService.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatService.java
index 6aeb726..501f364 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatService.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzHazmatService.java
@@ -86,4 +86,10 @@
      * @param hazmat
      */
     void changeState(HzHazmat hazmat);
+
+    /**
+     * 零头数据处理(修改在库余量)
+     * @param hazmat
+     */
+    void changeRemaining(HzHazmat hazmat);
 }
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzProductBasicService.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzProductBasicService.java
index e32a7a2..d7a808a 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzProductBasicService.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/HzProductBasicService.java
@@ -3,6 +3,9 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gkhy.hazmat.common.api.CommonPage;
 import com.gkhy.hazmat.system.domain.HzProductBasic;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
 
 /**
  * <p>
@@ -64,4 +67,11 @@
      * @return boolean
      */
     public boolean checkProductSnUnique(HzProductBasic productBasic);
+
+
+    /**
+     *  excel导入
+     * @param file
+     */
+    Integer importExcel(MultipartFile file) throws IOException;
 }
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java
index 4bc8fa4..1a428f6 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java
@@ -15,14 +15,8 @@
 import com.gkhy.hazmat.common.utils.PageUtils;
 import com.gkhy.hazmat.common.utils.SecurityUtils;
 import com.gkhy.hazmat.common.utils.StringUtils;
-import com.gkhy.hazmat.system.domain.HzEntryRecord;
-import com.gkhy.hazmat.system.domain.HzHazmat;
-import com.gkhy.hazmat.system.domain.HzHazmatBasic;
-import com.gkhy.hazmat.system.domain.HzWarehouseRecord;
-import com.gkhy.hazmat.system.mapper.HzEntryRecordMapper;
-import com.gkhy.hazmat.system.mapper.HzHazmatBasicMapper;
-import com.gkhy.hazmat.system.mapper.HzHazmatMapper;
-import com.gkhy.hazmat.system.mapper.HzWarehouseRecordMapper;
+import com.gkhy.hazmat.system.domain.*;
+import com.gkhy.hazmat.system.mapper.*;
 import com.gkhy.hazmat.system.service.HzEntryRecordService;
 import com.gkhy.hazmat.system.service.HzHazmatService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -56,6 +50,8 @@
     private HzWarehouseRecordMapper warehouseRecordMapper;
     @Autowired
     private CustomEventPublisher customEventPublisher;
+    @Autowired
+    private SysCompanyMapper companyMapper;
 
     @Override
     public CommonPage selectEntryRecordList(HzEntryRecord entryRecord) {
@@ -87,6 +83,9 @@
         if(hazmatBasic==null){
             throw new ApiException("危化品基础数据不存在");
         }
+        if(entryRecord.getNum()>hazmatBasic.getMaxEntry()){
+            throw new ApiException("数量超过单次入库最大数量<"+hazmatBasic.getMaxEntry()+">");
+        }
         entryRecord.setCompanyId(currentUser.getCompanyId());
         entryRecord.setCreateBy(currentUser.getUsername());
         checkUserAllowed(null,currentUser);
@@ -103,11 +102,18 @@
     }
 
     public void generateCode(HzEntryRecord entryRecord){
+        SysCompany company=companyMapper.selectById(entryRecord.getCompanyId());
+        String code=company.getCode();
+        if(StringUtils.isBlank(code)){
+            throw new ApiException("公司两位编码为空");
+        }
         String currentDate= DateUtil.format(new Date(), DatePattern.PURE_DATE_FORMAT);
         StringBuilder prefixBuilder=new StringBuilder().append(CodePrexEnum.MATERIAL.getCode())
+                .append(code)
                 .append(currentDate);
+
         HzEntryRecord er=baseMapper.selectLastEntryRecord(prefixBuilder.toString(),entryRecord.getCompanyId());
-        int startCode=0;
+        int startCode=1;
         int endCode=startCode+entryRecord.getNum()-1;
         if(er!=null){
             startCode=er.getEndCode()+1;
@@ -209,10 +215,17 @@
     public int updateEntryRecord(HzEntryRecord entryRecord) {
         SysUser currentUser = SecurityUtils.getLoginUser().getUser();
         checkUserAllowed(entryRecord,currentUser);
+        HzHazmatBasic hazmatBasic=hazmatBasicMapper.selectById(entryRecord.getBasicId());
+        if(hazmatBasic==null){
+            throw new ApiException("危化品基础数据不存在");
+        }
         HzEntryRecord existEr=baseMapper.selectById(entryRecord.getId());
         if(existEr.getState().equals(EntryStateEnum.ENTER.getCode())){
             throw new ApiException("已经入库,不能再修改");
         }
+        if(entryRecord.getNum()>hazmatBasic.getMaxEntry()){
+            throw new ApiException("数量超过单次入库最大数量<"+hazmatBasic.getMaxEntry()+">");
+        }
         entryRecord.setUpdateBy(currentUser.getUsername());
         int row=baseMapper.updateById(entryRecord);
         if(row<1){
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatBasicServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatBasicServiceImpl.java
index 6e67893..9d4e01f 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatBasicServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatBasicServiceImpl.java
@@ -1,18 +1,31 @@
 package com.gkhy.hazmat.system.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.hazmat.common.api.CommonPage;
 import com.gkhy.hazmat.common.constant.UserConstant;
 import com.gkhy.hazmat.common.domain.entity.SysUser;
+import com.gkhy.hazmat.common.enums.HazmatKindEnum;
+import com.gkhy.hazmat.common.enums.HazmatPackageEnum;
 import com.gkhy.hazmat.common.enums.UserTypeEnum;
+import com.gkhy.hazmat.common.excel.HazmatBasicExcelData;
+import com.gkhy.hazmat.common.excel.HazmatBasicExcelDataListener;
 import com.gkhy.hazmat.common.exception.ApiException;
 import com.gkhy.hazmat.common.utils.PageUtils;
 import com.gkhy.hazmat.common.utils.SecurityUtils;
+import com.gkhy.hazmat.common.utils.StringUtils;
 import com.gkhy.hazmat.system.domain.HzHazmatBasic;
 import com.gkhy.hazmat.system.mapper.HzHazmatBasicMapper;
 import com.gkhy.hazmat.system.service.HzHazmatBasicService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -59,6 +72,7 @@
             throw new ApiException("产品编号已存在");
         }
         checkUserAllowed(null,currentUser);
+
         int row = baseMapper.insert(hazmatBasic);
         if (row < 1) {
             throw new ApiException("新增危化品基础信息失败");
@@ -114,4 +128,132 @@
         }
         return UserConstant.UNIQUE;
     }
+
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public Integer importExcel(MultipartFile file) throws IOException {
+        if(ObjectUtil.isEmpty(file)){
+            throw new ApiException("上传对象不能为空");
+        }
+        SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(null,currentUser);
+        List<HazmatBasicExcelData> hazmatExcelDataList = EasyExcel.read(file.getInputStream(), HazmatBasicExcelData.class, new HazmatBasicExcelDataListener()).sheet().doReadSync();
+        List<HzHazmatBasic> hazmatBasicList=new ArrayList<>();
+
+        for(HazmatBasicExcelData hazmatBasicExcelData:hazmatExcelDataList){
+            validateData(hazmatBasicExcelData);
+            if (!checkProductSnUnique(new HzHazmatBasic().setProductSn(hazmatBasicExcelData.getProductSn()).setCompanyId(currentUser.getCompanyId()))) {
+                throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"产品编号已存在");
+            }
+            HzHazmatBasic hazmatBasic=new HzHazmatBasic();
+            BeanUtils.copyProperties(hazmatBasicExcelData,hazmatBasic,new String[]{"kind","minPackage"});
+            Integer kind= HazmatKindEnum.getCodeByInfo(hazmatBasicExcelData.getKind());
+            if(kind==null){
+                throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"种类填写不正确");
+            }
+            Integer minPackage= HazmatPackageEnum.getCodeByInfo(hazmatBasicExcelData.getMinPackage());
+            if(minPackage==null){
+                throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"最小包装类型填写不正确");
+            }
+            hazmatBasic.setKind(kind);
+            hazmatBasic.setMinPackage(minPackage);
+            hazmatBasic.setCompanyId(currentUser.getCompanyId());
+            hazmatBasic.setCreateBy(currentUser.getUsername());
+            hazmatBasicList.add(hazmatBasic);
+        }
+        if(!hazmatBasicList.isEmpty()){
+            if(hazmatBasicList.size()>100){
+                int pageSize=100;
+                while (true){
+                    List<HzHazmatBasic> hazmatBasics=hazmatBasicList.subList(0, Math.min(hazmatBasicList.size(), pageSize));
+                    saveBatch(hazmatBasics);
+                    if(hazmatBasics.size()<pageSize){
+                        break;
+                    }
+                    hazmatBasicList=hazmatBasicList.subList(pageSize,hazmatBasicList.size());
+                    if(hazmatBasicList.isEmpty()){
+                        break;
+                    }
+                }
+            }else{
+                saveBatch(hazmatBasicList);
+            }
+        }
+        return hazmatBasicList.size();
+    }
+
+
+    public void validateData(HazmatBasicExcelData hazmatBasicExcelData){
+        if(StringUtils.isBlank(hazmatBasicExcelData.getName())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"名称为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getProductSn())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"产品编码为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getKind())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"种类为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getCas())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"CAS为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getHazmatType())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"试剂类型为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getHazmatCharacter())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"危险性质为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getSupplier())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"供应商为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getManufacturer())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"厂家为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getHazmatFormat())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"规格为空");
+        }
+        if(ObjectUtil.isEmpty(hazmatBasicExcelData.getMetering())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"包装数量为空");
+        }
+        if(StringUtils.isBlank(hazmatBasicExcelData.getUnit())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"包装单位为空");
+        }
+        if(ObjectUtil.isEmpty(hazmatBasicExcelData.getPrice())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"含税价格为空");
+        }
+        if(ObjectUtil.isEmpty(hazmatBasicExcelData.getMinPackage())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"最小包装类型为空");
+        }
+        if(ObjectUtil.isEmpty(hazmatBasicExcelData.getSafeNum())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"安全库存为空");
+        }
+        if(ObjectUtil.isEmpty(hazmatBasicExcelData.getThreshold())){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"超期阀值为空");
+        }
+
+        if(ObjectUtil.isEmpty(hazmatBasicExcelData.getMaxEntry())||hazmatBasicExcelData.getMaxEntry()<1){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"单次录入最大数量为空或者小于0");
+        }
+
+        if(hazmatBasicExcelData.getMetering().compareTo(BigDecimal.ZERO)<=0){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"包装数量小于0");
+        }
+
+        if(hazmatBasicExcelData.getPrice().compareTo(BigDecimal.ZERO)<=0){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"含税价格小于0");
+        }
+
+        if(ObjectUtil.isNotEmpty(hazmatBasicExcelData.getPerBox()) && hazmatBasicExcelData.getPerBox()<=0){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"每箱数量小于0");
+        }
+
+        if(hazmatBasicExcelData.getSafeNum()<0){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"安全库存小于0");
+        }
+
+        if(hazmatBasicExcelData.getThreshold()<0){
+            throw new ApiException("序号"+hazmatBasicExcelData.getIndex()+"超期阀值小于0");
+        }
+
+
+    }
 }
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java
index 34eb0f0..461412e 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java
@@ -53,6 +53,7 @@
         //设置分表id
         IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
         HzHazmatFlow hazmatFlow = baseMapper.selectById(hazmatFlowId);
+        IdTableNameHandler.removeCurrentId();
         if (!hazmatFlow.getCompanyId().equals(currentUser.getCompanyId())) {
             throw new ApiException("无权限查看其它企业数据");
         }
@@ -68,6 +69,7 @@
         //设置分表id
         IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
         int row = baseMapper.insert(hazmatFlow);
+        IdTableNameHandler.removeCurrentId();
         if (row < 1) {
             throw new ApiException("新增危化品流向失败");
         }
@@ -81,6 +83,7 @@
         //设置分表id
         IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
         HzHazmatFlow hazmatFlow=baseMapper.selectById(hazmatFlowId);
+        IdTableNameHandler.removeCurrentId();
         if(hazmatFlow==null){
             throw new ApiException("流向信息不存在");
         }
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java
index e2751cd..acad8a2 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java
@@ -1,5 +1,6 @@
 package com.gkhy.hazmat.system.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.hazmat.common.api.CommonPage;
 import com.gkhy.hazmat.common.config.IdTableNameHandler;
@@ -309,6 +310,42 @@
         IdTableNameHandler.removeCurrentId();
     }
 
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void changeRemaining(HzHazmat hazmat) {
+        if(hazmat.getId()==null||hazmat.getRemaining()==null){
+            throw new ApiException("参数不正确");
+        }
+        SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(null,currentUser);
+        //设置分表id
+        IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+        HzHazmat dbHazmat=getById(hazmat.getId());
+        checkUserAllowed(dbHazmat,currentUser);
+        if(hazmat.getRemaining().compareTo(dbHazmat.getRemaining())>=0){
+            throw new ApiException("修改值不能大于等于在库容量");
+        }
+        //校验是否产生流向
+        Long flowCount=hazmatFlowMapper.selectCount(Wrappers.<HzHazmatFlow>lambdaQuery().eq(HzHazmatFlow::getHazmatId,hazmat.getId())
+                .ne(HzHazmatFlow::getState,OperateStatusEnum.ENTRY.getCode()));
+        if(flowCount>0){
+            throw new ApiException("该危化品已流转,不能修改!");
+        }
+        HzHazmat newHazmat=new HzHazmat().setId(hazmat.getId()).setRemaining(hazmat.getRemaining());
+        newHazmat.setUpdateBy(currentUser.getUsername());
+        updateById(newHazmat);
+        //生成流向
+        HzHazmatFlow hazmatFlow=new HzHazmatFlow();
+        hazmatFlow.setHazmatId(hazmat.getId());
+        hazmatFlow.setBasicId(dbHazmat.getBasicId());
+        hazmatFlow.setState(OperateStatusEnum.REMNANT.getCode());
+        hazmatFlow.setCompanyId(currentUser.getCompanyId());
+        hazmatFlow.setNum(hazmat.getRemaining());
+        hazmatFlow.setCreateId(currentUser.getId());
+        hazmatFlowMapper.insert(hazmatFlow);
+        IdTableNameHandler.removeCurrentId();
+    }
+
     public void checkUserAllowed(HzHazmat hazmat,SysUser user) {
         if (user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) {
             throw new ApiException("管理员不能操作");
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductBasicServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductBasicServiceImpl.java
index 86c1b8e..c5f0ce9 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductBasicServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductBasicServiceImpl.java
@@ -1,18 +1,31 @@
 package com.gkhy.hazmat.system.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.hazmat.common.api.CommonPage;
 import com.gkhy.hazmat.common.constant.UserConstant;
 import com.gkhy.hazmat.common.domain.entity.SysUser;
+import com.gkhy.hazmat.common.enums.HazmatKindEnum;
+import com.gkhy.hazmat.common.enums.HazmatPackageEnum;
 import com.gkhy.hazmat.common.enums.UserTypeEnum;
+import com.gkhy.hazmat.common.excel.ProductBasicExcelData;
+import com.gkhy.hazmat.common.excel.ProductBasicExcelDataListener;
 import com.gkhy.hazmat.common.exception.ApiException;
 import com.gkhy.hazmat.common.utils.PageUtils;
 import com.gkhy.hazmat.common.utils.SecurityUtils;
+import com.gkhy.hazmat.common.utils.StringUtils;
 import com.gkhy.hazmat.system.domain.HzProductBasic;
 import com.gkhy.hazmat.system.mapper.HzProductBasicMapper;
 import com.gkhy.hazmat.system.service.HzProductBasicService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -113,4 +126,120 @@
         }
         return UserConstant.UNIQUE;
     }
+
+
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public Integer importExcel(MultipartFile file) throws IOException {
+        if(ObjectUtil.isEmpty(file)){
+            throw new ApiException("上传对象不能为空");
+        }
+        SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(null,currentUser);
+        List<ProductBasicExcelData> productExcelDataList = EasyExcel.read(file.getInputStream(), ProductBasicExcelData.class, new ProductBasicExcelDataListener()).sheet().doReadSync();
+        List<HzProductBasic> productBasicList=new ArrayList<>();
+
+        for(ProductBasicExcelData productBasicExcelData:productExcelDataList){
+            validateData(productBasicExcelData);
+            if (!checkProductSnUnique(new HzProductBasic().setProductSn(productBasicExcelData.getProductSn()).setCompanyId(currentUser.getCompanyId()))) {
+                throw new ApiException("序号"+productBasicExcelData.getIndex()+"产品编号已存在");
+            }
+            HzProductBasic productBasic=new HzProductBasic();
+            BeanUtils.copyProperties(productBasicExcelData,productBasic,new String[]{"kind","minPackage"});
+            Integer kind= HazmatKindEnum.getCodeByInfo(productBasicExcelData.getKind());
+            if(kind==null){
+                throw new ApiException("序号"+productBasicExcelData.getIndex()+"种类填写不正确");
+            }
+            Integer minPackage= HazmatPackageEnum.getCodeByInfo(productBasicExcelData.getMinPackage());
+            if(minPackage==null){
+                throw new ApiException("序号"+productBasicExcelData.getIndex()+"最小包装类型填写不正确");
+            }
+            productBasic.setKind(kind);
+            productBasic.setMinPackage(minPackage);
+            productBasic.setCompanyId(currentUser.getCompanyId());
+            productBasic.setCreateBy(currentUser.getUsername());
+            productBasicList.add(productBasic);
+        }
+        if(!productBasicList.isEmpty()){
+            if(productBasicList.size()>100){
+                int pageSize=100;
+                while (true){
+                    List<HzProductBasic> hazmatBasics=productBasicList.subList(0, Math.min(productBasicList.size(), pageSize));
+                    saveBatch(hazmatBasics);
+                    if(hazmatBasics.size()<pageSize){
+                        break;
+                    }
+                    productBasicList=productBasicList.subList(pageSize,productBasicList.size());
+                    if(productBasicList.isEmpty()){
+                        break;
+                    }
+                }
+            }else{
+                saveBatch(productBasicList);
+            }
+        }
+        return productBasicList.size();
+    }
+
+
+    public void validateData(ProductBasicExcelData productBasicExcelData){
+        if(StringUtils.isBlank(productBasicExcelData.getName())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"名称为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getProductSn())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"产品编码为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getKind())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"种类为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getCas())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"CAS为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getProductType())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"试剂类型为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getProductCharacter())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"危险性质为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getSupplier())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"供应商为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getManufacturer())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"厂家为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getProductFormat())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"规格为空");
+        }
+        if(ObjectUtil.isEmpty(productBasicExcelData.getMetering())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"包装数量为空");
+        }
+        if(StringUtils.isBlank(productBasicExcelData.getUnit())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"包装单位为空");
+        }
+        if(ObjectUtil.isEmpty(productBasicExcelData.getPrice())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"含税价格为空");
+        }
+        if(ObjectUtil.isEmpty(productBasicExcelData.getMinPackage())){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"最小包装类型为空");
+        }
+
+        if(ObjectUtil.isEmpty(productBasicExcelData.getMaxEntry())||productBasicExcelData.getMaxEntry()<1){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"单次录入最大数量为空或者小于0");
+        }
+
+        if(productBasicExcelData.getMetering().compareTo(BigDecimal.ZERO)<=0){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"包装数量小于0");
+        }
+
+        if(productBasicExcelData.getPrice().compareTo(BigDecimal.ZERO)<=0){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"含税价格小于0");
+        }
+
+        if(ObjectUtil.isNotEmpty(productBasicExcelData.getPerBox()) && productBasicExcelData.getPerBox()<=0){
+            throw new ApiException("序号"+productBasicExcelData.getIndex()+"每箱数量小于0");
+        }
+
+
+
+    }
 }
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductEntryRecordServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductEntryRecordServiceImpl.java
index 38d041e..ff9d8a7 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductEntryRecordServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzProductEntryRecordServiceImpl.java
@@ -15,14 +15,8 @@
 import com.gkhy.hazmat.common.utils.PageUtils;
 import com.gkhy.hazmat.common.utils.SecurityUtils;
 import com.gkhy.hazmat.common.utils.StringUtils;
-import com.gkhy.hazmat.system.domain.HzProduct;
-import com.gkhy.hazmat.system.domain.HzProductBasic;
-import com.gkhy.hazmat.system.domain.HzProductEntryRecord;
-import com.gkhy.hazmat.system.domain.HzProductWarehouseRecord;
-import com.gkhy.hazmat.system.mapper.HzProductBasicMapper;
-import com.gkhy.hazmat.system.mapper.HzProductEntryRecordMapper;
-import com.gkhy.hazmat.system.mapper.HzProductMapper;
-import com.gkhy.hazmat.system.mapper.HzProductWarehouseRecordMapper;
+import com.gkhy.hazmat.system.domain.*;
+import com.gkhy.hazmat.system.mapper.*;
 import com.gkhy.hazmat.system.service.HzProductEntryRecordService;
 import com.gkhy.hazmat.system.service.HzProductService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -56,6 +50,8 @@
     private HzProductWarehouseRecordMapper productWarehouseRecordMapper;
     @Autowired
     private CustomEventPublisher customEventPublisher;
+    @Autowired
+    private SysCompanyMapper companyMapper;
 
     @Override
     public CommonPage selectEntryRecordList(HzProductEntryRecord entryRecord) {
@@ -87,6 +83,9 @@
         if(productBasic==null){
             throw new ApiException("成品基础数据不存在");
         }
+        if(entryRecord.getNum()>productBasic.getMaxEntry()){
+            throw new ApiException("数量超过单次入库最大数量<"+productBasic.getMaxEntry()+">");
+        }
         entryRecord.setCompanyId(currentUser.getCompanyId());
         entryRecord.setCreateBy(currentUser.getUsername());
         checkUserAllowed(null,currentUser);
@@ -103,11 +102,17 @@
     }
 
     public void generateCode(HzProductEntryRecord entryRecord){
+        SysCompany company=companyMapper.selectById(entryRecord.getCompanyId());
+        String code=company.getCode();
+        if(StringUtils.isBlank(code)){
+            throw new ApiException("公司两位编码为空");
+        }
         String currentDate= DateUtil.format(new Date(), DatePattern.PURE_DATE_FORMAT);
         StringBuilder prefixBuilder=new StringBuilder().append(CodePrexEnum.GOOD.getCode())
+                .append(code)
                 .append(currentDate);
         HzProductEntryRecord per=baseMapper.selectLastEntryRecord(prefixBuilder.toString(),entryRecord.getCompanyId());
-        int startCode=0;
+        int startCode=1;
         int endCode=startCode+entryRecord.getNum()-1;
         if(per!=null){
             startCode=per.getEndCode()+1;
@@ -208,10 +213,18 @@
     public int updateEntryRecord(HzProductEntryRecord entryRecord) {
         SysUser currentUser = SecurityUtils.getLoginUser().getUser();
         checkUserAllowed(entryRecord,currentUser);
+        HzProductBasic productBasic=productBasicMapper.selectById(entryRecord.getBasicId());
+        if(productBasic==null){
+            throw new ApiException("成品基础数据不存在");
+        }
+        if(entryRecord.getNum()>productBasic.getMaxEntry()){
+            throw new ApiException("数量超过单次入库最大数量<"+productBasic.getMaxEntry()+">");
+        }
         HzProductEntryRecord existEr=baseMapper.selectById(entryRecord.getId());
         if(existEr.getState().equals(EntryStateEnum.ENTER.getCode())){
             throw new ApiException("已经入库,不能再修改");
         }
+
         entryRecord.setUpdateBy(currentUser.getUsername());
         int row=baseMapper.updateById(entryRecord);
         if(row<1){
diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/SysCompanyServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/SysCompanyServiceImpl.java
index 377ce1b..9116355 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/SysCompanyServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/SysCompanyServiceImpl.java
@@ -44,12 +44,15 @@
         if(!checkNameUnique(company)){
             throw new ApiException("公司名称已存在");
         }
+        if(!checkCodeUnique(company)){
+            throw new ApiException("公司编码已存在");
+        }
+        company.setCode(company.getCode().toUpperCase());
         company.setCreateBy(SecurityUtils.getUsername());
         int row= baseMapper.insert(company);
         if(row<1){
             throw new ApiException("新增公司失败");
         }
-
         return row;
     }
 
@@ -58,6 +61,10 @@
         if(!checkNameUnique(company)){
             throw new ApiException("公司名称已存在");
         }
+        if(!checkCodeUnique(company)){
+            throw new ApiException("公司编码已存在");
+        }
+        company.setCode(company.getCode().toUpperCase());
         company.setUpdateBy(SecurityUtils.getUsername());
         return baseMapper.updateById(company);
     }
@@ -76,4 +83,14 @@
         }
         return UserConstant.UNIQUE;
     }
+
+
+    public boolean checkCodeUnique(SysCompany company){
+        Long companyId=company.getId()==null?-1L:company.getId();
+        SysCompany com= baseMapper.checkCodeUnique(company.getCode());
+        if(com!=null&&com.getId().longValue()!=companyId.longValue()){
+            return UserConstant.NOT_UNIQUE;
+        }
+        return UserConstant.UNIQUE;
+    }
 }
diff --git a/hazmat-system/src/main/resources/mapper/system/HzEntryRecordMapper.xml b/hazmat-system/src/main/resources/mapper/system/HzEntryRecordMapper.xml
index b1224e6..11781d4 100644
--- a/hazmat-system/src/main/resources/mapper/system/HzEntryRecordMapper.xml
+++ b/hazmat-system/src/main/resources/mapper/system/HzEntryRecordMapper.xml
@@ -35,6 +35,7 @@
         <result property="metering"  column="basic_metering"  />
         <result property="unit"  column="basic_unit"  />
         <result property="productSn"  column="product_sn"  />
+        <result property="maxEntry"  column="max_entry"  />
     </resultMap>
 
     <resultMap id="wareResult" type="com.gkhy.hazmat.system.domain.HzWarehouse">
@@ -47,7 +48,7 @@
         select a.id, a.warehouse_id, a.num,a.batch_no,a.state,a.basic_id,a.company_id,a.start_code,a.end_code,a.code_prex,a.version, a.create_by,
                a.create_time, a.update_by, a.update_time, a.remark,
                b.id as basic_id,b.name as basic_name,b.cas as basic_cas,b.hazmat_type as basic_hazmat_type,b.hazmat_character as basic_hazmat_character,
-               b.supplier as basic_supplier,b.manufacturer as basic_manufacturer,b.metering as basic_metering,b.unit as basic_unit,b.product_sn,b.min_package as basic_min_package,
+               b.supplier as basic_supplier,b.manufacturer as basic_manufacturer,b.metering as basic_metering,b.unit as basic_unit,b.product_sn,b.min_package as basic_min_package,b.max_entry,
                c.id as warehouse_id,c.name as warehouse_name
         from hz_entry_record a
         left join hz_hazmat_basic b on b.id=a.basic_id
diff --git a/hazmat-system/src/main/resources/mapper/system/HzHazmatBasicMapper.xml b/hazmat-system/src/main/resources/mapper/system/HzHazmatBasicMapper.xml
index 3b29a0b..b598e3f 100644
--- a/hazmat-system/src/main/resources/mapper/system/HzHazmatBasicMapper.xml
+++ b/hazmat-system/src/main/resources/mapper/system/HzHazmatBasicMapper.xml
@@ -27,13 +27,14 @@
         <result property="updateBy"       column="update_by"       />
         <result property="updateTime"     column="update_time"     />
         <result property="remark"         column="remark"          />
+        <result property="maxEntry"         column="max_entry"          />
         <result property="companyName"         column="company_name"          />
     </resultMap>
 
     <sql id="selectHazmatBasicVo">
         select a.id, a.name, a.cas, a.hazmat_type,a.min_package, a.kind,a.hazmat_character,a.supplier,a.manufacturer,a.hazmat_format,a.metering,
                a.unit,a.price,a.per_box,a.safe_num,a.threshold,a.product_sn,a.company_id,a.version, a.create_by, a.create_time,
-               a.update_by, a.update_time, a.remark,b.name as company_name
+               a.update_by, a.update_time, a.remark,a.max_entry,b.name as company_name
         from hz_hazmat_basic a
         left join sys_company b on b.id=a.company_id
     </sql>
diff --git a/hazmat-system/src/main/resources/mapper/system/HzProductBasicMapper.xml b/hazmat-system/src/main/resources/mapper/system/HzProductBasicMapper.xml
index fe4fccf..c1493ec 100644
--- a/hazmat-system/src/main/resources/mapper/system/HzProductBasicMapper.xml
+++ b/hazmat-system/src/main/resources/mapper/system/HzProductBasicMapper.xml
@@ -25,12 +25,13 @@
         <result property="updateBy"       column="update_by"       />
         <result property="updateTime"     column="update_time"     />
         <result property="remark"         column="remark"          />
+        <result property="maxEntry"         column="max_entry"          />
         <result property="companyName"         column="company_name"          />
     </resultMap>
 
     <sql id="selectProductBasicVo">
         select a.id, a.name, a.cas, a.product_type, a.min_package,a.kind,a.product_character,a.supplier,a.manufacturer,a.product_format,a.metering,
-               a.unit,a.price,a.per_box,a.product_sn,a.company_id,a.version, a.create_by, a.create_time, a.update_by, a.update_time, a.remark,b.name as company_name
+               a.unit,a.price,a.per_box,a.product_sn,a.company_id,a.version, a.create_by, a.create_time, a.update_by, a.update_time, a.remark,a.max_entry,b.name as company_name
         from hz_product_basic a
         left join sys_company b on b.id=a.company_id
     </sql>
diff --git a/hazmat-system/src/main/resources/mapper/system/HzProductEntryRecordMapper.xml b/hazmat-system/src/main/resources/mapper/system/HzProductEntryRecordMapper.xml
index 10232c4..5675b3e 100644
--- a/hazmat-system/src/main/resources/mapper/system/HzProductEntryRecordMapper.xml
+++ b/hazmat-system/src/main/resources/mapper/system/HzProductEntryRecordMapper.xml
@@ -34,6 +34,7 @@
         <result property="metering"  column="basic_metering"  />
         <result property="unit"  column="basic_unit"  />
         <result property="productSn"  column="product_sn"  />
+        <result property="maxEntry"  column="max_entry"  />
     </resultMap>
 
     <resultMap id="wareResult" type="com.gkhy.hazmat.system.domain.HzWarehouse">
@@ -46,7 +47,7 @@
         select a.id, a.warehouse_id, a.num,a.batch_no,a.state,a.basic_id,a.company_id,a.start_code,a.end_code,a.code_prex,a.version, a.create_by,
                a.create_time, a.update_by, a.update_time, a.remark,
                b.id as basic_id,b.name as basic_name,b.cas as basic_cas,b.product_type as basic_product_type,b.product_character as basic_product_character,
-               b.supplier as basic_supplier,b.manufacturer as basic_manufacturer,b.metering as basic_metering,b.unit as basic_unit,b.product_sn,b.min_package as basic_min_package,
+               b.supplier as basic_supplier,b.manufacturer as basic_manufacturer,b.metering as basic_metering,b.unit as basic_unit,b.product_sn,b.min_package as basic_min_package,b.max_entry,
                c.id as warehouse_id,c.name as warehouse_name
         from hz_product_entry_record a
         left join hz_product_basic b on b.id=a.basic_id
diff --git a/hazmat-system/src/main/resources/mapper/system/SysCompanyMapper.xml b/hazmat-system/src/main/resources/mapper/system/SysCompanyMapper.xml
index d215de1..e32821c 100644
--- a/hazmat-system/src/main/resources/mapper/system/SysCompanyMapper.xml
+++ b/hazmat-system/src/main/resources/mapper/system/SysCompanyMapper.xml
@@ -7,6 +7,7 @@
         <result property="creditCode"     column="credit_code"     />
         <result property="major"  column="major"  />
         <result property="phone"         column="phone"          />
+        <result property="code"         column="code"          />
         <result property="delFlag"         column="del_flag"          />
         <result property="version"         column="version"          />
         <result property="createBy"       column="create_by"       />
@@ -18,7 +19,7 @@
     </resultMap>
 
     <sql id="selectCompanyVo">
-        select id, name, credit_code, major, phone,version, create_by, create_time, update_by, update_time, remark
+        select id, name, credit_code, major,code, phone,version, create_by, create_time, update_by, update_time, remark
         from sys_company
     </sql>
 
@@ -53,6 +54,10 @@
         select id,name from sys_company where name=#{name} and del_flag=0 limit 1
     </select>
 
+    <select id="checkCodeUnique" resultType="com.gkhy.hazmat.system.domain.SysCompany"
+            parameterType="java.lang.String">
+        select id,code from sys_company where code=#{code} and del_flag=0 limit 1
+    </select>
 
 
 </mapper>
diff --git a/hazmat-system/src/main/resources/mapper/system/SysDeptMapper.xml b/hazmat-system/src/main/resources/mapper/system/SysDeptMapper.xml
index 5e584c5..cafec6a 100644
--- a/hazmat-system/src/main/resources/mapper/system/SysDeptMapper.xml
+++ b/hazmat-system/src/main/resources/mapper/system/SysDeptMapper.xml
@@ -4,7 +4,7 @@
 
 
     <update id="updateDeptStatusNormal" parameterType="Long">
-        update sys_dept set status = '0' where id in
+        update sys_dept set status = 0 where id in
         <foreach collection="array" item="deptId" open="(" separator="," close=")">
             #{deptId}
         </foreach>
diff --git a/hazmat-system/src/main/resources/mapper/system/HzStatisticService.xml b/hazmat-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
similarity index 100%
rename from hazmat-system/src/main/resources/mapper/system/HzStatisticService.xml
rename to hazmat-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
diff --git a/hazmat-system/src/main/resources/mapper/system/SysUserMapper.xml b/hazmat-system/src/main/resources/mapper/system/SysUserMapper.xml
index 00ed8b1..fd1c267 100644
--- a/hazmat-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/hazmat-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -36,11 +36,11 @@
 
     <select id="getUserByUsername" resultMap="SysUserResult">
         select id,username,name,password,user_type,company_id,status,del_flag from sys_user
-        where username=#{username} limit 1
+        where username=#{username} and del_flag=0 limit 1
     </select>
 
     <select id="userList"  resultMap="SysUserResult">
-        select u.id,u.username,u.name,u.user_type,u.phone,u.company_id,u.depart_id,u.sex,u.status,u.del_flag,
+        select u.id,u.username,u.name,u.user_type,u.phone,u.company_id,u.depart_id,u.sex,u.status,u.del_flag,u.version,
                u.login_ip,u.login_date,u.create_by,u.create_time,u.remark,c.name as company_name,d.name as depart_name
         from sys_user u
         left join sys_company c on c.id=u.company_id
@@ -79,11 +79,11 @@
 
     <select id="getUserByPhone" resultMap="SysUserResult">
         select id,username,name,password,company_id,phone,status,del_flag from sys_user
-        where phone=#{phone} and del_flag=0
+        where phone=#{phone} and del_flag=0 limit 1
     </select>
 
     <select id="getUserById" resultMap="SysUserResult">
-        select u.id,u.username,u.user_type,u.name,u.phone,u.company_id,u.depart_id,u.status,u.sex,u.del_flag,c.name as company_name,d.name as depart_name
+        select u.id,u.username,u.user_type,u.name,u.phone,u.company_id,u.depart_id,u.status,u.sex,u.del_flag,u.version,c.name as company_name,d.name as depart_name
         from sys_user u
         left join sys_company c on c.id=u.company_id
         left join sys_dept d on d.id=u.depart_id
diff --git a/pom.xml b/pom.xml
index 4422549..bb86fd9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,7 @@
         <poi.version>5.2.3</poi.version>
         <pdfbox.version>2.0.27</pdfbox.version>
         <jaudiotagger.version>2.0.1</jaudiotagger.version>
+        <easyexcel.version>4.0.2</easyexcel.version>
     </properties>
     <dependencyManagement>
         <dependencies>
@@ -180,6 +181,12 @@
                 <version>${jaudiotagger.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>easyexcel</artifactId>
+                <version>${easyexcel.version}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 

--
Gitblit v1.9.2