基于Springboot实现送水公司信息管理系统

网友投稿 308 2022-09-03


基于Springboot实现送水公司信息管理系统

项目编号:BS-XX-014

项目描述

springboot实现的送水后台管理系统

运行环境

jdk8+tomcat7+mysql+IntelliJ IDEA+maven

项目技术(必填)

SpringBoot+mybatis

数据库文件(可选)

压缩包自带

依赖包文件(可选)

maven项目

项目运行截图:

系统主界面

客户管理

送水工管理

送水历史订单

工资计算

统计送水数量

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:登录业务逻辑实现类

* 被@Service注解修饰的类是业务逻辑实现类

* @author znz

* @version 1.0

* @date 2022/1/2 16:25

*/

@Service

public class AccountServiceImpl implements AccountService {

/**

* service依赖mapper,程序运行期SpringBoot容器自动帮我们

* 按照类型装配(将AccountMapper对象自动装配到AccountServiceImpl里面)

*/

@Autowired

private AccountMapper accountMapper;

/**

* 处理用户登录的业务逻辑

* 步骤:

* 1 根据用户名查询对应的账户

* 2 判断账户对象(Account)是否为空

* 3 如果为空登录失败(数据库没有这个用户),返回false

* 4 如果非空,对表单输入的密码进行MD5加密

* 5 判断加密之后的密码和数据库的密码是否相等

* 6 如果相等登录成功,返回true

* 7 如果不相等登录失败,返回false

*

* @param userName 浏览器表单输入的用户名

* @param userPwd 浏览器表单输入的密码

* @return 登录成功返回true,否则返回false

*/

@Override

public boolean login(String userName, String userPwd) {

// 封装查询条件

QueryWrapper qw = new QueryWrapper<>();

qw.eq("user_name",userName);

// 根据用户名查询对应的账户

Account account = accountMapper.selUYRredPIectOne(qw);

// 条件成立:表示没有对应的账户,登录失败,返回false

if (null == account) {

return false;

}

// 对表单输入的密码进行加密

// encodingPwd存储加密之后的密码

String encodingPwd = DigestUtil.md5Hex(userPwd);

// 将加密之后的密码和数据库密码进行比较,条件成立:登录成功,返回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.annotationUYRredPI.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

/**

* TODO: 客户管理业务逻辑接口的实现类

* 被@Service注解修饰的类是接口实现类,SpringBoot启动的时候会自动注入

* @author znz

* @version 1.0

* @date 2022/1/1 8:27

*/

@Service

public class CustomerServiceImpl implements CustomerService {

/**

* 自动装配客户管理Mapper接口

*/

@Autowired

private CustomerMapper customerMapper;

/**

* 查询所有的客户信息

*

* @return 客户列表

*/

@Override

public List listCustomer() {

return customerMapper.selectList(null);

}

/**

* 添加客户信息

*

* @param customer 需要添加的客户对象

* @return 受影响行数,大于0添加成功,否则添加失败

*/

@Override

public int saveCustomer(Customer customer) {

return customerMapper.insert(customer);

}

/**

* 根据客户名称搜索满足条件的客户列表

* 例如:例如:使用模糊查询,搜索所有包含“老”的客户信息

* 步骤:

* 1 定义QueryWrapper对象

* 2 定义查询条件

* 3 调用CustomerMapper对象的selectList方法,将QueryWrapper对象注入到该方法中

* 4 返回搜索结果

* @param userName 搜索的查询条件

* @return 满足条件的客户列表

*/

@Override

public List searchCustomer(String userName) {

QueryWrapper qw = new QueryWrapper<>();

qw.like("cust_name",userName);

List custList = customerMapper.selectList(qw);

return custList;

}

/**

* 根据客户ID删除客户信息

* 步骤:

* 1 创建QueryWrapper对象

* 2 设置要删除的条件

* 3 根据id删除客户信息,返回受影响行数

* @param cid 客户ID

* @return 受影响行数,大于0删除成功,否则删除失败

*/

@Override

public int deleteCustomerById(Integer cid) {

QueryWrapper qw = new QueryWrapper<>();

qw.eq("cid",cid);

return customerMapper.delete(qw);

}

/**

* 根据客户id查询对应的客户信息

* 步骤:

* 1 创建QueryWrapper对象

* 2 设置查询条件

* 3 调用CustomerMapper对象selectOne方法,并将QueryWrapper对象注入到该方法中,返回客户信息

* @param cid 客户id

* @return 客户信息

*/

@Override

public Customer getCustomerById(Integer cid) {

QueryWrapper qw = new QueryWrapper<>();

qw.eq("cid",cid);

return customerMapper.selectOne(qw);

}

/**

* 修改客户信息

* 步骤:

* 1 创建QueryWrapper对象

* 2 设置要修改的条件(根据ID进行修改)

* 3 调用CustomerMapper的update方法修改客户信息,并返回受影响行数

* @param customer 采集的客户信息

* @return 受影响行数

*/

@Override

public int updateCustomer(Customer customer) {

QueryWrapper 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: 送水历史管理接口实现类

*

* @author znz

* @version 1.0

* @date 2022/1/3 8:56

*/

@Service

public class HistoryServiceImpl implements HistoryService {

@Autowired

private HistoryMapper historyMapper;

/**

* 查询所有的送水历史信息

* @return 送水历史列表

*/

@Override

public List listHistory() {

return historyMapper.listHistory();

}

/**

* 添加送水历史

*

* @param history 表单采集的送水历史信息

* @return 受影响行数,大于0添加成功,否则添加失败

*/

@Override

public int saveHistory(History history) {

return historyMapper.saveHistory(history);

}

/**

* 根据送水历史ID查询对应的送水历史

* 用途:修改之前的数据回显

*

* @param hid 送水历史ID

* @return 送水历史信息

*/

@Override

public History getHistoryById(Integer hid) {

return historyMapper.getHistoryById(hid);

}

/**

* 修改送水历史

*

* @param history 表单采集的的送水历史信息

* @return update语句受影响行数,大于0修改成功,否则修改失败

*/

@Override

public int updateHistory(History history) {

return historyMapper.updateHistory(history);

}

/**

* 批量删除

*

* @param idList 需要批量删除的送水历史id列表

* @return 受影响行数,大于0批量删除成功,否批量删除失败

*/

@Override

public int batchDeleteHistory(String idList) {

// 字符串转换为List集合

String[] split = StrUtil.split(idList, ",");

List 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: 计算工资业务逻辑实现类

* @author znz

* @version 1.0

* @date 2022/1/2 8:38

*/

@Service

public class SalaryServiceImpl implements SalaryService {

/**

* 自动装配SalaryMapper对象

*/

@Autowired

private SalaryMapper salaryMapper;

/**

* 计算所有送水工的工资

* @return 工资列表

*/

@Override

public List listCalcSalary() {

return salaryMapper.listCalcSalary();

}

/**

* 根据条件计算某一段时间的送水工工资

*

* @param startDate 开始时间

* @param endDate 结束时间

* @return 工资列表

*/

@Override

public List listCalcSalaryByCondition(String startDate, String endDate) {

// 条件成立:表示输入的结束时间为Null,将系统当前时间作为结束时间

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 在某个时间段已经为客户送过水的送水工信息

List salaryList = salaryMapper.listCalcSalaryByCondition(startDate, endDate);

// 没有为客户送过水的送水工信息

List workerList = salaryMapper.queryNonSendWaterWorker();

// 获取以送水的送水工名称

List workerNameList =

salaryList.stream()

.map(Salary::getWorkerName)

.collect(Collectors.toList());

// 将没有送水的送水工信息合并到salaryList

// 遍历workerList,将worker对象的数据注入到Salary对象中,让后添加到salaryList集合

workerList.forEach(worker->{

// 条件成立:表示没有没有送水的送水工在salaryList集合中不存在,将其放入集合

if (!workerNameList.contains(worker.getWorkerName())){

Salary sa = new Salary();

sa.setWorkerName(worker.getWorkerName());

sa.setWorkerSalary(worker.getWorkerSalary());

sa.setWorkerMoney(worker.getWorkerMoney());

// 没有送水的送水工默认送水数量为0

sa.setSendWaterCount(0);

// 没有送水的送水工默认实发工资为基本工资

sa.setFinalSalary(Double.valueOf(worker.getWorkerSalary()));

salaryList.add(sa);

}

});

// 将“实发工资”按照降序排序

// 需要对每个送水工的”实发工资“进行比较

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() {

// @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 {

UYRredPI @Autowired

private WaterDetailsMapper waterDetailsMapper;

/**

* 查询每个送水工送水的详细信息

*

* @return 送水信息列表

*/

@Override

public List queryWaterDetails() {

return waterDetailsMapper.queryWaterDetails();

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:# yyds干货盘点 # 记单词不自觉?用Python来定时敲醒你沉睡的心灵吧!
下一篇:亲测可用的 Linux(Ubuntu18.04下)可运行的俄罗斯方块游戏的仿真环境—————————可用于强化学习算法的游戏模拟器环境(亲测可用的视频APP下载)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~