From 0b0d7c1efa03ba43ccd21f9b89b1b7f359db7961 Mon Sep 17 00:00:00 2001
From: lyfO_o <764716047@qq.com>
Date: 星期三, 16 六月 2021 14:54:39 +0800
Subject: [PATCH] 试剂流向:报废试剂

---
 src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java             |    3 
 src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml              |    8 +
 src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java       |    3 
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java           |    2 
 src/main/webapp/reagent_user_flow_info.xhtml                                  |  227 +++++++++++++++++++------------------
 src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java |   32 +++++
 src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java |    7 +
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java       |   44 ++++++
 src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java     |    2 
 9 files changed, 213 insertions(+), 115 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java b/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
index d93ae38..475fd21 100644
--- a/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
+++ b/src/main/java/com/nanometer/smartlab/controller/OpeUseFlowInfoController.java
@@ -7,7 +7,9 @@
 
 import com.nanometer.smartlab.entity.SysUser;
 import com.nanometer.smartlab.entity.dto.ApplyListDto;
+import com.nanometer.smartlab.exception.BusinessException;
 import com.nanometer.smartlab.service.SysUserService;
+import com.nanometer.smartlab.util.FacesUtils;
 import com.nanometer.smartlab.util.Utils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
@@ -72,6 +74,8 @@
 
 
 	private List<SysReagent> reagentSelectList;
+
+	private OpeUseFlow selectedOne;
 
 	public List<SysReagent> getReagentSelectList() {
 		if (this.reagentSelectList == null) {
@@ -211,6 +215,26 @@
 		}
 	}
 
+	//报废试剂
+	public void scrapReagent(){
+		if (this.selectedOne == null) {
+			FacesUtils.warn("请选择");
+			return;
+		}
+		try {
+			String reagentCode = this.selectedOne.getReagentCode();
+			String reagentId = this.selectedOne.getReagent().getId();
+			opeUseFlowService.scrapReagent(reagentId, reagentCode, getUserId());
+			FacesUtils.warn("操作成功");
+		} catch (BusinessException e) {
+			FacesUtils.warn(e.getMessage());
+		} catch (Exception e) {
+			e.printStackTrace();
+			FacesUtils.warn("操作失败");
+		}
+
+	}
+
 	public void setStartDate(Date startDate) {
 		this.startDate = startDate;
 	}
@@ -243,4 +267,12 @@
 	public void setContainerCode(String containerCode) {
 		this.containerCode = containerCode;
 	}
+
+	public OpeUseFlow getSelectedOne() {
+		return selectedOne;
+	}
+
+	public void setSelectedOne(OpeUseFlow selectedOne) {
+		this.selectedOne = selectedOne;
+	}
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
index eb44d68..7493206 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.java
@@ -59,4 +59,7 @@
     void updateArticleNumberByRCode(String code, String articleNumber);
 
     List<Map> selectExportList(Map params);
+
+    OpeReagentStatus getStatus(@Param("reagentId") String reagentId,@Param("reagentCode") String reagentCode);
+
 }
diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
index 57cb6b2..373fdbb 100644
--- a/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
+++ b/src/main/java/com/nanometer/smartlab/dao/OpeReagentStatusDao.xml
@@ -639,4 +639,12 @@
 		</choose>
 		order by oa.reagent_code asc
 	</select>
+    <select id="getStatus" resultMap="OpeReagentStatus">
+
+		  select *
+        from ope_reagent_status
+        where valid_flag = 1
+        and reagent_code = #{reagentCode}
+        and reagent_id = #{reagentId}
+	</select>
 </mapper>
diff --git a/src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java b/src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java
index f2d9e46..7b7cada 100644
--- a/src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java
+++ b/src/main/java/com/nanometer/smartlab/entity/enumtype/OperateStatus.java
@@ -3,7 +3,8 @@
 import java.util.HashMap;
 
 public enum OperateStatus {
-	WAREHOUSEIN(10, "仓库入库"), WAREHOUSEOUT(11, "仓库领用"), LABORATORYIN(0, "试剂柜入库"), TRANSFER(6,"转移");
+	WAREHOUSEIN(10, "仓库入库"), WAREHOUSEOUT(11, "仓库领用"), LABORATORYIN(0, "试剂柜入库"), TRANSFER(6,"转移"),
+	SCRAP(5, "报废");
 	private int key;
 
 	private String text;
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
index 465693c..e32eaf2 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusService.java
@@ -112,4 +112,6 @@
 							   String reagentCode, String userId,String labName);
 
 	void exportLabStock2Excel(List<Map> list) throws Exception;
+
+    OpeReagentStatus getStatus(String reagentId, String reagentCode);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
index 73a3fd7..eb87d2a 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeReagentStatusServiceImpl.java
@@ -1129,5 +1129,12 @@
 		ExcelUtils.export2Excel(list,"实验室库存",map);
 	}
 
