教育训练处考试制证系统后端
“djh”
2025-02-05 727c30f11ede5b3c82ead6e09e5e077c0e7519f1
Merge branch 'dev-20250116' of https://sinanoaq.cn:8888/r/swspkmas into dev-20250116
已修改13个文件
693 ■■■■ 文件已修改
exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ExamSiteAddForm.java 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ExamSiteServiceImpl.java 137 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/java/com/gkhy/exam/pay/controller/NonCoalPayController.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalPayDetailH5RepDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalStuRep.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/java/com/gkhy/exam/pay/entity/NonCoalPayStudent.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/java/com/gkhy/exam/pay/service/NonCoalPayStudentService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/resources/mapper/pay/NonCoalPayMapper.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java 269 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ExamSiteAddForm.java
@@ -15,37 +15,37 @@
@Data
public class ExamSiteAddForm {
    //考点名称
    @ApiModelProperty(value = "考点名称",required = true)
    @NotEmpty(message = "请输入考点名称")
    private String siteName;
    //地区id
    @ApiModelProperty(value = "地区id",required = true)
    @NotNull(message = "请选择地区")
    private Long districtId;
    //地址
    @ApiModelProperty(value = "地址")
    private String address;
    //负责人
    @ApiModelProperty(value = "负责人")
    private String header;
    //负责人电话
    @ApiModelProperty(value = "负责人电话")
    private String hphone;
    //联系人
    @ApiModelProperty(value = "联系人")
    private String contact;
    //联系人电话
    @ApiModelProperty(value = "联系人电话")
    private String cphone;
    //是否为煤矿:0为非,1是
    @ApiModelProperty(value = "是否为煤矿",required = true,notes = "0为非,1是")
    @NotNull(message = "请选择是否为煤矿")
    private Byte isCm;
    //备注
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "机构id",required = true)
    @NotNull(message = "请选择机构")
    private Long institutionId;
    //考点名称
    @ApiModelProperty(value = "考点名称", required = true)
    @NotEmpty(message = "请输入考点名称")
    private String siteName;
    //地区id
    @ApiModelProperty(value = "地区id", required = true)
    @NotNull(message = "请选择地区")
    private Long districtId;
    //地址
    @ApiModelProperty(value = "地址")
    private String address;
    //负责人
    @ApiModelProperty(value = "负责人")
    private String header;
    //负责人电话
    @ApiModelProperty(value = "负责人电话")
    private String hphone;
    //联系人
    @ApiModelProperty(value = "联系人")
    private String contact;
    //联系人电话
    @ApiModelProperty(value = "联系人电话")
    private String cphone;
    //是否为煤矿:0为非,1是
    @ApiModelProperty(value = "是否为煤矿", required = true, notes = "0为非,1是")
    @NotNull(message = "请选择是否为煤矿")
    private Byte isCm;
    //备注
    @ApiModelProperty(value = "备注")
    private String remark;
    @ApiModelProperty(value = "机构id", required = false)
//    @NotNull(message = "请选择机构")
    private Long institutionId;
}
exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ExamSiteServiceImpl.java
@@ -4,7 +4,6 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.exam.noncoalmine.entity.ExamSite;
import com.gkhy.exam.noncoalmine.entity.TrainingInstitution;
import com.gkhy.exam.noncoalmine.mapper.ExamSiteMapper;
import com.gkhy.exam.noncoalmine.mapper.TrainingInstitutionMapper;
import com.gkhy.exam.noncoalmine.model.addForm.ExamSiteAddForm;
@@ -20,6 +19,7 @@
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@@ -31,75 +31,78 @@
 */
