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