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