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.common.utils.RedisUtils; 
 | 
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.*; 
 | 
  
 | 
/** 
 | 
 * @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; 
 | 
    private final RedisUtils redisUtils; 
 | 
  
 | 
    @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<String, Object> 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("scorePool",redisUtils.get("scorePool")); 
 | 
        //支付统计 
 | 
        List<Long> states = new ArrayList(); 
 | 
        states.add(2L); 
 | 
        states.add(3L); 
 | 
        states.add(4L); 
 | 
//        data.put("wechatPay",mallOrderInfoMapper.selectSumAmountByPayMethodAndStatue(OrderPayMethodEnum.WECHAT.getName(), OrderStatusEnum.FINISH.getValue())); 
 | 
        data.put("wechatPay",mallOrderInfoMapper.selectSumAmountByPayMethodAndSomeStatue(OrderPayMethodEnum.WECHAT.getName(), states)); 
 | 
//        data.put("alipayPay",mallOrderInfoMapper.selectSumAmountByPayMethodAndStatue(OrderPayMethodEnum.ALIPAY.getName(), OrderStatusEnum.FINISH.getValue())); 
 | 
        data.put("alipayPay",mallOrderInfoMapper.selectSumAmountByPayMethodAndSomeStatue(OrderPayMethodEnum.ALIPAY.getName(), states)); 
 | 
//        data.put("scorePay",mallOrderInfoMapper.selectSumAmountByPayMethodAndStatue(OrderPayMethodEnum.SCORE.getName(), OrderStatusEnum.FINISH.getValue())); 
 | 
        data.put("scorePay",mallOrderInfoMapper.selectSumAmountByPayMethodAndSomeStatue(OrderPayMethodEnum.BANK.getName(), states)); 
 | 
//        data.put("balancePay",mallOrderInfoMapper.selectSumAmountByPayMethodAndStatue(OrderPayMethodEnum.BALANCE.getName(), OrderStatusEnum.FINISH.getValue())); 
 | 
        data.put("balancePay",mallOrderInfoMapper.selectSumAmountByPayMethodAndSomeStatue(OrderPayMethodEnum.BALANCE.getName(), states)); 
 | 
  
 | 
  
 | 
        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<MallMember> formalMember = new QueryWrapper<>(); 
 | 
        formalMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name()); 
 | 
        data.put("formalMember",mallMemberMapper.selectCount(formalMember)); 
 | 
  
 | 
        QueryWrapper<MallMember> informalMember = new QueryWrapper<>(); 
 | 
        informalMember.eq("level", AgentLevelEnum.ZERO_LEVEL.name()); 
 | 
        data.put("informalMember",mallMemberMapper.selectCount(informalMember)); 
 | 
  
 | 
        QueryWrapper<MallMember> todayMember = new QueryWrapper<>(); 
 | 
        todayMember.like("CREATED_TIME", DateUtil.today()); 
 | 
//        todayMember.ne("level", AgentLevelEnum.ZERO_LEVEL.name()); 
 | 
        data.put("todayMember",mallMemberMapper.selectCount(todayMember)); 
 | 
  
 | 
        QueryWrapper<MallMember> 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<MallMember> 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<Map<String, Object>> lastSevenVisitCount = this.loginLogService.findLastSevenDaysVisitCount(null); 
 | 
        data.put("lastSevenVisitCount", lastSevenVisitCount); 
 | 
        User param = new User(); 
 | 
        param.setUsername(username); 
 | 
        List<Map<String, Object>> 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); 
 | 
    } 
 | 
} 
 |