@Service("examSiteService")
public class ExamSiteServiceImpl extends ServiceImpl<ExamSiteMapper, ExamSite> implements ExamSiteService {
    @Autowired
    private SysDistrictService districtService;
    @Autowired
    private ExamSiteMapper examSiteMapper;
    @Autowired
    private TrainingInstitutionMapper institutionMapper;
    @Override
    public List<ExamSiteVO> listByPage(ExamSiteQuery query) {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        if(StringUtils.isEmpty(query.getDistrictCode())){
            //传入区划为空
            if(!user.isAdmin(user.getUserId())){
                //非超管
                List<SysDistrict> districtList = districtService
                        .selectAll()
                        .stream()
                        .filter(sysDistrict -> sysDistrict.getId().equals(user.getDistrictId()))
                        .collect(Collectors.toList());
                if(districtList.size() > 0){
                    SysDistrict sysDistrict = districtList.get(0);
                    query.setDistrictCode(sysDistrict.getCode());
                }
            }
        }
        List<ExamSiteVO> trainingInstitutionVOS = examSiteMapper.listByPage(query);
        trainingInstitutionVOS.forEach(item->{
            TrainingInstitution trainingInstitution = institutionMapper.selectById(item.getInstitutionId());
            item.setInstitutionName(trainingInstitution != null ? trainingInstitution.getInstitutionName() : "");
        });
        return trainingInstitutionVOS;
    }
    @Autowired
    private SysDistrictService districtService;
    @Autowired
    private ExamSiteMapper examSiteMapper;
    @Autowired
    private TrainingInstitutionMapper institutionMapper;
    /**
     * 新增
     * @param addForm
     * @return
     */
    @Override
    public int add(ExamSiteAddForm addForm) {
        ExamSite examSite = new ExamSite();
        BeanUtils.copyProperties(addForm,examSite);
        examSite.setDelFlag((byte)0);
        return baseMapper.insert(examSite);
    }
    @Override
    public List<ExamSiteVO> listByPage(ExamSiteQuery query) {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        if (StringUtils.isEmpty(query.getDistrictCode())) {
            //传入区划为空
            if (!user.isAdmin(user.getUserId())) {
                //非超管
                List<SysDistrict> districtList = districtService
                        .selectAll()
                        .stream()
                        .filter(sysDistrict -> sysDistrict.getId().equals(user.getDistrictId()))
                        .collect(Collectors.toList());
                if (districtList.size() > 0) {
                    SysDistrict sysDistrict = districtList.get(0);
                    query.setDistrictCode(sysDistrict.getCode());
                }
            }
        }
        List<ExamSiteVO> trainingInstitutionVOS = examSiteMapper.listByPage(query);
//        trainingInstitutionVOS.forEach(item->{
//            TrainingInstitution trainingInstitution = institutionMapper.selectById(item.getInstitutionId());
//            item.setInstitutionName(trainingInstitution != null ? trainingInstitution.getInstitutionName() : "");
//        });
        return trainingInstitutionVOS;
    }
    /**
     * 修改
     * @param modForm
     * @return
     */
    @Override
    public int mod(ExamSiteModForm modForm) {
        ExamSite examSite = new ExamSite();
        BeanUtils.copyProperties(modForm,examSite);
        return baseMapper.updateById(examSite);
    }
    /**
     * 新增
     *
     * @param addForm
     * @return
     */
    @Override
    public int add(ExamSiteAddForm addForm) {
        ExamSite examSite = new ExamSite();
        BeanUtils.copyProperties(addForm, examSite);
        examSite.setDelFlag((byte) 0);
        return baseMapper.insert(examSite);
    }
    @Override
    public void delBatch(List<Long> siteIds) {
        UpdateWrapper<ExamSite> updateWrapper = new UpdateWrapper<>();
        updateWrapper.in("site_id",siteIds)
                .set("del_flag",(byte)2);
        this.update(updateWrapper);
    }
    /**
     * 修改
     *
     * @param modForm
     * @return
     */
    @Override
    public int mod(ExamSiteModForm modForm) {
        ExamSite examSite = new ExamSite();
        BeanUtils.copyProperties(modForm, examSite);
        return baseMapper.updateById(examSite);
    }
    @Override
    public List<ExamSite> getSiteByInstitutionId(Long institutionId) {
        List<ExamSite> examSites = baseMapper.selectList(new LambdaQueryWrapper<ExamSite>().eq(ExamSite::getDelFlag, (byte) 0).eq(ExamSite::getInstitutionId, institutionId));
        return examSites;
    }
    @Override
    public void delBatch(List<Long> siteIds) {
        UpdateWrapper<ExamSite> updateWrapper = new UpdateWrapper<>();
        updateWrapper.in("site_id", siteIds)
                .set("del_flag", (byte) 2);
        this.update(updateWrapper);
    }
    @Override
    public List<ExamSite> getSiteByInstitutionId(Long institutionId) {
        List<ExamSite> examSites = baseMapper.selectList(new LambdaQueryWrapper<ExamSite>().eq(ExamSite::getDelFlag, (byte) 0).eq(ExamSite::getInstitutionId, institutionId));
        return examSites;
    }
}
exam-system/src/main/java/com/gkhy/exam/pay/controller/NonCoalPayController.java
@@ -20,7 +20,6 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@@ -90,7 +89,7 @@
     * 新增非煤缴费管理
     */
    @PostMapping("/add")
    @PreAuthorize("@ss.hasPermi('noncoal:nonpay:add')")
    //@PreAuthorize("@ss.hasPermi('noncoal:nonpay:add')")
    @ApiOperation(value = "新增非煤缴费管理")
    public AjaxResult add(@Validated @RequestBody NonCoalPayReqDto nonCoalPay) {
        return toAjax(nonCoalPayService.insertNonCoalPay(nonCoalPay));
@@ -206,4 +205,18 @@
        return success(nonCoalPayStudentService.sendOrder(id, payType));
    }
    @PostMapping("/queryOrder")
    @ApiOperation(value = "查询是否生成缴费订单")
    @Anonymous
    @RepeatSubmit
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", dataTypeClass = Long.class, value = "个人缴费学员数据id,团队缴费数据id", required = true),
            @ApiImplicitParam(name = "payType", dataTypeClass = String.class, value = "1个人2是团队", required = true),
    })
    public AjaxResult queryOrder(@RequestParam("id") Long id, @RequestParam("payType") String payType) {
        return success(nonCoalPayStudentService.sendOrder(id, payType));
    }
}
exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalPayDetailH5RepDto.java
@@ -34,8 +34,8 @@
    @ApiModelProperty("缴费状态0否1是")
    private Integer payStatus;
