liusheng
2024-05-16 2f13f59f023fba63aa993172d48c14bcaaafb233
代码提交
已添加2个文件
已修改18个文件
396 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/DingTalkController.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/pom.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DingDetpInfoVo.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DingUserInfoVo.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DonationCompletionVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DonationWitnessVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/MedicalEvaluationVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/RelativeConfirmationVO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/DingTalkService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceDonatecompletioninfoMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceDonationwitnessMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceMedicalevaluationMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-project/src/main/resources/mapper/project/ServiceRelativesconfirmationMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/DingTalkController.java
@@ -1,5 +1,7 @@
package com.ruoyi.web.controller.project;
import com.aliyun.dingtalkoauth2_1_0.models.GetSsoUserInfoResponseBody;
import com.aliyun.tea.Validation;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
@@ -11,10 +13,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.PostMapping;
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.bind.annotation.*;
/**
 * é’‰é’‰æŽ¥å£
@@ -55,5 +54,18 @@
        return error();
    }
    /**
     * ç»™éƒ¨é—¨ä¸‹çš„用户信息赋dingUserId,并记录到sys_user表中
     *
     * @param deptID
     * @return
     */
    @ApiOperation("给部门下的用户信息赋dingUserId")
    @GetMapping("/deptidList/{deptID}")
    public AjaxResult deptidList(@PathVariable("deptID") Long deptID) {
        dingTalkService.deptidList(deptID, 1);
        return success();
    }
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -1,12 +1,19 @@
package com.ruoyi.web.controller.system;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import com.aliyun.dingtalkoauth2_1_0.models.GetSsoUserInfoResponseBody;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.model.LoginBodyByOpenID;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.service.DingTalkService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
@@ -39,6 +46,9 @@
    @Autowired
    private SysPermissionService permissionService;
    @Autowired
    private DingTalkService dingTalkService;
    /**
     * å¾®ä¿¡OpenID登录方法
@@ -55,7 +65,6 @@
        return ajax;
    }
    /**
     * ç™»å½•方法
     *
@@ -67,8 +76,19 @@
    @PostMapping("/login")
    public AjaxResult login(@RequestBody LoginBody loginBody) {
        AjaxResult ajax = AjaxResult.success();
//        dingTalkService.deptidList(1L, 1);
        Map<String, Object> userIdMap = null;
        if (StringUtils.isNotEmpty(loginBody.getAuthCode())) {
            Map<String, Object> map = dingTalkService.noLogin(loginBody.getAuthCode());
            userIdMap = (Map<String, Object>) map.get("result");
        }
        // ç”Ÿæˆä»¤ç‰Œ
        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid(), loginBody.getOpenid());
        String token = null;
        if (!ObjectUtils.isEmpty(userIdMap)) {
            token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid(), loginBody.getOpenid(), userIdMap.get("userid").toString());
        } else {
            token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid(), loginBody.getOpenid(), null);
        }
        ajax.put(Constants.TOKEN, token);
        return ajax;
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -153,10 +153,24 @@
     */
    private String errorTimes;
    /**
     * é’‰é’‰userID
     */
    private String dingUserId;
    public SysUser() {
    }
    public String getDingUserId() {
        return dingUserId;
    }
    public void setDingUserId(String dingUserId) {
        this.dingUserId = dingUserId;
    }
    public int getErrorNums() {
        return errorNums;
    }
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java
@@ -1,12 +1,14 @@
package com.ruoyi.common.core.domain.model;
import lombok.Data;
/**
 * ç”¨æˆ·ç™»å½•对象
 *
 *
 * @author ruoyi
 */
