精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot與MySQL+MyBatis整合,實現商品庫存預警系統?

數據庫 MySQL
傳統的人工庫存管理系統容易出現錯誤,如誤報、漏報等,導致庫存數據不準確。通過自動化監控,您可以確保庫存數據的實時性和準確性,減少人為錯誤的可能性。

對于零售業,精確的庫存跟蹤和及時的補貨決策對于降低運營成本、提高客戶滿意度至關重要。

好處

1. 提高庫存準確性

傳統的人工庫存管理系統容易出現錯誤,如誤報、漏報等,導致庫存數據不準確。通過自動化監控,您可以確保庫存數據的實時性和準確性,減少人為錯誤的可能性。

2. 及時補貨

當庫存降至預設閾值時,系統會立即發送預警通知,提醒相關人員盡快進行補貨。這有助于避免因缺貨而導致的銷售損失,確保客戶需求得到及時滿足。

3. 降低成本

高效的庫存管理能夠有效降低倉儲成本、運輸成本和滯銷品處理成本。通過自動化監控和預警,您可以更好地控制庫存水平,避免過度庫存帶來的資金占用問題。

4. 增強客戶滿意度

確保商品始終處于充足供應狀態不僅能提高銷售額,還能增強客戶信任感和忠誠度。快速響應庫存變化的能力使您能夠在競爭激烈的市場環境中脫穎而出。

Mysql數據庫

首先,創建數據庫表和觸發器。這里我們創建了一個商品庫存表product_stock和一個預警記錄表stock_alerts。

同時,我們在product_stock表上定義了一個觸發器,當庫存數量減少到閾值以下時插入一條預警記錄。

CREATE DATABASEIFNOTEXISTS inventory_db;

USE inventory_db;

-- 商品庫存表
CREATETABLE product_stock (
    idINT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(255) NOTNULL,
    stock_quantity INTNOTNULL,
    threshold INTNOTNULLDEFAULT10-- 庫存預警閾值
);

-- 插入一些測試數據
INSERTINTO product_stock (product_name, stock_quantity, threshold)
VALUES ('Product A', 15, 10),
       ('Product B', 8, 10),
       ('Product C', 20, 10);

-- 創建預警記錄表
CREATETABLEIFNOTEXISTS stock_alerts (
    idINT AUTO_INCREMENT PRIMARY KEY,
    product_id INTNOTNULL,
    alert_time TIMESTAMPDEFAULTCURRENT_TIMESTAMP,
    FOREIGNKEY (product_id) REFERENCES product_stock(id)
);

-- 創建觸發器,在庫存數量減少到閾值以下時插入一條預警記錄
DELIMITER //

CREATETRIGGER after_update_product_stock
AFTERUPDATEON product_stock
FOREACHROW
BEGIN
    IF NEW.stock_quantity < NEW.threshold THEN
        INSERTINTO stock_alerts (product_id) VALUES (NEW.id);
    ENDIF;
END//

DELIMITER ;

代碼實操

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- MyBatis Framework -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Lombok for reducing boilerplate code -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- Spring Boot Starter Mail -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

    <!-- Spring Boot Starter Task -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-task</artifactId>
    </dependency>
</dependencies>

application.properties

配置數據庫連接信息和其他屬性,以及郵件服務器配置。

# DataSource Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/inventory_db?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=password

