You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

334 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.KuaidiyuanEntity;
import com.entity.view.KuaidiyuanView;
import com.service.KuaidiyuanService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
/**
* 快递员
* 后端接口
* @author
* @email
* @date 2023-02-17 16:59:28
*/
@RestController // 标识为RESTful控制器返回JSON数据
@RequestMapping("/kuaidiyuan") // 定义基础请求路径
public class KuaidiyuanController {
@Autowired // 自动注入快递员服务
private KuaidiyuanService kuaidiyuanService;
@Autowired // 自动注入Token服务用于生成和验证JWT token
private TokenService tokenService;
/**
* 登录接口
* @param username 员工账号
* @param password 密码
* @param captcha 验证码(参数中存在但未使用)
* @param request HTTP请求对象
* @return 登录结果包含token或错误信息
*/
@IgnoreAuth // 忽略认证,无需登录即可访问
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
// 根据员工账号查询用户信息
KuaidiyuanEntity u = kuaidiyuanService.selectOne(new EntityWrapper<KuaidiyuanEntity>().eq("yuangongzhanghao", username));
// 验证用户是否存在且密码是否正确
if(u == null || !u.getMima().equals(password)) {
return R.error("账号或密码不正确");
}
// 生成JWT token包含用户ID、用户名、用户表和角色名称
String token = tokenService.generateToken(u.getId(), username, "kuaidiyuan", "快递员");
return R.ok().put("token", token); // 返回成功响应和token
}
/**
* 注册接口
* @param kuaidiyuan 快递员实体对象
* @return 注册结果
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody KuaidiyuanEntity kuaidiyuan){
// ValidatorUtils.validateEntity(kuaidiyuan); // 参数验证(已注释)
// 检查用户名是否已存在
KuaidiyuanEntity u = kuaidiyuanService.selectOne(new EntityWrapper<KuaidiyuanEntity>().eq("yuangongzhanghao", kuaidiyuan.getYuangongzhanghao()));
if(u != null) {
return R.error("注册用户已存在");
}
// 生成用户ID并保存
Long uId = new Date().getTime();
kuaidiyuan.setId(uId);
kuaidiyuanService.insert(kuaidiyuan);
return R.ok(); // 返回注册成功
}
/**
* 退出登录接口
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
// 使session失效清除登录状态
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 获取当前登录用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
// 从session中获取用户ID
Long id = (Long)request.getSession().getAttribute("userId");
// 根据ID查询用户信息
KuaidiyuanEntity u = kuaidiyuanService.selectById(id);
return R.ok().put("data", u); // 返回用户信息
}
/**
* 密码重置接口
* @param username 员工账号
* @param request HTTP请求对象
* @return 重置结果
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
// 检查用户是否存在
KuaidiyuanEntity u = kuaidiyuanService.selectOne(new EntityWrapper<KuaidiyuanEntity>().eq("yuangongzhanghao", username));
if(u == null) {
return R.error("账号不存在");
}
// 重置密码为默认值"123456"
u.setMima("123456");
kuaidiyuanService.updateById(u);
return R.ok("密码已重置为123456");
}
/**
* 后端列表 - 分页查询快递员信息(需要认证)
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, KuaidiyuanEntity kuaidiyuan,
HttpServletRequest request){
// 创建查询条件包装器
EntityWrapper<KuaidiyuanEntity> ew = new EntityWrapper<KuaidiyuanEntity>();
// 执行分页查询:模糊/等值查询 -> 范围查询 -> 排序 -> 分页
PageUtils page = kuaidiyuanService.queryPage(params,
MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kuaidiyuan), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表 - 分页查询快递员信息(无需认证)
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, KuaidiyuanEntity kuaidiyuan,
HttpServletRequest request){
EntityWrapper<KuaidiyuanEntity> ew = new EntityWrapper<KuaidiyuanEntity>();
PageUtils page = kuaidiyuanService.queryPage(params,
MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, kuaidiyuan), params), params));
return R.ok().put("data", page);
}
/**
* 列表查询 - 查询所有匹配条件的快递员
*/
@RequestMapping("/lists")
public R list(KuaidiyuanEntity kuaidiyuan){
EntityWrapper<KuaidiyuanEntity> ew = new EntityWrapper<KuaidiyuanEntity>();
// 将所有非空属性转换为查询条件
ew.allEq(MPUtil.allEQMapPre(kuaidiyuan, "kuaidiyuan"));
return R.ok().put("data", kuaidiyuanService.selectListView(ew));
}
/**
* 条件查询 - 根据条件查询单个快递员信息
*/
@RequestMapping("/query")
public R query(KuaidiyuanEntity kuaidiyuan){
EntityWrapper<KuaidiyuanEntity> ew = new EntityWrapper<KuaidiyuanEntity>();
ew.allEq(MPUtil.allEQMapPre(kuaidiyuan, "kuaidiyuan"));
KuaidiyuanView kuaidiyuanView = kuaidiyuanService.selectView(ew);
return R.ok("查询快递员成功").put("data", kuaidiyuanView);
}
/**
* 后端详情 - 根据ID查询快递员详情需要认证
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
KuaidiyuanEntity kuaidiyuan = kuaidiyuanService.selectById(id);
return R.ok().put("data", kuaidiyuan);
}
/**
* 前端详情 - 根据ID查询快递员详情无需认证
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
KuaidiyuanEntity kuaidiyuan = kuaidiyuanService.selectById(id);
return R.ok().put("data", kuaidiyuan);
}
/**
* 后端保存 - 新增快递员(需要认证)
*/
@RequestMapping("/save")
public R save(@RequestBody KuaidiyuanEntity kuaidiyuan, HttpServletRequest request){
// 生成唯一ID时间戳 + 随机数
kuaidiyuan.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue());
// ValidatorUtils.validateEntity(kuaidiyuan); // 参数验证(已注释)
// 检查用户名是否已存在
KuaidiyuanEntity u = kuaidiyuanService.selectOne(new EntityWrapper<KuaidiyuanEntity>().eq("yuangongzhanghao", kuaidiyuan.getYuangongzhanghao()));
if(u != null) {
return R.error("用户已存在");
}
// 重新设置ID并保存
kuaidiyuan.setId(new Date().getTime());
kuaidiyuanService.insert(kuaidiyuan);
return R.ok();
}
/**
* 前端保存 - 新增快递员(无需认证)
*/
@RequestMapping("/add")
public R add(@RequestBody KuaidiyuanEntity kuaidiyuan, HttpServletRequest request){
// 生成唯一ID时间戳 + 随机数
kuaidiyuan.setId(new Date().getTime() + new Double(Math.floor(Math.random() * 1000)).longValue());
// ValidatorUtils.validateEntity(kuaidiyuan); // 参数验证(已注释)
// 检查用户名是否已存在
KuaidiyuanEntity u = kuaidiyuanService.selectOne(new EntityWrapper<KuaidiyuanEntity>().eq("yuangongzhanghao", kuaidiyuan.getYuangongzhanghao()));
if(u != null) {
return R.error("用户已存在");
}
// 重新设置ID并保存
kuaidiyuan.setId(new Date().getTime());
kuaidiyuanService.insert(kuaidiyuan);
return R.ok();
}
/**
* 修改 - 更新快递员信息
*/
@RequestMapping("/update")
@Transactional // 添加事务管理
public R update(@RequestBody KuaidiyuanEntity kuaidiyuan, HttpServletRequest request){
// ValidatorUtils.validateEntity(kuaidiyuan); // 参数验证(已注释)
kuaidiyuanService.updateById(kuaidiyuan); // 全字段更新
return R.ok();
}
/**
* 删除 - 批量删除快递员
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
// 将数组转换为List执行批量删除
kuaidiyuanService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口 - 根据条件统计快递员数量
* @param columnName 统计的列名
* @param type 统计类型
* @param map 包含统计条件的参数映射
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type, @RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
// 处理日期类型统计
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
// 处理开始日期
if(map.get("remindstart") != null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH, remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
// 处理结束日期
if(map.get("remindend") != null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH, remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
// 构建查询条件
Wrapper<KuaidiyuanEntity> wrapper = new EntityWrapper<KuaidiyuanEntity>();
if(map.get("remindstart") != null) {
wrapper.ge(columnName, map.get("remindstart")); // 大于等于开始值
}
if(map.get("remindend") != null) {
wrapper.le(columnName, map.get("remindend")); // 小于等于结束值
}
// 执行统计查询
int count = kuaidiyuanService.selectCount(wrapper);
return R.ok().put("count", count); // 返回统计结果
}
}