public class LoginBody
{
@Data
public class LoginBody {
    /**
     * å¾®ä¿¡OpenID
@@ -33,54 +35,10 @@
    private String uuid = "";
    /**
     * å…ç™»æŽˆæƒç 
     */
    private String authCode;
    public String getUsername()
    {
        return username;
    }
    public void setUsername(String username)
    {
        this.username = username;
    }
    public String getPassword()
    {
        return password;
    }
    public void setPassword(String password)
    {
        this.password = password;
    }
    public String getCode()
    {
        return code;
    }
    public void setCode(String code)
    {
        this.code = code;
    }
    public String getUuid()
    {
        return uuid;
    }
    public void setUuid(String uuid)
    {
        this.uuid = uuid;
    }
    public String getOpenid() {
        return openid;
    }
    public void setOpenid(String openid) {
        this.openid = openid;
    }
}
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -66,7 +66,17 @@
     * @param uuid     å”¯ä¸€æ ‡è¯†
     * @return ç»“æžœ
     */
    public String login(String username, String password, String code, String uuid, String openId) {
    public String login(String username, String password, String code, String uuid, String openId, String dingUserId) {
        //免登
        if (StringUtils.isNotEmpty(dingUserId)) {
            SysUser sysUser = sysUserMapper.selectUserByDingUserId(dingUserId);
            LoginUser loginUser = new LoginUser();
            loginUser.setUserId(sysUser.getUserId());
            loginUser.setDeptId(sysUser.getDeptId());
            loginUser.setUser(sysUser);
            return tokenService.createToken(loginUser);
        }
        SysUser sysUser = sysUserMapper.selectUserByUserName(username);
        if (sysUser.getErrorNums() >= 3) {
            //校验失败次数
ruoyi-project/pom.xml
@@ -48,6 +48,11 @@
            <artifactId>fastjson2</artifactId>
            <version>2.0.25</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dingtalk</artifactId>
            <version>2.1.14</version>
        </dependency>
    </dependencies>
</project>
</project>
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DingDetpInfoVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.ruoyi.project.domain.vo;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
/**
 * é’‰é’‰æ¶ˆæ¯å‘送
 *
 * @author ls
 * @date 2023-07-14
 */
@Data
@ApiModel(value = "DingDeptInfoVo", description = "钉钉部门信息")
public class DingDetpInfoVo {
    /**
     * æ˜¯å¦è‡ªåŠ¨æ·»åŠ ç”¨æˆ·
     */
    @ApiModelProperty(value = "用户手机号")
    private Boolean auto_add_user;
    /**
     * æ˜¯å¦åˆ›å»ºéƒ¨é—¨åˆ†ç»„
     */
    @ApiModelProperty(value = "部门ID")
    private Boolean create_dept_group;
    /**
     * éƒ¨é—¨ID
     */
    @ApiModelProperty(value = "发送消息的标题")
    private Integer dept_id;
    /**
     * éƒ¨é—¨åç§°
     */
    @ApiModelProperty(value = "跳转url")
    private String name;
    /**
     * çˆ¶id
     */
    @ApiModelProperty(value = "跳转url")
    private String parent_id;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DingUserInfoVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.ruoyi.project.domain.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * é’‰é’‰æ¶ˆæ¯å‘送
 *
 * @author ls
 * @date 2023-07-14
 */
@Data
@ApiModel(value = "DingUserInfoVo", description = "钉钉用户信息")
public class DingUserInfoVo {
    /**
     * ç”¨æˆ·æ‰‹æœºå·
     */
    @ApiModelProperty(value = "用户手机号")
    private String mobile;
    /**
     * æ˜¯å¦åˆ›å»ºéƒ¨é—¨åˆ†ç»„
     */
    @ApiModelProperty(value = "姓名")
    private String name;
    /**
     * ç”¨æˆ·ID
     */
    @ApiModelProperty(value = "用户ID")
    private String userid;
    private String unionid;
}
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DonationCompletionVO.java
@@ -35,6 +35,9 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date reporttime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date donatetime;
    private Long dcid;
    private Long infoid;
    private String dcdonorno;
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/DonationWitnessVO.java
@@ -28,6 +28,9 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date reporttime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date donatetime;
    private Long dwid;
    private Long infoid;
    private String gainhospitalno;
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/MedicalEvaluationVO.java
@@ -33,6 +33,9 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date reporttime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date donatetime;
    private Long meid;
    private Long infoid;
    private String hospitalassesscontent;
ruoyi-project/src/main/java/com/ruoyi/project/domain/vo/RelativeConfirmationVO.java
@@ -42,6 +42,9 @@
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date reporttime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date donatetime;
    private String donorno;
    private String treatmenthospitalno;
    private String treatmenthospitalname;
ruoyi-project/src/main/java/com/ruoyi/project/service/DingTalkService.java
@@ -1,6 +1,9 @@
package com.ruoyi.project.service;
import com.aliyun.dingtalkoauth2_1_0.models.GetSsoUserInfoResponseBody;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
import java.util.Map;
/**
 * å®£æ•™åˆ†ç±»Service接口
@@ -15,4 +18,13 @@
     * @param dingTalkReqVo
     */
    Boolean sendNotification(DingTalkReqVo dingTalkReqVo);
    Map<String, Object> noLogin(String code);
    /**
     *
     * @param deptID éƒ¨é—¨ID
     * @param begin  é¦–次开始状态,不能等于2
     */
    public void deptidList(Long deptID, Integer begin);
}
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/DingTalkServiceImpl.java
@@ -2,22 +2,25 @@
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
import com.dingtalk.api.request.OapiUserListidRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.dingtalk.api.response.OapiUserListidResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.dingtalk.api.request.*;
import com.dingtalk.api.response.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.project.domain.vo.DingDetpInfoVo;
import com.ruoyi.project.domain.vo.DingTalkReqVo;
import com.ruoyi.project.domain.vo.DingUserInfoVo;
import com.ruoyi.project.service.DingTalkService;
import com.ruoyi.system.mapper.SysUserMapper;
import com.taobao.api.ApiException;
import lombok.Data;
import lombok.extern.log4j.Log4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -47,6 +50,9 @@
    @Value("${agentId}")
    private Long agentId;
    @Autowired
    private SysUserMapper sysUserMapper;
    @Override
    public Boolean sendNotification(DingTalkReqVo dingTalkReqVo) {
@@ -160,6 +166,86 @@
        return result;
    }
    /**
     * å…ç™»é™†æŽ¥å£
     *
     * @param authCode
     * @return
     */
    public Map<String, Object> noLogin(String authCode) {
        try {
            String urlString = "https://oapi.dingtalk.com/topapi/v2/user/getuserinfo";
            String params = "access_token=" + getAccessToken() + "&code=" + authCode;
            String result = HttpUtils.sendPost(urlString, params);
            ObjectMapper objectMapper = new ObjectMapper();
            Map<String, Object> map = objectMapper.readValue(result, Map.class);
            return map;
        } catch (Exception e) {
            log.error(e.getMessage());
            new BaseException("登录出异常了,请联系管理员处理");
        }
        return null;
    }
    @Override
    public void deptidList(Long deptID, Integer begin) {
        try {
            //根据传过来的部门ID,去获取该部门下的用户信息
            if (begin != 1) DingUserInfoList(deptID);
            //获取子部门的dept_id
            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsub");
            OapiV2DepartmentListsubRequest req = new OapiV2DepartmentListsubRequest();
            req.setDeptId(deptID);
            req.setLanguage("zh_CN");
            OapiV2DepartmentListsubResponse rsp = client.execute(req, getAccessToken());
            ObjectMapper objectMapper = new ObjectMapper();
            Map<String, Object> map = objectMapper.readValue(rsp.getBody(), Map.class);
            if (ObjectUtils.isNotEmpty(map)) {
                List<Map<String, Object>> dingDetpInfoList = (List<Map<String, Object>>) map.get("result");
                if (Integer.valueOf(map.get("errcode").toString()) == 0) {
                    for (int i = 0; i < dingDetpInfoList.size(); i++) {
                        Map<String, Object> map1 = dingDetpInfoList.get(i);
                        deptidList(Long.valueOf(map1.get("dept_id").toString()), 2);
                    }
                }
            }
        } catch (Exception e) {
            log.error(e.getMessage());
            new BaseException("登录出异常了,请联系管理员处理");
        }
    }
    public void DingUserInfoList(Long deptId) {
        DingTalkClient client = null;
        try {
            client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/list?access_token=" + getAccessToken());
            OapiV2UserListRequest req = new OapiV2UserListRequest();
            req.setDeptId(deptId);
            req.setCursor(0L);
            req.setSize(100L);
            req.setLanguage("zh_CN");
            OapiV2UserListResponse rsp = client.execute(req, "");
            //获取resp里的用户信息集合
            ObjectMapper objectMapper = new ObjectMapper();
            Map<String, Object> map = objectMapper.readValue(rsp.getBody(), Map.class);
            Map<String, Object> mapResult = (Map<String, Object>) map.get("result");
            List<Map<String, Object>> userInfoMapList = (List<Map<String, Object>>) mapResult.get("list");
            if (!CollectionUtils.isEmpty(userInfoMapList)) {
                //根据手机号,将userID写进对应的字段上
                for (Map<String, Object> objectMap : userInfoMapList) {
                    SysUser sysUser = new SysUser();
                    sysUser.setPhonenumber(objectMap.get("mobile").toString());
                    sysUser.setDingUserId(objectMap.get("userid").toString());
                    sysUserMapper.updateUser(sysUser);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * èŽ·å– access_token
@@ -176,4 +262,5 @@
        OapiGettokenResponse response = client.execute(request);
        return response.getAccessToken();
    }
}
ruoyi-project/src/main/resources/mapper/project/ServiceDonatecompletioninfoMapper.xml
@@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.mapper.ServiceDonatecompletioninfoMapper">
    <resultMap type="com.ruoyi.project.domain.ServiceDonatecompletioninfo" id="ServiceDonatecompletioninfoResult">
        <result property="id"    column="ID"    />
        <result property="infoid"    column="InfoID"    />
@@ -75,6 +75,7 @@
        `service_donatebaseinfo`.`create_by` AS `basecreateby`,
        `service_donatebaseinfo`.`workflow` AS `workflow`,
        `service_donatebaseinfo`.`termination_case` AS `terminationCase`,
        `service_donatebaseinfo`.`donatetime` AS `donatetime`,
        `service_donatecompletioninfo`.`ID` AS `dcID`,
        `service_donatecompletioninfo`.`InfoID` AS `InfoID`,
        `service_donatecompletioninfo`.`DonorNo` AS `dcDonorNo`,
@@ -150,4 +151,4 @@
        where InfoID = #{infoid}
    </update>
</mapper>
</mapper>
ruoyi-project/src/main/resources/mapper/project/ServiceDonationwitnessMapper.xml
@@ -121,6 +121,7 @@
        `service_donatebaseinfo`.`create_by` AS `basecreateby`,
        `service_donatebaseinfo`.`workflow` AS `workflow`,
        `service_donatebaseinfo`.`termination_case` AS `terminationCase`,
        `service_donatebaseinfo`.`donatetime` AS `donatetime`,
        `service_donationwitness`.`ID` AS `dwID`,
        `service_donationwitness`.`InfoID` AS `InfoID`,
        `service_donationwitness`.`DonorNo` AS `dwDonorNo`,
@@ -270,4 +271,4 @@
    </select>
</mapper>
</mapper>
ruoyi-project/src/main/resources/mapper/project/ServiceMedicalevaluationMapper.xml
@@ -71,6 +71,7 @@
        `service_donatebaseinfo`.`create_by` AS `basecreateby`,
        `service_donatebaseinfo`.`workflow` AS `workflow`,
        `service_donatebaseinfo`.`termination_case` AS `terminationCase`,
        `service_donatebaseinfo`.`donatetime` AS `donatetime`,
        `service_medicalevaluation`.`ID` AS `meID`,
        `service_medicalevaluation`.`HospitalAssessContent` AS `HospitalAssessContent`,
        `service_medicalevaluation`.`HospitalAssessConclusion` AS `HospitalAssessConclusion`,
@@ -126,4 +127,4 @@
        where CoreTeamAssessTime >= #{starttime} and CoreTeamAssessTime &lt;= #{endtime}
    </select>
</mapper>
</mapper>
ruoyi-project/src/main/resources/mapper/project/ServiceRelativesconfirmationMapper.xml
@@ -3,7 +3,7 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.project.mapper.ServiceRelativesconfirmationMapper">
    <resultMap type="com.ruoyi.project.domain.ServiceRelativesconfirmation" id="ServiceRelativesconfirmationResult">
        <result property="id"    column="ID"    />
        <result property="infoid"    column="InfoID"    />
@@ -106,6 +106,7 @@
        `service_donatebaseinfo`.`create_by` AS `basecreateby`,
        `service_donatebaseinfo`.`workflow` AS `workflow`,
        `service_donatebaseinfo`.`termination_case` AS `terminationCase`,
        `service_donatebaseinfo`.`donatetime` AS `donatetime`,
        `service_relativesconfirmation`.`ID` AS `rcID`,
        `service_relativesconfirmation`.`InfoID` AS `InfoID`,
        `service_relativesconfirmation`.`DonorNo` AS `rcDonroNo`,
@@ -183,4 +184,4 @@
        where SignDate >= #{starttime} and SignDate &lt;= #{endtime}
    </select>
</mapper>
</mapper>
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -47,6 +47,14 @@
    public SysUser selectUserByUserName(String userName);
    /**
     * é€šè¿‡é’‰é’‰ç”¨æˆ·id
     *
     * @param dingUserId ç”¨æˆ·å
     * @return ç”¨æˆ·å¯¹è±¡ä¿¡æ¯
     */
    public SysUser selectUserByDingUserId(String dingUserId);
    /**
     * é€šè¿‡å¾®ä¿¡OpenID查询用户
     *
     * @param openid å¾®ä¿¡OpenID
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -27,6 +27,7 @@
        <result property="errorNums" column="error_nums"/>
        <result property="errorTimes" column="error_times"/>
        <result property="standardlevel" column="standardlevel"/>
        <result property="dingUserId" column="ding_user_id"/>
        <association property="dept" column="dept_id" javaType="com.ruoyi.common.core.domain.entity.SysDept"
                     resultMap="deptResult"/>
        <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
@@ -54,6 +55,7 @@
        select u.user_id,
               u.openid,
               u.dept_id,
               u.ding_user_id,
               u.error_nums,
               u.error_times,
               u.user_name,
@@ -90,7 +92,8 @@
    </sql>
    <select id="selectUserList" parameterType="com.ruoyi.common.core.domain.entity.SysUser" resultMap="SysUserResult">
        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex,
        select u.user_id,u.ding_user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber,
        u.password, u.sex,
        u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.standardlevel,
        d.dept_name, d.leader from sys_user u
        left join sys_dept d on u.dept_id = d.dept_id
@@ -163,6 +166,10 @@
        <include refid="selectUserVo"/>
        where u.user_name = #{userName}
    </select>
    <select id="selectUserByDingUserId" parameterType="String" resultMap="SysUserResult">
        <include refid="selectUserVo"/>
        where u.ding_user_id = #{dingUserId}
    </select>
    <select id="selectUserByOpenID" parameterType="String" resultMap="SysUserResult">
        <include refid="selectUserVo"/>
@@ -211,6 +218,7 @@
        <if test="status != null and status != ''">status,</if>
        <if test="createBy != null and createBy != ''">create_by,</if>
        <if test="remark != null and remark != ''">remark,</if>
        <if test="dingUserId != null and dingUserId != ''">ding_user_id,</if>
        create_time
        )values(
        <if test="userId != null and userId != ''">#{userId},</if>
@@ -225,6 +233,7 @@
        <if test="status != null and status != ''">#{status},</if>
        <if test="createBy != null and createBy != ''">#{createBy},</if>
        <if test="remark != null and remark != ''">#{remark},</if>
        <if test="dingUserId != null and dingUserId != ''">#{dingUserId},</if>
        sysdate()
        )
    </insert>
@@ -247,9 +256,12 @@
            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="errorNums != null">error_nums = #{errorNums},</if>
            <if test="dingUserId != null and dingUserId != ''">ding_user_id = #{dingUserId},</if>
            update_time = sysdate()
        </set>
        where user_id = #{userId}
        where del_flag=0
        <if test="userId != null and userId != ''">and user_id = #{userId}</if>
        <if test="phonenumber != null and phonenumber != ''">and phonenumber = #{phonenumber}</if>
    </update>
    <update id="updateUserStatus" parameterType="com.ruoyi.common.core.domain.entity.SysUser">
@@ -264,7 +276,7 @@
        where user_name = #{userName}
    </update>
    <update id="resetUserPwd" parameterType="SysUser">
    <update id="resetUserPwd" parameterType="com.ruoyi.common.core.domain.entity.SysUser">
        update sys_user
        set password = #{password}
        where user_name = #{userName}