From 1116c716786ef8c0ca2075d403b22483a36e98b6 Mon Sep 17 00:00:00 2001
From: gdg <764716047@qq.com>
Date: 星期四, 28 一月 2021 14:28:46 +0800
Subject: [PATCH] 个人领用

---
 src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml                     |  107 +++++++
 src/main/java/com/nanometer/smartlab/entity/dto/PersonUseDetail.java           |   98 +++++++
 src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java |  182 ++++++++++++
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java            |    9 
 src/main/webapp/personal_use_info.xhtml                                        |  278 ++++++++++++++++---
 src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java                    |   48 +++
 src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java                    |    7 
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java        |   61 ++++
 8 files changed, 736 insertions(+), 54 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java b/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
index 0b1b469..bd1da35 100644
--- a/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/PersonalUseInfoController.java
@@ -1,16 +1,22 @@
 package com.nanometer.smartlab.controller;
 
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 import javax.annotation.Resource;
 
+import com.nanometer.smartlab.entity.OpeUseFlow;
+import com.nanometer.smartlab.entity.SysLaboratory;
+import com.nanometer.smartlab.entity.dto.ApplyListDto;
+import com.nanometer.smartlab.entity.dto.PersonUseDetail;
+import com.nanometer.smartlab.service.SysLaboratoryService;
 import com.nanometer.smartlab.util.FacesUtils;
+import com.nanometer.smartlab.util.Utils;
 import org.apache.log4j.Logger;
+import org.primefaces.context.RequestContext;
 import org.primefaces.model.LazyDataModel;
 import org.primefaces.model.SortOrder;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Controller;
 
@@ -38,6 +44,10 @@
 
 	@Resource
 	private SysReagentService sysReagentService;
+	@Resource
+	private SysLaboratoryService sysLaboratoryService;
+	@Value("${institute.name}")
+	String instituteName;
 
 	/**
 	 * 数据源
@@ -48,6 +58,13 @@
 	private String applyPerson;
 	private Date startTime;
 	private Date endTime;
+	private String project;
+	private String department;
+	private String receiptNumber;
+	private LazyDataModel<OpeUseFlow> dataModel2;
+	private OpeUseFlow selectOne;
+	private List<PersonUseDetail> personUseDetail;
+	private Hashtable<String,Object> printTable;
 
 	private List<OpeReagentStatus> selectedList;
 	private List<SysReagent> reagentSelectList;
@@ -109,7 +126,75 @@
 
 
 	}
+	/**
+	* 生成领用单
+	*/
 
+	public void generateReceipt() {
+		if (this.selectOne == null) {
+			FacesUtils.warn("请选择数据");
+			return;
+		}
+
+		printTable = new Hashtable<>();
+		printTable.put("head", instituteName);
+		printTable.put("title", "领用单");
+		printTable.put("applyPerson", selectOne.getUserName());
+		printTable.put("department", selectOne.getDepartment());
+		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+		printTable.put("date", dateFormat.format(selectOne.getCreateTime()));
+		printTable.put("phone", selectOne.getPhone());
+		printTable.put("receiptNumber", selectOne.getReceiptNumber());
+		printTable.put("project", selectOne.getProject());
+		SysLaboratory sysLaboratory = sysLaboratoryService.getSysLaboratory(selectOne.getHouseId());
+		printTable.put("lab", sysLaboratory.getName());
+		//整理数据
+		List<PersonUseDetail> applyInfo = opeUseFlowService.getApplyInfo(selectOne.getReceiptNumber());
+		assert applyInfo.size() > 0;
+		List<ApplyListDto> applyList = new ArrayList<>();
+		Map<String, Integer> map = new HashMap<>();
+		for (PersonUseDetail pud : applyInfo) {
+			if (map.containsKey(pud.getReagentId())) {
+				map.put(pud.getReagentId(), map.get(pud.getReagentId()) + 1);
+			}else{
+				map.put(pud.getReagentId(), 1);
+			}
+		}
+		int sum = 0;
+		for (Map.Entry<String,Integer> entry : map.entrySet()) {
+			ApplyListDto apply = new ApplyListDto();
+			for (PersonUseDetail pud : applyInfo) {
+				if (entry.getKey().equals(pud.getReagentId())) {
+					apply.setControlProducts(pud.getControlProducts());
+					apply.setMainMetering(pud.getPerInfo());
+					apply.setNum(entry.getValue().toString());
+					apply.setProductCode(pud.getProductSn());
+					apply.setProductName(pud.getReagentName());
+					apply.setReagentFormat(pud.getReagentFormat());
+					applyList.add(apply);
+					sum += entry.getValue();
+					break;
+				}
+			}
+		}
+
+		applyList.add(new ApplyListDto("合计", "", "", "", "", String.valueOf(sum), ""));
+		printTable.put("applyList", applyList);
+		RequestContext.getCurrentInstance().execute("PF('printDialog').show()");
+	}
+
+	/**
+	* 查看详情
+	*/
+
+	public void detailInfo() {
+		if (this.selectOne == null) {
+			FacesUtils.warn("请选择数据");
+		}
+
+		personUseDetail = opeUseFlowService.getApplyInfo(selectOne.getReceiptNumber());
+
+	}
 
 	@SuppressWarnings("serial")
 	public LazyDataModel<OpeReagentStatus> getDataModel() {
@@ -151,6 +236,45 @@
 		return dataModel;
 	}
 
