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