# MyBatis Mapper Location
mybatis.mapper-locations=classpath*:mapper/*.xml

# Email Configuration
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=fg456hj@gmail.com
spring.mail.password=AAbb123456
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

*** 請注意替換fg456hj@gmail.com和AAbb123456為您自己的Gmail地址和密碼。如果您使用其他郵件服務提供商,請相應地調整配置。

Entity類

package com.example.inventory.model;

import lombok.Data;

@Data
public class ProductStock {
    private Integer id;           // 主鍵ID
    private String productName;   // 商品名稱
    private Integer stockQuantity;// 庫存量
    private Integer threshold;    // 預警閾值
}

Mapper接口及XML文件

ProductStockMapper.java

package com.example.inventory.mapper;

import com.example.inventory.model.ProductStock;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
publicinterface ProductStockMapper {

    @Select("SELECT * FROM product_stock WHERE id = #{id}")
    ProductStock getProductById(Integer id); // 根據ID獲取商品庫存信息

    @Update("UPDATE product_stock SET stock_quantity = stock_quantity - #{quantity} WHERE id = #{id}")
    void reduceStock(@Param("id") Integer id, @Param("quantity") Integer quantity); // 減少指定ID的商品庫存

    @Select("SELECT COUNT(*) FROM stock_alerts WHERE product_id = #{productId}")
    int getAlertCountForProduct(Integer productId); // 獲取指定商品ID的預警次數

    @Select("SELECT * FROM product_stock WHERE stock_quantity < threshold")
    List<ProductStock> getLowStockProducts(); // 獲取所有低于閾值的商品庫存信息
}

ProductStockMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.inventory.mapper.ProductStockMapper">
    <!-- Additional mappings if needed can be defined here -->
</mapper>

Service層

實現業務邏輯。

package com.example.inventory.service;

import com.example.inventory.mapper.ProductStockMapper;
import com.example.inventory.model.ProductStock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.List;

@Service
publicclass InventoryService {

    @Autowired
    private ProductStockMapper productStockMapper;

    @Autowired
    private JavaMailSender mailSender;

    public ProductStock getProductById(int id) {
        return productStockMapper.getProductById(id); // 根據ID獲取商品庫存信息
    }

    @Transactional
    public boolean reduceStock(int productId, int quantity) {
        productStockMapper.reduceStock(productId, quantity); // 減少指定ID的商品庫存
        int alertCount = productStockMapper.getAlertCountForProduct(productId); // 獲取預警次數
        // 如果有預警,則發送郵件通知
        if (alertCount > 0) {
            sendAlertEmail(productStockMapper.getProductById(productId));
        }
        return alertCount > 0;
    }

    @Scheduled(fixedRate = 3600000) // 每小時執行一次
    public void checkAndSendAlerts() {
        List<ProductStock> lowStockProducts = productStockMapper.getLowStockProducts(); // 獲取所有低于閾值的商品庫存信息
        for (ProductStock product : lowStockProducts) {
            sendAlertEmail(product); // 發送郵件通知
        }
    }

    private void sendAlertEmail(ProductStock product) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo("recipient@example.com"); // 收件人郵箱地址
        message.setSubject("Inventory Alert: Low Stock for " + product.getProductName()); // 郵件主題
        message.setText("The stock quantity for " + product.getProductName() +
                " has dropped below the threshold. Current stock: " + product.getStockQuantity()); // 郵件正文
        mailSender.send(message); // 發送郵件
    }
}

Controller層

package com.example.inventory.controller;

import com.example.inventory.model.ProductStock;
import com.example.inventory.service.InventoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/products")
publicclass ProductController {

    @Autowired
    private InventoryService inventoryService;

    @GetMapping("/{id}")
    public ProductStock getProductById(@PathVariable int id) {
        return inventoryService.getProductById(id); // 根據ID獲取商品庫存信息
    }

    @PostMapping("/{id}/reduce/{quantity}")
    public boolean reduceStock(@PathVariable int id, @PathVariable int quantity) {
        return inventoryService.reduceStock(id, quantity); // 減少指定ID的商品庫存并檢查是否需要發送預警
    }
}

啟動類

package com.example.inventory;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.scheduling.annotation.EnableScheduling;

import java.util.Properties;

@SpringBootApplication
@MapperScan("com.example.inventory.mapper")
@EnableScheduling
publicclass InventoryApplication {

    public static void main(String[] args) {
        SpringApplication.run(InventoryApplication.class, args);
    }

    @Bean
    public JavaMailSender getJavaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.gmail.com");
        mailSender.setPort(587);

        mailSender.setUsername("fg456hj@gmail.com"); // 替換為您的Gmail地址
        mailSender.setPassword("AAbb123456"); // 替換為您的Gmail密碼

        Properties props = mailSender.getJavaMailProperties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.debug", "true");

        return mailSender;
    }
}


責任編輯:武曉燕 來源: Java知識日歷
相關推薦

2025-04-23 08:50:00

SpringBootCurator分布式鎖

2022-01-10 11:12:54

自動駕駛數據人工智能

2016-11-09 17:12:36

WIFI無線路由器

2025-05-06 08:40:21

SpringPostGIS系統

2025-05-09 08:34:57

RSocketSpringBoot聊天系統

2025-03-03 07:30:00

SpringBootJGraphT網絡建模

2025-03-31 08:43:34

SpringTika優化

2025-04-08 08:50:37

SpringCamel系統

2025-02-28 08:40:28

ZooKeeperSpringBoot計費系統

2020-08-12 09:26:08

谷歌地震預警系統安卓手機

2025-06-03 02:10:00

SpringInfluxDB數據

2025-09-26 08:46:30

2020-02-26 22:13:07

區塊鏈區塊鏈技術疫情防控

2025-03-11 09:28:34

2011-04-12 14:10:16

周界光纖

2025-10-11 00:00:00

2021-05-19 09:53:16

SpringbootMyBatisMySQL

2025-03-26 01:55:00

Spring協議物聯網
點贊
收藏

51CTO技術棧公眾號

久久久久久久久久成人| 亚洲一区二区四区蜜桃| 精品视频免费看| 成人精品一二区| 国产精品一区二区无码对白| 99se视频在线观看| 亚洲a级精品| 99久久免费视频.com| xvideos成人免费中文版| 黄色片一级视频| 手机看片1024日韩| 韩日精品视频| 日韩一区二区高清| 宅男一区二区三区| 中国老头性行为xxxx| 人体久久天天| 午夜伊人狠狠久久| 国产精品一 二 三| 午夜69成人做爰视频| 久久麻豆视频| 国产精品久久久久一区| 国产精品久久久久久久7电影| 国产精品1000部啪视频| 小草在线视频免费播放| 91免费观看国产| 欧美性受xxx| 中文字幕在线观看网址| 岛国av在线网站| av不卡免费在线观看| 国产精品丝袜白浆摸在线| 亚洲欧美日韩第一页| 久久久久久久性潮| 精品久久中文字幕久久av| 久久久免费看| 樱花视频在线免费观看| 第一sis亚洲原创| 在线不卡a资源高清| 日韩免费三级| 91一区二区视频| 欧美激情日韩| 亚洲国产精品高清久久久| 男人日女人逼逼| 北条麻妃在线| 国产一区二区调教| 午夜精品久久久久久久久久久久 | 国产中文av在线| 外国成人毛片| 亚洲乱码中文字幕综合| 国产伦精品一区二区三| av一区二区三| a91a精品视频在线观看| 一本大道久久加勒比香蕉| 中文字幕精品一区二区三区在线| 日本资源在线| 国产亚洲一本大道中文在线| 91久久久亚洲精品| 日韩免费视频网站| 成人精品视频| 这里只有精品视频在线| 又黄又色的网站| 欧美aaa视频| 亚洲制服欧美中文字幕中文字幕| 免费影院在线观看一区| 国产精品国产av| 99精品国产福利在线观看免费 | 成人免费av电影| 在线观看免费亚洲| 91九色国产ts另类人妖| 天天操天天射天天舔| 9l国产精品久久久久麻豆| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 国产99在线|中文| 亚洲最大的黄色网址| 日韩在线影视| 日韩欧美国产小视频| 精品久久久久av| 国产精品偷拍| 亚洲欧洲av色图| 久久久综合香蕉尹人综合网| 日韩美女一级视频| 国产精品18久久久久| 国产不卡av在线免费观看| 久久综合成人网| 日韩精品水蜜桃| 亚洲美女免费精品视频在线观看| a级大片免费看| 精品美女一区| 日韩免费在线观看| 波多野结衣一本| 久久一区二区三区喷水| 亚洲欧美成人一区二区在线电影| av永久免费观看| 思热99re视热频这里只精品| 亚洲欧洲av一区二区| xxxxxx黄色| 白白在线精品| 欧美一区二区三区不卡| 亚洲精品午夜在线观看| 欧美va在线观看| 欧美一二三区在线| theav精尽人亡av| 婷婷亚洲图片| 久久久成人的性感天堂| 国产麻豆a毛片| 妖精视频成人观看www| 国产精品久久久久久影视| 亚洲婷婷综合网| 午夜在线精品| 琪琪第一精品导航| www.国产com| 老司机一区二区三区| 91干在线观看| 久久国产视频一区| 极品少妇xxxx偷拍精品少妇| 91精品啪aⅴ在线观看国产| 好吊色在线观看| 成人高清视频在线| 精品蜜桃一区二区三区| 午夜视频在线观看网站| 18欧美乱大交hd1984| 国产午夜福利100集发布| а√在线中文在线新版| 91精品午夜视频| 成人国产精品久久久网站| 国产成人一区| 中文字幕在线亚洲| 在线观看免费av片| 国产传媒久久文化传媒| 亚洲视频sss| 好吊日视频在线观看| 亚洲九九爱视频| 美女黄色片视频| 疯狂欧洲av久久成人av电影| 日韩欧美久久久| 女人裸体性做爰全过| 久久综合九色| 成人久久一区二区| 国产精品欧美久久久久天天影视| 久久久九九九九| 综合久久国产| 成人日韩av| 欧美成人精品福利| 精品人妻少妇嫩草av无码| 欧美午夜精品| 国产成人精品在线播放| 亚洲欧美自偷自拍| 国产精品网站在线| 欧美一区二区视频在线播放| 筱崎爱全乳无删减在线观看 | 国产精品入口免费视频一| 丝袜视频国产在线播放| 中文久久乱码一区二区| 黄色一级一级片| 精品国产乱码| 欧美日韩成人在线视频| 色屁屁影院www国产高清麻豆| 99在线精品视频| 91视频 -- 69xx| 亚洲素人在线| 国产精品福利在线观看网址| 丁香婷婷在线| 亚洲一区二区成人在线观看| 中文字幕制服丝袜| 欧美日韩激情在线一区二区三区| 欧洲永久精品大片ww免费漫画| 日本天堂在线| 欧美三级日韩在线| 久久国产波多野结衣| 99热免费精品| 欧美日产一区二区三区在线观看| av软件在线观看| 欧洲一区二区三区免费视频| 亚洲天堂岛国片| 精彩视频一区二区三区| 国产一级大片免费看| 91精品国产经典在线观看| 国产亚洲欧美视频| www成人在线| 国产精品亚洲午夜一区二区三区 | 欧美日韩成人综合| 添女人荫蒂视频| 日韩精品五月天| 国产欧美日韩综合一区在线观看| 日本免费在线观看| 日韩欧美一级精品久久| 国产香蕉视频在线| 国产精品日韩成人| 日批视频免费看| 三级久久三级久久久| 日韩精品手机在线观看| 国产在线|日韩| 亚洲欧美激情视频| 一卡二卡三卡在线观看| 亚洲高清免费观看高清完整版在线观看 | 亚洲女优在线| 小说区视频区图片区| 亚洲mmav| 欧美国产乱视频| 99热这里只有精品在线| 午夜成人免费视频| 亚洲aaa视频| 久久精品久久综合| 亚洲综合网中心| 免费看成人人体视频| 国产在线拍偷自揄拍精品| 91福利在线视频| 亚洲福利视频专区| 一本一道精品欧美中文字幕| 国产精品久久久久一区二区三区共| 美女露出粉嫩尿囗让男人桶| 美女看a上一区| 亚洲一区二区三区涩| 成人盗摄视频| 91免费国产网站| 日本成人伦理电影| 欧美有码在线观看| 宅男网站在线免费观看| 中文字幕亚洲欧美日韩在线不卡| 午夜成人免费影院| 日韩欧美一区二区久久婷婷| 欧美男人天堂网| 中文字幕日本不卡| 亚洲熟妇无码av| 成人av网站在线| 久久人人爽人人片| 久久99久久99小草精品免视看| 潘金莲一级淫片aaaaa免费看| 久久av免费| 国产日韩av在线播放| 大胆人体一区二区| 中文字幕日韩专区| 欧美日韩在线精品一区二区三区激情综 | 一区二区在线免费视频| 天堂网av2014| 亚洲成色www8888| 肥臀熟女一区二区三区| 日韩精品一区二区三区在线观看| 国产精品美女一区| 欧美二区三区的天堂| 伊人网中文字幕| 欧美日韩一级片网站| 中文字幕av影视| 欧美日韩一二三| 中文字幕在线播放不卡| 欧美日韩在线直播| 中文字幕777| 欧美精品久久久久久久多人混战| 亚洲一区二区三区网站| 欧美日韩在线播放三区四区| 亚洲系列第一页| 欧美久久久影院| 国产美女免费看| 精品福利在线观看| 国产精品2020| 亚洲国产精品ⅴa在线观看| 男人天堂av电影| 国产精品2024| 91精品人妻一区二区三区四区| 国产91精品精华液一区二区三区| 动漫av免费观看| 欧美欧美天天天天操| 国内精品国产三级国产99| 欧美精品二区| 黄页网站在线观看视频| 91综合久久一区二区| 一区二区成人国产精品 | 国产人妖乱国产精品人妖| 五月天国产视频| 高清视频一区二区| 黄色污在线观看| 国产一区91精品张津瑜| 波多野结衣中文字幕在线播放| 老司机久久99久久精品播放免费| 国产视频一区二区视频| 狠狠色伊人亚洲综合成人| 欧洲成人午夜精品无码区久久| 99精品桃花视频在线观看| 亚洲欧美激情一区二区三区| 成人高清在线视频| xxxxx在线观看| 亚洲精品视频在线观看网站| 日韩av在线播| 亚洲黄色小说网站| av黄色免费在线观看| 一区二区三区 在线观看视频| 日韩久久久久久久久| 在线一区二区三区四区| 国产xxxx孕妇| 亚洲人在线观看| 在线免费观看污| 欧洲成人在线观看| 久久丁香四色| 成人免费福利视频| 噜噜噜天天躁狠狠躁夜夜精品| 3d动漫啪啪精品一区二区免费| 三级成人黄色影院| 热久久免费视频精品| 色综合视频一区二区三区44| 狠狠色噜噜狠狠狠狠色吗综合| 日韩国产综合| 5月婷婷6月丁香| 精品一区二区三区日韩| 亚洲精品视频大全| 夜夜嗨av一区二区三区网页| 日韩不卡高清视频| 欧美精品一区二区久久婷婷| 粉嫩小泬无遮挡久久久久久| 宅男66日本亚洲欧美视频| 成av人片在线观看www| 成人女保姆的销魂服务| 国产99亚洲| 日韩日韩日韩日韩日韩| 国产真实乱偷精品视频免| 国产免费一区二区三区网站免费| 亚洲一线二线三线视频| 91精品国产乱码久久| 亚洲性猛交xxxxwww| av在线资源| 青青草原成人在线视频| 亚洲精品一区二区三区中文字幕| 成人av男人的天堂| 99精品美女| 免费看黄色一级大片| 91丨porny丨国产| 精品无码免费视频| 这里只有精品免费| 性开放的欧美大片| 国产精品草莓在线免费观看| 亚洲欧洲美洲国产香蕉| 黄色成人在线看| 成人深夜视频在线观看| 青青草视频成人| 亚洲国产精品一区二区久久恐怖片| 国产一区二区三区黄片| 日韩在线视频观看正片免费网站| 宅男网站在线免费观看| 亚洲精品日产aⅴ| 琪琪久久久久日韩精品| 福利视频一二区| 成人妖精视频yjsp地址| 久操免费在线视频| 精品久久久久久中文字幕大豆网| 亚洲毛片在线播放| 欧美大片免费观看| 免费一级欧美片在线观看网站| 免费观看中文字幕| 激情都市一区二区| 暗呦丨小u女国产精品| 7799精品视频| av网站大全在线| 国产成人精品一区二区三区福利| 国精品一区二区| 好吊色视频一区二区三区| 午夜成人免费视频| 日本成人一区二区三区| 国产91精品最新在线播放| 欧美精选一区二区三区| 拔插拔插华人永久免费| 97久久精品人人爽人人爽蜜臀| 日本熟妇一区二区| 日韩成人在线电影网| 麻豆免费在线观看| 情事1991在线| 成人国产精品一级毛片视频| 玖玖爱视频在线| 亚洲最新视频在线播放| 天堂中文在线看| 国产精品av在线| 亚洲国产老妈| 亚洲精品怡红院| 亚洲人123区| 亚洲精品国产无码| 日韩在线视频免费观看| 1313精品午夜理伦电影| 免费在线观看的av网站| 国产精品理论在线观看| av中文在线观看| 91精品国产91久久| 成久久久网站| 国产九九九视频| 亚洲超碰精品一区二区| 黑人与亚洲人色ⅹvideos| 91精品国产成人| 日本一本不卡| 在线观看免费视频黄| 在线精品视频一区二区三四| 成人免费高清| 成人免费福利在线| 99精品国产在热久久| 女人18毛片毛片毛片毛片区二| 精品久久国产字幕高潮| av成人免费看| 日韩伦理在线免费观看| 国产欧美日韩精品在线| 亚洲精选一区二区三区| 欧美大片在线看| 欧美激情在线免费| 日韩久久久久久久久久久| 91久久香蕉国产日韩欧美9色| 欧美精品久久久久久久久久丰满|