+    @Override
+    public OpeReagentStatus getStatus(String reagentId, String reagentCode) {
+
+
+		return opeReagentStatusDao.getStatus(reagentId,reagentCode);
+    }
+
 
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
index 9a32592..c030f9d 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowService.java
@@ -57,4 +57,6 @@
 	int getApplyInfoSize(String receiptNumber);
 
     int getOpeUseFlow(OpeUseFlow opeUseFlow);
+
+    void scrapReagent(String reagentId,String reagentCode, String userId);
 }
diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
index 66dc833..334cfea 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
@@ -8,9 +8,7 @@
 
 import javax.annotation.Resource;
 
-import com.nanometer.smartlab.dao.BaseMetaDao;
-import com.nanometer.smartlab.dao.SysLaboratoryContainerDao;
-import com.nanometer.smartlab.dao.SysWarehouseContainerDao;
+import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
 import com.nanometer.smartlab.entity.dto.PersonUseDetail;
 import com.nanometer.smartlab.entity.enumtype.OperateStatus;
@@ -25,7 +23,6 @@
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.nanometer.smartlab.dao.OpeUseFlowDao;
 import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
 import com.nanometer.smartlab.entity.enumtype.SeeFlag;
 import com.nanometer.smartlab.exception.AlarmCode;
@@ -59,6 +56,8 @@
     private SysReagentService sysReagentService;
     @Resource
     private BaseMetaDao baseMetaDao;
+    @Resource
+    private OpeReagentStatusDao opeReagentStatusDao;
 
 
     @Transactional(propagation = Propagation.REQUIRED)
@@ -540,4 +539,41 @@
         return opeUseFlowDao.countOpeUseFlow(opeUseFlow);
     }
 
