From 1a52289b4d1c7097a654610c132a91716655d3db Mon Sep 17 00:00:00 2001 From: lyfO_o <764716047@qq.com> Date: 星期五, 11 六月 2021 17:34:34 +0800 Subject: [PATCH] 试剂安全库存 --- src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml | 7 + src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml | 33 ++++++ src/main/webapp/reagent_mng.xhtml | 65 ++++++++++++ src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java | 44 ++++++-- src/main/java/com/nanometer/smartlab/service/SysUserService.java | 3 src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java | 7 + src/main/java/com/nanometer/smartlab/dao/SysUserDao.java | 3 src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java | 2 src/main/java/com/nanometer/smartlab/service/SysReagentService.java | 5 + src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java | 30 ++++++ src/main/java/com/nanometer/smartlab/entity/SysReagent.java | 20 ++++ src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml | 9 + src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java | 5 + src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java | 3 src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java | 11 ++ src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java | 11 ++ 16 files changed, 244 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java b/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java index 9321228..0e14bda 100644 --- a/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java +++ b/src/main/java/com/nanometer/smartlab/controller/ReagentMngController.java @@ -25,6 +25,7 @@ import javax.annotation.Resource; import javax.faces.context.FacesContext; +import javax.faces.event.ActionListener; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -912,4 +913,33 @@ public void setProductSn(String productSn) { this.productSn = productSn; } + + public void openUpdateSafetyNumDialog() { + if (this.selectedList == null + || this.selectedList.size() == 0) { + FacesUtils.warn("请选择数据。"); + return; + } + if (this.selectedList.size() > 1) { + FacesUtils.warn("只能选择一个数据进行修改。"); + return; + } + this.sysReagent = this.sysReagentService.getSysReagent(this.selectedList.get(0).getId()); + if (this.sysReagent.getType() != 1) { + FacesUtils.warn("只能选择试剂设置安全库存。"); + return; + } + RequestContext.getCurrentInstance().execute("PF('dialog-setSafetynum').show()"); + } + + public void updateSafetyNum(){ + if (this.sysReagent.getSafetynum() == null) { + FacesUtils.warn("请输入安全库存。"); + return; + } + sysReagentService.updateSafetyNum(this.sysReagent); + FacesUtils.warn("修改成功。"); + RequestContext.getCurrentInstance().execute("PF('dialog-setSafetynum').hide()"); + + } } diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java index 5c2db61..6708780 100644 --- a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java +++ b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.java @@ -41,4 +41,6 @@ List<OpeWarehouseReserve> selectWarehouseByRidAndArtiNumberAndWid(Map params); void updateBtReserve(String id, Integer useNum); + + Integer countByReagentId(String id); } diff --git a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml index 40d4822..9cb99b9 100644 --- a/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml +++ b/src/main/java/com/nanometer/smartlab/dao/OpeWarehouseReserveDao.xml @@ -208,6 +208,13 @@ order by oa.update_time,oa.reserve </select> + <select id="countByReagentId" resultType="java.lang.Integer"> + select ifnull(sum(owr.reserve),0) + from ope_warehouse_reserve as owr + where owr.reserve > 0 + and owr.reagent_id = #{id} + group by owr.reagent_id + </select> <update id="updateByReId" parameterType="java.util.Map"> update ope_warehouse_reserve set reagent_id=#{newReId} where reagent_id=#{oldReId} diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java index 0fabdf9..a0ca110 100644 --- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java +++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.java @@ -1,6 +1,7 @@ package com.nanometer.smartlab.dao; import com.nanometer.smartlab.entity.SysReagent; +import org.apache.ibatis.annotations.Param; import org.springframework.dao.DataAccessException; import java.math.BigDecimal; @@ -36,4 +37,8 @@ String getReagentUnitByReagentId(String reagentId); List<SysReagent> getReagent(Map params); + + List<SysReagent> selectReagentSafetyNum(); + + void updateSafetyNum(@Param("id") String id, @Param("safetynum") Integer safetynum); } diff --git a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml index dbc5d1a..248d804 100644 --- a/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml +++ b/src/main/java/com/nanometer/smartlab/dao/SysReagentDao.xml @@ -29,6 +29,7 @@ <result property="type" column="type"></result> <result property="unitName" column="unitName"></result> <result property="formatName" column="formatName"></result> + <result property="safetynum" column="safetynum"></result> </resultMap> <sql id="queryWhereSql"> @@ -379,9 +380,34 @@ </if> </select> + <select id="selectReagentSafetyNum" resultMap="SysReagent"> + select + sr.id, + sr.safetynum, + sr.name, + sr.main_metering, + bm1.meta_value reagent_unit, + bm2.meta_value reagent_type, + bm3.meta_value reagent_format, + bm4.meta_value product_home, + ss.meta_value as product_home_name, + bm.meta_value as control_products_name, + supplier.name as supplierName + from sys_reagent as sr + left join base_meta as ss on sr.product_home = ss.id + left join base_meta bm on bm.id = sr.control_products + left join sys_supplier supplier on supplier.id = sr.supplier_id + left join base_meta bm1 on bm1.id = sr.reagent_unit + left join base_meta bm2 on bm2.id = sr.reagent_type + left join base_meta bm3 on bm3.id = sr.reagent_format + left join base_meta bm4 on bm4.id = sr.product_home + where sr.valid_flag = 1 + and sr.type = 1 + and safetynum > 0 + </select> - <insert id="insertSysReagent" parameterType="com.nanometer.smartlab.entity.SysReagent"> + <insert id="insertSysReagent" parameterType="com.nanometer.smartlab.entity.SysReagent"> insert into sys_reagent(id, name, cas, reagent_type, reagent_character, supplier_id, reagent_format, main_metering, reagent_unit, price, per_box, memo, valid_flag, create_time, update_time,deadline, product_sn, dangerous_flag,control_products,product_home,type) values (#{id}, #{name}, #{cas}, #{reagentType}, #{reagentCharacter}, #{supplierId}, #{reagentFormat}, #{mainMetering}, #{reagentUnit}, #{price}, #{perBox}, #{memo}, 1, now(), now(),#{deadline}, #{productSn}, #{dangerousFlag},#{controlProducts},#{productHome},#{type}) </insert> @@ -436,4 +462,9 @@ #{item} </foreach> </update> + <update id="updateSafetyNum"> + update sys_reagent + set safetynum = #{safetynum} + where id = #{id} + </update> </mapper> diff --git a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java index c2502aa..c0bd43b 100644 --- a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java +++ b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.java @@ -60,4 +60,7 @@ List<Map> getExportUserList(@Param("arp") String arp,@Param("name") String name, @Param("departmentName") String departmentName, @Param("project") String project,@Param("company") String company); + + List<String> getLibrarianEmail(); + } diff --git a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml index 196db18..811f882 100644 --- a/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml +++ b/src/main/java/com/nanometer/smartlab/dao/SysUserDao.xml @@ -377,6 +377,15 @@ </where> order by su.arp ASC </select> + <select id="getLibrarianEmail" resultType="java.lang.String"> + + select su.email + from sys_user as su + left join base_role as br on br.id = su.role_id + where br.name = '库管员' + and su.email is not null + and su.email != '' + </select> <update id="updateUserPointBySelective" parameterType="java.util.Map"> update sys_user set point=#{point} <where> diff --git a/src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java b/src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java index 25a3378..8c201c2 100644 --- a/src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java +++ b/src/main/java/com/nanometer/smartlab/email/EmailSendSchedule.java @@ -1,6 +1,7 @@ package com.nanometer.smartlab.email; import com.nanometer.smartlab.entity.EmailStatus; +import com.nanometer.smartlab.entity.OpeWarehouseReserve; import com.nanometer.smartlab.entity.SysReagent; import com.nanometer.smartlab.entity.enumtype.EmailSendStatus; import com.nanometer.smartlab.exception.BusinessException; @@ -25,6 +26,13 @@ private OpeOrderService opeOrderService; private static Logger logger = Logger.getLogger(EmailSendSchedule.class); + + @Resource + private SysReagentService sysReagentService; + @Resource + private OpeWarehouseReserveService opeWarehouseReserveService; + @Resource + private SysUserService userService; @Scheduled(fixedDelayString = "${emailSend.schedule.delay}") public void EmailSendSchedule(){ @@ -61,13 +69,23 @@ // @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次 - @Scheduled(cron = "0 0 8 * * ?") //每天8点执行一次 + @Scheduled(cron = "0 0/3 * * * ?") //每天8点执行一次 public void EmailSendStock(){ - List<String> revicerList = new ArrayList<>(); - + //收件人为人员角色为库管员的邮箱 + List<String> revicerList = userService.getLibrarianEmail(); + //先查试剂表 安全库存大于0,然后去查库存,实际库存小于安全库存的列表 List<SysReagent> sysReagentList = new ArrayList<>(); - - + //已经填写安全库存的试剂 + List<SysReagent> alreadyFillIn = sysReagentService.selectReagentSafetyNum(); + if (alreadyFillIn.size() > 0) { + for (SysReagent reagent : alreadyFillIn) { + int actualNum = opeWarehouseReserveService.countByReagentId(reagent.getId()); + if (reagent.getSafetynum() > actualNum) { + reagent.setActualnum(actualNum); + sysReagentList.add(reagent); + } + } + } StringBuffer content = new StringBuffer("<html><body>"); content.append("<div style=\"line-height:1.7;color:#000000;font-size:14px;font-family:Arial\">"); content.append("<table border=\"1\">"); @@ -89,20 +107,24 @@ content.append("<td>"+sysReagent.getName()+"</td>"); content.append("<td>"+sysReagent.getProductSn()+"</td>"); content.append("<td>"+sysReagent.getCas()+"</td>"); - content.append("<td>"+sysReagent.getReagentType()+"</td>"); + + content.append("<td>"+sysReagent.getReagentType()+"</td>");// content.append("<td>"+sysReagent.getSupplierName()+"</td>"); + content.append("<td>"+sysReagent.getProductHomeName()+"</td>"); - content.append("<td>"+sysReagent.getReagentFormat()+"</td>"); - content.append("<td>"+sysReagent.getReagentUnit()+"</td>"); - //content.append("<td>"+sysReagent+"</td>");安全库存 - //content.append("<td>"+sysReagent+"</td>");实际库存 + + content.append("<td>"+sysReagent.getReagentFormat()+"</td>");// + + content.append("<td>"+sysReagent.getReagentUnit()+"</td>");// + content.append("<td>"+sysReagent.getSafetynum()+"</td>"); + content.append("<td>"+sysReagent.getActualnum()+"</td>"); content.append("</tr>"); } content.append("</tbody></table></div>"); content.append("</body></html>"); try { - EmailSend.sendArrivalEmail(revicerList,content.toString()); +// EmailSend.sendArrivalEmail(revicerList,content.toString()); // 发送成功,更新邮件发送状态为:已发送 } catch (BusinessException e) { // 发送失败,更新邮件发送状态为:发送失败 diff --git a/src/main/java/com/nanometer/smartlab/entity/SysReagent.java b/src/main/java/com/nanometer/smartlab/entity/SysReagent.java index 24bd372..9ea2e44 100644 --- a/src/main/java/com/nanometer/smartlab/entity/SysReagent.java +++ b/src/main/java/com/nanometer/smartlab/entity/SysReagent.java @@ -43,6 +43,8 @@ private String formatName; private String favor; + private Integer safetynum; + private Integer actualnum; public void change(){ @@ -292,4 +294,22 @@ public void setControlProducts(String controlProducts) { this.controlProducts = controlProducts; } + + public Integer getSafetynum() { + return safetynum; + } + + public void setSafetynum(Integer safetynum) { + this.safetynum = safetynum; + } + + public Integer getActualnum() { + return actualnum; + } + + public void setActualnum(Integer actualnum) { + this.actualnum = actualnum; + } + + } diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java index f8ea1b4..051266e 100644 --- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java +++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveService.java @@ -47,4 +47,7 @@ List<OpeWarehouseReserve> selectWarehouseByRidAndArticleNumberAndWarehouse(String id, String articleNumber, String warehouseId); void updateBtReserve(String id,Integer useNum); + + //根据试剂Id查找当前库存 + int countByReagentId(String id); } diff --git a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java index d63916b..ecbf8be 100644 --- a/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java +++ b/src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java @@ -668,7 +668,16 @@ opeWarehouseReserveDao.updateBtReserve(id, useNum); } - @Override + @Override + public int countByReagentId(String id) { + int num = 0; + if (opeWarehouseReserveDao.countByReagentId(id) != null) { + num = opeWarehouseReserveDao.countByReagentId(id); + } + return num; + } + + @Override public void btWarehouseReserveReduce(List<OpeApplyReserve> opeList) { if (opeList.size() < 1) { return; diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java index 775a88f..b259e92 100644 --- a/src/main/java/com/nanometer/smartlab/service/SysReagentService.java +++ b/src/main/java/com/nanometer/smartlab/service/SysReagentService.java @@ -38,4 +38,9 @@ String getReagentUnitByReagentId(String reagentId); List<SysReagent> getReagent(String name, String cas, String factory, String specifications, String packing); + + List<SysReagent> selectReagentSafetyNum(); + + void updateSafetyNum(SysReagent sysReagent); + } diff --git a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java index 9c299bf..82d0f3d 100644 --- a/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java +++ b/src/main/java/com/nanometer/smartlab/service/SysReagentServiceImpl.java @@ -157,6 +157,17 @@ return sysReagentDao.getReagent(params); } + @Override + public List<SysReagent> selectReagentSafetyNum() { + + return sysReagentDao.selectReagentSafetyNum(); + } + + @Override + public void updateSafetyNum(SysReagent sysReagent) { + sysReagentDao.updateSafetyNum(sysReagent.getId(), sysReagent.getSafetynum()); + } + @Transactional(propagation = Propagation.REQUIRED) public int getSysReagentTotalCount(String name, String cas, String supplierId,Integer type) { diff --git a/src/main/java/com/nanometer/smartlab/service/SysUserService.java b/src/main/java/com/nanometer/smartlab/service/SysUserService.java index 8915b4d..861ba03 100644 --- a/src/main/java/com/nanometer/smartlab/service/SysUserService.java +++ b/src/main/java/com/nanometer/smartlab/service/SysUserService.java @@ -52,4 +52,7 @@ List<Map> getExportUserList(String arp, String name, String departmentName, String project, String company); void exportUser2Excel(List<Map> list)throws Exception; + + List<String> getLibrarianEmail(); + } diff --git a/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java index 11afaf0..021fbca 100644 --- a/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java +++ b/src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java @@ -421,4 +421,11 @@ } + //获取库管员邮箱 + @Override + public List<String> getLibrarianEmail() { + return sysUserDao.getLibrarianEmail(); + } + + } diff --git a/src/main/webapp/reagent_mng.xhtml b/src/main/webapp/reagent_mng.xhtml index 5c0222d..e4c1195 100644 --- a/src/main/webapp/reagent_mng.xhtml +++ b/src/main/webapp/reagent_mng.xhtml @@ -39,7 +39,7 @@ </p:panelGrid> </p:panel> <p:panel styleClass="center-body"> - <p:panelGrid columns="7" styleClass="btn"> + <p:panelGrid columns="8" styleClass="btn"> <p:commandButton value="新建" styleClass="new-btn" process="@this" actionListener="#{reagentMngController.onNewBtnClick}" @@ -54,6 +54,11 @@ actionListener="#{reagentMngController.onDeleteBtnClick}" update="@form"> <p:confirm header="确认" message="确认操作?"></p:confirm> + </p:commandButton> + <p:commandButton value="安全库存" styleClass="del-btn" + process="@form" + actionListener="#{reagentMngController.openUpdateSafetyNumDialog}" + update=":dialogForm-safetynum"> </p:commandButton> <p:commandButton value="试剂导入" styleClass="import-btn" onclick="importReagent()" ></p:commandButton> @@ -134,6 +139,9 @@ <p:column headerText="每箱数量"> <h:outputText value="#{row.perBox}"></h:outputText> </p:column> + <p:column headerText="安全库存" rendered="#{reagentMngController.type == 1}"> + <h:outputText value="#{row.safetynum}" ></h:outputText> + </p:column> <!-- <p:column headerText="库存">--> <!-- <h:outputText value="#{row.reserve}"></h:outputText>--> <!-- </p:column>--> @@ -465,5 +473,60 @@ </p:panel> </h:form> </p:dialog> + + <p:dialog modal="true" header="设置安全库存" appendTo="@(body)" + id="dialog-setSafetynum" widgetVar="dialog-setSafetynum" + resizable="false" width="1000"> + <h:form id="dialogForm-safetynum"> + <p:panelGrid styleClass="content2 grid-padding-bottom2"> + <p:row> + <p:column> + <p:outputLabel value="试剂名称"/> + </p:column> + <p:column> + <p:inputText value="#{reagentMngController.sysReagent.name}" + maxlength="100" + disabled="true" /> + </p:column> + <p:column> + <p:outputLabel value="CAS"/> + </p:column> + <p:column> + <p:inputText value="#{reagentMngController.sysReagent.cas}" + maxlength="100" + disabled="true"/> + </p:column> + </p:row> + <p:row> + <p:column> + <p:outputLabel value="产品编号"/> + </p:column> + <p:column> + <p:inputText value="#{reagentMngController.sysReagent.productSn}" + maxlength="100" + disabled="true"/> + + </p:column> + + <p:column> + <p:outputLabel value="安全库存"/> + </p:column> + <p:column> + <p:inputNumber value="#{reagentMngController.sysReagent.safetynum}" + minValue="0" + decimalPlaces="0" + maxlength="100"/> + + </p:column> + </p:row> + </p:panelGrid> + <p:panel styleClass="btn"> + <p:commandButton value="保存" actionListener="#{reagentMngController.updateSafetyNum}" + process="@form" update=":reagentMngForm:reagentMngDataTable"> + <p:confirm header="确认" message="确认操作?"/> + </p:commandButton> + </p:panel> + </h:form> + </p:dialog> </ui:composition> </html> -- Gitblit v1.9.2