From 5758b702aceacd76f2a1e1a63d848cd4948e99e1 Mon Sep 17 00:00:00 2001
From: 李宇 <986321569@qq.com>
Date: 星期五, 02 七月 2021 10:15:52 +0800
Subject: [PATCH] 导出试剂流向,修改个人领用查询

---
 src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml                     |   27 +++++
 src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java |   17 ++
 src/main/java/com/nanometer/smartlab/util/Constants.java                       |    2 
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java            |    8 +
 src/main/webapp/reagent_user_flow_info.xhtml                                   |   23 ++++
 src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java  |   25 ++++
 src/main/webapp/apply_mng_new.xhtml                                            |    6 -
 src/main/webapp/personal_use_info.xhtml                                        |    4 
 src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java                    |    2 
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java        |  130 ++++++++++++++++++++++++-
 10 files changed, 219 insertions(+), 25 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java b/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
index 2d8c5cb..03dd8aa 100644
--- a/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
@@ -52,6 +52,8 @@
 
 	private String containerCode;
 
+	private String operatestate;
+
 	public String getHouseName() {
 		return houseName;
 	}
@@ -105,10 +107,10 @@
 						Map<String, Object> filters) {
 					List<OpeUseFlow> list = null;
 					try {
-						int count = opeUseFlowService.getOpeUseFlowTotalCountByName(houseName,reagentId, reagentCode, containerCode,null, getUserId(),startDate,endDate);
+						int count = opeUseFlowService.getOpeUseFlowTotalCountByName(houseName,reagentId, reagentCode, containerCode,null, getUserId(),startDate,endDate,operatestate);
 						this.setRowCount(count);
 						if (count > 0) {
-							list = opeUseFlowService.getOpeUseFlowListByName(houseName,reagentId, reagentCode, containerCode,null, getUserId(),startDate,endDate, first, pageSize);
+							list = opeUseFlowService.getOpeUseFlowListByName(houseName,reagentId, reagentCode, containerCode,null, getUserId(),startDate,endDate, first, pageSize,operatestate);
 						}
 						selectedOne = null;
 					} catch (Exception e) {
@@ -138,6 +140,17 @@
 		}
 
 		return dataModel;
+	}
+
+	public void export2Excel() {
+
+		List<Map> list = opeUseFlowService.selectAll(houseName,reagentId, reagentCode, containerCode,getUserId(),startDate,endDate);
+		try{
+			boolean isexport = opeUseFlowService.export2Excel(list);
+		}catch (Exception e){
+			e.printStackTrace();
+			FacesUtils.warn("导出失败");
+		}
 	}
 
 	public String getReagentId() {
@@ -275,4 +288,12 @@
 	public void setSelectedOne(OpeUseFlow selectedOne) {
 		this.selectedOne = selectedOne;
 	}
+
+	public void setOperatestate(String operatestate) {
+		this.operatestate = operatestate;
+	}
+
+	public String getOperatestate(){
+		return operatestate;
+	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java b/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
index 6c0e9a5..fdc21d8 100644
--- a/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
@@ -323,16 +323,27 @@
 	}
 
 	public Date getStartTime() {
-		return startTime;
+		if (null == startTime){
+			Date now = new Date();
+			Calendar cal = Calendar.getInstance();
+			cal.setTime(now);
+			cal.add(Calendar.DATE, -7);
+			return cal.getTime();
+		}else {
+			return startTime;
+		}
 	}
 
 	public void setStartTime(Date startTime) {
 		this.startTime = startTime;
 	}
 
-
 	public Date getEndTime() {
-		return endTime;
+		if (null == endTime){
+			return new Date();
+		}else {
+			return endTime;
+		}
 	}
 
 	public void setEndTime(Date endTime) {
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
index 087f536..a381280 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
@@ -50,4 +50,6 @@
     OpeUseFlow selectById(@Param("id") String id);
 
     OpeUseFlow selectByReceiptNumber(Map params);
+
+    List<Map> selectAll(Map params);
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
index d490fe9..4f0ff72 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
@@ -85,6 +85,9 @@
     <if test="endDate != null and endDate !=''">
         and oa.create_time &lt;= #{endDate}
     </if>
+    <if test="operatestate != null and operatestate !=''">
+        and bm1.id = #{operatestate}
+    </if>
     <if test="containerCode != null and containerCode !=''">
         and wc.container_code = #{containerCode}
         or lc.container_code =#{containerCode}
@@ -361,6 +364,30 @@
         group by ouf.receipt_number
         ORDER BY ouf.create_time desc
     </select>
+    <select id="selectAll" resultType="java.util.Map">
+        select
+        oa.reagent_code as reagentCode,
+        sr.`name` as reagentName,
+        CASE WHEN wc.container_code is NULL THEN lc.container_code ELSE wc.container_code END as laboratoryContainerCode,
+        bm1.meta_value as operatestateName,
+        CASE WHEN bm1.meta_value = '仓库入库' or bm1.meta_value='仓库领用' THEN NULL ELSE oa.remainder END as remainder,
+        CASE WHEN w.name is NULL THEN l.name ELSE w.name END as warehouseContainerName,
+        su.name as userName,
+        oa.create_time as createTime
+        from ope_use_flow as oa
+        left join ope_reagent_status ors on ors.reagent_code = oa.reagent_code
+        left join sys_reagent sr on ors.reagent_id = sr.id
+        left join sys_supplier as ss on sr.supplier_id = ss.id
+        left join sys_user as su on oa.user_id = su.id
+        left join sys_warehouse_container wc on wc.id = oa.container_id
+        left join sys_warehouse w on w.id = wc.warehouse_id
+        left join sys_laboratory_container lc on lc.id = oa.container_id
+        left join sys_laboratory l on l.id = lc.laboratory_id
+        left join base_meta bm1 on bm1.id = oa.operatestate
+        where oa.valid_flag = 1
+        <include refid="queryWhereSql"/>
+        order by oa.create_time desc
+    </select>
     <insert id="insertOpeUseFlow" parameterType="com.nanometer.smartlab.entity.OpeUseFlow">
     insert into ope_use_flow(id, reagent_code, status, house_id, container_id, user_id, remainder, place, store_type, valid_flag, create_time, realstatus, operatestate
     <if test="receiptNumber != null">
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
index d88b180..2e97dae 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
@@ -24,9 +24,9 @@
 	int getOpeUseFlowTotalCount(String reagentId, String reagentCode, Integer status, String userId);
 
 	List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId, Date startDate,Date endDate,
-			Integer first, Integer pageSize);
+			Integer first, Integer pageSize,String operatestate);
 
-	int getOpeUseFlowTotalCountByName(String houseName, String reagentId, String reagentCode,String containerCode, Integer status, String userId, Date startDate,Date endDate);
+	int getOpeUseFlowTotalCountByName(String houseName, String reagentId, String reagentCode,String containerCode, Integer status, String userId, Date startDate,Date endDate,String operatestate);
 
 	boolean update(OpeUseFlow opeUseFlow);
 
@@ -63,4 +63,8 @@
     OpeUseFlow selectById(String rowKey);
 
 	OpeUseFlow selectByReceiptNumber(String receiptNumber,String userId);
+
+    List<Map> selectAll(String houseName, String reagentId, String reagentCode, String containerCode, String userId, Date startDate, Date endDate);
+
+	boolean export2Excel(List<Map> list) throws Exception;
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
index 31e9bad..b0a143e 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
@@ -13,6 +13,7 @@
 import com.nanometer.smartlab.entity.dto.PersonUseDetail;
 import com.nanometer.smartlab.entity.enumtype.OperateStatus;
 import com.nanometer.smartlab.util.Constants;
+import com.nanometer.smartlab.util.ExcelUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.apache.log4j.Logger;
@@ -134,7 +135,7 @@
 
     @Transactional(propagation = Propagation.REQUIRED)
     public List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,
-                                                    Date startDate,Date endDate,Integer first, Integer pageSize) {
+                                                    Date startDate,Date endDate,Integer first, Integer pageSize,String operatestate) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
 
