基于Springboot實(shí)現(xiàn)送水公司信息管理系統(tǒng)
項(xiàng)目編號(hào):BS-XX-014
項(xiàng)目描述
springboot實(shí)現(xiàn)的送水后臺(tái)管理系統(tǒng)
運(yùn)行環(huán)境
jdk8+tomcat7+mysql+IntelliJ IDEA+maven
項(xiàng)目技術(shù)(必填)
SpringBoot+mybatis
數(shù)據(jù)庫(kù)文件(可選)
壓縮包自帶
依賴(lài)包文件(可選)
maven項(xiàng)目
項(xiàng)目運(yùn)行截圖:

系統(tǒng)主界面
客戶(hù)管理

送水工管理

送水歷史訂單

工資計(jì)算

統(tǒng)計(jì)送水?dāng)?shù)量

package com.minzu.service.impl;
import cn.hutool.crypto.digest.DigestUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.minzu.entities.Account;
import com.minzu.mapper.AccountMapper;
import com.minzu.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
/**
* TODO:登錄業(yè)務(wù)邏輯實(shí)現(xiàn)類(lèi)
* 被@Service注解修飾的類(lèi)是業(yè)務(wù)邏輯實(shí)現(xiàn)類(lèi)
* @author znz
* @version 1.0
* @date 2022/1/2 16:25
*/
@Service
public class AccountServiceImpl implements AccountService {
/**
* service依賴(lài)mapper,程序運(yùn)行期SpringBoot容器自動(dòng)幫我們
* 按照類(lèi)型裝配(將AccountMapper對(duì)象自動(dòng)裝配到AccountServiceImpl里面)
*/
@Autowired
private AccountMapper accountMapper;
/**
* 處理用戶(hù)登錄的業(yè)務(wù)邏輯
* 步驟:
* 1 根據(jù)用戶(hù)名查詢(xún)對(duì)應(yīng)的賬戶(hù)
* 2 判斷賬戶(hù)對(duì)象(Account)是否為空
* 3 如果為空登錄失敗(數(shù)據(jù)庫(kù)沒(méi)有這個(gè)用戶(hù)),返回false
* 4 如果非空,對(duì)表單輸入的密碼進(jìn)行MD5加密
* 5 判斷加密之后的密碼和數(shù)據(jù)庫(kù)的密碼是否相等
* 6 如果相等登錄成功,返回true
* 7 如果不相等登錄失敗,返回false
*
* @param userName 瀏覽器表單輸入的用戶(hù)名
* @param userPwd 瀏覽器表單輸入的密碼
* @return 登錄成功返回true,否則返回false
*/
@Override
public boolean login(String userName, String userPwd) {
// 封裝查詢(xún)條件
QueryWrapper<Account> qw = new QueryWrapper<>();
qw.eq("user_name",userName);
// 根據(jù)用戶(hù)名查詢(xún)對(duì)應(yīng)的賬戶(hù)
Account account = accountMapper.selectOne(qw);
// 條件成立:表示沒(méi)有對(duì)應(yīng)的賬戶(hù),登錄失敗,返回false
if (null == account) {
return false;
}
// 對(duì)表單輸入的密碼進(jìn)行加密
// encodingPwd存儲(chǔ)加密之后的密碼
String encodingPwd = DigestUtil.md5Hex(userPwd);
// 將加密之后的密碼和數(shù)據(jù)庫(kù)密碼進(jìn)行比較,條件成立:登錄成功,返回true。否則登錄失敗,返回false
if (Objects.equals(encodingPwd,account.getUserPwd())) {
return true;
} else {
return false;
}
}
}package com.minzu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.minzu.entities.Customer;
import com.minzu.mapper.CustomerMapper;
import com.minzu.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* TODO: 客戶(hù)管理業(yè)務(wù)邏輯接口的實(shí)現(xiàn)類(lèi)
* 被@Service注解修飾的類(lèi)是接口實(shí)現(xiàn)類(lèi),SpringBoot啟動(dòng)的時(shí)候會(huì)自動(dòng)注入
* @author znz
* @version 1.0
* @date 2022/1/1 8:27
*/
@Service
public class CustomerServiceImpl implements CustomerService {
/**
* 自動(dòng)裝配客戶(hù)管理Mapper接口
*/
@Autowired
private CustomerMapper customerMapper;
/**
* 查詢(xún)所有的客戶(hù)信息
*
* @return 客戶(hù)列表
*/
@Override
public List<Customer> listCustomer() {
return customerMapper.selectList(null);
}
/**
* 添加客戶(hù)信息
*
* @param customer 需要添加的客戶(hù)對(duì)象
* @return 受影響行數(shù),大于0添加成功,否則添加失敗
*/
@Override
public int saveCustomer(Customer customer) {
return customerMapper.insert(customer);
}
/**
* 根據(jù)客戶(hù)名稱(chēng)搜索滿足條件的客戶(hù)列表
* 例如:例如:使用模糊查詢(xún),搜索所有包含“老”的客戶(hù)信息
* 步驟:
* 1 定義QueryWrapper對(duì)象
* 2 定義查詢(xún)條件
* 3 調(diào)用CustomerMapper對(duì)象的selectList方法,將QueryWrapper對(duì)象注入到該方法中
* 4 返回搜索結(jié)果
* @param userName 搜索的查詢(xún)條件
* @return 滿足條件的客戶(hù)列表
*/
@Override
public List<Customer> searchCustomer(String userName) {
QueryWrapper<Customer> qw = new QueryWrapper<>();
qw.like("cust_name",userName);
List<Customer> custList = customerMapper.selectList(qw);
return custList;
}
/**
* 根據(jù)客戶(hù)ID刪除客戶(hù)信息
* 步驟:
* 1 創(chuàng)建QueryWrapper對(duì)象
* 2 設(shè)置要?jiǎng)h除的條件
* 3 根據(jù)id刪除客戶(hù)信息,返回受影響行數(shù)
* @param cid 客戶(hù)ID
* @return 受影響行數(shù),大于0刪除成功,否則刪除失敗
*/
@Override
public int deleteCustomerById(Integer cid) {
QueryWrapper<Customer> qw = new QueryWrapper<>();
qw.eq("cid",cid);
return customerMapper.delete(qw);
}
/**
* 根據(jù)客戶(hù)id查詢(xún)對(duì)應(yīng)的客戶(hù)信息
* 步驟:
* 1 創(chuàng)建QueryWrapper對(duì)象
* 2 設(shè)置查詢(xún)條件
* 3 調(diào)用CustomerMapper對(duì)象selectOne方法,并將QueryWrapper對(duì)象注入到該方法中,返回客戶(hù)信息
* @param cid 客戶(hù)id
* @return 客戶(hù)信息
*/
@Override
public Customer getCustomerById(Integer cid) {
QueryWrapper<Customer> qw = new QueryWrapper<>();
qw.eq("cid",cid);
return customerMapper.selectOne(qw);
}
/**
* 修改客戶(hù)信息
* 步驟:
* 1 創(chuàng)建QueryWrapper對(duì)象
* 2 設(shè)置要修改的條件(根據(jù)ID進(jìn)行修改)
* 3 調(diào)用CustomerMapper的update方法修改客戶(hù)信息,并返回受影響行數(shù)
* @param customer 采集的客戶(hù)信息
* @return 受影響行數(shù)
*/
@Override
public int updateCustomer(Customer customer) {
QueryWrapper<Customer> qw = new QueryWrapper<>();
qw.eq("cid",customer.getCid());
return customerMapper.update(customer,qw);
}
}
package com.minzu.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.minzu.entities.History;
import com.minzu.mapper.HistoryMapper;
import com.minzu.service.HistoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* TODO: 送水歷史管理接口實(shí)現(xiàn)類(lèi)
*
* @author znz
* @version 1.0
* @date 2022/1/3 8:56
*/
@Service
public class HistoryServiceImpl implements HistoryService {
@Autowired
private HistoryMapper historyMapper;
/**
* 查詢(xún)所有的送水歷史信息
* @return 送水歷史列表
*/
@Override
public List<History> listHistory() {
return historyMapper.listHistory();
}
/**
* 添加送水歷史
*
* @param history 表單采集的送水歷史信息
* @return 受影響行數(shù),大于0添加成功,否則添加失敗
*/
@Override
public int saveHistory(History history) {
return historyMapper.saveHistory(history);
}
/**
* 根據(jù)送水歷史ID查詢(xún)對(duì)應(yīng)的送水歷史
* 用途:修改之前的數(shù)據(jù)回顯
*
* @param hid 送水歷史ID
* @return 送水歷史信息
*/
@Override
public History getHistoryById(Integer hid) {
return historyMapper.getHistoryById(hid);
}
/**
* 修改送水歷史
*
* @param history 表單采集的的送水歷史信息
* @return update語(yǔ)句受影響行數(shù),大于0修改成功,否則修改失敗
*/
@Override
public int updateHistory(History history) {
return historyMapper.updateHistory(history);
}
/**
* 批量刪除
*
* @param idList 需要批量刪除的送水歷史id列表
* @return 受影響行數(shù),大于0批量刪除成功,否批量刪除失敗
*/
@Override
public int batchDeleteHistory(String idList) {
// 字符串轉(zhuǎn)換為L(zhǎng)ist集合
String[] split = StrUtil.split(idList, ",");
List<Integer> ids = new ArrayList<>();
for (String id : split) {
if (StrUtil.isNotEmpty(id)) {
ids.add(Integer.parseInt(id));
}
}
return historyMapper.batchDeleteHistory(ids);
}
}package com.minzu.service.impl;
import cn.hutool.core.util.StrUtil;
import com.minzu.entities.Salary;
import com.minzu.entities.Worker;
import com.minzu.mapper.SalaryMapper;
import com.minzu.service.SalaryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* TODO: 計(jì)算工資業(yè)務(wù)邏輯實(shí)現(xiàn)類(lèi)
* @author znz
* @version 1.0
* @date 2022/1/2 8:38
*/
@Service
public class SalaryServiceImpl implements SalaryService {
/**
* 自動(dòng)裝配SalaryMapper對(duì)象
*/
@Autowired
private SalaryMapper salaryMapper;
/**
* 計(jì)算所有送水工的工資
* @return 工資列表
*/
@Override
public List<Salary> listCalcSalary() {
return salaryMapper.listCalcSalary();
}
/**
* 根據(jù)條件計(jì)算某一段時(shí)間的送水工工資
*
* @param startDate 開(kāi)始時(shí)間
* @param endDate 結(jié)束時(shí)間
* @return 工資列表
*/
@Override
public List<Salary> listCalcSalaryByCondition(String startDate, String endDate) {
// 條件成立:表示輸入的結(jié)束時(shí)間為Null,將系統(tǒng)當(dāng)前時(shí)間作為結(jié)束時(shí)間
if(StrUtil.isEmpty(endDate)){
long currentTime = System.currentTimeMillis();
Date dt = new Date(currentTime);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
endDate = sdf.format(dt);
}
// salaryList 在某個(gè)時(shí)間段已經(jīng)為客戶(hù)送過(guò)水的送水工信息
List<Salary> salaryList = salaryMapper.listCalcSalaryByCondition(startDate, endDate);
// 沒(méi)有為客戶(hù)送過(guò)水的送水工信息
List<Worker> workerList = salaryMapper.queryNonSendWaterWorker();
// 獲取以送水的送水工名稱(chēng)
List<String> workerNameList =
salaryList.stream()
.map(Salary::getWorkerName)
.collect(Collectors.toList());
// 將沒(méi)有送水的送水工信息合并到salaryList
// 遍歷workerList,將worker對(duì)象的數(shù)據(jù)注入到Salary對(duì)象中,讓后添加到salaryList集合
workerList.forEach(worker->{
// 條件成立:表示沒(méi)有沒(méi)有送水的送水工在salaryList集合中不存在,將其放入集合
if (!workerNameList.contains(worker.getWorkerName())){
Salary sa = new Salary();
sa.setWorkerName(worker.getWorkerName());
sa.setWorkerSalary(worker.getWorkerSalary());
sa.setWorkerMoney(worker.getWorkerMoney());
// 沒(méi)有送水的送水工默認(rèn)送水?dāng)?shù)量為0
sa.setSendWaterCount(0);
// 沒(méi)有送水的送水工默認(rèn)實(shí)發(fā)工資為基本工資
sa.setFinalSalary(Double.valueOf(worker.getWorkerSalary()));
salaryList.add(sa);
}
});
// 將“實(shí)發(fā)工資”按照降序排序
// 需要對(duì)每個(gè)送水工的”實(shí)發(fā)工資“進(jìn)行比較
Collections.sort(salaryList,(o1,o2)->{
if(o1.getFinalSalary() > o2.getFinalSalary()){
return -1;
} else if (o1.getFinalSalary() < o2.getFinalSalary()){
return 1;
} else {
return 0;
}
});
// Collections.sort(salaryList, new Comparator<Salary>() {
// @Override
// public int compare(Salary o1, Salary o2) {
// if(o1.getFinalSalary() > o2.getFinalSalary()){
// return -1;
// } else if(o1.getFinalSalary() < o2.getFinalSalary()) {
// return 1;
// } else {
// return 0;
// }
// }
// });
return salaryList;
}
}package com.minzu.service.impl;
import com.minzu.entities.WaterDetails;
import com.minzu.mapper.WaterDetailsMapper;
import com.minzu.service.WaterDetailsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* TODO
*
* @author znz
* @version 1.0
* @date 2022/1/2 15:36
*/
@Service
public class WaterDetailsServiceImpl implements WaterDetailsService {
@Autowired
private WaterDetailsMapper waterDetailsMapper;
/**
* 查詢(xún)每個(gè)送水工送水的詳細(xì)信息
*
* @return 送水信息列表
*/
@Override
public List<WaterDetails> queryWaterDetails() {
return waterDetailsMapper.queryWaterDetails();
}
}到此這篇關(guān)于基于Springboot實(shí)現(xiàn)送水公司信息管理系統(tǒng)的文章就介紹到這了,更多相關(guān)Springboot送水公司信息管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)簡(jiǎn)單圖書(shū)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單圖書(shū)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
SpringBoot指標(biāo)監(jiān)控功能實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot指標(biāo)監(jiān)控功能實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
MyBatis-Plus 查詢(xún)返回實(shí)體對(duì)象還是map
這篇文章主要介紹了MyBatis-Plus 查詢(xún)返回實(shí)體對(duì)象還是map,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Netty分布式pipeline管道傳播事件的邏輯總結(jié)分析
這篇文章主要為大家介紹了Netty分布式pipeline管道傳播事件總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
spring boot上傳文件出錯(cuò)問(wèn)題如何解決
這篇文章主要介紹了spring boot上傳文件出錯(cuò)問(wèn)題如何解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
java使用計(jì)算md5校驗(yàn)碼方式比較兩個(gè)文件是否相同
MD5文件效驗(yàn)碼是一個(gè)判斷文件是否是相同文件的途徑,通過(guò)比較兩個(gè)文件的Md5效驗(yàn)碼是否相同來(lái)精確判斷兩個(gè)文件是否相同2014-04-04

