Développement de la pile complète Java --- Développement du système ERP Java: avertissement d'inventaire ERP (11) commercial, JavaMail envoie des e-mails d'avertissement

1. Rapport d'avertissement d'inventaire

1. Exigences et idées de réalisation

(1) Demande

Comptez la quantité de stock et de livraison de chaque produit. Si la quantité de stock est inférieure à la quantité à expédier, un avertissement de stock doit être effectué.
Insérez la description de l'image ici

(2) Idées de mise en œuvre

Divisez tout le résultat de la recherche en 2 sous-requêtes, puis fusionnez-les
Insérez la description de l'image ici

(3) Écriture d'instructions SQL

Ce type de requête avec sous-requête est relativement compliqué. Implémentons-le étape par étape.
1) Commencez par réaliser les statistiques d'inventaire actuelles des produits et interrogez la quantité d'inventaire de chaque produit.
Insérez la description de l'image ici
Ce résultat ne peut interroger que le nombre de produits en stock et les produits qui n'existent pas dans l'inventaire. Le côté ne sera pas affiché. Nous pouvons interroger via le lien externe gauche. Utilisez la méthode nvi pour convertir la valeur nulle en 0
Insérez la description de l'image ici
2) Réalisez les statistiques des marchandises dans la commande client, comptez la quantité de chaque type de marchandises à expédier
Insérez la description de l'image ici
3) Combinez les deux requêtes ci-dessus via le numéro de produit
Insérez la description de l'image ici

(4) Création de vues

Le résultat de notre requête d'instruction ci-dessus est ce que nous utilisons souvent, et il est très fastidieux à écrire à chaque fois, nous pouvons donc directement créer une vue de la requête complexe couramment utilisée et la traiter comme une table en veille prolongée, ce qui peut être extrêmement Simplifiez notre développement et facilitez la maintenance quotidienne.

Créer une instruction SQL de vue
Insérez la description de l'image ici

2. Rédaction de code

(1) Créer une classe d'entité Storealert
package com.itzheng.erp.entity;

public class Storealert {
    
    
	private Long uuid;
	private String name;
	private Long storenum;
	private Long outnum;
	public Long getUuid() {
    
    
		return uuid;
	}
	public void setUuid(Long uuid) {
    
    
		this.uuid = uuid;
	}
	public String getName() {
    
    
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
	public Long getStorenum() {
    
    
		return storenum;
	}
	public void setStorenum(Long storenum) {
    
    
		this.storenum = storenum;
	}
	public Long getOutnum() {
    
    
		return outnum;
	}
	public void setOutnum(Long outnum) {
    
    
		this.outnum = outnum;
	}
	@Override
	public String toString() {
    
    
		return "Storealert [uuid=" + uuid + ", name=" + name + ", storenum=" + storenum + ", outnum=" + outnum + "]";
	}
}
(2) Créer un fichier de mappage

Fichier de mappage: storealert.hbm.xml
Insérez la description de l'image ici

(3) Implémentation de la couche d'accès aux données

Ajouter des méthodes et des pratiques à IStoredetailDao et StoredetailDao
1) IStoredetailDao
Insérez la description de l'image ici
2) IStoredetailDao
Insérez la description de l'image ici

(4) Réalisation de la couche de logique métier

Ajouter des méthodes et des implémentations dans IStoredetailBiz et StoredetailBiz
Insérez la description de l'image ici
Insérez la description de l'image ici

(5) Implémentation de la couche Action

Ajouter une méthode à StoredetailAction:
Insérez la description de l'image ici

(6) Code de page

1) Ajoutez js / storealert.js
Insérez la description de l'image ici
2) Ajoutez le fichier storealert.html
Insérez la description de l'image ici
3) Exécutez le résultat
http: // localhost: 8080 / erp / storealert.html
Insérez la description de l'image ici

2. JavaMail envoie des e-mails d'avertissement (étendu)

1. Analyse de la demande