+	public LazyDataModel<OpeUseFlow> getDataModel2() {
+		if (this.dataModel2 == null) {
+			this.dataModel2 = new LazyDataModel<OpeUseFlow>() {
+				@Override
+				public List<OpeUseFlow> load(int first, int pageSize, String sortField, SortOrder sortOrder,
+												   Map<String, Object> filters) {
+					List<OpeUseFlow> list = null;
+					try {
+						int count = opeUseFlowService.getPersonalUseInfoCount(reagentCode, getUserId(),startTime,endTime,receiptNumber,department,project);
+						this.setRowCount(count);
+						if (count > 0) {
+							list = opeUseFlowService.getPersonalUseInfoList
+									(reagentCode,  getUserId(),startTime,endTime ,receiptNumber,department,project,first,pageSize);
+						}
+					} catch (Exception e) {
+						logger.error(e);
+					}
+					return list;
+				}
+
+				@Override
+				public OpeUseFlow getRowData(String rowKey) {
+					Iterator<OpeUseFlow> iterator = this.iterator();
+					if (iterator != null) {
+						OpeUseFlow su = null;
+						while (iterator.hasNext()) {
+							su = iterator.next();
+							if (rowKey.equals(su.getReceiptNumber())) {
+								return su;
+							}
+						}
+					}
+					return null;
+				}
+			};
+		}
+		return dataModel2;
+	}
+
 	public String getReagentId() {
 		return reagentId;
 	}
@@ -191,4 +315,54 @@
 	public void setEndTime(Date endTime) {
 		this.endTime = endTime;
 	}
