From 82f0f5e82cf0ff88af237ba5929dff7a2bdc4d46 Mon Sep 17 00:00:00 2001
From: lyfO_o <764716047@qq.com>
Date: 星期一, 21 六月 2021 14:52:52 +0800
Subject: [PATCH] 申购导入和导入模板

---
 src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java |   18 +++
 src/main/java/com/nanometer/smartlab/service/OpeApplyService.java       |    8 
 src/main/webapp/resources/template/申购导入模板.xlsx                          |    0 
 src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml              |   39 +++++++
 src/main/java/com/nanometer/smartlab/service/SysUserService.java        |    1 
 src/main/webapp/apply_mng.xhtml                                         |   16 +++
 src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java   |  123 +++++++++++++++++++++++-
 src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java    |    7 +
 src/main/java/com/nanometer/smartlab/dao/SysUserDao.java                |    1 
 src/main/java/com/nanometer/smartlab/service/SysReagentService.java     |    6 +
 src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml                 |    4 
 src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java             |    7 +
 src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java |   14 ++
 13 files changed, 234 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java b/src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java
index ff14dbe..11315c3 100644
--- a/src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/ApplyMngController.java
@@ -5,6 +5,7 @@
 import com.nanometer.smartlab.entity.SysReagent;
 import com.nanometer.smartlab.entity.SysUser;
 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;
@@ -15,6 +16,7 @@
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.primefaces.context.RequestContext;
+import org.primefaces.event.FileUploadEvent;
 import org.primefaces.event.SelectEvent;
 import org.primefaces.event.TabChangeEvent;
 import org.primefaces.model.LazyDataModel;
@@ -297,6 +299,22 @@
         }
 
     }
