ZQN
2024-06-24 b0402b407292f0708a1684cc0ca1d5e2d890b753
多机构管理,问题修改
4个文件已添加
12个文件已修改
434 ■■■■■ 已修改文件
project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-admin/src/main/java/com/project/admin/controller/system/SysUserController.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-enforce/src/main/java/com/project/enforce/service/impl/CheckServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-report/src/main/java/com/project/report/service/IReportService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-report/src/main/java/com/project/report/service/impl/ReportServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-report/src/main/resources/mapper/report/ReportMapper.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/domain/bo/editBo/UserDeptBo.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/domain/vo/SysUserResultVo.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/domain/vo/SysUserVo.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/domain/vo/UserDeptVo.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/service/ISysUserDeptService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/service/ISysUserService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/service/impl/SysUserDeptServiceImpl.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/java/com/project/system/service/impl/SysUserServiceImpl.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-system/src/main/resources/mapper/system/SysUserMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
project-admin/src/main/java/com/project/admin/controller/system/SysCompanyController.java
@@ -20,6 +20,7 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -55,7 +56,12 @@
    @RepeatSubmit
    public AjaxResult export(SysCompanyQueryBo bo)
    {
        List<SysCompanyVo> list = iSysCompanyService.queryList(bo);
        List<SysCompanyVo> list;
        if (bo==null){
            list = new ArrayList<>();
        } else {
            list = iSysCompanyService.queryList(bo);
        }
        ExcelUtil<SysCompanyVo> util = new ExcelUtil<>(SysCompanyVo.class);
        return util.exportExcel(list, "企业信息");
    }
project-admin/src/main/java/com/project/admin/controller/system/SysUserController.java
@@ -12,10 +12,11 @@
import com.project.common.utils.SecurityUtils;
import com.project.common.utils.StringUtils;
import com.project.common.utils.poi.ExcelUtil;
import com.project.system.service.ISysDeptService;
import com.project.system.service.ISysPostService;
import com.project.system.service.ISysRoleService;
import com.project.system.service.ISysUserService;
import com.project.system.domain.bo.editBo.UserDeptBo;
import com.project.system.domain.vo.SysUserVo;
import com.project.system.service.*;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -41,6 +42,7 @@
    private final ISysRoleService roleService;
    private final ISysDeptService deptService;
    private final ISysPostService postService;
    private final ISysUserDeptService userDeptService;
    /**
     * 获取用户列表
@@ -64,6 +66,8 @@
        util.exportExcel(response, list, "用户数据");
    }
    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
    @PreAuthorize("@ss.hasPermi('system:user:import')")
    @PostMapping("/importData")
@@ -76,12 +80,7 @@
        return success(message);
    }
    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response)
    {
        ExcelUtil<SysUser> util = new ExcelUtil<>(SysUser.class);
        util.importTemplateExcel(response, "用户数据");
    }
    /**
     * 根据用户编号获取详细信息
@@ -210,6 +209,37 @@
        return toAjax(userService.resetPwd(user));
    }
    @ApiOperation("用户多机构——回显")
    @GetMapping("/batchUserDeptView")
    public AjaxResult batchUserDeptView(@RequestParam("userId") Long userId)
    {
        return AjaxResult.success(userDeptService.batchUserDeptView(userId));
    }
    @ApiOperation("用户多机构——保存")
    @Log(title = "用户多机构保存", businessType = BusinessType.UPDATE)
    @PostMapping("/batchUserDeptSave")
    public AjaxResult batchUserDeptSave(@RequestBody UserDeptBo bo)
    {
        return AjaxResult.success(userDeptService.batchUserDeptSave(bo));
    }
    @ApiOperation("企业用户重置密码")
    @Log(title = "企业用户重置密码", businessType = BusinessType.UPDATE)
    @PostMapping("/resetCompanyUserPwd")
    public AjaxResult resetCompanyUserPwd(@RequestParam("companyId") Long companyId,@RequestParam("newPassword") String newPassword)
    {
        SysUser user = userService.list(userService.lq().eq(SysUser::getDeptId, companyId)).get(0);
        if (user==null) {
            return AjaxResult.error("没有该企业对应账户");
        }
        if (userService.resetUserPwd(user.getUserName(), SecurityUtils.encryptPassword(newPassword), newPassword) > 0)
        {
            return success();
        }
        return error("修改密码异常,请联系管理员");
    }
    /**
     * 状态修改
     */