//    @ApiModelProperty("待定财政缴费状态0未缴费1缴费中2完成缴费")
//    private Long govPayStatus;
    @ApiModelProperty("待定财政缴费状态0未缴费1缴费中2完成缴费")
    private Long govPayStatus;
    @ApiModelProperty("缴费凭证")
    private String fileData;
exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalStuRep.java
@@ -1,9 +1,11 @@
package com.gkhy.exam.pay.dto.rep;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "缴费学员相关信息")
public class NonCoalStuRep {
    private Long id;
@@ -43,4 +45,10 @@
    @ApiModelProperty("财政订单编号")
    private String orderId;
    @ApiModelProperty("订单编号")
    private String orderNo;
    @ApiModelProperty("财政订单状态0未生成1生成中2已生成")
    private Long govPayStatus;
}
exam-system/src/main/java/com/gkhy/exam/pay/entity/NonCoalPayStudent.java
@@ -100,6 +100,12 @@
    @ApiModelProperty("缴费时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date payTime;
    /**
     * 财政订单状态0未生成1生成中2未生成
     */
    @ApiModelProperty("财政订单状态0未生成1生成中2未生成")
    private Integer govPayStatus;
    /**
     * 删除标志(0代表存在2代表删除)
     */
@@ -235,4 +241,12 @@
    public void setPayTime(Date payTime) {
        this.payTime = payTime;
    }
    public Integer getGovPayStatus() {
        return govPayStatus;
    }
    public void setGovPayStatus(Integer govPayStatus) {
        this.govPayStatus = govPayStatus;
    }
}
exam-system/src/main/java/com/gkhy/exam/pay/service/NonCoalPayStudentService.java
@@ -1,6 +1,7 @@
package com.gkhy.exam.pay.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gkhy.exam.pay.dto.rep.NonCoalStuRep;
import com.gkhy.exam.pay.dto.req.NonCoalPayStuImport;
import com.gkhy.exam.pay.dto.req.NonCoalPayStudentReqDto;
import com.gkhy.exam.pay.entity.NonCoalPayStudent;
@@ -33,6 +34,9 @@
    public String sendOrder(Long dataId, String payType);
    public NonCoalStuRep queryOrder(Long dataId, String payType);
    /**
     * 新增【请填写功能名称】
     *
exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java
@@ -81,6 +81,29 @@
            if (nonCoalStuRep.getPayStatus() == 1) {
                throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "已缴费请勿重复缴费");
            }
            //财政缴款码已生成了
            if (nonCoalStuRep.getGovPayStatus() == 2) {
                return nonCoalStuRep.getOrderId();
            }
            //财政缴款码未生成
            if (nonCoalStuRep.getPayStatus() == 0) {
                if ("1".equals(payType)) {
                    baseMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
                            .set(NonCoalPayStudent::getOrderNo, orderNo)
                            .set(NonCoalPayStudent::getGovPayStatus, 1)
                            .eq(NonCoalPayStudent::getId, dataId).eq(NonCoalPayStudent::getDelFlag, 0)
                            .eq(NonCoalPayStudent::getPayType, payType).eq(NonCoalPayStudent::getPayStatus, 0));
                } else {
                    //团体缴费
                    baseMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
                            .set(NonCoalPayStudent::getOrderNo, orderNo)
                            .set(NonCoalPayStudent::getGovPayStatus, 1)
                            .eq(NonCoalPayStudent::getNonCoalPayId, dataId).eq(NonCoalPayStudent::getDelFlag, 0)
                            .eq(NonCoalPayStudent::getPayType, payType).eq(NonCoalPayStudent::getPayStatus, 0));
                }
            } else {
                orderNo = nonCoalStuRep.getOrderNo();
            }
            List<NonCoalCateRep> nonCoalPayCategoryList = nonCoalPayOrder.getNonCoalPayCategoryList();
            if (StringUtils.isEmpty(nonCoalPayCategoryList)) {
@@ -101,7 +124,7 @@
                        if ("1".equals(payType)) {
                            baseMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
                                    .set(NonCoalPayStudent::getOrderId, orderId)
                                    .set(NonCoalPayStudent::getOrderNo, orderNo)
//                                    .set(NonCoalPayStudent::getOrderNo, orderNo)
                                    .set(NonCoalPayStudent::getPayCode, billNo)
                                    .eq(NonCoalPayStudent::getId, dataId).eq(NonCoalPayStudent::getDelFlag, 0)
                                    .eq(NonCoalPayStudent::getPayType, payType).eq(NonCoalPayStudent::getPayStatus, 0));
@@ -109,7 +132,7 @@
                            //团体缴费
                            baseMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
                                    .set(NonCoalPayStudent::getOrderId, orderId)
                                    .set(NonCoalPayStudent::getOrderNo, orderNo)
//                                    .set(NonCoalPayStudent::getOrderNo, orderNo)
                                    .set(NonCoalPayStudent::getPayCode, billNo)
                                    .eq(NonCoalPayStudent::getNonCoalPayId, dataId).eq(NonCoalPayStudent::getDelFlag, 0)
                                    .eq(NonCoalPayStudent::getPayType, payType).eq(NonCoalPayStudent::getPayStatus, 0));
@@ -133,6 +156,28 @@
        return null;
    }
    @Override
    public NonCoalStuRep queryOrder(Long dataId, String payType) {
        List<NonCoalPayOrder> nonCoalPayOrders = nonCoalPayMapper.selectNonCoalPayOrderByParam(dataId, Long.valueOf(payType));
        if (StringUtils.isEmpty(nonCoalPayOrders)) {
            throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "未找到相关缴费信息");
        }
        NonCoalPayOrder nonCoalPayOrder = nonCoalPayOrders.get(0);
        List<NonCoalStuRep> nonCoalStuList = nonCoalPayOrder.getNonCoalStuList();
        if (StringUtils.isEmpty(nonCoalStuList)) {
            throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "未找到需要缴费的学员");
        }
        NonCoalStuRep nonCoalStuRep = nonCoalStuList.get(0);
        if (nonCoalStuRep.getPayStatus() == 1) {
            throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "已缴费请勿重复缴费");
        }
        return nonCoalStuRep;
    }
    private PayReqData dealData(NonCoalPayOrder nonCoalPayOrder, String orderNo, String payType) {
        List<NonCoalStuRep> nonCoalStuList = nonCoalPayOrder.getNonCoalStuList();
        List<NonCoalCateRep> nonCoalPayCategoryList = nonCoalPayOrder.getNonCoalPayCategoryList();
exam-system/src/main/resources/mapper/pay/NonCoalPayMapper.xml
@@ -59,7 +59,7 @@
        <result property="idCard" column="id_card"/>
        <result property="studentName" column="student_name"/>
        <result property="payStatus" column="pay_status"/>
        <!--        <result property="govPayStatus" column="gov_pay_status"/>-->
        <result property="govPayStatus" column="gov_pay_status"/>
        <result property="fileData" column="file_data"/>
        <result property="nonCoalPayType" column="non_coal_pay_type"/>
        <result property="orderId" column="order_id"/>
@@ -184,7 +184,7 @@
               t.id_card,
               t.name     as student_name,
               t.pay_status,
--                t.gov_pay_status,
               t.gov_pay_status,
               t.file_data,
               t.pay_type as non_coal_pay_type,
               t.order_id,
@@ -234,6 +234,8 @@
        <result property="studentName" column="student_name"/>
        <result property="payStatus" column="pay_status"/>
        <result property="orderId" column="order_id"/>
        <result property="orderNo" column="order_no"/>
        <result property="govPayStatus" column="gov_pay_status"/>
    </resultMap>
@@ -260,7 +262,9 @@
        t.id_card,
        t.name as student_name,
        t.pay_status,
        t.order_id
        t.order_id,
        t.gov_pay_status,
        t.order_no
        from non_coal_pay a
        inner join non_coal_pay_student t on t.non_coal_pay_id = a.id and t.del_flag = 0 and t.pay_status = 0 and
        t.order_id is null
exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml
@@ -23,6 +23,7 @@
        <result property="orderId" column="order_id"/>
        <result property="fileData" column="file_data"/>
        <result property="payTime" column="pay_time"/>
        <result property="govPayStatus" column="gov_pay_status"/>
    </resultMap>
    <sql id="selectNonCoalPayStudentVo">
@@ -43,7 +44,8 @@
               order_no,
               order_id,
               file_data,
               pay_time
               pay_time,
               gov_pay_status
        from non_coal_pay_student
    </sql>
@@ -77,6 +79,7 @@
            <if test="idCard != null and idCard != ''">id_card,</if>
            <if test="phone != null and phone != ''">phone,</if>
            <if test="sex != null">sex,</if>
            <if test="govPayStatus!=null">gov_pay_status,</if>
            <if test="payCode != null">pay_code,</if>
            <if test="payType != null">pay_type,</if>
            <if test="orderNo != null and orderNo != '' ">order_no,</if>
@@ -94,6 +97,7 @@
            <if test="idCard != null and idCard != ''">#{idCard},</if>
            <if test="phone != null and phone != ''">#{phone},</if>
            <if test="sex != null">#{sex},</if>
            <if test="govPayStatus!=null">#{govPayStatus},</if>
            <if test="payCode != null">#{payCode},</if>
            <if test="payType != null">#{payType},</if>
            <if test="orderNo != null and orderNo != '' ">#{orderNo},</if>
@@ -123,6 +127,7 @@
            <if test="sex != null">sex = #{sex},</if>
            <if test="orderNo != null and orderNo != ''">order_no = #{orderNo},</if>
            <if test="orderId != null and orderId != ''">order_id = #{orderId},</if>
            <if test="govPayStatus!=null">gov_pay_status=#{govPayStatus},</if>
            <if test="fileData != null and fileData != ''">file_data = #{fileData},</if>
            <if test="payTime != null">pay_time = #{payTime},</if>
            <if test="payType != null">pay_type = #{payType},</if>
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -1,21 +1,5 @@
package com.ruoyi.web.controller.system;
import java.util.List;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@@ -31,16 +15,25 @@
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysRoleService;
import com.ruoyi.system.service.ISysUserService;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.stream.Collectors;
/**
 * 用户信息
 *
 *
 * @author ruoyi
 */