+
+
+    public void uploadApply(FileUploadEvent event){
+        try {
+            opeApplyService.importApply(event, getUser());
+            FacesUtils.info("导入成功");
+        } catch (BusinessException e) {
+            FacesUtils.warn(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            FacesUtils.warn("导入失败,请联系管理员");
+        }
+
+    }
+
+
     public  HSSFWorkbook exportExcelNew(List<String> headerList, List<OpeApply> dataList) {
         HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
 
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java
index a0ca110..5b569c2 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java
@@ -41,4 +41,11 @@
     List<SysReagent> selectReagentSafetyNum();
 
     void updateSafetyNum(@Param("id") String id, @Param("safetynum") Integer safetynum);
+
+    /**
+    * @Description: 根据Map里的详细传参 查询试剂个数
+    * @date 2021/6/21 9:07
+    */
+    List<SysReagent> countReagentByDetail(@Param("params") Map detail);
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
index 9823b84..26e374d 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml
@@ -471,4 +471,43 @@
     set safetynum = #{safetynum}
     where id = #{id}
   </update>
+
+  <select id="countReagentByDetail" resultMap="SysReagent">
+    select
+    *
+    from sys_reagent as sr
+    left join base_meta bm2 on sr.reagent_character = bm2.id
+    left join base_meta bm3 on sr.main_metering = bm3.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 sys_supplier supply on sr.supplier_id = supply.id
+
+    <where>
+      <if test="params.reagent_unit != null and params.reagent_unit != ''">
+        and UPPER(bm4.meta_value) = UPPER(#{params.reagent_unit})
+      </if>
+      <if test="params.main_metering != null and params.main_metering != ''">
+        and UPPER(bm3.meta_value) = UPPER(#{params.main_metering})
+      </if>
+      <if test="params.product_home != null and params.product_home != ''">
+        and bm5.meta_value = #{params.product_home}
+      </if>
+      <if test="params.reagent_character != null and params.reagent_character != ''">
+        and bm2.meta_value = #{params.reagent_character}
+      </if>
+      <if test="params.cas != null and params.cas != ''">
+        and sr.cas = #{params.cas}
+      </if>
+      <if test="params.product_sn != null and params.product_sn != ''">
+        and sr.product_sn = #{params.product_sn}
+      </if>
+      <if test="params.name != null and params.name != ''">
+        and sr.name = #{params.name}
+      </if>
+    </where>
+
+
+
+
+  </select>
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java
index c0bd43b..c9591fe 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java
@@ -63,4 +63,5 @@
 
     List<String> getLibrarianEmail();
 
+    List<SysUser> getUserByName(String approveUserName);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
index 0bfab6b..f5da893 100644
--- a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml
@@ -387,6 +387,10 @@
         and su.email is not null
         and su.email != ''
     </select>
+    <select id="getUserByName" resultMap="SysUser">
+    select * from sys_user
+    where name = #{name} and valid_flag = 1
+    </select>
     <update id="updateUserPointBySelective" parameterType="java.util.Map">
     update sys_user set point=#{point}
     <where>
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
index c2d18cd..dad4c1d 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyService.java
@@ -1,11 +1,9 @@
 package com.nanometer.smartlab.service;
 
-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 com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.exception.BusinessException;
+import org.primefaces.event.FileUploadEvent;
 
 import java.math.BigDecimal;
 import java.sql.Timestamp;
@@ -73,4 +71,6 @@
     void orderInputWarehouse(List<OpeApplyReserve> opeApplyList,String consigneeId,Timestamp arrivalTime) throws BusinessException,Exception;
 
     void btUpdateApplyAndOrder(List<OpeApply> opeList);
+
+    void importApply(FileUploadEvent event, SysUser user);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
index 4da1d67..dd9d9fc 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
@@ -1,12 +1,11 @@
 package com.nanometer.smartlab.service;
 
 import com.nanometer.smartlab.dao.OpeApplyDao;
-import com.nanometer.smartlab.entity.OpeApply;
-import com.nanometer.smartlab.entity.OpeApplyReserve;
-import com.nanometer.smartlab.entity.OpeOrder;
-import com.nanometer.smartlab.entity.SysUser;
+import com.nanometer.smartlab.dao.SysReagentDao;
+import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
 import com.nanometer.smartlab.entity.enumtype.SeeFlag;
+import com.nanometer.smartlab.entity.enumtype.ValidFlag;
 import com.nanometer.smartlab.exception.AlarmCode;
 import com.nanometer.smartlab.exception.AlarmException;
 import com.nanometer.smartlab.exception.BusinessException;
@@ -15,6 +14,13 @@
 import com.nanometer.smartlab.util.MessageUtil;
 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;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.primefaces.event.FileUploadEvent;
+import org.primefaces.model.UploadedFile;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.DataIntegrityViolationException;
@@ -25,6 +31,8 @@
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.util.ArrayList;
@@ -51,7 +59,11 @@
     @Lazy
     @Resource
     OpeWarehouseReserveService opeWarehouseReserveService;
-
+    @Lazy
+    @Resource
+    SysReagentService sysReagentService;
+    @Resource
+    SysSequenceService sysSequenceService;
 	@Resource
 	private SysUserService sysUserService;
 
@@ -733,4 +745,105 @@
 
     }
 
+    @Override
+    @Transactional
+    public void importApply(FileUploadEvent event,SysUser user) {
+
+        try {
+
+            UploadedFile file = event.getFile();
+            InputStream is = file.getInputstream();
+            boolean isExcel2003 = true;
+            if (file.getFileName().matches("^.+\\.(?i)(xlsx)$")) {
+                isExcel2003 = false;
+            }
+            Workbook wb = null;
+            if (isExcel2003) {
+                wb = new HSSFWorkbook(is);
+            } else {
+                wb = new XSSFWorkbook(is);
+            }
+            Sheet sheet = wb.getSheetAt(0);
+            int totalRows = sheet.getPhysicalNumberOfRows();
+            ArrayList<OpeApply> adds = new ArrayList<>();
+            Row row = null;
+            int totalCells = 0;
+            for (int i = 1; i < totalRows; i++) {
+                List<String> valuesList = new ArrayList<String>();
+                row = sheet.getRow(i);
+
+                totalCells = row.getPhysicalNumberOfCells();
+
+                for (int t = 0; t < totalCells; t++) {
+                    String cellInfo = "";
+
+                    if (row.getCell(t) != null) {
+                        if (row.getCell(t).getCellTypeEnum().toString().equals("NUMERIC")) {
+                            cellInfo = String.valueOf(row.getCell(t).getNumericCellValue());
+                        }else{
+                        cellInfo = row.getCell(t).getStringCellValue();
+                        }
+                    }
+                    valuesList.add(cellInfo);
+                }
+
+                Map<String,Object> detail =  new HashMap<>();
+                detail.put("name", valuesList.get(0));
+                detail.put("cas", valuesList.get(1));
+                detail.put("product_sn", valuesList.get(2));
+                detail.put("main_metering", valuesList.get(3));
+                detail.put("reagent_unit", valuesList.get(4));
+                detail.put("reagent_character", valuesList.get(5));
+                detail.put("product_home", valuesList.get(6));
+                SysReagent sysReagent = sysReagentService.getReagentByDetail(detail);
+                if (sysReagent == null)  throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, i+"行:试剂不存在或者有多条,导入失败");
+
+                //申购数量
+                Integer num =  new Double(valuesList.get(7)).intValue();
+                if (num < 1) throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, i+"行:试剂申购数量不合法,导入失败");
+                //课题组
+                String objective = valuesList.get(8);
+                //选择的审批人姓名
+                String approveUserName = valuesList.get(9);
+                //根据姓名获取用户信息的id
+                SysUser approveUser = sysUserService.getUserByName(approveUserName);
+                if (approveUser == null)  throw new BusinessException(ExceptionEnumCode.PARAM_NO_EXIST, i+"行:审批人不存在或者审批人姓名存在重复,导入失败");
+
+                OpeApply opeApply = new OpeApply();
+                opeApply.setId(IDUtils.uuid());
+                opeApply.setValidFlag(ValidFlag.VALID);
+                opeApply.setStatus(ApplyStatus.PENDING_APPROVAL);
+                opeApply.setApplyCode(sysSequenceService.getApplyCode());
+                //设置试剂id
+                opeApply.setReagent(sysReagent);
+                //价格
+                opeApply.setApplyPrice(sysReagent.getPrice());
+                //申购数量
+                opeApply.setNum(num);
+                //申购人
+                opeApply.setApplyUserId(user.getId());
+                //选择的审批人
+                opeApply.setApproveUserId(approveUser.getId());
+                //选择的课题组信息
+                opeApply.setObjective(objective);
+
+                adds.add(opeApply);
+
+            }
+
+            if (adds.size() > 0) {
+                opeApplyDao.insertOpeApplyList(adds);
+            }
+
+
+
+
+
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
index b259e92..513147b 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java
@@ -43,4 +43,10 @@
 
     void updateSafetyNum(SysReagent sysReagent);
 
+    /**
+    * @Description: 根据detail的参数获取试剂id
+    * @date 2021/6/21 9:42
+    */
+    SysReagent getReagentByDetail(Map<String, Object> detail);
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
index 82d0f3d..e69e1d9 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java
@@ -169,6 +169,20 @@
     }
 
 
+    /**
+    * @Description: 根据detail的信息获取试剂的id
+    * @date 2021/6/21 9:45
+    */
+    @Override
+    public SysReagent getReagentByDetail(Map<String, Object> detail) {
+        List<SysReagent> reagentIds = sysReagentDao.countReagentByDetail(detail);
+        if (reagentIds.size() != 1) {
+            return null;
+        }
+        return reagentIds.get(0);
+    }
+
+
     @Transactional(propagation = Propagation.REQUIRED)
     public int getSysReagentTotalCount(String name, String cas, String supplierId,Integer type) {
         try {
diff --git a/src/main/java/com/nanometer/smartlab/service/SysUserService.java b/src/main/java/com/nanometer/smartlab/service/SysUserService.java
index 861ba03..325fd7e 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysUserService.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysUserService.java
@@ -55,4 +55,5 @@
 
     List<String> getLibrarianEmail();
 
+    SysUser getUserByName(String approveUserName);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
index 021fbca..aa11981 100644
--- a/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
@@ -427,5 +427,12 @@
         return sysUserDao.getLibrarianEmail();
     }
 
+    @Override
+    public SysUser getUserByName(String approveUserName) {
+        List<SysUser> users = sysUserDao.getUserByName(approveUserName);
+        if (users.size() != 1) return  null;
+        return users.get(0);
+    }
+
 
 }
diff --git a/src/main/webapp/apply_mng.xhtml b/src/main/webapp/apply_mng.xhtml
index 813cfd8..9dd4ec6 100644
--- a/src/main/webapp/apply_mng.xhtml
+++ b/src/main/webapp/apply_mng.xhtml
@@ -46,7 +46,7 @@
             </p:panelGrid>
         </p:panel>
         <p:panel styleClass="center-body">
-            <p:panelGrid columns="5" styleClass="btn">
+            <p:panelGrid columns="7" styleClass="btn">
                 <p:commandButton value="申购" styleClass="new-btn"
                                  process="@this"
                                  actionListener="#{applyMngController.onNewBtnClick}"
@@ -69,7 +69,21 @@
                 </p:commandButton>
                 <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:panelGrid>
+            <script type="text/javascript">
+                function importApply(){
+                    $("#applyMngForm\\:importApplyBtn_input").click();
+                }
+            </script>
+            <div style="display: none" id='importDv'>
+                <p:fileUpload fileUploadListener="#{applyMngController.uploadApply}"
+                              dragDropSupport="false" id="importApplyBtn"  label="导入"
+                              update="@form" auto="true" sizeLimit="5000000"
+                              mode="advanced"/>
+            </div>
 
             <p:dataTable id="applyMngDataTable" styleClass="data-table" resizableColumns="true"
                          paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
diff --git "a/src/main/webapp/resources/template/\347\224\263\350\264\255\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/src/main/webapp/resources/template/\347\224\263\350\264\255\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
new file mode 100644
index 0000000..c6ce4ca
--- /dev/null
+++ "b/src/main/webapp/resources/template/\347\224\263\350\264\255\345\257\274\345\205\245\346\250\241\346\235\277.xlsx"
Binary files differ

--
Gitblit v1.9.2