@@ -261,4 +291,42 @@
    {
        return success(deptService.selectDeptTreeList(dept));
    }
    @ApiOperation("用户模板下载")
    @GetMapping("/exportTemplate")
    public AjaxResult exportTemplate()
    {
        ExcelUtil<SysUserVo> util = new ExcelUtil<>(SysUserVo.class);
        return util.exportExcel(null, "用户信息模板");
    }
    @ApiOperation(value = "处理导入信息")
    @Log(title = "导入用户信息处理" , businessType = BusinessType.OTHER)
    @ApiImplicitParam(value = "用户信息", name = "file", dataType = "file", dataTypeClass = MultipartFile.class)
    @PostMapping("/doImport")
    public AjaxResult doImport(@RequestPart(value = "file") MultipartFile file, @RequestParam("deptId") Long deptId) throws Exception
    {
        ExcelUtil<SysUserVo> util = new ExcelUtil<>(SysUserVo.class);
        List<SysUserVo> list = util.importExcel(file.getInputStream());
        return AjaxResult.success(userService.doImport(list, deptId));
    }
//    @ApiOperation(value = "校验导入信息")
//    @Log(title = "导入用户信息校验" , businessType = BusinessType.OTHER)
//    @PostMapping("/checkImport")
//    public AjaxResult checkImport(@RequestBody SysCompanyResultVo resultVo)
//    {
//        return AjaxResult.success(userService.checkImport(resultVo));
//    }
//
//    @ApiOperation(value = "保存导入信息")
//    @Log(title = "导入用户信息保存" , businessType = BusinessType.IMPORT)
//    @PostMapping("/saveImport")
//    public AjaxResult saveImport(@RequestBody SysCompanyResultVo resultVo)
//    {
//        return toAjax(userService.saveImport(resultVo) ? 1 : 0);
//    }
}
project-enforce/src/main/java/com/project/enforce/service/impl/CheckServiceImpl.java
@@ -80,6 +80,7 @@
                        order.setCheckStatus(-1);
                        //审批拒绝,给申请人发送短信,如果通知企业也给企业发送短信
                        smsService.sendCheckMsg(order.getApplyPhone(), order.getCheckStatus());
                        orderService.updateById(order);
                    } else {
                        List<String> phones = orderService.getCheckPhones(order.getCheckLevel()+1, order.getApplyDeptId());
                        if (StringUtils.isNotEmpty(phones)){
project-enforce/src/main/java/com/project/enforce/service/impl/EnforceOrderServiceImpl.java
@@ -126,12 +126,12 @@
    {
        SysUser loginUser = SecurityUtils.getLoginUser().getUser();
        bo.setCheckIds(loginUser.getPhonenumber());
        List<Long> deptIds = deptService.getApplyDeptIdsByLoginUserId(loginUser.getUserId());
        if (StringUtils.isNotEmpty(deptIds)){
            bo.setApplyDeptIds(deptIds);
        } else {
            bo.setApplyDeptIds(null);
        }
//        List<Long> deptIds = deptService.getApplyDeptIdsByLoginUserId(loginUser.getUserId());
//        if (StringUtils.isNotEmpty(deptIds)){
//            bo.setApplyDeptIds(deptIds);
//        } else {
//            bo.setApplyDeptIds(null);
//        }
        return this.baseMapper.selectCheckList(bo);
    }
project-report/src/main/java/com/project/report/service/IReportService.java
@@ -59,7 +59,7 @@
    List<KeyVal>  getComplaintStatusCount(ReportQueryBo bo);
    /**
     * 执法类型占比
     * 投诉类型占比
     * @param bo    年月
     * @return  执法类型占比
     */
project-report/src/main/java/com/project/report/service/impl/ReportServiceImpl.java
@@ -164,10 +164,10 @@
    {
        return dictDataList.stream().map(e -> {
            KeyVal keyVal;
            if (resultMap.get(e.getDictValue()) == null) {
            if (resultMap.get(e.getDictCode().toString()) == null) {
                keyVal = new KeyVal(e.getDictLabel(), 0);
            } else {
                keyVal = new KeyVal(e.getDictLabel(), resultMap.get(e.getDictValue()));
                keyVal = new KeyVal(e.getDictLabel(), resultMap.get(e.getDictCode().toString()));
            }
            return keyVal;
        }).collect(Collectors.toList());
project-report/src/main/resources/mapper/report/ReportMapper.xml
@@ -14,7 +14,7 @@
        from enforce_order
        where 1=1
        <if test="deptId != null ">
            AND apply_dept_id = #{deptId}
            AND check_dept_id = #{deptId}
        </if>
        <if test="beginTime!=null and beginTime!=''">
            AND apply_time &gt;= #{beginTime}
@@ -92,15 +92,15 @@
        from enforce_complaint_log
        where 1=1
        <if test="beginTime!=null and beginTime!=''">
            AND apply_time &gt;= #{beginTime}
            AND complaint_time &gt;= #{beginTime}
        </if>
        <if test="endTime!=null and endTime!=''">
            AND apply_time &lt;= #{endTime}
            AND complaint_time &lt;= #{endTime}
        </if>
        GROUP BY k
    </select>
    <!--    执法类型分布-->
    <!--    投诉类型分布-->
    <select id="getComplaintTypeCount"
            parameterType="com.project.report.domain.bo.query.ReportQueryBo"
            resultType="com.project.common.vo.KeyVal">
@@ -110,12 +110,12 @@
        from enforce_complaint_log
        where 1=1
        <if test="beginTime!=null and beginTime!=''">
            AND apply_time &gt;= #{beginTime}
            AND complaint_time &gt;= #{beginTime}
        </if>
        <if test="endTime!=null and endTime!=''">
            AND apply_time &lt;= #{endTime}
            AND complaint_time &lt;= #{endTime}
        </if>
        <if test="doComplaint!=null ">
        <if test="doComplaint != null ">
            <if test="doComplaint == 0 ">
                AND complaint_status = 0
            </if>
project-system/src/main/java/com/project/system/domain/bo/editBo/UserDeptBo.java
New file
@@ -0,0 +1,19 @@
package com.project.system.domain.bo.editBo;
import lombok.Data;
import java.util.List;
/**
 * 功能描述:
 *
 * @author ZQN
 * @version 1.0
 */
@Data
public class UserDeptBo
{
    private Long userId;
    private List<Long> deptIds;
}
project-system/src/main/java/com/project/system/domain/vo/SysUserResultVo.java
New file
@@ -0,0 +1,20 @@
package com.project.system.domain.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.util.List;
/**
 * 功能描述:
 *
 * @author ZQN
 * @version 1.0
 */
@Data
@ApiModel("用户信息视图对象")
public class SysUserResultVo
{
    private List<SysUserVo> voList;
}
project-system/src/main/java/com/project/system/domain/vo/SysUserVo.java
New file
@@ -0,0 +1,56 @@
package com.project.system.domain.vo;
import com.project.common.annotation.Excel;
import com.project.common.core.domain.model.ImportError;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * 功能描述:
 *
 * @author ZQN
 * @version 1.0
 */
@Data
public class SysUserVo
{
    @Excel(name = "姓名")
    @ApiModelProperty("姓名")
    private String nickName;
    @Excel(name = "归属部门")
    @ApiModelProperty("归属部门")
    private String deptName;
    @Excel(name = "手机号")
    @ApiModelProperty("手机号")
    private String phonenumber;
    @Excel(name = "用户邮箱")
    @ApiModelProperty("用户邮箱")
    private String email;
    @Excel(name = "性别")
    @ApiModelProperty("性别")
    private String sex;
    @Excel(name = "备注")
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("部门id")
    private Long deptId;
    @ApiModelProperty("用户id")
    private Long userId;
    @ApiModelProperty("错误信息数据")
    private List<ImportError> errorList;
}
project-system/src/main/java/com/project/system/domain/vo/UserDeptVo.java
New file
@@ -0,0 +1,18 @@
package com.project.system.domain.vo;
import lombok.Data;
import java.util.List;
/**
 * 功能描述:
 *
 * @author ZQN
 * @version 1.0
 */
@Data
public class UserDeptVo {
    private Long userId;
    private List<Long> deptIds;
}
project-system/src/main/java/com/project/system/service/ISysUserDeptService.java
@@ -2,13 +2,28 @@
import com.project.common.mybatis.IBaseService;
import com.project.system.domain.SysUserDept;
import com.project.system.domain.bo.editBo.UserDeptBo;
import com.project.system.domain.vo.UserDeptVo;
/**
 * 用户与部门关联Service接口
 *
 * @author manton
 */
public interface ISysUserDeptService extends IBaseService<SysUserDept> {
public interface ISysUserDeptService extends IBaseService<SysUserDept>
{
    /**
     * 用户多结构回显
     * @param userId    用户id
     * @return  内容
     */
    UserDeptVo batchUserDeptView(Long userId);
    /**
     * 用户多结构保存
     * @param bo    参数
     * @return  结果
     */
    Boolean batchUserDeptSave(UserDeptBo bo);
}
project-system/src/main/java/com/project/system/service/ISysUserService.java
@@ -2,6 +2,8 @@
import com.project.common.core.domain.entity.SysUser;
import com.project.common.mybatis.IBaseService;
import com.project.system.domain.vo.SysUserResultVo;
import com.project.system.domain.vo.SysUserVo;
import java.util.List;
@@ -230,4 +232,26 @@
     * @return 结果
     */
    public int resetPhone(Long userId, String phone);
    /**
     * 处理导入信息
     * @param list    数据
     * @param deptId    导入部门id
     * @return    结果
     */
    SysUserResultVo doImport(List<SysUserVo> list, Long deptId);
    /**
     * 校验导入信息
     * @param resultVo    数据
     * @return    结果
     */
    SysUserResultVo checkImport(SysUserResultVo resultVo);
    /**
     * 保存导入信息
     * @param resultVo    数据
     * @return    结果
     */
    Boolean saveImport(SysUserResultVo resultVo);
}
project-system/src/main/java/com/project/system/service/impl/SysUserDeptServiceImpl.java
@@ -1,12 +1,21 @@
package com.project.system.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.project.common.exception.base.BaseException;
import com.project.common.utils.StringUtils;
import com.project.system.domain.SysUserDept;
import com.project.system.domain.bo.editBo.UserDeptBo;
import com.project.system.domain.vo.UserDeptVo;
import com.project.system.mapper.SysUserDeptMapper;
import com.project.system.service.ISysUserDeptService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 用户与部门关联Service业务层处理
@@ -18,4 +27,40 @@
public class SysUserDeptServiceImpl extends ServiceImpl<SysUserDeptMapper, SysUserDept> implements ISysUserDeptService {
    /**
     * 用户多机构回显
     * @param userId    用户id
     * @return  内容
     */
    @Override
    public UserDeptVo batchUserDeptView(Long userId)
    {
        List<SysUserDept> list = this.list(lq().eq(SysUserDept::getUserId, userId));
        List<Long> deptIds = list.stream().map(SysUserDept::getDeptId).collect(Collectors.toList());
        UserDeptVo vo = new UserDeptVo();
        vo.setUserId(userId);
        vo.setDeptIds(deptIds);
        return vo;
    }
    /**
     * 用户多机构保存
     * @param bo    参数
     * @return  结果
     */
    @Override
    @Transactional
    public Boolean batchUserDeptSave(UserDeptBo bo)
    {
        Long userId = bo.getUserId();
        if (userId==null || StringUtils.isEmpty(bo.getDeptIds())){
            throw new BaseException("参数有误!");
        }
        this.remove(lq().eq(SysUserDept::getUserId, userId));
        List<SysUserDept> saveList = new ArrayList<>();
        for (Long deptId : bo.getDeptIds()) {
            saveList.add(new SysUserDept().setUserId(userId).setDeptId(deptId));
        }
        return this.saveBatch(saveList);
    }
}
project-system/src/main/java/com/project/system/service/impl/SysUserServiceImpl.java
@@ -4,18 +4,23 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.project.common.annotation.DataScope;
import com.project.common.constant.UserConstants;
import com.project.common.core.domain.entity.SysDept;
import com.project.common.core.domain.entity.SysRole;
import com.project.common.core.domain.entity.SysUser;
import com.project.common.core.domain.model.ImportError;
import com.project.common.exception.ServiceException;
import com.project.common.exception.base.BaseException;
import com.project.common.utils.SecurityUtils;
import com.project.common.utils.StringUtils;
import com.project.common.utils.bean.BeanValidators;
import com.project.common.utils.spring.SpringUtils;
import com.project.system.domain.SysPost;
import com.project.system.domain.SysUserPost;
import com.project.system.domain.SysUserRole;
import com.project.system.domain.*;
import com.project.system.domain.vo.SysUserResultVo;
import com.project.system.domain.vo.SysUserVo;
import com.project.system.mapper.*;
import com.project.system.service.ISysConfigService;
import com.project.system.service.ISysDeptService;
import com.project.system.service.ISysUserDeptService;
import com.project.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
@@ -47,6 +52,8 @@
    private final SysUserRoleMapper userRoleMapper;
    private final SysUserPostMapper userPostMapper;
    private final ISysConfigService configService;
    private final ISysUserDeptService userDeptService;
    private final ISysDeptService deptService;
    protected final Validator validator;
    /**
@@ -250,6 +257,10 @@
        insertUserPost(user);
        // 新增用户与角色管理
        insertUserRole(user);
        // 新增用户与部门管理
        if (!"02".equals(user.getUserType())){
            insertUserDept(user);
        }
        return rows;
    }
@@ -285,6 +296,10 @@
        // 新增用户与岗位管理
        insertUserPost(user);
        // 新增用户与部门管理
        if (!"02".equals(user.getUserType())){
            insertUserDept(user);
        }
        return userMapper.updateUser(user);
    }
@@ -372,6 +387,21 @@
    public void insertUserRole(SysUser user)
    {
        this.insertUserRole(user.getUserId(), user.getRoleIds());
    }
    /**
     * 新增用户部门
     *
     * @param user 用户对象
     */
    public void insertUserDept(SysUser user)
    {
       userDeptService.remove(userDeptService.lq()
                .eq(SysUserDept::getUserId, user.getUserId())
                .eq(SysUserDept::getDeptId, user.getDeptId())
        );
        SysUserDept userDept = new SysUserDept().setUserId(user.getUserId()).setDeptId(user.getDeptId());
        userDeptService.save(userDept);
    }
    /**
@@ -556,4 +586,68 @@
    public int resetPhone(Long userId, String phone) {
        return userMapper.resetPhone(userId, phone);
    }
    @Override
    public SysUserResultVo doImport(List<SysUserVo> list, Long deptId)
    {
        if (list==null || list.size()<1){
            throw new BaseException("未获取到导入信息!");
        }
        SysUserResultVo resultVo = new SysUserResultVo();
        list.forEach(sysUserVo -> {
            sysUserVo.setDeptId(deptId);
        });
        resultVo.setVoList(list);
        return this.checkImport(resultVo);
    }
    @Override
    public SysUserResultVo checkImport(SysUserResultVo resultVo)
    {
        if (resultVo==null || StringUtils.isEmpty(resultVo.getVoList())){
            throw new BaseException("未获取到导入信息!");
        }
        for (SysUserVo vo : resultVo.getVoList()) {
            List<ImportError> errors = new ArrayList<>();
            validEntityBeforeImport(vo, errors);
            vo.setErrorList(errors);
        }
        return  resultVo;
    }
    private void validEntityBeforeImport(SysUserVo entity, List<ImportError> errorList)
    {
        if (StringUtils.isEmpty(entity.getNickName())){
            errorList.add(new ImportError(0, "请填姓名!"));
        }
        if (StringUtils.isEmpty(entity.getDeptName())){
            errorList.add(new ImportError(1, "请填写部门信息!"));
        } else {
            SysDept sysDept = deptService.selectDeptById(entity.getDeptId());
            if (sysDept==null || !sysDept.getDeptName().equals(entity.getDeptName())){
                errorList.add(new ImportError(1, "部门信息不匹配!"));
            }
        }
        if (StringUtils.isEmpty(entity.getPhonenumber())){
            errorList.add(new ImportError(2, "请填写手机号!"));
        } else {
            SysUser user = this.selectUserByUserName(entity.getPhonenumber());
            if (user!=null){
                entity.setUserId(user.getUserId());
            } else {
                SysUser check = new SysUser();
                check.setPhonenumber(entity.getPhonenumber());
                String s = checkPhoneUnique(check);
                if (UserConstants.NOT_UNIQUE.equals(s)) {
                    errorList.add(new ImportError(2, "手机号已存在!"));
                }
            }
        }
    }
    @Override
    public Boolean saveImport(SysUserResultVo resultVo) {
        return null;
    }
}
project-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -249,11 +249,13 @@
        select u.phonenumber
            from sys_user u
            join sys_user_role ur on u.user_id = ur.user_id
            join sys_role r on r.role_id=ur.role_id
            join sys_role r on r.role_id = ur.role_id
            join sys_user_dept ud on u.user_id = ud.dept_id
        where
          u.user_type != '02'
          and u.status='0'
          and r.role_key = #{roleKey}
          and u.dept_id = #{deptId}
          and ud.dept_id = #{deptId}
    </select>
</mapper>