@RestController
@RequestMapping("/system/user")
public class SysUserController extends BaseController
{
public class SysUserController extends BaseController {
    @Autowired
    private ISysUserService userService;
@@ -58,8 +51,7 @@
     */
    @PreAuthorize("@ss.hasPermi('system:user:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysUser user)
    {
    public TableDataInfo list(SysUser user) {
        startPage();
        List<SysUser> list = userService.selectUserList(user);
        return getDataTable(list);
@@ -68,8 +60,7 @@
    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
    @PreAuthorize("@ss.hasPermi('system:user:export')")
    @PostMapping("/export")
    public void export(HttpServletResponse response, SysUser user)
    {
    public void export(HttpServletResponse response, SysUser user) {
        List<SysUser> list = userService.selectUserList(user);
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
        util.exportExcel(response, list, "用户数据");
@@ -78,8 +69,7 @@
    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
    @PreAuthorize("@ss.hasPermi('system:user:import')")
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
    {
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
        List<SysUser> userList = util.importExcel(file.getInputStream());
        String operName = getUsername();
@@ -88,8 +78,7 @@
    }
    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response)
    {
    public void importTemplate(HttpServletResponse response) {
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
        util.importTemplateExcel(response, "用户数据");
    }
@@ -98,16 +87,14 @@
     * 根据用户编号获取详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:user:query')")
    @GetMapping(value = { "/", "/{userId}" })
    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
    {
    @GetMapping(value = {"/", "/{userId}"})
    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) {
        userService.checkUserDataScope(userId);
        AjaxResult ajax = AjaxResult.success();
        List<SysRole> roles = roleService.selectRoleAll();
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
        ajax.put("posts", postService.selectPostAll());
        if (StringUtils.isNotNull(userId))
        {
        if (StringUtils.isNotNull(userId)) {
            SysUser sysUser = userService.selectUserById(userId);
            ajax.put(AjaxResult.DATA_TAG, sysUser);
            ajax.put("postIds", postService.selectPostListByUserId(userId));
@@ -122,18 +109,12 @@
    @PreAuthorize("@ss.hasPermi('system:user:add')")
    @Log(title = "用户管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody SysUser user)
    {
        if (!userService.checkUserNameUnique(user))
        {
    public AjaxResult add(@Validated @RequestBody SysUser user) {
        if (!userService.checkUserNameUnique(user)) {
            return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
        }
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
        {
        } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
            return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
        {
        } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
        }
        user.setCreateBy(getUsername());
@@ -147,20 +128,14 @@
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysUser user)
    {
    public AjaxResult edit(@Validated @RequestBody SysUser user) {
        userService.checkUserAllowed(user);
        userService.checkUserDataScope(user.getUserId());
        if (!userService.checkUserNameUnique(user))
        {
        if (!userService.checkUserNameUnique(user)) {
            return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
        }
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
        {
        } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) {
            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
        }
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
        {
        } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) {
            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
        }
        user.setUpdateBy(getUsername());
@@ -173,10 +148,8 @@
    @PreAuthorize("@ss.hasPermi('system:user:remove')")
    @Log(title = "用户管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{userIds}")
    public AjaxResult remove(@PathVariable Long[] userIds)
    {
        if (ArrayUtils.contains(userIds, getUserId()))
        {
    public AjaxResult remove(@PathVariable Long[] userIds) {
        if (ArrayUtils.contains(userIds, getUserId())) {
            return error("当前用户不能删除");
        }
        return toAjax(userService.deleteUserByIds(userIds));
@@ -188,8 +161,7 @@
    @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @PutMapping("/resetPwd")
    public AjaxResult resetPwd(@RequestBody SysUser user)
    {
    public AjaxResult resetPwd(@RequestBody SysUser user) {
        userService.checkUserAllowed(user);
        userService.checkUserDataScope(user.getUserId());
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
@@ -203,8 +175,7 @@
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
    @PutMapping("/changeStatus")
    public AjaxResult changeStatus(@RequestBody SysUser user)
    {
    public AjaxResult changeStatus(@RequestBody SysUser user) {
        userService.checkUserAllowed(user);
        userService.checkUserDataScope(user.getUserId());
        user.setUpdateBy(getUsername());
@@ -216,8 +187,7 @@
     */
    @PreAuthorize("@ss.hasPermi('system:user:query')")
    @GetMapping("/authRole/{userId}")
    public AjaxResult authRole(@PathVariable("userId") Long userId)
    {
    public AjaxResult authRole(@PathVariable("userId") Long userId) {
        AjaxResult ajax = AjaxResult.success();
        SysUser user = userService.selectUserById(userId);
        List<SysRole> roles = roleService.selectRolesByUserId(userId);
@@ -232,8 +202,7 @@
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
    @Log(title = "用户管理", businessType = BusinessType.GRANT)
    @PutMapping("/authRole")
    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
    {
    public AjaxResult insertAuthRole(Long userId, Long[] roleIds) {
        userService.checkUserDataScope(userId);
        userService.insertUserAuth(userId, roleIds);
        return success();
@@ -242,10 +211,9 @@
    /**
     * 获取部门树列表
     */
    @PreAuthorize("@ss.hasPermi('system:user:list')")
    //@PreAuthorize("@ss.hasPermi('system:user:list')")
    @GetMapping("/deptTree")
    public AjaxResult deptTree(SysDept dept)
    {
    public AjaxResult deptTree(SysDept dept) {
        return success(deptService.selectDeptTreeList(dept));
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -1,35 +1,41 @@
package com.ruoyi.common.core.domain.entity;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.*;
import com.ruoyi.common.core.domain.model.SysDistrictVo;
import com.ruoyi.common.core.domain.model.TrainingInstitutionVo;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.ColumnType;
import com.ruoyi.common.annotation.Excel.Type;
import com.ruoyi.common.annotation.Excels;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.model.SysDistrictVo;
import com.ruoyi.common.core.domain.model.TrainingInstitutionVo;
import com.ruoyi.common.xss.Xss;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
 * 用户对象 sys_user
 *
 *
 * @author ruoyi
 */
public class SysUser extends BaseEntity
{
public class SysUser extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** 用户ID */
    /**
     * 用户ID
     */
    @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号")
    private Long userId;
    /** 部门ID */
    /**
     * 部门ID
     */
    @Excel(name = "部门编号", type = Type.IMPORT)
    private Long deptId;
    /**
     * 区域
@@ -38,70 +44,102 @@
    private String unit;
    /** 用户账号 */
    /**
     * 用户账号
     */
    @Excel(name = "登录名称")
    private String userName;
    /** 用户昵称 */
    /**
     * 用户昵称
     */
    @Excel(name = "用户名称")
    private String nickName;
    /** 用户邮箱 */
    /**
     * 用户邮箱
     */
    @Excel(name = "用户邮箱")
    private String email;
    /** 手机号码 */
    /**
     * 手机号码
     */
    @Excel(name = "手机号码")
    private String phonenumber;
    /** 用户性别 */
    /**
     * 用户性别
     */
    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
    private String sex;
    /** 用户头像 */
    /**
     * 用户头像
     */
    private String avatar;
    /** 密码 */
    /**
     * 密码
     */
    private String password;
    /** 帐号状态(0正常 1停用) */
    /**
     * 帐号状态(0正常 1停用)
     */
    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
    private String status;
    /** 删除标志(0代表存在 2代表删除) */
    /**
     * 删除标志(0代表存在 2代表删除)
     */
    private String delFlag;
    /** 最后登录IP */
    /**
     * 最后登录IP
     */
    @Excel(name = "最后登录IP", type = Type.EXPORT)
    private String loginIp;
    /** 最后登录时间 */
    /**
     * 最后登录时间
     */
    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
    private Date loginDate;
    /** 部门对象 */
    /**
     * 部门对象
     */
    @Excels({
        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
            @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
            @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
    })
    private SysDept dept;
    /** 角色对象 */
    /**
     * 角色对象
     */
    private List<SysRole> roles;
    /** 角色组 */
    /**
     * 角色组
     */
    private Long[] roleIds;
    /** 岗位组 */
    /**
     * 岗位组
     */
    private Long[] postIds;
    /** 角色ID */
    /**
     * 角色ID
     */
    private Long roleId;
    /**
     * 身份证
     */
    private String  idCard;
    private String idCard;
    /***
     * 机构ids
     */
@@ -111,211 +149,172 @@
    private List<TrainingInstitutionVo> institutions;
    public SysUser()
    {
    public SysUser() {
    }
    public SysUser(Long userId)
    {
    public SysUser(Long userId) {
        this.userId = userId;
    }
    public Long getUserId()
    {
    public Long getUserId() {
        return userId;
    }
    public void setUserId(Long userId)
    {
    public void setUserId(Long userId) {
        this.userId = userId;
    }
    public boolean isAdmin()
    {
    public boolean isAdmin() {
        return isAdmin(this.userId);
    }
    public static boolean isAdmin(Long userId)
    {
    public static boolean isAdmin(Long userId) {
        return userId != null && 1L == userId;
    }
    public Long getDeptId()
    {
    //@NotNull(message = "部门未选择")
    public Long getDeptId() {
        return deptId;
    }
    public void setDeptId(Long deptId)
    {
    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }
    @Xss(message = "用户昵称不能包含脚本字符")
    @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
    public String getNickName()
    {
    public String getNickName() {
        return nickName;
    }
    public void setNickName(String nickName)
    {
    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
    @Xss(message = "用户账号不能包含脚本字符")
    @NotBlank(message = "用户账号不能为空")
    @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
    public String getUserName()
    {
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName)
    {
    public void setUserName(String userName) {
        this.userName = userName;
    }
    @Email(message = "邮箱格式不正确")
    @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
    public String getEmail()
    {
    public String getEmail() {
        return email;
    }
    public void setEmail(String email)
    {
    public void setEmail(String email) {
        this.email = email;
    }
    @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
    public String getPhonenumber()
    {
    public String getPhonenumber() {
        return phonenumber;
    }
    public void setPhonenumber(String phonenumber)
    {
    public void setPhonenumber(String phonenumber) {
        this.phonenumber = phonenumber;
    }
    public String getSex()
    {
    public String getSex() {
        return sex;
    }
    public void setSex(String sex)
    {
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getAvatar()
    {
    public String getAvatar() {
        return avatar;
    }
    public void setAvatar(String avatar)
    {
    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }
    public String getPassword()
    {
    public String getPassword() {
        return password;
    }
    public void setPassword(String password)
    {
    public void setPassword(String password) {
        this.password = password;
    }
    public String getStatus()
    {
    public String getStatus() {
        return status;
    }
    public void setStatus(String status)
    {
    public void setStatus(String status) {
        this.status = status;
    }
    public String getDelFlag()
    {
    public String getDelFlag() {
        return delFlag;
    }
    public void setDelFlag(String delFlag)
    {
    public void setDelFlag(String delFlag) {
        this.delFlag = delFlag;
    }
    public String getLoginIp()
    {
    public String getLoginIp() {
        return loginIp;
    }
    public void setLoginIp(String loginIp)
    {
    public void setLoginIp(String loginIp) {
        this.loginIp = loginIp;
    }
    public Date getLoginDate()
    {
    public Date getLoginDate() {
        return loginDate;
    }
    public void setLoginDate(Date loginDate)
    {
    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }
    public SysDept getDept()
    {
    public SysDept getDept() {
        return dept;
    }
    public void setDept(SysDept dept)
    {
    public void setDept(SysDept dept) {
        this.dept = dept;
    }
    public List<SysRole> getRoles()
    {
    public List<SysRole> getRoles() {
        return roles;
    }
    public void setRoles(List<SysRole> roles)
    {
    public void setRoles(List<SysRole> roles) {
        this.roles = roles;
    }
    public Long[] getRoleIds()
    {
    public Long[] getRoleIds() {
        return roleIds;
    }
    public void setRoleIds(Long[] roleIds)
    {
    public void setRoleIds(Long[] roleIds) {
        this.roleIds = roleIds;
    }
    public Long[] getPostIds()
    {
    public Long[] getPostIds() {
        return postIds;
    }
    public void setPostIds(Long[] postIds)
    {
    public void setPostIds(Long[] postIds) {
        this.postIds = postIds;
    }
    public Long getRoleId()
    {
    public Long getRoleId() {
        return roleId;
    }
    public void setRoleId(Long roleId)
    {
    public void setRoleId(Long roleId) {
        this.roleId = roleId;
    }
@@ -369,28 +368,28 @@
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("userId", getUserId())
            .append("deptId", getDeptId())
            .append("unit", getUnit())
            .append("districtId", getDistrictId())
            .append("userName", getUserName())
            .append("nickName", getNickName())
            .append("email", getEmail())
            .append("phonenumber", getPhonenumber())
            .append("sex", getSex())
            .append("avatar", getAvatar())
            .append("password", getPassword())
            .append("status", getStatus())
            .append("delFlag", getDelFlag())
            .append("loginIp", getLoginIp())
            .append("loginDate", getLoginDate())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("remark", getRemark())
            .append("dept", getDept())
            .toString();
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("userId", getUserId())
                .append("deptId", getDeptId())
                .append("unit", getUnit())
                .append("districtId", getDistrictId())
                .append("userName", getUserName())
                .append("nickName", getNickName())
                .append("email", getEmail())
                .append("phonenumber", getPhonenumber())
                .append("sex", getSex())
                .append("avatar", getAvatar())
                .append("password", getPassword())
                .append("status", getStatus())
                .append("delFlag", getDelFlag())
                .append("loginIp", getLoginIp())
                .append("loginDate", getLoginDate())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .append("remark", getRemark())
                .append("dept", getDept())
                .toString();
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java
@@ -40,7 +40,11 @@
     **/
    public static String getDeptDistrictCode() {
        try {
            return getLoginUser().getUser().getDept().getDistrictCode();
            if (getLoginUser().getUser().getDept() == null) {
                return "";
            }
            String districtCode = getLoginUser().getUser().getDept().getDistrictCode();
            return StringUtils.isEmpty(districtCode) ? "" : districtCode;
        } catch (Exception e) {
            throw new ServiceException("获取部门区域异常", HttpStatus.UNAUTHORIZED);
        }