@@ -173,6 +174,7 @@
 
             params.put("status", status);
             params.put("houseName", houseName);
+            params.put("operatestate", operatestate);
             params.put("containerCode", containerCode);
             addParamByUserId(userId, params);
 
@@ -187,7 +189,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public int getOpeUseFlowTotalCountByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,Date startDate,Date endDate) {
+    public int getOpeUseFlowTotalCountByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,Date startDate,Date endDate,String operatestate) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("reagentName", reagentId);
@@ -224,6 +226,7 @@
                 params.put("endDate",sdfend.format(now));
             }
 
+            params.put("operatestate", operatestate);
             params.put("houseName", houseName);
             params.put("containerCode", containerCode);
             addParamByUserId(userId, params);
@@ -452,12 +455,39 @@
     }
 
     @Override
-    public int getPersonalUseInfoCount(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber,
+    public int getPersonalUseInfoCount(String reagentCode,String userId, Date startDate, Date endDate, String receiptNumber,
                                        String department, String project,String applyPerson,String reagentName) {
         Map<String,Object> params = new HashMap<>();
+
+        SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+        SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+        Date now = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(now);
+        cal.add(Calendar.DATE, -7);
+        Date startTime = cal.getTime();
+
+        if (null != startDate){
+            try {
+                params.put("startDate",sdfstart.format(startDate));
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }else {
+            params.put("startDate",sdfstart.format(startTime));
+        }
+
+        if (null != endDate){
+            try {
+                params.put("endDate",sdfend.format(endDate));
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }else {
+            params.put("endDate",sdfend.format(now));
+        }
+
         params.put("userId", userId);
-        params.put("startTime", startTime);
-        params.put("endTime", endTime);
         params.put("receiptNumber", receiptNumber);
         params.put("department", department);
         params.put("project", project);
@@ -480,12 +510,35 @@
     }
 
     @Override
-    public List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber,
+    public List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,String userId, Date startDate, Date endDate, String receiptNumber,
                                                    String department, String project,String applyPerson,String reagentName, int first, int pageSize) {
         Map<String, Object> params = new HashMap<>();
+        SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+        SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+        Date now = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(now);
+        cal.add(Calendar.DATE, -7);
+        Date startTime = cal.getTime();
+        if (null != startDate){
+            try {
+                params.put("startDate",sdfstart.format(startDate));
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }else {
+            params.put("startDate",sdfstart.format(startTime));
+        }
+        if (null != endDate){
+            try {
+                params.put("endDate",sdfend.format(endDate));
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }else {
+            params.put("endDate",sdfend.format(now));
+        }
         params.put("userId", userId);
-        params.put("startTime", startTime);
-        params.put("endTime", endTime);
         params.put("receiptNumber", receiptNumber);
         params.put("department", department);
         params.put("project", project);
@@ -599,4 +652,65 @@
         return opeUseFlowDao.selectByReceiptNumber(params);
     }
 
+    @Override
+    public List<Map> selectAll(String houseName, String reagentId, String reagentCode, String containerCode, String userId, Date startDate, Date endDate) {
+        try {
+            Map<String, Object> params = new HashMap<String, Object>();
+
+            params.put("reagentName", reagentId);
+            if (StringUtils.isNotBlank(reagentCode)) {
+                params.put("reagentCode", "%" + reagentCode + "%");
+            }
+            SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+            SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+            Date now = new Date();
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(now);
+            cal.add(Calendar.DATE, -7);
+            Date startTime = cal.getTime();
+
+            if (null != startDate){
+                try {
+                    params.put("startDate",sdfstart.format(startDate));
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }else {
+                params.put("startDate",sdfstart.format(startTime));
+            }
+            if (null != endDate){
+                try {
+                    params.put("endDate",sdfend.format(endDate));
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }else {
+                params.put("endDate",sdfend.format(now));
+            }
+            params.put("houseName", houseName);
+            params.put("containerCode", containerCode);
+            addParamByUserId(userId, params);
+            return opeUseFlowDao.selectAll(params);
+        } catch (DataAccessException e) {
+            logger.error(e.getMessage(), e);
+            throw new BusinessException(ExceptionEnumCode.DB_ERR,
+                    MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
+        }
+    }
+
+    @Override
+    public boolean export2Excel(List<Map> list) throws Exception {
+        Map<String,String> map = new LinkedHashMap<>();
+        map.put("reagentCode", "试剂条形码");
+        map.put("reagentName", "试剂名称");
+        map.put("laboratoryContainerCode", "柜号");
+        map.put("operatestateName", "操作状态");
+        map.put("remainder", "残存量");
+        map.put("userName", "持有者");
+        map.put("createTime", "更新时间");
+        map.put("warehouseContainerName", "场所名");
+        ExcelUtils.export2Excel(list,"试剂流向追踪列表",map);
+        return true;
+    }
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/util/Constants.java b/src/main/java/com/nanometer/smartlab/util/Constants.java
index 026ea58..e297ba7 100644
--- a/src/main/java/com/nanometer/smartlab/util/Constants.java
+++ b/src/main/java/com/nanometer/smartlab/util/Constants.java
@@ -72,6 +72,7 @@
     public static final String BASE_META_GROUP_CONTRILLER_TYPE = "controller_type";
     public static final String SEQ_APPLY_CODE = "apply_code_seq";
     public static final String SEQ_ORDER_CODE = "order_code_seq";
+    public static final String OPERATE_STATUS = "operate_status";
 
     public int getACTION_ADD() {
         return ACTION_ADD;
@@ -105,4 +106,5 @@
     public String getBASE_META_GROUP_PROJECT_NUM() {
         return BASE_META_GROUP_PROJECT_NUM;
     }
+    public String getOPERATE_STATUS() { return OPERATE_STATUS; }
 }
diff --git a/src/main/webapp/apply_mng_new.xhtml b/src/main/webapp/apply_mng_new.xhtml
index 063b66f..b169d24 100644
--- a/src/main/webapp/apply_mng_new.xhtml
+++ b/src/main/webapp/apply_mng_new.xhtml
@@ -297,12 +297,6 @@
                         <p:commandLink styleClass="search reagentSearch" process="@form" update="@form"></p:commandLink>
                     </p:panelGrid>
 
-                    <p:commandButton value="新增试剂" process="@this"
-                                     actionListener="#{applyMngController.onReagentNewBtnClick}"
-                                     oncomplete="PF('dialog').show();"
-                                     update="@parent:@parent:@parent:dialog"
-                                     styleClass="new-btn" style="position: absolute;display: none;right: 42px;top:62px"></p:commandButton>
-
                     <p:dataTable id="applyMngNewReagentDataTable" styleClass="data-table" style="margin-left: 2px"
                                  resizableColumns="true" paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
                                  lazy="true" value="#{applyMngController.reagentDataModel}" var="row" rowKey="#{row.id}"
diff --git a/src/main/webapp/personal_use_info.xhtml b/src/main/webapp/personal_use_info.xhtml
index ef84dc5..327e4e1 100644
--- a/src/main/webapp/personal_use_info.xhtml
+++ b/src/main/webapp/personal_use_info.xhtml
@@ -66,9 +66,9 @@
 					<p:inputText value="#{personalUseInfoController.department}"/>
 
 					<p:outputLabel for="startTime" value="开始时间:" />
-					<p:calendar id="startTime" value="#{personalUseInfoController.startTime}" pattern="yyyy-MM-dd HH:mm" />
+					<p:calendar id="startTime" value="#{personalUseInfoController.startTime}" />
 					<p:outputLabel for="endTime" value="截止时间:" />
-					<p:calendar id="endTime" value="#{personalUseInfoController.endTime}" pattern="yyyy-MM-dd HH:mm" />
+					<p:calendar id="endTime" value="#{personalUseInfoController.endTime}" />
 
 					<p:commandLink styleClass="search" process="@form" update="@form"/>
 
diff --git a/src/main/webapp/reagent_user_flow_info.xhtml b/src/main/webapp/reagent_user_flow_info.xhtml
index a868bfc..835ed83 100644
--- a/src/main/webapp/reagent_user_flow_info.xhtml
+++ b/src/main/webapp/reagent_user_flow_info.xhtml
@@ -15,7 +15,15 @@
 			<p:outputLabel styleClass="title" value="试剂流向追踪"></p:outputLabel>
 
 			<p:panel styleClass="center-header">
-				<p:panelGrid styleClass="filter" columns="13">
+				<p:panelGrid styleClass="filter" columns="16">
+					<style type="text/css">
+						.ui-selectonemenu.ui-widget.ui-state-default.ui-corner-all{
+							min-width: 60px !important;
+						}
+						.ui-selectonemenu-items.ui-selectonemenu-list.ui-widget-content.ui-widget.ui-corner-all.ui-helper-reset{
+							width: 77px !important;
+						}
+					</style>
 					<p:outputLabel value="开始时间:"></p:outputLabel>
 					<p:calendar value="#{opeUseFlowInfoController.startDate}"></p:calendar>
 
@@ -33,6 +41,15 @@
 
 					<p:outputLabel value="场所名:"></p:outputLabel>
 					<p:inputText value="#{opeUseFlowInfoController.houseName}"></p:inputText>
+
+					<p:outputLabel value="操作状态:"></p:outputLabel>
+					<p:selectOneMenu value="#{opeUseFlowInfoController.operatestate}" style="width: 60px;">
+						<f:selectItem itemLabel="全部" itemValue="#{null}" noSelectionOption="true"></f:selectItem>
+						<f:selectItems value="#{baseMetaService.getBaseMetaList(constants.OPERATE_STATUS)}"
+									   var="item" itemLabel="#{item.metaValue}" itemValue="#{item.id}"></f:selectItems>
+					</p:selectOneMenu>
+
+
 					<p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
 				</p:panelGrid>
 			</p:panel>
@@ -40,8 +57,10 @@
 
 
 		<p:panel styleClass="center-body">
-			<p:panelGrid columns="1" styleClass="btn">
+			<p:panelGrid columns="2" styleClass="btn">
 				<p:commandButton value="报废" styleClass="del-btn"  ajax="false" actionListener="#{opeUseFlowInfoController.scrapReagent}" />
+				<p:commandButton value="导出" styleClass="new-btn"  ajax="false" id="exportButton" widgetVar="exportButton"
+								 actionListener="#{opeUseFlowInfoController.export2Excel}" />
 			</p:panelGrid>
 			<p:dataTable id="reagentUseFlowInfoDataTable" styleClass="data-table"
 				paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"

--
Gitblit v1.9.2