/** 
 | 
 * Copyright (c) 2018 人人开源 All rights reserved. 
 | 
 * 
 | 
 * https://www.renren.io 
 | 
 * 
 | 
 * 版权所有,侵权必究! 
 | 
 */ 
 | 
  
 | 
package com.zt.modules.sys.controller; 
 | 
  
 | 
import com.zt.common.annotation.DataFilter; 
 | 
import com.zt.common.annotation.DataFilters; 
 | 
import com.zt.common.annotation.LogOperation; 
 | 
import com.zt.common.annotation.QueryParam; 
 | 
import com.zt.common.constant.Constant; 
 | 
import com.zt.common.db.constant.AcceptValues; 
 | 
import com.zt.common.db.query.QueryFilter; 
 | 
import com.zt.common.exception.ErrorCode; 
 | 
import com.zt.common.servlet.PageResult; 
 | 
import com.zt.common.servlet.Result; 
 | 
import com.zt.common.utils.ExcelUtils; 
 | 
import com.zt.common.validator.AssertUtils; 
 | 
import com.zt.common.validator.ValidatorUtils; 
 | 
import com.zt.common.validator.group.AddGroup; 
 | 
import com.zt.common.validator.group.DefaultGroup; 
 | 
import com.zt.common.validator.group.UpdateGroup; 
 | 
import com.zt.core.context.User; 
 | 
import com.zt.core.context.UserContext; 
 | 
import com.zt.core.security.Md5Utils; 
 | 
import com.zt.core.sys.model.SysUser; 
 | 
import com.zt.modules.sys.dto.MapDto; 
 | 
import com.zt.modules.sys.dto.PasswordDto; 
 | 
import com.zt.modules.sys.dto.UserRoleDto; 
 | 
import com.zt.modules.sys.dto.UserTreeDto; 
 | 
import com.zt.modules.sys.excel.SysUserExcel; 
 | 
import com.zt.modules.sys.model.SysMap; 
 | 
import com.zt.modules.sys.service.*; 
 | 
import io.swagger.annotations.Api; 
 | 
import io.swagger.annotations.ApiImplicitParam; 
 | 
import io.swagger.annotations.ApiImplicitParams; 
 | 
import io.swagger.annotations.ApiOperation; 
 | 
import org.apache.shiro.authz.annotation.RequiresPermissions; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.web.bind.annotation.*; 
 | 
import springfox.documentation.annotations.ApiIgnore; 
 | 
  
 | 
import javax.servlet.http.HttpServletResponse; 
 | 
import java.util.List; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 用户管理 
 | 
 * 
 | 
 * @author hehz 
 | 
 */ 
 | 
@RestController 
 | 
@RequestMapping("/sys/user") 
 | 
@Api(tags = "用户管理") 
 | 
public class SysUserController { 
 | 
    @Autowired 
 | 
    private SysUserService sysUserService; 
 | 
    @Autowired 
 | 
    private SysRoleUserService sysRoleUserService; 
 | 
    @Autowired 
 | 
    private SysPostUserService sysPostUserService; 
 | 
    @Autowired 
 | 
    private SysJobUserService sysJobUserService; 
 | 
  
 | 
    @Autowired 
 | 
    private SysMapService sysMapService; 
 | 
  