+    @Override
+    @Transactional
+    public void scrapReagent(String reagentId,String reagentCode, String userId) {
+        //1.试剂状态表更新试剂状态为报废
+        OpeReagentStatus status = opeReagentStatusService.getStatus(reagentId, reagentCode);
+        if (status.getStatus() == ArrivalStatus.SCRAP) {
+            throw new BusinessException(ExceptionEnumCode.PARAM_ERR,"该试剂已是报废状态,无法进行操作");
+        }
+        //报废
+        status.setStatus(ArrivalStatus.SCRAP);
+        status.setUserId(userId);
+        opeReagentStatusDao.updateOpeReagentStatusDao(status);
+
+        //2.插入一条报废的流向记录
+        OpeUseFlow useFlow = new OpeUseFlow();
+        //获取报废状态id
+        Map<String, Object> params = new HashMap<>();
+        params.put("groupId", "operate_status");
+        params.put("metaKey", String.valueOf(OperateStatus.SCRAP.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(params);
+        useFlow.setOperateState(baseMetas.get(0).getId());
+        useFlow.setReagentCode(reagentCode);
+        useFlow.setContainerId(status.getContainerId());
+        useFlow.setHouseId(status.getHouseId());
+        useFlow.setUserId(userId);
+        useFlow.setPlace(status.getPlace());
+        useFlow.setRemainder(status.getRemainder());
+        useFlow.setStoreType(status.getStoreType());
+        useFlow.setProject(status.getProjectNum());
+        useFlow.setArticleNumber(status.getArticleNumber());
+
+        useFlow.setCreateTime(new Timestamp(new Date().getTime()));
+        useFlow.setId(IDUtils.uuid());
+        opeUseFlowDao.insertOpeUseFlow(useFlow);
+
+    }
+
 }
diff --git a/src/main/webapp/reagent_user_flow_info.xhtml b/src/main/webapp/reagent_user_flow_info.xhtml
index 8622ef6..a868bfc 100644
--- a/src/main/webapp/reagent_user_flow_info.xhtml
+++ b/src/main/webapp/reagent_user_flow_info.xhtml
@@ -9,6 +9,7 @@
 	xmlns:c="http://java.sun.com/jsp/jstl/core">
 <head></head>
 <ui:composition>
+
 	<h:form id="reagentUseFlowInfoForm">
 		<p:panel styleClass="center-header">
 			<p:outputLabel styleClass="title" value="试剂流向追踪"></p:outputLabel>
@@ -37,120 +38,16 @@
 			</p:panel>
 		</p:panel>
 
+
 		<p:panel styleClass="center-body">
-			<p:dialog id="apply-ui" header="领用单" widgetVar="printDialog" appendTo="@(body)" modal="true" resizable="false"
-			width="1000">
-				<div id="printTarget">
-					<div style=" margin: 10mm 10mm 0mm 2mm;">
-						<h:form id="printDialog">
-
-							<p:outputPanel style="text-align: center;font-size: 14px;font-weight: 700;">#{opeUseFlowInfoController.printTable['head']}</p:outputPanel>
-							<p:outputPanel style="text-align: center;font-size: 15px;margin: 20px;font-weight: 700;">#{opeUseFlowInfoController.printTable['title']}</p:outputPanel>
-							<div>
-								<div style="display: flex;flex-direction: row;justify-content: flex-end;">
-									<div style="width: 100px;">单据编号:</div>
-									<div style="width: 300px;">#{opeUseFlowInfoController.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;">#{opeUseFlowInfoController.printTable['department']}</div>
-								</div>
-								<div style="display: inline-flex;float: right;">
-									<div style="width: 100px;">日期:</div>
-									<div style="width: 300px;padding-top: 1px;">
-										<div>#{opeUseFlowInfoController.printTable['date']}</div>
-									</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;">#{opeUseFlowInfoController.printTable['applyPerson']}</div>
-								</div>
-								<div style="display: inline-flex;float: right;">
-									<div style="width: 100px;">联系方式:</div>
-									<div style="width: 300px;">
-										<div >#{opeUseFlowInfoController.printTable['phone']}</div>
-									</div>
-								</div>
-							</div>
-
-
-
-
-							<p:dataTable id="printTB" styleClass="apply-list"
-										 value="#{opeUseFlowInfoController.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}" />
-								</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;">
-								<div style="display: flex;flex-direction: row;justify-content: flex-end;">
-									<div style="width: 100px">签收人:</div>
-									<div style="width: 300px"></div>
-								</div>
-							</div>
-
-							<div style="margin: 10px 0">
-								<div style="display: flex;flex-direction: row;justify-content: flex-end;">
-									<div style="width: 100px">日期:</div>
-									<div style="width: 300px"></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>
-							</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>
-
+			<p:panelGrid columns="1" styleClass="btn">
+				<p:commandButton value="报废" styleClass="del-btn"  ajax="false" actionListener="#{opeUseFlowInfoController.scrapReagent}" />
+			</p:panelGrid>
 			<p:dataTable id="reagentUseFlowInfoDataTable" styleClass="data-table"
 				paginator="true" paginatorAlwaysVisible="false" paginatorPosition="bottom"
 				lazy="true" value="#{opeUseFlowInfoController.dataModel}" var="row"
+				selectionMode="single"
+				selection="#{opeUseFlowInfoController.selectedOne}"
 				rowKey="#{row.id}" emptyMessage="无数据" rows="20" pageLinks="5">
 				<p:column headerText="试剂条形码">
 					<h:outputText value="#{row.reagentCode}"></h:outputText>
@@ -211,7 +108,117 @@
 <!--				</p:column>-->
 
 			</p:dataTable>
+
 		</p:panel>
 	</h:form>
+	<p:dialog id="apply-ui" header="领用单" widgetVar="printDialog" appendTo="@(body)" modal="true" resizable="false"
+			  width="1000">
+		<div id="printTarget">
+			<div style=" margin: 10mm 10mm 0mm 2mm;">
+				<h:form id="printDialog">
+
+					<p:outputPanel style="text-align: center;font-size: 14px;font-weight: 700;">#{opeUseFlowInfoController.printTable['head']}</p:outputPanel>
+					<p:outputPanel style="text-align: center;font-size: 15px;margin: 20px;font-weight: 700;">#{opeUseFlowInfoController.printTable['title']}</p:outputPanel>
+					<div>
+						<div style="display: flex;flex-direction: row;justify-content: flex-end;">
+							<div style="width: 100px;">单据编号:</div>
+							<div style="width: 300px;">#{opeUseFlowInfoController.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;">#{opeUseFlowInfoController.printTable['department']}</div>
+						</div>
+						<div style="display: inline-flex;float: right;">
+							<div style="width: 100px;">日期:</div>
+							<div style="width: 300px;padding-top: 1px;">
+								<div>#{opeUseFlowInfoController.printTable['date']}</div>
+							</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;">#{opeUseFlowInfoController.printTable['applyPerson']}</div>
+						</div>
+						<div style="display: inline-flex;float: right;">
+							<div style="width: 100px;">联系方式:</div>
+							<div style="width: 300px;">
+								<div >#{opeUseFlowInfoController.printTable['phone']}</div>
+							</div>
+						</div>
+					</div>
+
+
+
+
+					<p:dataTable id="printTB" styleClass="apply-list"
+								 value="#{opeUseFlowInfoController.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}" />
+						</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;">
+						<div style="display: flex;flex-direction: row;justify-content: flex-end;">
+							<div style="width: 100px">签收人:</div>
+							<div style="width: 300px"></div>
+						</div>
+					</div>
+
+					<div style="margin: 10px 0">
+						<div style="display: flex;flex-direction: row;justify-content: flex-end;">
+							<div style="width: 100px">日期:</div>
+							<div style="width: 300px"></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>
+					</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