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()"); } } 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); } 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} 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); } 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,6 +380,31 @@ </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"> @@ -436,4 +462,9 @@ #{item} </foreach> </update> <update id="updateSafetyNum"> update sys_reagent set safetynum = #{safetynum} where id = #{id} </update> </mapper> 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(); } 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> 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) { // 发送失败,更新邮件发送状态为:发送失败 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; } } 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); } src/main/java/com/nanometer/smartlab/service/OpeWarehouseReserveServiceImpl.java
@@ -669,6 +669,15 @@ } @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; 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); } 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) { 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(); } src/main/java/com/nanometer/smartlab/service/SysUserServiceImpl.java
@@ -421,4 +421,11 @@ } //获取库管员邮箱 @Override public List<String> getLibrarianEmail() { return sysUserDao.getLibrarianEmail(); } } 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> @@ -133,6 +138,9 @@ </p:column>--> <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>--> @@ -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>