Réalisez la fonction d'envoi d'avertissement par e-mail, en fonction du personnel concerné à acheter, cliquez sur le bouton "envoyer un e-mail d'alerte" pour envoyer une alerte d'inventaire.
S'il y a un élément d'alerte et qu'il est envoyé avec succès, il vous demandera que la livraison est réussie.
S'il n'y a pas d'article d'alerte, cela indiquera qu'il n'y a pas d'article en stock
Insérez la description de l'image ici

2. Introduction à JavaMail

JavaMail, comme son nom l'indique, fournit aux développeurs des interfaces de programmation liées au traitement des e-mails. Il s'agit d'une API publiée par Sun pour gérer les e-mails. Il peut facilement effectuer certaines transmissions de courrier courantes. L'API JavaMail est un ensemble de kits de développement standard fournis par Sun pour aider les développeurs Java à implémenter des fonctions d'envoi et de réception de courrier dans les applications. Il prend en charge certains protocoles de messagerie couramment utilisés, tels que SMTP, POP3 et IMAP. Lorsque les développeurs utilisent l'API JavaMail pour écrire un logiciel de traitement de courrier, ils n'ont pas besoin de prendre en compte les détails d'implémentation du protocole de messagerie sous-jacent, il suffit d'appeler la classe API correspondante dans le kit de développement JavaMail.
En utilisant JavaMail, nous pouvons implémenter
javaMailSender de Spring , qui est similaire à OutLook et FoxMail, pour encapsuler JavaMail, ce qui simplifie le développement et fait ses adieux aux API encombrantes.

3. Envoyez des e-mails d'alerte rapide dans ERP

(1) Ajouter une dépendance

Ajouter la dépendance de java mail dans le pom.xml du projet parent
Insérez la description de l'image ici

(2) Outils pour rédiger et envoyer des e-mails

Créer MailUtil dans la couche de logique métier
Insérez la description de l'image ici

(3) Ecrire le fichier de configuration du ressort

Créer applicationContext_mail.xml
Insérez la description de l'image ici

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx 
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd
        ">
	<!-- 邮件发送器 -->
	<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl" >
		<!-- smtp:发送邮件的协议 -->
		<property name="protocol" value="smtp" ></property>
		<!-- 邮件服务器地址 -->
		<property name="host" value="smtp.qq.com" ></property>
		<!-- 端口 -->
		<property name="port" value="465"></property>
		<!-- 邮箱用户名 -->
		<property name="username" value="[email protected]"></property>
		<!-- 邮箱密码 -->
		<property name="password" value="bqpfdguzaymvdcfa" ></property>
		<property name="javaMailProperties">
			<props>
				<!-- 开启认证,会检验发件人是否为邮件的用户 -->
				<prop key="mail.smtp.auth">true</prop>
				<!-- 采用ssl安全方式 -->
				<prop key="mail.smtp.ssl.enable">true</prop>
			</props>
		</property>
	</bean>
	<bean id="mailUtil" class="com.itzheng.erp.util.MailUtil" >
		 <property name="sender" ref="javaMailSender"></property>
        <property name="from" value="[email protected]"></property>
	</bean>
</beans>
(4) Ecrire des classes de logique métier

Ajouter la méthode sendStoreAlertMail à IStoredetailBiz et StoredetailBiz
IStoredetailBiz
Insérez la description de l'image ici
StoredetailBiz
Insérez la description de l'image ici

private MailUtil mailUtil;
	public void setMailUtil(MailUtil mailUtil) {
    
    
		this.mailUtil = mailUtil;
	}
	private String toAddress;// 收件箱
	private String subject;// 主题
	private String text;// 正文
	public void setToAddress(String toAddress) {
    
    
		this.toAddress = toAddress;
	}
	public void setSubject(String subject) {
    
    
		this.subject = subject;
	}
	public void setText(String text) {
    
    
		this.text = text;
	}
	/**
	 * 发送库存预警邮件
	 * 
	 * @throws MessagingException
	 */
	public void sendStoreAlertMail() throws MessagingException {
    
    
		// 得到库存预警列表
		List<Storealert> storeAlertList = storedetailDao.getStorealertList();
		if (storeAlertList.size() > 0) {
    
    
			mailUtil.sendMail(toAddress,
					subject.replace("[time]", new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date())),
					text.replace("[count]", String.valueOf(storeAlertList.size())));
		} else {
    
    
			throw new ErpException("没有库存预警信息");
		}
	}
