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().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().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().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 params, KuaidiyuanEntity kuaidiyuan, HttpServletRequest request){ // 创建查询条件包装器 EntityWrapper ew = new EntityWrapper(); // 执行分页查询:模糊/等值查询 -> 范围查询 -> 排序 -> 分页 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 params, KuaidiyuanEntity kuaidiyuan, HttpServletRequest request){ EntityWrapper ew = new EntityWrapper(); 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 ew = new EntityWrapper(); // 将所有非空属性转换为查询条件 ew.allEq(MPUtil.allEQMapPre(kuaidiyuan, "kuaidiyuan")); return R.ok().put("data", kuaidiyuanService.selectListView(ew)); } /** * 条件查询 - 根据条件查询单个快递员信息 */ @RequestMapping("/query") public R query(KuaidiyuanEntity kuaidiyuan){ EntityWrapper ew = new EntityWrapper(); 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().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().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 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 wrapper = new EntityWrapper(); 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); // 返回统计结果 } }