+
+	public String getProject() {
+		return project;
+	}
+
+	public void setProject(String project) {
+		this.project = project;
+	}
+
+	public String getDepartment() {
+		return department;
+	}
+
+	public void setDepartment(String department) {
+		this.department = department;
+	}
+
+	public String getReceiptNumber() {
+		return receiptNumber;
+	}
+
+	public void setReceiptNumber(String receiptNumber) {
+		this.receiptNumber = receiptNumber;
+	}
+
+
+	public OpeUseFlow getSelectOne() {
+		return selectOne;
+	}
+
+	public void setSelectOne(OpeUseFlow selectOne) {
+		this.selectOne = selectOne;
+	}
+
+
+	public List<PersonUseDetail> getPersonUseDetail() {
+		return personUseDetail;
+	}
+
+	public void setPersonUseDetail(List<PersonUseDetail> personUseDetail) {
+		this.personUseDetail = personUseDetail;
+	}
+
+	public Hashtable getPrintTable() {
+		return printTable;
+	}
+
+	public void setPrintTable(Hashtable printTable) {
+		this.printTable = printTable;
+	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
index 3b913f9..352e62f 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.java
@@ -1,6 +1,7 @@
 package com.nanometer.smartlab.dao;
 
 import com.nanometer.smartlab.entity.OpeUseFlow;
+import com.nanometer.smartlab.entity.dto.PersonUseDetail;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.dao.DataAccessException;
 
@@ -35,4 +36,10 @@
     List<Map> getRegentInfoFromReceiptNumber(String receiptNumber);
 
     Map getUserIdByReagentCode(String reagentCode, String id);
+
+    int countPersonalUseInfo(Map params);
+
+    List<OpeUseFlow> selectPersonalUseInfo(Map params);
+
+    List<PersonUseDetail> getApplyInfo(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 d0b9b40..96315bf 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeUseFlowDao.xml
@@ -179,6 +179,113 @@
         and valid_flag = 1
         limit 1
     </select>
+    <select id="countPersonalUseInfo" resultType="java.lang.Integer">
+      select count(0) from (
+      SELECT count(0)
+        FROM
+        ope_use_flow  ouf
+        LEFT JOIN sys_user su on su.id = ouf.user_id
+        LEFT JOIN base_meta bm on bm.id = ouf.operatestate
+        LEFT JOIN ope_reagent_status ors on ors.reagent_code = ouf.reagent_code
+        LEFT JOIN sys_reagent sr on sr.id = ors.reagent_id
+        left join base_meta bm1 on bm1.id = su.department
+        <if test="userId !=null and userId != ''">
+            LEFT JOIN sys_reagent sr2 on sr2.id = ouf.user_id
+        </if>
+        WHERE ouf.operatestate = #{operatestate}
+        and   LENGTH(trim(ouf.receipt_number))>0
+        <if test="reagentCode !=null and reagentCode != ''">
+            and ouf.reagent_code like concat("%",#{reagentCode},"%")
+        </if>
+        <if test="startTime !=null and startTime != ''">
+            and ouf.create_time &gt;#{startTime}
+        </if>
+        <if test="endTime !=null and endTime != ''">
+            and ouf.create_time &lt;#{endTime}
+        </if>
+        <if test="project !=null and project != ''">
+            and su.project like concat("%",#{project},"%")
+        </if>
+        <if test="department !=null and department != ''">
+            and su.bm1.meta_value like concat("%",#{department},"%")
+        </if>
+        <if test="receiptNumber !=null and receiptNumber != ''">
+            and ouf.receipt_number like concat("%",#{receiptNumber},"%")
+        </if>
+        group by ouf.receipt_number) a
+
+
+
+    </select>
+    <select id="selectPersonalUseInfo" resultType="com.nanometer.smartlab.entity.OpeUseFlow">
+        SELECT ouf.receipt_number receiptNumber,
+        count(ouf.reagent_code) applyNum,
+        su.name username,
+        su.project ,
+        su.phone,
+        bm1.meta_value department,
+        sl.name laboratoryName,
+        ouf.create_time createTime,
+        ouf.house_id houseId
+        FROM
+        ope_use_flow  ouf
+        LEFT JOIN sys_user su on su.id = ouf.user_id
+        LEFT JOIN base_meta bm on bm.id = ouf.operatestate
+        LEFT JOIN ope_reagent_status ors on ors.reagent_code = ouf.reagent_code
+        LEFT JOIN sys_reagent sr on sr.id = ors.reagent_id
+        left join base_meta bm1 on bm1.id = su.department
+        left join sys_laboratory sl on sl.id = ouf.house_id
+        <if test="userId !=null and userId != ''">
+            LEFT JOIN sys_reagent sr2 on sr2.id = ouf.user_id
+        </if>
+        WHERE ouf.operatestate = #{operatestate}
+        and   LENGTH(trim(ouf.receipt_number))>0
+        <if test="reagentCode !=null and reagentCode != ''">
+            and ouf.reagent_code like concat("%",#{reagentCode},"%")
+        </if>
+        <if test="startTime !=null and startTime != ''">
+            and ouf.create_time &gt;#{startTime}
+        </if>
+        <if test="endTime !=null and endTime != ''">
+            and ouf.create_time &lt;#{endTime}
+        </if>
+        <if test="project !=null and project != ''">
+            and su.project like concat("%",#{project},"%")
+        </if>
+        <if test="department !=null and department != ''">
+            and su.bm1.meta_value like concat("%",#{department},"%")
+        </if>
+        <if test="receiptNumber !=null and receiptNumber != ''">
+            and ouf.receipt_number like concat("%",#{receiptNumber},"%")
+        </if>
+        group by ouf.receipt_number
+        ORDER BY ouf.create_time desc
+        <if test="first != null and pageSize != null">
+            limit #{first}, #{pageSize}
+        </if>
+    </select>
+    <select id="getApplyInfo" resultType="com.nanometer.smartlab.entity.dto.PersonUseDetail">
+        SELECT
+        ors.reagent_id reagentId,
+        ors.article_number articleNumber,
+        ouf.reagent_code reagentCode,
+        sr.product_sn productSn,
+        sr.NAME reagentName,
+        bm1.meta_value  reagentFormat,
+        CONCAT(sr.per_box,bm1.meta_value) perInfo,
+        bm2.meta_value productHome,
+        bm3.meta_value controlProducts
+        from `ope_use_flow` ouf
+        LEFT JOIN ope_reagent_status ors ON ors.reagent_code = ouf.reagent_code
+        LEFT join sys_reagent sr ON ors.reagent_id = sr.id
+        LEFT JOIN base_meta bm ON bm.id = sr.reagent_format
+        LEFT JOIN base_meta bm1 on bm1.id = sr.reagent_unit
+        LEFT JOIN base_meta bm2 on bm2.id = sr.product_home
+        LEFT JOIN base_meta bm3 on bm3.id = sr.control_products
+        WHERE ouf.operatestate = #{operatestate}
+        and ouf.receipt_number = #{receiptNumber}
+    </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)
     values (#{id}, #{reagentCode}, #{status}, #{houseId}, #{containerId}, #{userId}, #{remainder}, #{place}, #{storeType}, 1, #{createTime}, #{realstatus},#{operateState})
diff --git a/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java b/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
index f6dd09a..1baf23c 100644
--- a/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
+++ b/src/main/java/com/nanometer/smartlab/entity/OpeUseFlow.java
@@ -30,19 +30,25 @@
     private SysReagent reagent;
     private String userName;
     private String articleNumber;
-    
+
     private String laboratoryName;
     private String warehouseName;
-    
+
     private String warehouseContainerName;
     private String laboratoryContainerName;
     private String warehouseContainerCode;
     private String laboratoryContainerCode;
-    
+
     private String operatestateName;
     private String operateState;
     private String receiptNumber;
-    
+    //人员信息
+    private String project;
+    private String phone;
+    private String department;
+    private Integer applyNum;
+
+
 
 
 	public String getWarehouseContainerCode() {
@@ -238,4 +244,38 @@
     public void setReceiptNumber(String receiptNumber) {
         this.receiptNumber = receiptNumber;
     }
+
+
+
+    public Integer getApplyNum() {
+        return applyNum;
+    }
+
+    public void setApplyNum(Integer applyNum) {
+        this.applyNum = applyNum;
+    }
+
+    public String getProject() {
+        return project;
+    }
+
+    public void setProject(String project) {
+        this.project = project;
+    }
+
+    public String getDepartment() {
+        return department;
+    }
+
+    public void setDepartment(String department) {
+        this.department = department;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
 }
diff --git a/src/main/java/com/nanometer/smartlab/entity/dto/PersonUseDetail.java b/src/main/java/com/nanometer/smartlab/entity/dto/PersonUseDetail.java
new file mode 100644
index 0000000..5b8478d
--- /dev/null
+++ b/src/main/java/com/nanometer/smartlab/entity/dto/PersonUseDetail.java
@@ -0,0 +1,98 @@
+package com.nanometer.smartlab.entity.dto;
+
+import java.io.Serializable;
+
+public class PersonUseDetail implements Serializable {
+
+    private String reagentId;
+
+    private String articleNumber;
+
+    private String productSn;
+
+    private String reagentName;
+
+    private String reagentFormat;
+
+    private String perInfo;
+
+    private String productHome;
+
+    private String controlProducts;
+
+    private String reagentCode;
+
+
+    public String getReagentId() {
+        return reagentId;
+    }
+
+    public void setReagentId(String reagentId) {
+        this.reagentId = reagentId;
+    }
+
+    public String getArticleNumber() {
+        return articleNumber;
+    }
+
+    public void setArticleNumber(String articleNumber) {
+        this.articleNumber = articleNumber;
+    }
+
+
+    public String getProductSn() {
+        return productSn;
+    }
+
+    public void setProductSn(String productSn) {
+        this.productSn = productSn;
+    }
+
+    public String getReagentName() {
+        return reagentName;
+    }
+
+    public void setReagentName(String reagentName) {
+        this.reagentName = reagentName;
+    }
+
+    public String getReagentFormat() {
+        return reagentFormat;
+    }
+
+    public void setReagentFormat(String reagentFormat) {
+        this.reagentFormat = reagentFormat;
+    }
+
+    public String getPerInfo() {
+        return perInfo;
+    }
+
+    public void setPerInfo(String perInfo) {
+        this.perInfo = perInfo;
+    }
+
+    public String getProductHome() {
+        return productHome;
+    }
+
+    public void setProductHome(String productHome) {
+        this.productHome = productHome;
+    }
+
+    public String getControlProducts() {
+        return controlProducts;
+    }
+
+    public void setControlProducts(String controlProducts) {
+        this.controlProducts = controlProducts;
+    }
+
+    public String getReagentCode() {
+        return reagentCode;
+    }
+
+    public void setReagentCode(String reagentCode) {
+        this.reagentCode = reagentCode;
+    }
+}
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
index 8c8242d..252d834 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
@@ -3,7 +3,7 @@
 import com.nanometer.smartlab.entity.OpeApplyReserve;
 import com.nanometer.smartlab.entity.OpeUseFlow;
 import com.nanometer.smartlab.entity.OpeWarehouseReserve;
-import com.nanometer.smartlab.entity.SysReagent;
+import com.nanometer.smartlab.entity.dto.PersonUseDetail;
 
 import java.text.ParseException;
 import java.util.Date;
@@ -47,4 +47,11 @@
 	Map<String,String>  getApplyUserByReagentCode(String reagentCode);
 
     void updateReceiptNumberByCode2(List<OpeWarehouseReserve> codeTmp, String receiptNumber);
+
+	int getPersonalUseInfoCount(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber, String department, String project);
+
+	List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber, String department, String project, int first, int pageSize);
+
+    List<PersonUseDetail> getApplyInfo(String receiptNumber);
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
index 2d7ab3e..2a931b7 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
@@ -12,6 +12,7 @@
 import com.nanometer.smartlab.dao.SysLaboratoryContainerDao;
 import com.nanometer.smartlab.dao.SysWarehouseContainerDao;
 import com.nanometer.smartlab.entity.*;
+import com.nanometer.smartlab.entity.dto.PersonUseDetail;
 import com.nanometer.smartlab.entity.enumtype.OperateStatus;
 import com.nanometer.smartlab.util.Constants;
 import org.apache.commons.lang.StringUtils;
@@ -454,4 +455,64 @@
         }
 
     }
+
+    @Override
+    public int getPersonalUseInfoCount(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber, String department, String project) {
+        Map<String,Object> params = new HashMap<>();
+        params.put("userId", userId);
+        params.put("startTime", startTime);
+        params.put("endTime", endTime);
+        params.put("receiptNumber", receiptNumber);
+        params.put("department", department);
+        params.put("project", project);
+        params.put("reagentCode", reagentCode);
+        //操作状态位仓库领取
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate", baseMetas.get(0).getId());
+
+        addParamByUserId(userId, params);
+        return opeUseFlowDao.countPersonalUseInfo(params);
+    }
+
+    @Override
+    public List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber, String department, String project, int first, int pageSize) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("userId", userId);
+        params.put("startTime", startTime);
+        params.put("endTime", endTime);
+        params.put("receiptNumber", receiptNumber);
+        params.put("department", department);
+        params.put("project", project);
+        params.put("reagentCode", reagentCode);
+        //操作状态位仓库领取
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate", baseMetas.get(0).getId());
+        params.put("first", first);
+        params.put("pageSize", pageSize);
+
+        addParamByUserId(userId, params);
+        return opeUseFlowDao.selectPersonalUseInfo(params);
+    }
+
+    @Override
+    public List<PersonUseDetail> getApplyInfo(String receiptNumber) {
+        Map<String,Object> params = new HashMap<>();
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate", baseMetas.get(0).getId());
+        params.put("receiptNumber", receiptNumber);
+
+        return  opeUseFlowDao.getApplyInfo(params);
+
+    }
+
+
 }
diff --git a/src/main/webapp/personal_use_info.xhtml b/src/main/webapp/personal_use_info.xhtml
index 22644b5..ff71fb3 100644
--- a/src/main/webapp/personal_use_info.xhtml
+++ b/src/main/webapp/personal_use_info.xhtml
@@ -50,84 +50,272 @@
 			<p:panel styleClass="center-header">
 				<p:panelGrid styleClass="filter" columns="13">
 
-					<p:outputLabel value="试剂名称:"></p:outputLabel>
-					<p:inputText value="#{personalUseInfoController.reagentId}"></p:inputText>
+					<p:outputLabel value="单据编号:"/>
+					<p:inputText value="#{personalUseInfoController.receiptNumber}"/>
 
-					<p:outputLabel value="条形码:"></p:outputLabel>
-					<p:inputText value="#{personalUseInfoController.reagentCode}"></p:inputText>
-					<p:outputLabel value="申领人:"/>
-					<p:inputText value="#{personalUseInfoController.applyPerson}"/>
+					<p:outputLabel value="课题组:"/>
+					<p:inputText value="#{personalUseInfoController.project}"/>
+
+					<p:outputLabel value="部门:"/>
+					<p:inputText value="#{personalUseInfoController.department}"/>
 
 					<p:outputLabel for="startTime" value="开始时间:" />
 					<p:calendar id="startTime" value="#{personalUseInfoController.startTime}" pattern="yyyy-MM-dd HH:mm" />
 					<p:outputLabel for="endTime" value="截止时间:" />
 					<p:calendar id="endTime" value="#{personalUseInfoController.endTime}" pattern="yyyy-MM-dd HH:mm" />
 
-					<p:commandLink styleClass="search" process="@form" update="@form"></p:commandLink>
-					<p:commandButton value="更新时间" styleClass="store-btn" process="@form" actionListener="#{personalUseInfoController.updateTimeByCode}"
-					update="@form"></p:commandButton>
-					<p:commandButton value="取消领用" style="background: #b94a48; border: 1px solid #b94a48" styleClass="store-btn" process="@form" actionListener="#{personalUseInfoController.reagentReturn}"
-									 update="@form"></p:commandButton>
-				</p:panelGrid>
+					<p:commandLink styleClass="search" process="@form" update="@form"/>
+
+					<p:commandButton value="生成领用单"
+									 style="background: #b94a48; border: 1px solid #b94a48"
+									 styleClass="store-btn"
+									 process="@form"
+									 actionListener="#{personalUseInfoController.generateReceipt}"
+									 update="printDialog"/>
+					<p:commandButton value="查看详情"
+									 styleClass="store-btn"
+									 update=":dialog,:dialogForm"
+									 actionListener="#{personalUseInfoController.detailInfo}"
+									 oncomplete="PF('dialog').show()"/>
+
+
+			</p:panelGrid>
 			</p:panel>
 		</p:panel>
 
-		<style>
+		<style type="text/css">
 			.ui-datatable tbody td{
 				white-space: normal;
 				word-break: break-all;
 			}
 		</style>
 		<p:panel styleClass="center-body">
-			<p:dataTable id="personalUseInfoDataTable" styleClass="data-table" resizableColumns="true"
-				paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
-				lazy="true" value="#{personalUseInfoController.dataModel}" var="row"
-				rowKey="#{row.id}" emptyMessage="无数据" rows="20" pageLinks="5" selection="#{personalUseInfoController.selectedList}">
-				<p:column selectionMode="multiple" style="width: 30px;text-align: center;"/>
-				<p:column headerText="试剂名称">
-					<h:outputText value="#{row.reagent.name}"></h:outputText>
+			<p:dataTable id="personalUseInfoDataTable"
+						 styleClass="data-table"
+						 resizableColumns="true"
+						 paginator="true"
+						 paginatorAlwaysVisible="false"
+						 paginatorPosition="bottom"
+						 lazy="true"
+						 value="#{personalUseInfoController.dataModel2}"
+						 var="row"
+						 rowKey="#{row.receiptNumber}"
+						 selectionMode="single"
+						 emptyMessage="无数据"
+						 selection="#{personalUseInfoController.selectOne}"
+						 rows="20" pageLinks="5">
+
+<!--				<p:column selectionMode="multiple" style="width: 30px;text-align: center;"/>-->
+				<p:column headerText="单据编号">
+					<h:outputText value="#{row.receiptNumber}"/>
 				</p:column>
 
-				<p:column headerText="试剂条形码">
-					<h:outputText value="#{row.reagentCode}"></h:outputText>
+				<p:column headerText="申领人" width="80">
+					<h:outputText value="#{row.userName}"/>
 				</p:column>
 
-                <p:column headerText="厂家">
-                    <h:outputText value="#{baseMetaService.getBaseMetaValue(row.reagent.productHome)}"></h:outputText>
-                </p:column>
-				<!--<p:column headerText="供应商">-->
-					<!--<h:outputText value="#{row.reagent.supplierName}"></h:outputText>-->
-				<!--</p:column>-->
-
-				<p:column headerText="规格">
-					<h:outputText
-						value="#{baseMetaService.getBaseMetaValue(row.reagent.reagentFormat)}"></h:outputText>
+				<p:column headerText="领用数量" width="50">
+					<h:outputText value="#{row.applyNum}"/>
 				</p:column>
 
-				<p:column headerText="包装">
-					<h:outputText
-						value="#{''.concat(row.reagent.mainMetering).concat(baseMetaService.getBaseMetaValue(row.reagent.reagentUnit))}"></h:outputText>
+				<p:column headerText="课题组">
+					<h:outputText value="#{row.project}"/>
 				</p:column>
 
-				<p:column headerText="批号">
-					<h:outputText value="#{row.articleNumber}"></h:outputText>
+				<p:column headerText="部门">
+					<h:outputText value="#{row.department}"/>
 				</p:column>
 
-<!--				<p:column headerText="残存量">-->
-<!--					<h:outputText value="#{row.remainder}"></h:outputText>-->
-<!--				</p:column>-->
-
-				<p:column headerText="申领人">
-					<h:outputText value="#{row.userName}" />
+				<p:column headerText="地点">
+					<h:outputText value="#{row.laboratoryName}"/>
 				</p:column>
 
 				<p:column headerText="领用时间">
-                    <h:outputText value="#{row.updateTime}">
-                        <f:convertDateTime pattern="yyyy-MM-dd HH:mm:ss" locale="zh_CN"></f:convertDateTime>
+                    <h:outputText value="#{row.createTime}">
+                        <f:convertDateTime pattern="yyyy-MM-dd HH:mm" locale="zh_CN"/>
                     </h:outputText>
                 </p:column>
 			</p:dataTable>
 		</p:panel>
 	</h:form>
+
+	<p:dialog modal="true" header="试剂详情页面" appendTo="@(body)"
+			  id="dialog" widgetVar="dialog"
+			  resizable="false" width="1000">
+		<h:form id="dialogForm">
+			<p:dataTable styleClass="data-table"
+						 paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
+						 value="#{personalUseInfoController.personUseDetail}" var="row" rowKey="#{row.id}"
+						 emptyMessage="无数据"
+						 style="margin:50px 0 80px 0"
+						 rows="5" pageLinks="5">
+
+				<p:column headerText="产品编号">
+					<h:outputText value="#{row.productSn}"/>
+				</p:column>
+
+				<p:column headerText="试剂名称">
+					<h:outputText value="#{row.reagentName}"/>
+				</p:column>
+
+				<p:column headerText="试剂条形码">
+					<h:outputText value="#{row.reagentCode}"/>
+				</p:column>
+
+				<p:column headerText="管制品">
+					<h:outputText value="#{row.controlProducts}"/>
+				</p:column>
+
+				<p:column headerText="规格型号">
+					<h:outputText value="#{row.reagentFormat}"/>
+				</p:column>
+
+				<p:column headerText="包装">
+					<h:outputText value="#{row.perInfo}"/>
+				</p:column>
+
+				<p:column headerText="厂家">
+					<h:outputText value="#{row.productHome}"/>
+				</p:column>
+
+				<p:column headerText="批号">
+					<h:outputText value="#{row.articleNumber}"/>
+				</p:column>
+
+			</p:dataTable>
+
+			<p:panel styleClass="btn" style="text-align: right">
+			</p:panel>
+		</h:form>
+	</p:dialog>
+	<p:dialog id="apply-ui" header="领用单" widgetVar="printDialog" appendTo="@(body)" modal="true" resizable="false"
+			  width="1380">
+		<div id="printTarget">
+			<div style=" margin: 20mm 27mm 0mm 30mm;">
+				<h:form id="printDialog" style="width: 1100px">
+
+					<p:outputPanel style="text-align: center;font-size: 14px;font-weight: 700;">#{personalUseInfoController.printTable['head']}</p:outputPanel>
+					<p:outputPanel style="text-align: center;font-size: 15px;margin: 20px;font-weight: 700;">#{personalUseInfoController.printTable['title']}</p:outputPanel>
+					<div>
+						<div style="display: flex;flex-direction: row;justify-content: flex-end;width: 1081px;">
+							<div style="width: 98px;">单据编号:</div>
+							<div style="width: 183px;">#{personalUseInfoController.printTable['receiptNumber']}</div>
+						</div>
+					</div>
+
+					<div style="margin: 10px 0;">
+						<div style="display: inline-flex;">
+							<div style="width: 100px;margin-left: 10px;">部门:</div>
+							<div style="width: 300px;">#{personalUseInfoController.printTable['department']}</div>
+						</div>
+						<div style="display: inline-flex;">
+							<div style="width: 100px;">申购人:</div>
+							<div style="width: 200px;padding-top: 1px;">#{personalUseInfoController.printTable['applyPerson']}</div>
+						</div>
+						<div style="display: inline-flex;float: right;">
+							<div style="width: 100px;">日期:</div>
+							<div style="width: 200px;padding-top: 1px;">#{personalUseInfoController.printTable['date']}</div>
+						</div>
+					</div>
+
+					<div style="margin-bottom: 20px;">
+						<div style="display: inline-flex;">
+							<div style="width: 100px;margin-left: 10px;">课题组</div>
+							<div style="width: 300px;">#{personalUseInfoController.printTable['project']}</div>
+						</div>
+						<div style="display: inline-flex;">
+							<div style="width: 100px;">使用地点:</div>
+							<div style="width: 200px;padding-top: 1px;">#{personalUseInfoController.printTable['lab']}</div>
+						</div>
+						<div style="display: inline-flex;float: right;">
+							<div style="width: 100px;">联系方式:</div>
+							<div style="width: 200px;">#{personalUseInfoController.printTable['phone']}</div>
+						</div>
+					</div>
+
+
+
+
+					<p:dataTable id="printTB" styleClass="apply-list"
+								 value="#{personalUseInfoController.printTable['applyList']}" var="row" >
+						<p:column headerText="产品编号" width="150px;" style="text-align: center;">
+							<h:outputText value="#{row.productCode}" />
+						</p:column>
+						<p:column headerText="产品名称" width="150px;" style="text-align: center;">
+							<h:outputText value="#{row.productName}" />
+						</p:column>
+
+						<p:column headerText="管制品" width="100px;" style="text-align: center;">
+							<h:outputText value="#{row.controlProducts}" />
+						</p:column>
+
+						<p:column headerText="规格型号" width="160px;" style="text-align: center;">
+							<h:outputText value="#{row.reagentFormat}" />
+						</p:column>
+
+						<p:column headerText="包装" width="90px;" style="text-align: center;">
+							<h:outputText value="#{row.mainMetering==null?'':row.mainMetering.replace('null','')}" />
+						</p:column>
+
+						<p:column headerText="数量" width="90px;" style="text-align: center;">
+							<h:outputText value="#{row.num}" />
+						</p:column>
+
+						<p:column headerText="备注" width="170px;" style="text-align: center;">
+							<h:outputText value="#{row.memo}" />
+						</p:column>
+					</p:dataTable>
+
+					<div style="margin-top: 20px;margin-right: 94px;">
+						<div style="display: flex;flex-direction: row;justify-content: flex-end;">
+							<div style="width: 100px">签收人:</div>
+							<div style="width: 100px"></div>
+						</div>
+					</div>
+
+					<div style="margin: 10px 94px 10px 0;">
+						<div style="display: flex;flex-direction: row;justify-content: flex-end;">
+							<div style="width: 100px">日期:</div>
+							<div style="width: 100px"></div>
+						</div>
+					</div>
+
+
+
+					<p:panel styleClass="btn  no-print">
+						<div class="div-btn cancel" id="cancel">关闭</div>
+						<div class="div-btn print" id="print">打印</div>
+
+						<script type="text/javascript" src="resources/js/print.js"/>
+						<script type="text/javascript">
+							$(function () {
+								$("#print").on("click", function () {
+									jQuery.print('#printTarget')
+								})
+								$("#cancel").on("click", function () {
+									$("#apply-ui a").click();
+								})
+							})
+
+
+						</script>
+					</p:panel>
+				</h:form>
+			</div>
+		</div>
+		<script type="text/javascript" src="resources/js/print.js"/>
+		<script type="text/javascript">
+			$(function () {
+				$("#print").on("click", function () {
+					jQuery.print('#printTarget');
+				});
+				$("#cancel").on("click", function () {
+					$("#reagentUseFlowInfoForm\\:apply-ui a").click();
+				})
+			})
+
+
+		</script>
+	</p:dialog>
 </ui:composition>
 </html>

--
Gitblit v1.9.2