(5) Modifier applicationContext_biz.xml

Noeud stockéeatilBiz, ajouter
Insérez la description de l'image ici

(6) Ecrire le code d'action

Modifier StoredetailAction, ajouter du code
Insérez la description de l'image ici

(7) Ecrire le code js

Modifier storealert.js
Insérez la description de l'image ici

4. Quartz envoie régulièrement des e-mails d'avertissement

(1) Exigences et idées de réalisation

Interrogez régulièrement les informations d'avertissement d'inventaire, une fois qu'il y a des produits avec avertissement d'inventaire, envoyez un e-mail au personnel concerné

(2) Cadre Quart

Quartz est un autre projet open source dans le domaine de la planification des jobs par l'organisation open source OpenSymphony.Il est entièrement écrit en Java et conçu pour être utilisé dans les applications J2SE et J2EE.
Quartz peut être utilisé pour créer des programmes simples ou complexes exécutant dix, des centaines, voire des dizaines de milliers de Jobs.
Il offre une grande flexibilité sans sacrifier la simplicité.
Vous pouvez l'utiliser pour créer des plannings simples ou complexes pour l'exécution d'un travail.

1) Job
représente une tâche (job), le contenu spécifique à exécuter.

2) JobDetail JobDetail
représente un planificateur exécutable spécifique, Job est le contenu à exécuter par ce planificateur exécutable, et
JobDetail contient également le plan et la stratégie de cette planification de tâches.
Dites au conteneur de planification d'exécuter quelle méthode de quelle classe (travail) à l'avenir

3) Trigger
est une classe qui représente la configuration d'un paramètre de planification et décrit les règles de déclenchement temporel qui déclenchent l'exécution du Job.
Un Job peut correspondre à plusieurs Triggers, mais un Trigger ne peut correspondre qu'à un Job

4) Scheduler représente un conteneur de planification. Plusieurs JobDetails et Triggers peuvent être enregistrés dans un conteneur de planification.
Le planificateur peut lier le déclencheur à un JobDetail, de sorte que lorsque le déclencheur est déclenché, le Job correspondant est exécuté.
Remarque: lorsque JobDetail et Trigger sont enregistrés sur le conteneur du planificateur, un travail assemblé (une paire de JobDetail et de Trigger) est formé et peut être planifié pour être exécuté au démarrage du conteneur.

5. Mise en œuvre du code

(1) Ajouter une dépendance au quartz

Ouvrez le pom.xml du projet parent et ajoutez une dépendance quartz:
Insérez la description de l'image ici

(2) Créer une classe de tâches

Créez une nouvelle classe MailJob dans la couche de logique métier, le nom du package est com.itzheng.erp.job
Insérez la description de l'image ici

(3) Créer une injection applicationContext_job.xml

Insérez la description de l'image ici

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop.xsd
		">
	<!-- 发送邮件任务类 -->
	<bean id="mailJob" class="com.itzheng.erp.job.MailJob">
		<property name="storedetailBiz" ref="storedetailBiz"></property>
	</bean>
	<!-- 发送库存报警邮件任务 -->
	<bean id="sendStoreAlertMailJobDetail"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="mailJob"></property>
		<property name="targetMethod" value="sendStoreAlertMail"></property>
	</bean>
	<!-- 触发器 -->
	<bean id="mailTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="sendStoreAlertMailJobDetail"></property>
		<!-- cron 表达式 (时间点的描述) 每天的 上午 12:20 和下午 16:20 的时间 执行 -->
		<property name="cronExpression" value="0 17 12,16 * * ?"></property>
	</bean>
	<!-- 总管理容器 -->
	<bean id="startQuartz"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="mailTrigger" />
			</list>
		</property>
	</bean>
</beans>

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_44757034/article/details/111320079
conseillé
Classement