UserInfoController.java 7.27 KB
package com.xkl.controller;

import com.xkl.authorization.annotation.*;
import com.xkl.authorization.manager.ITokenManager;
import com.xkl.config.Constants;
import com.xkl.config.ResultStatus;
import com.xkl.domain.User;
import com.xkl.domain.XklAdminEntity;
import com.xkl.domain.XklCompanyEntity;
import com.xkl.domain.XklMemberEntity;
import com.xkl.model.CityModel;
import com.xkl.model.ResultModel;
import com.xkl.repository.UserRepository;
import com.xkl.repository.XklCompanyRespository;
import com.xkl.repository.XklMemberRespository;
import com.xkl.security.AntiXSS;
import com.wordnik.swagger.annotations.ApiImplicitParam;
import com.wordnik.swagger.annotations.ApiImplicitParams;
import com.wordnik.swagger.annotations.ApiOperation;
import com.xkl.security.SecurityTool;
import com.xkl.tools.UtilTools;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.sql.Date;

/**
 * Created by win7 on 2016/10/19.
 */
@RestController
@RequestMapping("/userInfo")
public class UserInfoController {
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private ITokenManager tokenManager;
    @Autowired
    private XklMemberRespository xklMemberRespository;
    @Autowired
    private XklCompanyRespository xklCompanyRespository;

    @LogAnnotation
    @AntiXSS
    @Authorization
    @Sign
    @RequestMapping(method = RequestMethod.POST)
    @ApiOperation(value = "用户注册接口")
    public ResponseEntity<ResultModel> register(HttpServletRequest request, @CurrentAdmin XklAdminEntity admin, @RequestParam String username, @RequestParam String password,
                                                @RequestParam String name, @RequestParam String phone,@RequestParam boolean sex,@RequestParam String birthDate,
                                                @RequestParam(required=false) String idcard,
                                                @RequestParam String sign, @RequestParam long t, @RequestParam int type) {
        if(!(boolean)request.getAttribute("signAspect"))
            return new ResponseEntity<>(ResultModel.error(ResultStatus.SIGN_ERROR), HttpStatus.OK);

        Assert.notNull(username, "username can not be empty");
        Assert.notNull(password, "password can not be empty");
        Assert.notNull(name, "name can not be empty");
        Assert.notNull(sex, "sex can not be empty");
        Assert.notNull(birthDate, "birthDate can not be empty");
        Assert.notNull(phone, "phone can not be empty");

        User user = userRepository.findByLoginAccountAndStatus(username, Constants.STATUS_OK2);
        if (user != null ) {  //用户已注册
            return new ResponseEntity<>(ResultModel.error(ResultStatus.USER_IS_EXIT), HttpStatus.OK);
        }else{
            /**
             * member表
             */
            XklMemberEntity member = new XklMemberEntity();
            member.setName(name);
            member.setSex(sex);
            member.setBirthDate(birthDate);
            member.setPhone(phone);
            member.setRegisterBy(admin.getId());
            member.setCompanyId(admin.getCoid());
            member.setRegisterTime(UtilTools.getNow());
            member.setStatus(1);
            //member表自动判断归属地
            if(idcard!=null&&idcard!=""){//身份证存在
                member.setIdcard(idcard);
                CityModel cityModel = Constants.cityMap.get(idcard.substring(0,6));
                if(cityModel!=null){
                    member.setCountry(cityModel.getCountry());
                    member.setProvince(cityModel.getProvince());
                    member.setCity(cityModel.getCity());
                }
            }else{
                long coid = admin.getCoid();
                XklCompanyEntity xklCompanyEntity = xklCompanyRespository.findOne(coid);
                if(xklCompanyEntity!=null){
                    member.setCountry(xklCompanyEntity.getCountryId());
                    member.setProvince(xklCompanyEntity.getProvinceId());
                    member.setCity(xklCompanyEntity.getCityId());
                }

            }
            XklMemberEntity memberEntity = xklMemberRespository.save(member);
            if(memberEntity!=null){
                String salt= SecurityTool.genSalt();
                String pass=SecurityTool.getPassword(username,password,salt);
                user = new User();

                user.setMemberId(memberEntity.getId());
                user.setLoginAccount(username);
                user.setLoginPwd(pass);
                user.setSalt(salt);
                user.setStatus(true);
                userRepository.save(user);
            }
        }
        return new ResponseEntity<>(ResultModel.ok(ResultStatus.USER_REGISTER), HttpStatus.OK);
    }

    @LogAnnotation
    @AntiXSS
    @Authorization
    @Sign
    @RequestMapping(method = RequestMethod.PUT)
    @ApiOperation(value = "用户密码修改接口")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "authorization", value = "请输入登录返回信息:userId_tokens", required = true, dataType = "string", paramType = "header"),
    })
    public ResponseEntity<ResultModel> modPassword(HttpServletRequest request,@CurrentUser User user,@RequestParam String password,
                                                   @RequestParam String sign,@RequestParam long t,@RequestParam int type) {
        if(!(boolean)request.getAttribute("signAspect"))
            return new ResponseEntity<>(ResultModel.error(ResultStatus.SIGN_ERROR), HttpStatus.OK);

        Assert.notNull(password, "password can not be empty");
        String salt= SecurityTool.genSalt();
        String pass=SecurityTool.getPassword(user.getLoginAccount(),password,salt);
        user.setLoginPwd(pass);
        user.setSalt(salt);
        userRepository.save(user);
        tokenManager.deleteToken(String.valueOf(user.getId()));//退出登录
        return new ResponseEntity<>(new ResultModel(ResultStatus.USER_MODPASS_LOGOUT), HttpStatus.OK);
    }

    @LogAnnotation
    @AntiXSS
    @Authorization
    @Sign
    @RequestMapping(method = RequestMethod.GET)
    @ApiOperation(value = "个人信息查询接口")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "authorization", value = "请输入登录返回信息:userId_tokens", required = true, dataType = "string", paramType = "header"),
    })
    public ResponseEntity<ResultModel> getUserInfo(HttpServletRequest request,@CurrentUser User user,
                                                   @RequestParam String sign,@RequestParam long t,@RequestParam int type) {
        if(!(boolean)request.getAttribute("signAspect"))
            return new ResponseEntity<>(ResultModel.error(ResultStatus.SIGN_ERROR), HttpStatus.OK);

        long member_id=user.getMemberId();
        XklMemberEntity xklMemberEntity=xklMemberRespository.findOne(member_id);
        return new ResponseEntity<>(ResultModel.ok(xklMemberEntity), HttpStatus.OK);
    }
}