 | 
    @GetMapping("page") 
 | 
    @ApiOperation("分页") 
 | 
    @DataFilters({ 
 | 
            @DataFilter(field = Constant.Field.COMPANY, accept = AcceptValues.COMPANY, defaul = AcceptValues.Company.CURRENT_IDS), 
 | 
            @DataFilter(field = Constant.Field.DEPT, accept = AcceptValues.DEPT), 
 | 
            @DataFilter(name = "用户性别", field = "a.gender", accept = AcceptValues.DICT, dict = "gender") }) 
 | 
    @ApiImplicitParams({ 
 | 
            @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT), 
 | 
            @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT), 
 | 
            @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING), 
 | 
            @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING), 
 | 
            @ApiImplicitParam(name = "username", value = "用户名", dataType = Constant.QT.STRING, format = "username^LK"), 
 | 
            @ApiImplicitParam(name = "companyId", value = "公司id", required = true, dataType = Constant.QT.LONG, format = "company_id^EQ"), 
 | 
            @ApiImplicitParam(name = "deptId", value = "部门ID", dataType = Constant.QT.LONG, format = "dept_id^EQ") }) 
 | 
    @RequiresPermissions("sys:user:page") 
 | 
    public PageResult<SysUser> page(@ApiIgnore @QueryParam QueryFilter queryFilter) { 
 | 
        return PageResult.ok(sysUserService.page(queryFilter)); 
 | 
    } 
 | 
  
 | 
    @GetMapping("tree") 
 | 
    @ApiOperation("用户部门树") 
 | 
    public Result<List<UserTreeDto>> list() { 
 | 
        List<UserTreeDto> list = sysUserService.getUserDeptTree(); 
 | 
  
 | 
        return Result.ok(list); 
 | 
    } 
 | 
  
 | 
    @GetMapping("{id}") 
 | 
    @ApiOperation("信息") 
 | 
    @RequiresPermissions("sys:user:info") 
 | 
    public Result<SysUser> get(@PathVariable("id") Long id) { 
 | 
        SysUser data = sysUserService.get(id); 
 | 
  
 | 
        // 用户岗位列表 
 | 
        data.setPostIdList(sysPostUserService.getUserPosts(id).stream().map(post -> post.getId()) 
 | 
                .collect(Collectors.toList())); 
 | 
        // 用户职位列表 
 | 
        data.setJobIdList(sysJobUserService.getUserJobs(id).stream().map(job -> job.getId()) 
 | 
                .collect(Collectors.toList())); 
 | 
  
 | 
        data.setTeamgroupIds(sysMapService.getIds(id,"userTeamggroup")); 
 | 
        data.setShipIds(sysMapService.getIds(id,"userShip")); 
 | 
        return Result.ok(data); 
 | 
    } 
 | 
  
 | 
    @GetMapping("getUserTeamGrop") 
 | 
    @ApiOperation("信息") 
 | 
    public Result<List<MapDto>> erve(@PathVariable("id") Long id) { 
 | 
        List<MapDto> list = sysMapService.getMapsDto(id,"userTeamggroup"); 
 | 
        return Result.ok(list); 
 | 
    } 
 | 
  
 | 
    @GetMapping("getTeamGropFinish") 
 | 
    @ApiOperation("信息") 
 | 
    public Result<List<SysMap>> getTeamGropFinish(Long mainId, String type) { 
 | 
        List<SysMap> list = sysMapService.getMaps(mainId,type); 
 | 
        return Result.ok(list); 
 | 
    } 
 | 
  
 | 
    @GetMapping("insertData") 
 | 
    @ApiOperation("信息") 
 | 
    public Result insertData(String type, Long mainId, String subIds) { 
 | 
        sysMapService.insertData(type, mainId, subIds); 
 | 
        return Result.ok(); 
 | 
    } 
 | 
  
 | 
    @PostMapping 
 | 
    @ApiOperation("新增") 
 | 
    @LogOperation("用户管理--->新增") 
 | 
    //@RequiresPermissions("sys:user") 
 | 
    public Result insert(@RequestBody SysUser entity) { 
 | 
        // 效验数据 
 | 
        ValidatorUtils.validateEntity(entity, AddGroup.class, DefaultGroup.class); 
 | 
  
 | 
        entity.setSuperAdmin(false); 
 | 
  
 | 
        sysUserService.insert(entity); 
 | 
  
 | 
        return Result.ok(); 
 | 
    } 
 | 
  
 | 
    @PutMapping 
 | 
    @ApiOperation("修改") 
 | 
    @LogOperation("用户管理--->修改") 
 | 
    @RequiresPermissions("sys:user:update") 
 | 
    public Result update(@RequestBody SysUser entity) { 
 | 
        // 效验数据 
 | 
        ValidatorUtils.validateEntity(entity, UpdateGroup.class, DefaultGroup.class); 
 | 
  
 | 
        sysUserService.update(entity); 
 | 
  
 | 
        return Result.ok(); 
 | 
    } 
 | 
  
 | 
    @DeleteMapping 
 | 
    @ApiOperation("删除") 
 | 
    @LogOperation("用户管理--->删除") 
 | 
    @RequiresPermissions("sys:user:delete") 
 | 
    public Result delete(@RequestBody Long[] ids) { 
 | 
        // 效验数据 
 | 
        AssertUtils.isArrayEmpty(ids, "id"); 
 | 
  
 | 
        sysUserService.delete(ids); 
 | 
  
 | 
        return Result.ok(); 
 | 
    } 
 | 
  
 | 
    @GetMapping("export") 
 | 
    @ApiOperation("导出") 
 | 
    @LogOperation("导出") 
 | 
    @RequiresPermissions("sys:user:export") 
 | 
    @ApiImplicitParam(name = "username", value = "用户名", dataType = Constant.QT.STRING, format = "username^LK") 
 | 
    public void export(@ApiIgnore @QueryParam QueryFilter queryFilter, HttpServletResponse response) throws Exception { 
 | 
        List<SysUser> list = sysUserService.list(queryFilter); 
 | 
  
 | 
        ExcelUtils.exportExcelToTarget(response, null, list, SysUserExcel.class); 
 | 
    } 
 | 
  
 | 
    @GetMapping("resetPassword") 
 | 
    @ApiOperation("重置密码") 
 | 
    public Result<SysUser> resetPassword(@QueryParam Long id) { 
 | 
        sysUserService.resetPassword(id); 
 | 
        // 用户角色列表 
 | 
        return Result.ok(); 
 | 
    } 
 | 
  
 | 
    @PutMapping("password") 
 | 
    @ApiOperation("修改密码") 
 | 
    @LogOperation("用户管理--->修改密码") 
 | 
    public Result password(@RequestBody PasswordDto dto) { 
 | 
        // 效验数据 
 | 
        ValidatorUtils.validateEntity(dto); 
 | 
  
 | 
        User user = UserContext.getUser(); 
 | 
  
 | 
        // 原密码不正确 
 | 
        if (!Md5Utils.hash(dto.getPassword()).equals(user.getPassword())) { 
 | 
            return Result.ok().error(ErrorCode.PASSWORD_ERROR); 
 | 
        } 
 | 
  
 | 
        sysUserService.updatePassword(user.getId(), dto.getNewPassword()); 
 | 
  
 | 
        return Result.ok(); 
 | 
    } 
 | 
  
 | 
    @GetMapping("{id}/role") 
 | 
    @ApiOperation("用户角色列表") 
 | 
    @RequiresPermissions("sys:user:role") 
 | 
    public Result<List<Long>> getRole(@PathVariable("id") Long id) { 
 | 
  
 | 
        return Result.ok(sysRoleUserService.getUserRoles(id).stream().map(role -> role.getId()) 
 | 
                .collect(Collectors.toList())); 
 | 
    } 
 | 
  
 | 
    @PostMapping("role") 
 | 
    @ApiOperation("用户角色列表") 
 | 
    @RequiresPermissions("sys:user:role") 
 | 
    public Result saveRole(@RequestBody UserRoleDto dto) { 
 | 
        sysRoleUserService.saveOrUpdate(dto.getUserId(), dto.getRoleIdList()); 
 | 
        return Result.ok(); 
 | 
    } 
 | 
} 
 |