package cc.mrbird.febs.system.controller; import cc.mrbird.febs.common.annotation.Limit; import cc.mrbird.febs.common.controller.BaseController; import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.common.enumerates.AgentLevelEnum; import cc.mrbird.febs.common.enumerates.OrderPayMethodEnum; import cc.mrbird.febs.common.enumerates.OrderStatusEnum; import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.service.ValidateCodeService; import cc.mrbird.febs.common.utils.Md5Util; import cc.mrbird.febs.mall.entity.MallMember; import cc.mrbird.febs.mall.mapper.MallAchieveRecordMapper; import cc.mrbird.febs.mall.mapper.MallMemberMapper; import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; import cc.mrbird.febs.monitor.entity.LoginLog; import cc.mrbird.febs.monitor.service.ILoginLogService; import cc.mrbird.febs.system.entity.User; import cc.mrbird.febs.system.service.IUserService; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; import org.apache.shiro.authc.UsernamePasswordToken; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.validation.constraints.NotBlank; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author MrBird */ @Validated @RestController @RequiredArgsConstructor public class LoginController extends BaseController { private final IUserService userService; private final ValidateCodeService validateCodeService; private final ILoginLogService loginLogService; private final MallMemberMapper mallMemberMapper; private final MallOrderInfoMapper mallOrderInfoMapper; private final MallAchieveRecordMapper mallAchieveRecordMapper; @PostMapping("login") @Limit(key = "login", period = 60, count = 10, name = "登录接口", prefix = "limit") public FebsResponse login( @NotBlank(message = "{required}") String username, @NotBlank(message = "{required}") String password, @NotBlank(message = "{required}") String verifyCode, boolean rememberMe, HttpServletRequest request) throws FebsException { HttpSession session = request.getSession(); validateCodeService.check(session.getId(), verifyCode); password = Md5Util.encrypt(username.toLowerCase(), password); UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe); super.login(token); // 保存登录日志 LoginLog loginLog = new LoginLog(); loginLog.setUsername(username); loginLog.setSystemBrowserInfo(); this.loginLogService.saveLoginLog(loginLog); return new FebsResponse().success(); } @PostMapping("regist") public FebsResponse regist( @NotBlank(message = "{required}") String username, @NotBlank(message = "{required}") String password) throws FebsException { User user = userService.findByName(username); if (user != null) { throw new FebsException("该用户名已存在"); } this.userService.regist(username, password); return new FebsResponse().success(); } @GetMapping("index/{username}") public FebsResponse index(@NotBlank(message = "{required}") @PathVariable String username) { // 更新登录时间 this.userService.updateLoginTime(username); Map data = new HashMap<>(5); // 获取系统访问记录 // Long totalVisitCount = this.loginLogService.findTotalVisitCount(); // data.put("totalVisitCount", totalVisitCount); // Long todayVisitCount = this.loginLogService.findTodayVisitCount(); // data.put("todayVisitCount", todayVisitCount); // Long todayIp = this.loginLogService.findTodayIp(); // data.put("todayIp", todayIp); //支付统计 data.put("wechatPay",mallOrderInfoMapper.selectSumAmountByPayMethodAndStatue(OrderPayMethodEnum.WECHAT.getName(), OrderStatusEnum.FINISH.getValue())); data.put("alipayPay",mallOrderInfoMapper.selectSumAmountByPayMethodAndStatue(OrderPayMethodEnum.ALIPAY.getName(), OrderStatusEnum.FINISH.getValue())); data.put("scorePay",mallOrderInfoMapper.selectSumAmountByPayMethodAndStatue(OrderPayMethodEnum.SCORE.getName(), OrderStatusEnum.FINISH.getValue())); data.put("balancePay",mallOrderInfoMapper.selectSumAmountByPayMethodAndStatue(OrderPayMethodEnum.BALANCE.getName(), OrderStatusEnum.FINISH.getValue())); data.put("lastDay", mallAchieveRecordMapper.selectAchieveTotal("D", DateUtil.offsetDay(new Date(), -1))); data.put("today", mallAchieveRecordMapper.selectAchieveTotal("D", new Date())); data.put("lastMonth", mallAchieveRecordMapper.selectAchieveTotal("M", DateUtil.offsetMonth(new Date(), -1))); data.put("thisMonth", mallAchieveRecordMapper.selectAchieveTotal("M", new Date())); //会员数据 data.put("totalMember",mallMemberMapper.selectCount(new QueryWrapper<>()) ); QueryWrapper formalMember = new QueryWrapper<>(); formalMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name()); data.put("formalMember",mallMemberMapper.selectCount(formalMember)); QueryWrapper informalMember = new QueryWrapper<>(); informalMember.eq("level", AgentLevelEnum.ZERO_LEVEL.name()); data.put("informalMember",mallMemberMapper.selectCount(informalMember)); QueryWrapper todayMember = new QueryWrapper<>(); todayMember.like("CREATED_TIME", DateUtil.today()); // todayMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name()); data.put("todayMember",mallMemberMapper.selectCount(todayMember)); QueryWrapper thisMonthMember = new QueryWrapper<>(); thisMonthMember.like("CREATED_TIME", DateUtil.format(DateUtil.date(),"yyyy-MM")); // thisMonthMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name()); data.put("thisMonthMember",mallMemberMapper.selectCount(thisMonthMember)); QueryWrapper lastMonthMember = new QueryWrapper<>(); lastMonthMember.like("CREATED_TIME", DateUtil.format(DateUtil.offsetMonth(new Date(), -1),"yyyy-MM")); // lastMonthMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name()); data.put("lastMonthMember",mallMemberMapper.selectCount(lastMonthMember)); // 获取近期系统访问记录 List> lastSevenVisitCount = this.loginLogService.findLastSevenDaysVisitCount(null); data.put("lastSevenVisitCount", lastSevenVisitCount); User param = new User(); param.setUsername(username); List> lastSevenUserVisitCount = this.loginLogService.findLastSevenDaysVisitCount(param); data.put("lastSevenUserVisitCount", lastSevenUserVisitCount); return new FebsResponse().success().data(data); } @GetMapping("images/captcha") @Limit(key = "get_captcha", period = 60, count = 10, name = "获取验证码", prefix = "limit") public void captcha(HttpServletRequest request, HttpServletResponse response) throws IOException, FebsException { validateCodeService.create(request, response); } }