Commit 819d199c by xuwenhao

拉取钉钉用户、部门、级部成员信息

parent a9f5d1ff
...@@ -32,7 +32,7 @@ public class SysDept extends BaseEntity ...@@ -32,7 +32,7 @@ public class SysDept extends BaseEntity
private String deptName; private String deptName;
/** 显示顺序 */ /** 显示顺序 */
private Integer orderNum; private Long orderNum;
/** 负责人 */ /** 负责人 */
private String leader; private String leader;
...@@ -98,12 +98,12 @@ public class SysDept extends BaseEntity ...@@ -98,12 +98,12 @@ public class SysDept extends BaseEntity
} }
@NotNull(message = "显示顺序不能为空") @NotNull(message = "显示顺序不能为空")
public Integer getOrderNum() public Long getOrderNum()
{ {
return orderNum; return orderNum;
} }
public void setOrderNum(Integer orderNum) public void setOrderNum(Long orderNum)
{ {
this.orderNum = orderNum; this.orderNum = orderNum;
} }
......
...@@ -116,6 +116,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter ...@@ -116,6 +116,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
.antMatchers("/dd/user/login").permitAll() .antMatchers("/dd/user/login").permitAll()
.antMatchers( "/common/**").permitAll() .antMatchers( "/common/**").permitAll()
.antMatchers( "/dd/school/**").permitAll() .antMatchers( "/dd/school/**").permitAll()
//打印下载接口放行
.antMatchers("/school/student/queryOne/**","/school/studentStatus/proofStatus/**").permitAll()
//网页注册登录接口放行 //网页注册登录接口放行
.antMatchers( "/web/artStudent/register","/web/artStudent/login").permitAll() .antMatchers( "/web/artStudent/register","/web/artStudent/login").permitAll()
// 静态资源,可匿名访问 // 静态资源,可匿名访问
......
...@@ -6,8 +6,10 @@ import com.dingtalk.api.DefaultDingTalkClient; ...@@ -6,8 +6,10 @@ import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiUserGetuserinfoRequest; import com.dingtalk.api.request.OapiUserGetuserinfoRequest;
import com.dingtalk.api.request.OapiV2UserGetRequest; import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiUserGetuserinfoResponse; import com.dingtalk.api.response.OapiUserGetuserinfoResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse; import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SchoolTeacher; import com.ruoyi.common.core.domain.entity.SchoolTeacher;
...@@ -55,40 +57,40 @@ public class DdLoginController { ...@@ -55,40 +57,40 @@ public class DdLoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET) @RequestMapping(value = "/login", method = RequestMethod.GET)
public AjaxResult login (@RequestParam("code") String code) { public AjaxResult login (@RequestParam("code") String code) {
AjaxResult ajaxResult = new AjaxResult(); AjaxResult ajaxResult = new AjaxResult();
// // 获取access_token,注意正式代码要有异常流处理 // 获取access_token,注意正式代码要有异常流处理
// String access_token= accessTokenUtils.getToken(); String access_token= accessTokenUtils.getToken();
// // 获取用户信息 // 获取用户信息
// DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo"); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo");
// OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest(); OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();
// request.setCode(code); request.setCode(code);
// request.setHttpMethod("GET"); request.setHttpMethod("GET");
// OapiUserGetuserinfoResponse response; OapiUserGetuserinfoResponse response;
// try { try {
// response = client.execute(request, access_token); response = client.execute(request, access_token);
// } catch (ApiException e) { } catch (ApiException e) {
// // TODO Auto-generated catch block // TODO Auto-generated catch block
// e.printStackTrace(); e.printStackTrace();
// return null; return null;
// } }
// // 查询得到当前用户的userId // 查询得到当前用户的userId
// // 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验 // 获得到userId之后应用应该处理应用自身的登录会话管理(session),避免后续的业务交互(前端到应用服务端)每次都要重新获取用户身份,提升用户体验
// String userId = response.getUserid(); String userId = response.getUserid();
// if (StringUtils.isEmpty(userId)){ if (StringUtils.isEmpty(userId)){
// throw new ServiceException("免登码已失效,请重新获取"); throw new ServiceException("免登码已失效,请重新获取");
// } }
// //获取用户详细信息 //获取用户详细信息
// Map<String, Object> userInfo = getUserInfo(userId, access_token); Map<String, Object> userInfo = getUserInfo(userId, access_token);
// String phone = (String) userInfo.get("phone"); String phone = (String) userInfo.get("phone");
// String unionId = (String) userInfo.get("unionId"); String unionId = (String) userInfo.get("unionId");
SchoolTeacher schoolTeacher = schoolTeacherService.selectTeacherByPhone("15888888888"); SchoolTeacher schoolTeacher = schoolTeacherService.selectTeacherByPhone(phone);
if (StringUtils.isNull(schoolTeacher)){ if (StringUtils.isNull(schoolTeacher)){
throw new ServiceException("未查询到该用户信息"); throw new ServiceException("未查询到该用户信息");
} }
Long userId = schoolTeacher.getId(); Long userId1 = schoolTeacher.getId();
SysUser sysUser = sysUserService.selectUserById(userId); SysUser sysUser = sysUserService.selectUserById(userId1);
//更新钉钉用户iid和unionId //更新钉钉用户iid和unionId
// sysUser.setUnionId(unionId); sysUser.setUnionId(unionId);
// schoolTeacherService.updateDdUserId(sysUser, userId); schoolTeacherService.updateDdUserId(sysUser, userId);
String token = loginService.loginNew(sysUser); String token = loginService.loginNew(sysUser);
ajaxResult.put(Constants.TOKEN, token); ajaxResult.put(Constants.TOKEN, token);
return ajaxResult; return ajaxResult;
......
package yangtz.cs.liu.dingding.controller.dingDept;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import yangtz.cs.liu.dingding.service.impl.dingDept.DdDeptServcieImpl;
@RestController
@RequestMapping("/dd/school/dept")
public class DdDeptController extends BaseController {
@Autowired
private DdDeptServcieImpl ddDeptServcie;
/**
* 获取钉钉全部部门列表
*/
@GetMapping("/getDeptList")
public TableDataInfo getDeptList(){
return getDataTable(ddDeptServcie.getDeptList());
}
/**
* 下拉钉钉部门列表到系统
*/
@PostMapping("/addDdDept")
public AjaxResult addDdDept(){
return toAjax(ddDeptServcie.addDdDept());
}
/**
* 同步钉钉部门列表
*/
@GetMapping("/syncDdDept")
public AjaxResult syncDdDept(){
return AjaxResult.success(ddDeptServcie.syncDdDept());
}
}
...@@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSON; ...@@ -4,9 +4,11 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import yangtz.cs.liu.dingding.config.Constant; import yangtz.cs.liu.dingding.config.Constant;
import yangtz.cs.liu.dingding.utils.AccessTokenUtils; import yangtz.cs.liu.dingding.service.impl.dingDept.DdDeptServcieImpl;
import yangtz.cs.liu.dingding.service.impl.dingUser.DdUserServiceImpl;
import yangtz.cs.liu.dingding.utils.DingCallbackCrypto; import yangtz.cs.liu.dingding.utils.DingCallbackCrypto;
import java.util.Map; import java.util.Map;
...@@ -20,6 +22,11 @@ public class DingEventController { ...@@ -20,6 +22,11 @@ public class DingEventController {
private static Logger log = LoggerFactory.getLogger(DingEventController.class); private static Logger log = LoggerFactory.getLogger(DingEventController.class);
@Autowired
private DdDeptServcieImpl ddDeptServcie;
@Autowired
private DdUserServiceImpl ddUserService;
@PostMapping("/callBack") @PostMapping("/callBack")
public Map<String, String> callBack( public Map<String, String> callBack(
@RequestParam(value = "msg_signature", required = false) String msg_signature, @RequestParam(value = "msg_signature", required = false) String msg_signature,
...@@ -47,12 +54,26 @@ public class DingEventController { ...@@ -47,12 +54,26 @@ public class DingEventController {
// 测试回调url的正确性 // 测试回调url的正确性
log.info("测试回调url的正确性"); log.info("测试回调url的正确性");
} else if ("user_add_org".equals(eventType)) { } else if ("user_add_org".equals(eventType)) {
// 处理通讯录用户增加事件 // 处理通讯录用户增加
log.info("发生了:" + eventType + "事件"); ddUserService.addUser(eventJson);
} else if ("user_modify_org".equals(eventType)) {
// 处理通讯录用户修改
ddUserService.updateUser(eventJson);
} else if ("user_leave_org".equals(eventType)) {
// 处理通讯录用户离职
ddUserService.leaveUser(eventJson);
} else if ("org_dept_create".equals(eventType)){
// 处理通讯录企业部门创建
ddDeptServcie.ddDeptCreate(eventJson);
} else if ("org_dept_modify".equals(eventType)){
// 处理通讯录企业部门修改
ddDeptServcie.ddDeptUpdate(eventJson);
} else if ("org_dept_remove".equals(eventType)){
// 处理通讯录企业部门删除
ddDeptServcie.ddDeptDelete(eventJson);
} else if ("bpms_instance_change".equals(eventType)){ } else if ("bpms_instance_change".equals(eventType)){
// 处理审批实例事件 // 处理审批实例事件
processInstance(eventJson); log.info("发生了:" + eventType + "事件");
} else if ("bpms_task_change".equals(eventType)){ } else if ("bpms_task_change".equals(eventType)){
// 处理审批任务事件 // 处理审批任务事件
eventJson.get(""); eventJson.get("");
...@@ -70,16 +91,4 @@ public class DingEventController { ...@@ -70,16 +91,4 @@ public class DingEventController {
} }
return null; return null;
} }
/**
* 处理审批实例事件
*/
public void processInstance(JSONObject eventJson){
//获取审批类型
String type = eventJson.getString("type");
//判断审批实例是否正常结束
if ("finish".equals(type)){
}
}
} }
...@@ -4,10 +4,8 @@ import com.ruoyi.common.core.controller.BaseController; ...@@ -4,10 +4,8 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping; import yangtz.cs.liu.dingding.service.impl.dingUser.DdUserServiceImpl;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import yangtz.cs.liu.dingding.utils.DingUserUtils; import yangtz.cs.liu.dingding.utils.DingUserUtils;
/** /**
...@@ -18,42 +16,38 @@ import yangtz.cs.liu.dingding.utils.DingUserUtils; ...@@ -18,42 +16,38 @@ import yangtz.cs.liu.dingding.utils.DingUserUtils;
public class DingUserController extends BaseController { public class DingUserController extends BaseController {
@Autowired @Autowired
private DingUserUtils dingUserUtils; private DdUserServiceImpl ddUserService;
/** /**
* 获取部门用户基础信息 * 获取钉钉所有用户id
*/ */
@GetMapping("/getUserByDeptId") @GetMapping("/getDdUserListAll")
public TableDataInfo getUserByDeptId(@RequestParam("deptId") Long deptId, public TableDataInfo getDdUserListAll(){
@RequestParam("cursor") Long cursor, return getDataTable(ddUserService.getDdUserListAll());
@RequestParam("size") Long size,
@RequestParam("orderField") String orderField,
@RequestParam("containAccessLimit") String containAccessLimit,
@RequestParam("language") String language)
{
return getDataTable(dingUserUtils.getUserByDeptId(deptId, cursor, size, orderField, containAccessLimit, language));
} }
/** /**
* 获取部门用户完整信息 * 下拉钉钉用户到系统
*/ */
@GetMapping("/getUserInfoByDeptId") @PostMapping("/addDdUser")
public TableDataInfo getUserInfoByDeptId(@RequestParam("deptId") Long deptId, public AjaxResult addDdUser(){
@RequestParam("cursor") Long cursor, return toAjax(ddUserService.addDdUser());
@RequestParam("size") Long size,
@RequestParam("orderField") String orderField,
@RequestParam("containAccessLimit") String containAccessLimit,
@RequestParam("language") String language)
{
return getDataTable(dingUserUtils.getUserInfoByDeptId(deptId, cursor, size, orderField, containAccessLimit, language));
} }
/** /**
* 获取用户详情 * 用户表数据同步到教师表
* @return
*/ */
@GetMapping("/getUser") @PostMapping("/addDdTeacher")
public AjaxResult getUser(@RequestParam("userId") String userId){ public AjaxResult addDdTeacher(){
return AjaxResult.success(dingUserUtils.getUser(userId)); return toAjax(ddUserService.addDdTeacher());
} }
/**
* 同步钉钉用户列表
*/
@GetMapping("/syncDdUser")
public AjaxResult syncDdUser(){
return AjaxResult.success(ddUserService.syncDdUser());
}
} }
package yangtz.cs.liu.dingding.domain.dingDept;
import com.ruoyi.common.core.domain.BaseEntity;
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.NotNull;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;
public class SysDdDept extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 部门ID */
private Long deptId;
/** 父部门ID */
private Long parentId;
/** 祖级列表 */
private String ancestors;
/** 部门名称 */
private String deptName;
/** 显示顺序 */
private Long orderNum;
/** 负责人 */
private String leader;
/** 联系电话 */
private String phone;
/** 邮箱 */
private String email;
/** 部门状态:0正常,1停用 */
private String status;
/** 钉钉部门id */
private Long ddDeptId;
/** 钉钉父部门id */
private Long ddParentId;
/** 删除标志(0代表存在 2代表删除) */
private String delFlag;
/** 父部门名称 */
private String parentName;
/** 子部门 */
private List<SysDdDept> children = new ArrayList<SysDdDept>();
public Long getDdDeptId() {
return ddDeptId;
}
public void setDdDeptId(Long ddDeptId) {
this.ddDeptId = ddDeptId;
}
public Long getDdParentId() {
return ddParentId;
}
public void setDdParentId(Long ddParentId) {
this.ddParentId = ddParentId;
}
public Long getDeptId()
{
return deptId;
}
public void setDeptId(Long deptId)
{
this.deptId = deptId;
}
public Long getParentId()
{
return parentId;
}
public void setParentId(Long parentId)
{
this.parentId = parentId;
}
public String getAncestors()
{
return ancestors;
}
public void setAncestors(String ancestors)
{
this.ancestors = ancestors;
}
@NotBlank(message = "部门名称不能为空")
@Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
public String getDeptName()
{
return deptName;
}
public void setDeptName(String deptName)
{
this.deptName = deptName;
}
@NotNull(message = "显示顺序不能为空")
public Long getOrderNum() {
return orderNum;
}
public void setOrderNum(Long orderNum) {
this.orderNum = orderNum;
}
public String getLeader()
{
return leader;
}
public void setLeader(String leader)
{
this.leader = leader;
}
@Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符")
public String getPhone()
{
return phone;
}
public void setPhone(String phone)
{
this.phone = phone;
}
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getParentName()
{
return parentName;
}
public void setParentName(String parentName)
{
this.parentName = parentName;
}
public List<SysDdDept> getChildren() {
return children;
}
public void setChildren(List<SysDdDept> children) {
this.children = children;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("deptId", getDeptId())
.append("parentId", getParentId())
.append("ancestors", getAncestors())
.append("deptName", getDeptName())
.append("orderNum", getOrderNum())
.append("leader", getLeader())
.append("phone", getPhone())
.append("email", getEmail())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}
package yangtz.cs.liu.dingding.domain.dingGrade;
import com.core.domain.OurBaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class SchoolGradeMentorCopy extends OurBaseEntity {
/** 老师主键 */
@NotNull(message = "级部教师不能为空")
private Long teacherId;
/** 年级级部主键 */
private Long gradeId;
/** 教师任职开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime;
/** 教师任职结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endTime;
/** 类型(1年级部,2学科组长) */
private String type;
/** 职务 */
private String teacherPost;
/** 学科组(1物理学科组,2化学学科组,3生物学科组) */
private String subGroup;
}
package yangtz.cs.liu.dingding.domain.dingUser;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excels;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysRole;
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;
public class SysDdUser extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 用户ID */
@Excel(name = "用户序号", cellType = Excel.ColumnType.NUMERIC, prompt = "用户编号")
private Long userId;
/** 部门ID */
@Excel(name = "部门编号", type = Excel.Type.IMPORT)
private Long deptId;
/** 用户账号 */
@Excel(name = "登录名称")
private String userName;
// /** 用户昵称 */
// @Excel(name = "用户名称")
// private String nickName;
/** 登录名称 */
@Excel(name = "登录名称")
private String loginName;
/** 用户类型 */
private String userType;
/** 用户类型 */
private String userLoginType;
/** 用户邮箱 */
@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;
/** 盐加密 */
private String salt;
/** 帐号状态(0正常 1停用) */
@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
private String status;
/** 删除标志(0代表存在 2代表删除) */
private String delFlag;
/** 最后登录IP */
@Excel(name = "最后登录IP", type = Excel.Type.EXPORT)
private String loginIp;
/** 最后登录时间 */
@Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Excel.Type.EXPORT)
private Date loginDate;
/** 密码最后更新时间 */
private Date pwdUpdateDate;
/** 微信openId */
private String openId;
/** 钉钉用户unionId */
private String unionId;
/** 钉钉用户id */
private String ddUserId;
/** 部门对象 */
@Excels({
@Excel(name = "部门名称", targetAttr = "deptName", type = Excel.Type.EXPORT),
@Excel(name = "部门负责人", targetAttr = "leader", type = Excel.Type.EXPORT)
})
private SysDept dept;
/** 用户所在部门列表 */
private List<Long> ddUserDepts;
/** 角色对象 */
private List<SysRole> roles;
/** 角色组 */
private Long[] roleIds;
/** 岗位组 */
private Long[] postIds;
/** 岗位组名称 */
private String postName;
/** 角色ID */
private Long roleId;
/** 职工类型(0带班,1不带班) */
private String employeeType;
/** 学生id */
private Long studentId;
/** 签名路径 */
private String sign;
public SysDdUser()
{
}
public List<Long> getDdUserDepts() {
return ddUserDepts;
}
public void setDdUserDepts(List<Long> ddUserDepts) {
this.ddUserDepts = ddUserDepts;
}
public String getUnionId() {
return unionId;
}
public void setUnionId(String unionId) {
this.unionId = unionId;
}
public String getDdUserId() {
return ddUserId;
}
public void setDdUserId(String ddUserId) {
this.ddUserId = ddUserId;
}
public SysDdUser(Long userId)
{
this.userId = userId;
}
public Long getUserId()
{
return userId;
}
public void setUserId(Long userId)
{
this.userId = userId;
}
public boolean isAdmin()
{
return isAdmin(this.userId);
}
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
public Long getDeptId()
{
return deptId;
}
public void setDeptId(Long deptId)
{
this.deptId = deptId;
}
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
public String getPhonenumber()
{
return phonenumber;
}
public void setPhonenumber(String phonenumber)
{
this.phonenumber = phonenumber;
}
public String getSex()
{
return sex;
}
public void setSex(String sex)
{
this.sex = sex;
}
public String getAvatar()
{
return avatar;
}
public void setAvatar(String avatar)
{
this.avatar = avatar;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getStatus()
{
return status;
}
public void setStatus(String status)
{
this.status = status;
}
public String getDelFlag()
{
return delFlag;
}
public void setDelFlag(String delFlag)
{
this.delFlag = delFlag;
}
public String getLoginIp()
{
return loginIp;
}
public void setLoginIp(String loginIp)
{
this.loginIp = loginIp;
}
public Date getLoginDate()
{
return loginDate;
}
public void setLoginDate(Date loginDate)
{
this.loginDate = loginDate;
}
public SysDept getDept()
{
return dept;
}
public void setDept(SysDept dept)
{
this.dept = dept;
}
public List<SysRole> getRoles()
{
return roles;
}
public void setRoles(List<SysRole> roles)
{
this.roles = roles;
}
public Long[] getRoleIds()
{
return roleIds;
}
public void setRoleIds(Long[] roleIds)
{
this.roleIds = roleIds;
}
public Long[] getPostIds()
{
return postIds;
}
public void setPostIds(Long[] postIds)
{
this.postIds = postIds;
}
public Long getRoleId()
{
return roleId;
}
public void setRoleId(Long roleId)
{
this.roleId = roleId;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getUserType() {
return userType;
}
public void setUserType(String userType) {
this.userType = userType;
}
public Date getPwdUpdateDate() {
return pwdUpdateDate;
}
public void setPwdUpdateDate(Date pwdUpdateDate) {
this.pwdUpdateDate = pwdUpdateDate;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("deptId", getDeptId())
.append("loginName", getLoginName())
.append("userName", getUserName())
.append("userType", getUserType())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())
.append("avatar", getAvatar())
.append("password", getPassword())
.append("salt", getSalt())
.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())
.append("roles", getRoles())
.toString();
}
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
public String getUserLoginType() {
return userLoginType;
}
public void setUserLoginType(String userLoginType) {
this.userLoginType = userLoginType;
}
public String getEmployeeType() {
return employeeType;
}
public void setEmployeeType(String employeeType) {
this.employeeType = employeeType;
}
public Long getStudentId() {
return studentId;
}
public void setStudentId(Long studentId) {
this.studentId = studentId;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getPostName() {
return postName;
}
public void setPostName(String postName) {
this.postName = postName;
}
}
package yangtz.cs.liu.dingding.domain.dingUser;
import lombok.Data;
@Data
public class SysDdUserDept {
private Long userId;
private Long deptId;
}
package yangtz.cs.liu.dingding.domain.schoolTeacher;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.Date;
@Data
public class SysDdTeacher extends BaseEntity
{
private static final long serialVersionUID = 1L;
private Long id;
/**
* 照片路径
*/
@Excel(name = "照片", cellType = Excel.ColumnType.IMAGE, height = 55, type = Excel.Type.EXPORT)
private String picUrl;
/**
* 老师名称
*/
@Excel(name = "老师名称")
@NotBlank(message = "老师名字不能为空")
private String teacherName;
/**
* 性别
*/
@Excel(name = "性别", readConverterExp = "0=男,1=女")
@NotBlank(message = "性别不能为空")
private String sex;
/**
* 民族
*/
@Excel(name = "民族")
private String nation;
/**
* 工作编号
*/
@Excel(name = "工作编号")
private String teacherCode;
/*
* 系统表 用户id
* */
@TableField(exist = false)
private Long userId;
/**
* 生日
*/
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "生日", width = 25, dateFormat = "yyyy-MM-dd")
private Date birthday;
/**
* 学历
*/
@Excel(name = "学历", readConverterExp = "0=高中,1=专科,2=本科,3=研究生,4=硕士,5=博士",combo = {"高中","专科","本科","研究生","硕士","博士"})
private String education;
/**
* 老师电话
*/
@Excel(name = "老师电话")
@NotBlank(message = "老师电话不能为空")
private String teacherTel;
/**
* 身份证号
*/
@Excel(name = "身份证号", width = 30)
@NotBlank(message = "身份证号不能为空")
private String idCard;
/**
* 家庭住址
*/
@Excel(name = "家庭住址", width = 35)
private String homeAddress;
/*
* 微信openid
* */
private String openId;
/*
* 钉钉用户unionId
* */
private String unionId;
/*
* 钉钉用户id
* */
private String ddUserId;
//设备工号
private String deviceNum;
/**部门id**/
@TableField(exist = false)
private Long deptId;
/**部门名称**/
@TableField(exist = false)
private String deptName;
/** 密码 */
@TableField(exist = false)
private String password;
/** 帐号状态(0正常 1停用) */
//@Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
@TableField(exist = false)
private String status;
/**签名路径*/
@TableField(exist = false)
private String sign;
/**头像**/
@TableField(exist = false)
private String avatar;
/*职工类型**/
@TableField(exist = false)
private String employeeType;
@TableField(exist = false)
private String email;
/** 父部门ID */
@TableField(exist = false)
private Long parentId;
/** 父部门名称 */
@TableField(exist = false)
private String parentName;
}
package yangtz.cs.liu.dingding.mapper.dingDept;
import yangtz.cs.liu.dingding.domain.dingDept.SysDdDept;
import java.util.List;
import java.util.Map;
public interface DdDeptMapper {
/**
* 查询系统部门列表
* @param sysDdDept
* @return
*/
List<SysDdDept> selectDdDeptList(SysDdDept sysDdDept);
/**
* 根据钉钉部门id查询系统部门信息
*/
SysDdDept selectDeptByDdDeptId(Long ddDeptId);
/**
* 根据部门id查询系统部门信息
*/
SysDdDept selectDeptByDeptId(Long deptId);
/**
* 查询级部信息
*/
List<Map<String,Object>> selectGradeList();
/**
* 新增钉钉部门
* @return
*/
int insertDdDept(SysDdDept sysDdDept);
/**
* 更新钉钉部门
* @param sysDdDept
* @return
*/
int updateDdDeptByDdDeptId(SysDdDept sysDdDept);
/**
* 删除部门
* @param deptId
* @return
*/
int deleteDdDeptById(Long deptId);
/**
* 根据钉钉部门id删除部门
* @param ddDeptId
* @return
*/
int deleteDdDeptByDdDeptId(Long ddDeptId);
}
package yangtz.cs.liu.dingding.mapper.dingUser;
import org.apache.ibatis.annotations.Param;
import yangtz.cs.liu.dingding.domain.dingGrade.SchoolGradeMentorCopy;
import yangtz.cs.liu.dingding.domain.dingUser.SysDdUser;
import yangtz.cs.liu.dingding.domain.dingUser.SysDdUserDept;
import java.util.List;
public interface DdUserMapper {
/**
* 批量新增钉钉用户
*/
int batchInsertDdUser(@Param("list") List<SysDdUser> list);
/**
* 新增用户
*/
int insertDdUser(SysDdUser sysDdUser);
/**
* 更新用户
*/
int updateDdUser(SysDdUser sysDdUser);
/**
* 查询全部用户
*/
List<SysDdUser> selectDdUserList(SysDdUser sysDdUser);
/**
* 新增用户部门关系
*/
int insertDdUserDept(SysDdUserDept sysDdUserDept);
/**
* 删除用户
*/
int deleteDdUser(Long userId);
/**
* 删除用户和部门关系
*/
int deleteDdUserDept(Long userId);
/**
* 删除教师
*/
int deleteDdTeacher(Long userId);
/**
* 根据用户id查询用户部门id列表
*/
List<Long> selectDeptIdByUserId(Long userId);
/**
* 根据钉钉用户id查询用户信息
* @param ddUserId
* @return
*/
SysDdUser selectDdUserByDdUserId(String ddUserId);
/**
* 新增级部成员
* @param schoolGradeMentorCopy
* @return
*/
int insertGradeMentor(SchoolGradeMentorCopy schoolGradeMentorCopy);
/**
* 删除级部成员
* @param userId
* @return
*/
int deleteGradeMentor(Long userId);
}
package yangtz.cs.liu.dingding.mapper.schoolTeacher;
import org.apache.ibatis.annotations.Param;
import yangtz.cs.liu.dingding.domain.schoolTeacher.SysDdTeacher;
import java.util.List;
public interface DdTeacherMapper {
/**
* 批量新增教师
*/
int batchInsertTeacher(@Param("list") List<SysDdTeacher> list);
/**
* 新增教师
*/
int addTeacherList(SysDdTeacher sysDdTeacher);
/**
* 更新教师信息
*/
int updateDdTeacher(SysDdTeacher sysDdTeacher);
}
package yangtz.cs.liu.dingding.service.dingDept;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.response.OapiV2DepartmentListsubResponse;
import java.util.List;
public interface IDdDeptService {
/**
* 获取钉钉全部部门列表
* @return
*/
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> getDeptList();
/**
* 下拉钉钉部门列表到系统
* @return
*/
int addDdDept();
/**
* 同步钉钉部门列表
* @return
*/
String syncDdDept();
/**
* 钉钉部门创建
*/
int ddDeptCreate(JSONObject eventJson);
/**
* 钉钉部门修改
*/
int ddDeptUpdate(JSONObject eventJson);
/**
* 钉钉部门删除
*/
int ddDeptDelete(JSONObject eventJson);
}
package yangtz.cs.liu.dingding.service.dingUser;
import com.alibaba.fastjson.JSONObject;
import java.util.List;
public interface IDdUserService {
/**
* 获取钉钉全部用户id
*/
List<String> getDdUserListAll();
/**
* 下拉钉钉用户到系统
*/
int addDdUser();
/**
* 用户表数据同步到教师表
* @return
*/
int addDdTeacher();
/**
* 同步钉钉用户
*/
String syncDdUser();
/**
* 处理通讯录用户增加
*/
int addUser(JSONObject eventJson);
/**
* 处理通讯录用户修改
*/
int updateUser(JSONObject eventJson);
/**
* 处理通讯录用户离职
*/
int leaveUser(JSONObject eventJson);
}
package yangtz.cs.liu.dingding.service.impl.dingDept;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.response.OapiV2DepartmentGetResponse;
import com.dingtalk.api.response.OapiV2DepartmentListsubResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import yangtz.cs.liu.dingding.domain.dingDept.SysDdDept;
import yangtz.cs.liu.dingding.mapper.dingDept.DdDeptMapper;
import yangtz.cs.liu.dingding.service.dingDept.IDdDeptService;
import yangtz.cs.liu.dingding.utils.DingDeptUtils;
import java.util.ArrayList;
import java.util.List;
@Service
public class DdDeptServcieImpl implements IDdDeptService {
@Autowired
private DingDeptUtils dingDeptUtils;
@Autowired
private DdDeptMapper ddDeptMapper;
/**
* 获取钉钉全部部门列表
* @return
*/
@Override
public List<OapiV2DepartmentListsubResponse.DeptBaseResponse> getDeptList() {
Long deptId = 1L;
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptListAll = new ArrayList<>();
//一级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList = dingDeptUtils.getDeptList(deptId, "");
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response : deptList) {
if (response.getDeptId() != -7){
deptListAll.add(response);
//二级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList1 = dingDeptUtils.getDeptList(response.getDeptId(), "");
if (deptList1.size() > 0) {
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response1 : deptList1) {
deptListAll.add(response1);
//三级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList2 = dingDeptUtils.getDeptList(response1.getDeptId(), "");
if (deptList2.size() > 0){
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response2 : deptList2) {
deptListAll.add(response2);
//四级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList3 = dingDeptUtils.getDeptList(response2.getDeptId(), "");
if (deptList3.size() > 0){
deptListAll.addAll(deptList3);
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response3 : deptList3) {
//五级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList4 = dingDeptUtils.getDeptList(response3.getDeptId(), "");
if (deptList4.size() > 0){
deptListAll.addAll(deptList4);
}
}
}
}
}
}
}
}
}
return deptListAll;
}
/**
* 下拉钉钉部门列表到系统
* @return
*/
@Override
@Transactional
public int addDdDept() {
Long deptId = 1L;
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept = dingDeptUtils.getDept(deptId, "");
//新增顶级目录
SysDdDept sysDdDept = new SysDdDept();
sysDdDept.setDeptId(100L);
sysDdDept.setParentId(0L);
sysDdDept.setAncestors("0");
sysDdDept.setDeptName(dept.getName());
sysDdDept.setOrderNum(0L);
sysDdDept.setDdDeptId(dept.getDeptId());
sysDdDept.setDdParentId(0L);
sysDdDept.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept);
//全部部门列表
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptListAll = new ArrayList<>();
//一级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList = dingDeptUtils.getDeptList(deptId, "");
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response : deptList) {
if (response.getDeptId() != -7){
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept1 = dingDeptUtils.getDept(response.getDeptId(), "");
//新增一级目录
SysDdDept sysDdDept1 = new SysDdDept();
sysDdDept1.setParentId(sysDdDept.getDeptId());
sysDdDept1.setAncestors("0," + sysDdDept.getDeptId());
sysDdDept1.setDeptName(response.getName());
sysDdDept1.setOrderNum(dept1.getOrder());
sysDdDept1.setDdDeptId(response.getDeptId());
sysDdDept1.setDdParentId(response.getParentId());
sysDdDept1.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept1);
deptListAll.add(response);
//二级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList1 = dingDeptUtils.getDeptList(response.getDeptId(), "");
if (deptList1.size() > 0) {
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response1 : deptList1) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept2 = dingDeptUtils.getDept(response1.getDeptId(), "");
//新增二级目录
SysDdDept sysDdDept2 = new SysDdDept();
sysDdDept2.setParentId(sysDdDept1.getDeptId());
sysDdDept2.setAncestors(sysDdDept1.getAncestors() + "," + sysDdDept1.getDeptId());
sysDdDept2.setDeptName(response1.getName());
sysDdDept2.setOrderNum(dept2.getOrder());
sysDdDept2.setDdDeptId(response1.getDeptId());
sysDdDept2.setDdParentId(response1.getParentId());
sysDdDept2.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept2);
deptListAll.add(response1);
//三级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList2 = dingDeptUtils.getDeptList(response1.getDeptId(), "");
if (deptList2.size() > 0){
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response2 : deptList2) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept3 = dingDeptUtils.getDept(response2.getDeptId(), "");
//新增三级目录
SysDdDept sysDdDept3 = new SysDdDept();
sysDdDept3.setParentId(sysDdDept2.getDeptId());
sysDdDept3.setAncestors(sysDdDept2.getAncestors() + "," + sysDdDept2.getDeptId());
sysDdDept3.setDeptName(response2.getName());
sysDdDept3.setOrderNum(dept3.getOrder());
sysDdDept3.setDdDeptId(response2.getDeptId());
sysDdDept3.setDdParentId(response2.getParentId());
sysDdDept3.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept3);
deptListAll.add(response2);
//四级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList3 = dingDeptUtils.getDeptList(response2.getDeptId(), "");
if (deptList3.size() > 0){
deptListAll.addAll(deptList3);
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response3 : deptList3) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept4 = dingDeptUtils.getDept(response3.getDeptId(), "");
//新增四级目录
SysDdDept sysDdDept4 = new SysDdDept();
sysDdDept4.setParentId(sysDdDept3.getDeptId());
sysDdDept4.setAncestors(sysDdDept3.getAncestors() + "," + sysDdDept3.getDeptId());
sysDdDept4.setDeptName(response3.getName());
sysDdDept4.setOrderNum(dept4.getOrder());
sysDdDept4.setDdDeptId(response3.getDeptId());
sysDdDept4.setDdParentId(response3.getParentId());
sysDdDept4.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept4);
//五级
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> deptList4 = dingDeptUtils.getDeptList(response3.getDeptId(), "");
if (deptList4.size() > 0){
deptListAll.addAll(deptList4);
for (OapiV2DepartmentListsubResponse.DeptBaseResponse response4 : deptList4) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept5 = dingDeptUtils.getDept(response4.getDeptId(), "");
//新增五级目录
SysDdDept sysDdDept5 = new SysDdDept();
sysDdDept5.setParentId(sysDdDept4.getDeptId());
sysDdDept5.setAncestors(sysDdDept4.getAncestors() + "," + sysDdDept4.getDeptId());
sysDdDept5.setDeptName(response4.getName());
sysDdDept5.setOrderNum(dept5.getOrder());
sysDdDept5.setDdDeptId(response4.getDeptId());
sysDdDept5.setDdParentId(response4.getParentId());
sysDdDept5.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept5);
}
}
}
}
}
}
}
}
}
}
return 1;
}
/**
* 同步钉钉部门列表
* @return
*/
@Override
@Transactional
public String syncDdDept() {
//获取钉钉所有部门列表
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> ddDeptList = getDeptList();
//存放钉钉部门不存在系统库集合
List<OapiV2DepartmentListsubResponse.DeptBaseResponse> ddDeptList1 = new ArrayList<>();
ddDeptList1.addAll(ddDeptList);
//获取系统所有部门列表
List<SysDdDept> deptList = ddDeptMapper.selectDdDeptList(new SysDdDept());
//存放钉钉删除了的部门集合
List<SysDdDept> deptList1 = new ArrayList<>();
deptList1.addAll(deptList);
//判断钉钉部门列表是否都在系统部门列表中
for (OapiV2DepartmentListsubResponse.DeptBaseResponse ddDept : ddDeptList) {
for (SysDdDept dept : deptList) {
if (ddDept.getDeptId().equals(dept.getDdDeptId())){
//存在,从集合中去除
ddDeptList1.remove(ddDept);
}
}
}
//新增不存在系统库的部门
if(ddDeptList1.size() > 0){
for (OapiV2DepartmentListsubResponse.DeptBaseResponse ddDept : ddDeptList1) {
//钉钉父部门id
Long ddParentId = ddDept.getParentId();
//查询父部门信息
SysDdDept ddDept1 = ddDeptMapper.selectDeptByDdDeptId(ddParentId);
//新增
SysDdDept sysDdDept = new SysDdDept();
sysDdDept.setParentId(ddDept1.getDeptId());
sysDdDept.setAncestors(ddDept1.getAncestors() + ddDept1.getDeptId());
sysDdDept.setDeptName(ddDept.getName());
sysDdDept.setOrderNum(ddDept.getDeptId());
sysDdDept.setDdDeptId(ddDept.getDeptId());
sysDdDept.setDdParentId(ddParentId);
sysDdDept.setCreateBy("钉钉管理员");
ddDeptMapper.insertDdDept(sysDdDept);
}
}
//判断钉钉中删除的部门是否还存在系统部门中
for (SysDdDept dept : deptList) {
for (OapiV2DepartmentListsubResponse.DeptBaseResponse ddDept : ddDeptList) {
if (dept.getDdDeptId().equals(ddDept.getDeptId())){
deptList1.remove(dept);
}
}
}
//删除系统部门中存在的钉钉已删除的部门
if (deptList1.size() > 0){
for (SysDdDept dept : deptList1) {
if (dept.getDeptId() != 100){
ddDeptMapper.deleteDdDeptById(dept.getDeptId());
}
}
}
//更新系统部门信息
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse djDept = dingDeptUtils.getDept(1L, "");
//修改顶级目录
SysDdDept dept = new SysDdDept();
dept.setDdDeptId(djDept.getDeptId());
dept.setDeptName(djDept.getName());
dept.setUpdateBy("钉钉管理员");
ddDeptMapper.updateDdDeptByDdDeptId(dept);
for (OapiV2DepartmentListsubResponse.DeptBaseResponse ddDept : ddDeptList) {
for (SysDdDept sysDdDept : deptList) {
if (ddDept.getDeptId().equals(sysDdDept.getDdDeptId())){
//判断父部门是否发生改变
if (!(ddDept.getParentId().equals(sysDdDept.getDdParentId()))){
//钉钉父部门id
Long ddParentId = ddDept.getParentId();
//查询父部门信息
SysDdDept ddParentDept = ddDeptMapper.selectDeptByDdDeptId(ddParentId);
sysDdDept.setParentId(ddParentDept.getDeptId());
sysDdDept.setAncestors(ddParentDept.getAncestors() + "," + ddParentDept.getDeptId());
sysDdDept.setDdParentId(ddDept.getParentId());
sysDdDept.setUpdateBy("钉钉管理员");
ddDeptMapper.updateDdDeptByDdDeptId(sysDdDept);
}
//判断部门基本信息是否发生改变
if(!(ddDept.getName().equals(sysDdDept.getDeptName()))){
sysDdDept.setDeptName(ddDept.getName());
sysDdDept.setUpdateBy("钉钉管理员");
ddDeptMapper.updateDdDeptByDdDeptId(sysDdDept);
}
}
}
}
return "同步成功";
}
/**
* 钉钉部门创建
* @param eventJson
* @return
*/
@Override
@Transactional
public int ddDeptCreate(JSONObject eventJson) {
int i= 0;
String ddDeptId = eventJson.getString("DeptId");
String replace = ddDeptId.replace("[", "");
String deptIds = replace.replace("]", "");
String[] split = deptIds.split(",");
for (String deptId : split) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept = dingDeptUtils.getDept(Long.valueOf(deptId), "");
//获取父部门信息
Long ddParentId = dept.getParentId();
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDdDeptId(ddParentId);
//新增部门
SysDdDept ddDept = new SysDdDept();
ddDept.setParentId(sysDdDept.getDeptId());
ddDept.setAncestors(sysDdDept.getAncestors() + "," + sysDdDept.getDeptId());
ddDept.setDeptName(dept.getName());
ddDept.setOrderNum(dept.getOrder());
ddDept.setDdDeptId(dept.getDeptId());
ddDept.setDdParentId(dept.getParentId());
ddDept.setCreateBy("钉钉管理员");
i += ddDeptMapper.insertDdDept(ddDept);
}
return i;
}
/**
* 钉钉部门修改
* @param eventJson
* @return
*/
@Override
public int ddDeptUpdate(JSONObject eventJson) {
int i = 0;
String ddDeptId = eventJson.getString("DeptId");
String replace = ddDeptId.replace("[", "");
String deptIds = replace.replace("]", "");
String[] split = deptIds.split(",");
for (String deptId : split) {
//获取部门详情
OapiV2DepartmentGetResponse.DeptGetResponse dept = dingDeptUtils.getDept(Long.valueOf(deptId), "");
//获取父部门信息
Long ddParentId = dept.getParentId();
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDdDeptId(ddParentId);
//修改部门
SysDdDept ddDept = new SysDdDept();
ddDept.setParentId(sysDdDept.getDeptId());
ddDept.setAncestors(sysDdDept.getAncestors() + "," + sysDdDept.getDeptId());
ddDept.setDeptName(dept.getName());
ddDept.setOrderNum(dept.getOrder());
ddDept.setDdDeptId(dept.getDeptId());
ddDept.setDdParentId(dept.getParentId());
ddDept.setCreateBy("钉钉管理员");
i += ddDeptMapper.updateDdDeptByDdDeptId(ddDept);
}
return i;
}
/**
* 钉钉部门删除
* @param eventJson
* @return
*/
@Override
public int ddDeptDelete(JSONObject eventJson) {
int i = 0;
String ddDeptId = eventJson.getString("DeptId");
String replace = ddDeptId.replace("[", "");
String deptIds = replace.replace("]", "");
String[] split = deptIds.split(",");
for (String deptId : split) {
//删除钉钉部门
i += ddDeptMapper.deleteDdDeptByDdDeptId(Long.valueOf(deptId));
}
return i;
}
}
package yangtz.cs.liu.dingding.service.impl.dingUser;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.response.OapiUserListidResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import yangtz.cs.liu.dingding.domain.dingDept.SysDdDept;
import yangtz.cs.liu.dingding.domain.dingGrade.SchoolGradeMentorCopy;
import yangtz.cs.liu.dingding.domain.dingUser.SysDdUser;
import yangtz.cs.liu.dingding.domain.dingUser.SysDdUserDept;
import yangtz.cs.liu.dingding.domain.schoolTeacher.SysDdTeacher;
import yangtz.cs.liu.dingding.mapper.dingDept.DdDeptMapper;
import yangtz.cs.liu.dingding.mapper.dingUser.DdUserMapper;
import yangtz.cs.liu.dingding.mapper.schoolTeacher.DdTeacherMapper;
import yangtz.cs.liu.dingding.service.dingUser.IDdUserService;
import yangtz.cs.liu.dingding.utils.DingUserUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class DdUserServiceImpl implements IDdUserService {
@Autowired
private DingUserUtils dingUserUtils;
@Autowired
private DdDeptMapper ddDeptMapper;
@Autowired
private DdUserMapper ddUserMapper;
@Autowired
private DdTeacherMapper ddTeacherMapper;
/**
* 获取钉钉全部用户id
* @return
*/
@Override
public List<String> getDdUserListAll() {
//存放钉钉用户id的集合
List<String> ddUserIds = new ArrayList<>();
//获取系统所有部门列表
List<SysDdDept> ddDeptListAll = ddDeptMapper.selectDdDeptList(new SysDdDept());
for (SysDdDept ddDept : ddDeptListAll) {
//循环查找每个部门的用户id列表
OapiUserListidResponse.ListUserByDeptResponse ddUserIdList = dingUserUtils.getuserIdByDept(ddDept.getDdDeptId());
List<String> useridList = ddUserIdList.getUseridList();
if (useridList.size() > 0) {
for (String ddUserId : useridList) {
if (!ddUserIds.contains(ddUserId)){
ddUserIds.add(ddUserId);
}
}
}
}
return ddUserIds;
}
/**
* 下拉钉钉用户到系统
* @return
*/
@Override
@Transactional
public int addDdUser() {
int i = 1;
//查询所有级部
List<Map<String, Object>> gradeList = ddDeptMapper.selectGradeList();
//新增的用户的集合
//用户表
List<SysDdUser> userList = new ArrayList<>();
//教师表
List<SysDdTeacher> teacherList = new ArrayList<>();
//获取钉钉全部用户id
List<String> ddUserIdList = getDdUserListAll();
for (String ddUserId : ddUserIdList) {
//循环获取钉钉用户详情
OapiV2UserGetResponse.UserGetResponse ddUser = dingUserUtils.getUser(ddUserId);
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//拿取钉钉用户部门id列表的第一个存在的部门id存到用户表中
//部门列表
List<Long> deptIdList = ddUser.getDeptIdList();
//用户部门列表
List<Long> ddUserDepts = new ArrayList<>();
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
ddUserDepts.add(dept1.getDeptId());
}
}
//用户表数据
SysDdUser sysDdUser = new SysDdUser();
sysDdUser.setDdUserDepts(ddUserDepts);
//根据钉钉部门id查询部门信息
for (Long ddDeptId : deptIdList) {
SysDdDept dept = ddDeptMapper.selectDeptByDdDeptId(ddDeptId);
if (StringUtils.isNotNull(dept)){
sysDdUser.setDeptId(dept.getDeptId());
break;
}
}
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPassword(SecurityUtils.encryptPassword("Ez2023@345"));
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setUserType("00");
sysDdUser.setUserLoginType("0");
sysDdUser.setPhonenumber(ddUser.getMobile());
sysDdUser.setCreateBy("钉钉管理员");
sysDdUser.setUnionId(ddUser.getUnionid());
sysDdUser.setDdUserId(ddUser.getUserid());
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
ddUserMapper.insertDdUser(sysDdUser);
userList.add(sysDdUser);
//新增教师数据
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUnionId(sysDdUser.getUnionId());
sysDdTeacher.setDdUserId(sysDdUser.getDdUserId());
sysDdTeacher.setCreateBy("钉钉管理员");
sysDdTeacher.setCreateTime(DateUtils.getNowDate());
ddTeacherMapper.addTeacherList(sysDdTeacher);
//判断用户是否为级部成员
for (Long deptId : ddUserDepts) {
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(deptId);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
}
//新增用户和部门关系
for (SysDdUser ddUser : userList) {
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(ddUser.getUserId());
for (Long ddUserDept : ddUser.getDdUserDepts()) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
}
}
return i;
}
/**
* 用户表数据新增到教师表
*/
@Override
public int addDdTeacher() {
//查询所有用户
List<SysDdUser> userList = ddUserMapper.selectDdUserList(new SysDdUser());
for (SysDdUser ddUser : userList) {
}
return 1;
}
/**
* 同步钉钉用户列表
* @return
*/
@Override
@Transactional
public String syncDdUser() {
//查询所有级部
List<Map<String, Object>> gradeList = ddDeptMapper.selectGradeList();
//获取钉钉全部用户id
List<String> ddUserIdList = getDdUserListAll();
//获取钉钉全部用户详情
List<OapiV2UserGetResponse.UserGetResponse> ddUserAll = new ArrayList<>();
//存放钉钉用户不存在系统库的用户id
List<String> ddUserIdList1 = new ArrayList<>();
ddUserIdList1.addAll(ddUserIdList);
//循环获取所有用户详情
for (String ddUserId : ddUserIdList) {
OapiV2UserGetResponse.UserGetResponse ddUser = dingUserUtils.getUser(ddUserId);
ddUserAll.add(ddUser);
}
//获取系统全部用户
List<SysDdUser> userList = ddUserMapper.selectDdUserList(new SysDdUser());
//存放钉钉已删除的用户集合
List<SysDdUser> userList1 = new ArrayList<>();
userList1.addAll(userList);
//获取所有部门
List<SysDdDept> deptList = ddDeptMapper.selectDdDeptList(new SysDdDept());
//判断系统用户列表是否存在钉钉用户id
for (String ddUserId : ddUserIdList) {
for (SysDdUser ddUser : userList) {
if (ddUserId.equals(ddUser.getDdUserId())){
//存在,从集合中剔除
ddUserIdList1.remove(ddUserId);
}
}
}
//新增系统不存在的钉钉用户
if(ddUserIdList1.size() > 0){
for (String ddUserId : ddUserIdList1) {
for (OapiV2UserGetResponse.UserGetResponse ddUser : ddUserAll) {
if (ddUserId.equals(ddUser.getUserid())){
//拿取钉钉用户部门id列表的第一个存在的部门id存到用户表中
//部门列表
List<Long> deptIdList = ddUser.getDeptIdList();
//用户部门列表
List<Long> ddUserDepts = new ArrayList<>();
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
ddUserDepts.add(dept1.getDeptId());
}
}
//根据钉钉部门id查询部门信息
//新增用户到用户表
SysDdUser sysDdUser = new SysDdUser();
sysDdUser.setDdUserDepts(ddUserDepts);
//根据钉钉部门id查询部门信息
for (Long ddDeptId : deptIdList) {
SysDdDept dept = ddDeptMapper.selectDeptByDdDeptId(ddDeptId);
if (StringUtils.isNotNull(dept)){
sysDdUser.setDeptId(dept.getDeptId());
break;
}
}
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPassword(SecurityUtils.encryptPassword("Ez2023@345"));
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setUserType("00");
sysDdUser.setUserLoginType("0");
sysDdUser.setPhonenumber(ddUser.getMobile());
sysDdUser.setCreateBy("钉钉管理员");
sysDdUser.setUnionId(ddUser.getUnionid());
sysDdUser.setDdUserId(ddUser.getUserid());
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
ddUserMapper.insertDdUser(sysDdUser);
//新增用户和部门关系
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(sysDdUser.getUserId());
for (Long ddUserDept : sysDdUser.getDdUserDepts()) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
}
//新增用户到教师表
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUnionId(sysDdUser.getUnionId());
sysDdTeacher.setDdUserId(sysDdUser.getDdUserId());
sysDdTeacher.setCreateBy("钉钉管理员");
sysDdTeacher.setCreateTime(DateUtils.getNowDate());
ddTeacherMapper.addTeacherList(sysDdTeacher);
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//判断用户是否是级部成员,如果是,新增到级部成员
for (Long deptId : ddUserDepts) {
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(deptId);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
}
}
}
}
//判断钉钉已删除的用户
for (SysDdUser ddUser : userList) {
for (String ddUserId : ddUserIdList) {
if (ddUser.getDdUserId().equals(ddUserId)){
//存在从集合中剔除
userList1.remove(ddUser);
}
}
}
//删除钉钉中已删除的用户
if (userList1.size() > 0){
for (SysDdUser ddUser : userList1) {
//删除用户
ddUserMapper.deleteDdUser(ddUser.getUserId());
//删除用户和部门关系
ddUserMapper.deleteDdUserDept(ddUser.getUserId());
//删除教师
ddUserMapper.deleteDdTeacher(ddUser.getUserId());
//删除级部成员信息
ddUserMapper.deleteGradeMentor(ddUser.getUserId());
}
}
//更新系统用户信息
for (OapiV2UserGetResponse.UserGetResponse ddUser : ddUserAll) {
for (SysDdUser sysDdUser : userList) {
if (ddUser.getUserid().equals(sysDdUser.getDdUserId())){
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//系统用户部门列表
List<Long> ddUserDepts = ddUserMapper.selectDeptIdByUserId(sysDdUser.getUserId());
//存放钉钉部门id列表
List<Long> ddDeptIds = new ArrayList<>();
for (Long ddUserDept : ddUserDepts) {
for (SysDdDept dept : deptList) {
if (ddUserDept.equals(dept.getDeptId())){
ddDeptIds.add(dept.getDdDeptId());
}
}
}
//钉钉用户部门id列表
List<Long> deptIdList = ddUser.getDeptIdList();
//钉钉用户部门id列表(不包含钉钉已删除的部门)
List<Long> deptIdList1 = new ArrayList<>();
deptIdList1.addAll(deptIdList);
//去除掉钉钉已删除的部门id
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNull(dept1)){
deptIdList1.remove(ddUserDeptId);
}
}
//更新的部门id列表
List<Long> deptIds = new ArrayList<>();
//判断系统用户和钉钉用户部门是否发生改变
boolean isEqual = ddDeptIds.containsAll(deptIdList1) && deptIdList1.containsAll(ddDeptIds);
if (!isEqual) {
//发生改变更新用户信息
for (Long ddUserDeptId : deptIdList1) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
deptIds.add(dept1.getDeptId());
}
}
//删除原用户与部门关系
ddUserMapper.deleteDdUserDept(sysDdUser.getUserId());
//删除级部成员信息
ddUserMapper.deleteGradeMentor(sysDdUser.getUserId());
//新增用户和部门关系
sysDdUser.setDeptId(deptIds.get(0));
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(sysDdUser.getUserId());
for (Long ddUserDept : deptIds) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(ddUserDept);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
sysDdUser.setUpdateBy("钉钉管理员");
ddUserMapper.updateDdUser(sysDdUser);
}
//更新系统用户信息
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPhonenumber(ddUser.getMobile());
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
sysDdUser.setUpdateBy("钉钉管理员");
ddUserMapper.updateDdUser(sysDdUser);
//更新系统教师信息
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUpdateBy("钉钉管理员");
sysDdTeacher.setUpdateTime(DateUtils.getNowDate());
ddTeacherMapper.updateDdTeacher(sysDdTeacher);
}
}
}
return "同步成功";
}
/**
* 处理通讯录用户增加
* @param eventJson
* @return
*/
@Override
@Transactional
public int addUser(JSONObject eventJson) {
int i = 0;
String ddUserId = eventJson.getString("UserId");
String replace = ddUserId.replace("[\"", "");
String userIds = replace.replace("\"]", "");
String[] split = userIds.split(",");
//查询所有级部
List<Map<String, Object>> gradeList = ddDeptMapper.selectGradeList();
for (String userId : split) {
//查询钉钉用户详情
OapiV2UserGetResponse.UserGetResponse ddUser = dingUserUtils.getUser(userId);
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//钉钉用户的钉钉部门id列表
List<Long> deptIdList = ddUser.getDeptIdList();
//用户系统部门id列表
List<Long> ddUserDepts = new ArrayList<>();
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
ddUserDepts.add(dept1.getDeptId());
}
}
//用户表数据
SysDdUser sysDdUser = new SysDdUser();
sysDdUser.setDdUserDepts(ddUserDepts);
//根据钉钉部门id查询部门信息
for (Long ddDeptId : deptIdList) {
SysDdDept dept = ddDeptMapper.selectDeptByDdDeptId(ddDeptId);
if (StringUtils.isNotNull(dept)){
sysDdUser.setDeptId(dept.getDeptId());
break;
}
}
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPassword(SecurityUtils.encryptPassword("Ez2023@345"));
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setUserType("00");
sysDdUser.setUserLoginType("0");
sysDdUser.setPhonenumber(ddUser.getMobile());
sysDdUser.setCreateBy("钉钉管理员");
sysDdUser.setUnionId(ddUser.getUnionid());
sysDdUser.setDdUserId(ddUser.getUserid());
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
i += ddUserMapper.insertDdUser(sysDdUser);
//新增用户和部门关系
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(sysDdUser.getUserId());
for (Long ddUserDept : sysDdUser.getDdUserDepts()) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
}
//新增教师表信息
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUnionId(sysDdUser.getUnionId());
sysDdTeacher.setDdUserId(sysDdUser.getDdUserId());
sysDdTeacher.setCreateBy("钉钉管理员");
sysDdTeacher.setCreateTime(DateUtils.getNowDate());
ddTeacherMapper.addTeacherList(sysDdTeacher);
//判断用户是否是级部成员,如果是,新增到级部成员
for (Long deptId : ddUserDepts) {
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(deptId);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
}
return i;
}
/**
* 处理通讯录用户修改
* @param eventJson
* @return
*/
@Override
public int updateUser(JSONObject eventJson) {
int i = 0;
String ddUserId = eventJson.getString("UserId");
String replace = ddUserId.replace("[\"", "");
String userIds = replace.replace("\"]", "");
String[] split = userIds.split(",");
//查询所有级部
List<Map<String, Object>> gradeList = ddDeptMapper.selectGradeList();
for (String userId : split) {
//查询钉钉用户详情
OapiV2UserGetResponse.UserGetResponse ddUser = dingUserUtils.getUser(userId);
//查询系统用户详情
SysDdUser sysDdUser = ddUserMapper.selectDdUserByDdUserId(userId);
//钉钉用户的钉钉部门id列表
List<Long> deptIdList = ddUser.getDeptIdList();
//多部门任职信息
List<OapiV2UserGetResponse.DeptPosition> deptPositionList = ddUser.getDeptPositionList();
//用户系统部门id列表
List<Long> ddUserDepts = new ArrayList<>();
for (Long ddUserDeptId : deptIdList) {
SysDdDept dept1 = ddDeptMapper.selectDeptByDdDeptId(ddUserDeptId);
if (StringUtils.isNotNull(dept1)){
ddUserDepts.add(dept1.getDeptId());
}
}
//删除原用户与部门关系
ddUserMapper.deleteDdUserDept(sysDdUser.getUserId());
//删除级部成员信息
ddUserMapper.deleteGradeMentor(sysDdUser.getUserId());
//新增新用户与部门关系
SysDdUserDept sysDdUserDept = new SysDdUserDept();
sysDdUserDept.setUserId(sysDdUser.getUserId());
for (Long ddUserDept : ddUserDepts) {
sysDdUserDept.setDeptId(ddUserDept);
ddUserMapper.insertDdUserDept(sysDdUserDept);
//根据部门id获取部门信息
SysDdDept sysDdDept = ddDeptMapper.selectDeptByDeptId(ddUserDept);
//判断是否是年级部成员
if ("年级部".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("1");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
//判断是否是学科组长成员
if ("学科组长".equals(sysDdDept.getDeptName())){
//是,查看父部门属于那个级部
SysDdDept parentDept = ddDeptMapper.selectDeptByDeptId(sysDdDept.getParentId());
for (Map<String, Object> grade : gradeList) {
//级部id
Long gradeId = Long.parseLong(grade.get("gradeId").toString());
//级部值
String gradeYear = grade.get("gradeYear").toString();
//判断父部门名称是否包含级部值
if (parentDept.getDeptName().contains(gradeYear)){
//包含,新增用户到该级部成员
SchoolGradeMentorCopy schoolGradeMentor = new SchoolGradeMentorCopy();
//设置职位
if (StringUtils.isNotNull(deptPositionList) && deptPositionList.size() > 0){
for (OapiV2UserGetResponse.DeptPosition deptPosition : deptPositionList) {
if (deptPosition.getDeptId().equals(sysDdDept.getDdDeptId())){
schoolGradeMentor.setTeacherPost(deptPosition.getTitle());
}
}
}
schoolGradeMentor.setTeacherId(sysDdUser.getUserId());
schoolGradeMentor.setGradeId(gradeId);
schoolGradeMentor.setCreateBy("钉钉管理员");
schoolGradeMentor.setCreateTime(DateUtils.getNowDate());
schoolGradeMentor.setType("2");
ddUserMapper.insertGradeMentor(schoolGradeMentor);
}
}
}
}
//更新系统用户信息
sysDdUser.setDeptId(ddUserDepts.get(0));
sysDdUser.setUserName(ddUser.getName());
sysDdUser.setLoginName(ddUser.getName());
sysDdUser.setPhonenumber(ddUser.getMobile());
sysDdUser.setUpdateBy("钉钉管理员");
if (StringUtils.isNotEmpty(ddUser.getEmail())){
sysDdUser.setEmail(ddUser.getEmail());
}
if (StringUtils.isNotEmpty(ddUser.getAvatar())){
sysDdUser.setAvatar(ddUser.getAvatar());
}
if (StringUtils.isNotEmpty(ddUser.getRemark())){
sysDdUser.setRemark(ddUser.getRemark());
}
i += ddUserMapper.updateDdUser(sysDdUser);
//更新系统教师信息
SysDdTeacher sysDdTeacher = new SysDdTeacher();
sysDdTeacher.setId(sysDdUser.getUserId());
sysDdTeacher.setTeacherName(sysDdUser.getUserName());
sysDdTeacher.setTeacherTel(sysDdUser.getPhonenumber());
if (StringUtils.isNotEmpty(sysDdUser.getAvatar())){
sysDdTeacher.setPicUrl(sysDdUser.getAvatar());
}
sysDdTeacher.setUpdateBy("钉钉管理员");
sysDdTeacher.setUpdateTime(DateUtils.getNowDate());
ddTeacherMapper.updateDdTeacher(sysDdTeacher);
}
return i;
}
/**
* 处理通讯录用户离职
* @param eventJson
* @return
*/
@Override
public int leaveUser(JSONObject eventJson) {
int i = 0;
String ddUserId = eventJson.getString("UserId");
String replace = ddUserId.replace("[\"", "");
String userIds = replace.replace("\"]", "");
String[] split = userIds.split(",");
for (String userId : split) {
//查询系统用户详情
SysDdUser sysDdUser = ddUserMapper.selectDdUserByDdUserId(userId);
//在用户表中删除用户
i += ddUserMapper.deleteDdUser(sysDdUser.getUserId());
//删除用户和部门关系
i += ddUserMapper.deleteDdUserDept(sysDdUser.getUserId());
//在教师表中删除用户
i += ddUserMapper.deleteDdTeacher(sysDdUser.getUserId());
//在级部成员表中删除用户
i += ddUserMapper.deleteGradeMentor(sysDdUser.getUserId());
}
return i;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="yangtz.cs.liu.dingding.mapper.dingDept.DdDeptMapper">
<resultMap type="SysDdDept" id="SysDdDeptResult">
<id property="deptId" column="dept_id" />
<result property="parentId" column="parent_id" />
<result property="ancestors" column="ancestors" />
<result property="deptName" column="dept_name" />
<result property="orderNum" column="order_num" />
<result property="leader" column="leader" />
<result property="phone" column="phone" />
<result property="email" column="email" />
<result property="status" column="status" />
<result property="ddDeptId" column="dd_dept_id" />
<result property="ddParentId" column="dd_parent_id" />
<result property="delFlag" column="del_flag" />
<result property="parentName" column="parent_name" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectDdDeptVo">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.dd_dept_id, d.dd_parent_id, d.del_flag, d.create_by, d.create_time
from sys_dd_dept d
</sql>
<select id="selectDdDeptList" parameterType="SysDdDept" resultMap="SysDdDeptResult">
<include refid="selectDdDeptVo"/>
where d.del_flag = '0'
<if test="deptId != null and deptId != 0">
AND dept_id = #{deptId}
</if>
<if test="parentId != null and parentId != 0">
AND parent_id = #{parentId}
</if>
<if test="deptName != null and deptName != ''">
AND dept_name like concat('%', #{deptName}, '%')
</if>
<if test="status != null and status != ''">
AND status = #{status}
</if>
order by d.parent_id, d.order_num
</select>
<select id="selectDeptByDdDeptId" parameterType="Long" resultMap="SysDdDeptResult">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.dd_dept_id, d.dd_parent_id, d.del_flag, d.create_by, d.create_time
from sys_dd_dept d
where d.dd_dept_id = #{ddDeptId}
</select>
<select id="selectDeptByDeptId" parameterType="Long" resultMap="SysDdDeptResult">
select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.dd_dept_id, d.dd_parent_id, d.del_flag, d.create_by, d.create_time
from sys_dd_dept d
where d.dept_id = #{deptId}
</select>
<select id="selectGradeList" resultType="Map">
select id as gradeId, grade_year as gradeYear from school_grade_copy where del_flag = "0" order by grade_value ASC
</select>
<insert id="insertDdDept" parameterType="SysDdDept" useGeneratedKeys="true" keyProperty="deptId">
insert into sys_dd_dept(
<if test="deptId != null and deptId != 0">dept_id,</if>
<if test="parentId != null ">parent_id,</if>
<if test="deptName != null and deptName != ''">dept_name,</if>
<if test="ancestors != null and ancestors != ''">ancestors,</if>
<if test="orderNum != null">order_num,</if>
<if test="leader != null and leader != ''">leader,</if>
<if test="phone != null and phone != ''">phone,</if>
<if test="email != null and email != ''">email,</if>
<if test="status != null">status,</if>
<if test="ddDeptId != null">dd_dept_id,</if>
<if test="ddParentId != null">dd_parent_id,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
create_time
)values(
<if test="deptId != null and deptId != 0">#{deptId},</if>
<if test="parentId != null">#{parentId},</if>
<if test="deptName != null and deptName != ''">#{deptName},</if>
<if test="ancestors != null and ancestors != ''">#{ancestors},</if>
<if test="orderNum != null">#{orderNum},</if>
<if test="leader != null and leader != ''">#{leader},</if>
<if test="phone != null and phone != ''">#{phone},</if>
<if test="email != null and email != ''">#{email},</if>
<if test="status != null">#{status},</if>
<if test="ddDeptId != null">#{ddDeptId},</if>
<if test="ddParentId != null">#{ddParentId},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
sysdate()
)
</insert>
<update id="updateDdDept" parameterType="SysDdDept">
update sys_dd_dept
<set>
<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
<if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
<if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if>
<if test="orderNum != null">order_num = #{orderNum},</if>
<if test="leader != null">leader = #{leader},</if>
<if test="phone != null">phone = #{phone},</if>
<if test="email != null">email = #{email},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="ddDeptId != null ">dd_dept_id = #{ddDeptId},</if>
<if test="ddParentId != null">dd_parent_id = #{ddParentId},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
update_time = sysdate()
</set>
where dept_id = #{deptId}
</update>
<update id="updateDdDeptByDdDeptId" parameterType="SysDdDept">
update sys_dd_dept
<set>
<if test="parentId != null and parentId != 0">parent_id = #{parentId},</if>
<if test="deptName != null and deptName != ''">dept_name = #{deptName},</if>
<if test="ancestors != null and ancestors != ''">ancestors = #{ancestors},</if>
<if test="orderNum != null">order_num = #{orderNum},</if>
<if test="leader != null">leader = #{leader},</if>
<if test="phone != null">phone = #{phone},</if>
<if test="email != null">email = #{email},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="ddParentId != null">dd_parent_id = #{ddParentId},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
update_time = sysdate()
</set>
where dd_dept_id = #{ddDeptId}
</update>
<delete id="deleteDdDeptById" parameterType="Long">
update sys_dd_dept set del_flag = '2' where dept_id = #{deptId} and dept_id != 100
</delete>
<delete id="deleteDdDeptByDdDeptId" parameterType="Long">
update sys_dd_dept set del_flag = '2' where dd_dept_id = #{ddDeptId}
</delete>
</mapper>
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="yangtz.cs.liu.dingding.mapper.schoolTeacher.DdTeacherMapper">
<resultMap type="SysDdTeacher" id="SysDdTeacherResult">
<result property="id" column="id"/>
<result property="teacherName" column="teacher_name"/>
<result property="teacherTel" column="teacher_tel"/>
<result property="teacherCode" column="teacher_code"/>
<result property="idCard" column="id_card"/>
<result property="deviceNum" column="device_num"/>
<result property="homeAddress" column="home_address"/>
<result property="nation" column="nation"/>
<result property="picUrl" column="pic_url"/>
<result property="birthday" column="birthday"/>
<result property="education" column="education"/>
<result property="sex" column="sex"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="openId" column="open_id"/>
<result property="ddUserId" column="dd_user_id"/>
<result property="unionId" column="union_id"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
<insert id="addTeacherList" parameterType="SysDdTeacher" useGeneratedKeys="true" keyProperty="id">
insert into sys_dd_teacher
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">id,</if>
<if test="teacherName != null">teacher_name,</if>
<if test="teacherTel != null">teacher_tel,</if>
<if test="teacherCode != null">teacher_code,</if>
<if test="idCard != null">id_card,</if>
<if test="homeAddress != null">home_address,</if>
<if test="nation != null">nation,</if>
<if test="picUrl != null">pic_url,</if>
<if test="birthday != null">birthday,</if>
<if test="education != null">education,</if>
<if test="sex != null">sex,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="openId != null">open_id,</if>
<if test="ddUserId != null">dd_user_id,</if>
<if test="unionId != null">union_id,</if>
<if test="delFlag != null and delFlag != ''">del_flag,</if>
<if test="deviceNum != null">device_num,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
<if test="teacherName != null">#{teacherName},</if>
<if test="teacherTel != null">#{teacherTel},</if>
<if test="teacherCode != null">#{teacherCode},</if>
<if test="idCard != null">#{idCard},</if>
<if test="homeAddress != null">#{homeAddress},</if>
<if test="nation != null">#{nation},</if>
<if test="picUrl != null">#{picUrl},</if>
<if test="birthday != null">#{birthday},</if>
<if test="education != null">#{education},</if>
<if test="sex != null">#{sex},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="openId != null">#{openId},</if>
<if test="ddUserId != null">#{ddUserId},</if>
<if test="unionId != null">#{unionId},</if>
<if test="delFlag != null and delFlag != ''">#{delFlag},</if>
<if test="deviceNum != null">#{deviceNum},</if>
</trim>
</insert>
<update id="updateDdTeacher" parameterType="SysDdTeacher">
update sys_dd_teacher
<trim prefix="SET" suffixOverrides=",">
<if test="teacherName != null">teacher_name = #{teacherName},</if>
<if test="teacherTel != null">teacher_tel = #{teacherTel},</if>
<if test="teacherCode != null">teacher_code = #{teacherCode},</if>
<if test="idCard != null">id_card = #{idCard},</if>
<if test="homeAddress != null">home_address = #{homeAddress},</if>
<if test="nation != null">nation = #{nation},</if>
<if test="picUrl != null">pic_url = #{picUrl},</if>
<if test="birthday != null">birthday = #{birthday},</if>
<if test="education != null">education = #{education},</if>
<if test="sex != null">sex = #{sex},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="openId != null">open_id = #{openId}</if>
<if test="ddUserId != null">dd_user_id = #{ddUserId}</if>
<if test="unionId != null">union_id = #{unionId}</if>
</trim>
where id = #{id}
</update>
<!--批量新增教师-->
<insert id="batchInsertTeacher" parameterType="SysDdTeacher" useGeneratedKeys="true" keyProperty="id">
<foreach collection="list" item="data" separator=";">
insert into sys_dd_teacher
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="data.id != null">id,</if>
<if test="data.teacherName != null">teacher_name,</if>
<if test="data.teacherTel != null">teacher_tel,</if>
<if test="data.teacherCode != null">teacher_code,</if>
<if test="data.idCard != null">id_card,</if>
<if test="data.homeAddress != null">home_address,</if>
<if test="data.nation != null">nation,</if>
<if test="data.picUrl != null">pic_url,</if>
<if test="data.birthday != null">birthday,</if>
<if test="data.education != null">education,</if>
<if test="data.sex != null">sex,</if>
<if test="data.createBy != null">create_by,</if>
<if test="data.createTime != null">create_time,</if>
<if test="data.updateBy != null">update_by,</if>
<if test="data.updateTime != null">update_time,</if>
<if test="data.openId != null">open_id,</if>
<if test="data.ddUserId != null">dd_user_id,</if>
<if test="data.unionId != null">union_id,</if>
<if test="data.delFlag != null and data.delFlag != ''">del_flag,</if>
<if test="data.deviceNum != null">device_num,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="data.id != null">#{data.id},</if>
<if test="data.teacherName != null">#{data.teacherName},</if>
<if test="data.teacherTel != null">#{data.teacherTel},</if>
<if test="data.teacherCode != null">#{data.teacherCode},</if>
<if test="data.idCard != null">#{data.idCard},</if>
<if test="data.homeAddress != null">#{data.homeAddress},</if>
<if test="data.nation != null">#{data.nation},</if>
<if test="data.picUrl != null">#{data.picUrl},</if>
<if test="data.birthday != null">#{data.birthday},</if>
<if test="data.education != null">#{data.education},</if>
<if test="data.sex != null">#{data.sex},</if>
<if test="data.createBy != null">#{data.createBy},</if>
<if test="data.createTime != null">#{data.createTime},</if>
<if test="data.updateBy != null">#{data.updateBy},</if>
<if test="data.updateTime != null">#{data.updateTime},</if>
<if test="data.openId != null">#{data.openId},</if>
<if test="data.ddUserId != null">#{data.ddUserId},</if>
<if test="data.unionId != null">#{data.unionId},</if>
<if test="data.delFlag != null and data.delFlag != ''">#{data.delFlag},</if>
<if test="data.deviceNum != null">#{data.deviceNum},</if>
</trim>
</foreach>
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="yangtz.cs.liu.dingding.mapper.dingUser.DdUserMapper">
<resultMap type="SysDdUser" id="SysDdUserResult">
<id property="userId" column="user_id" />
<result property="deptId" column="dept_id" />
<result property="userName" column="user_name" />
<result property="loginName" column="login_name" />
<result property="userLoginType" column="user_login_type" />
<result property="email" column="email" />
<result property="phonenumber" column="phonenumber" />
<result property="sex" column="sex" />
<result property="avatar" column="avatar" />
<result property="password" column="password" />
<result property="salt" column="salt" />
<result property="status" column="status" />
<result property="delFlag" column="del_flag" />
<result property="loginIp" column="login_ip" />
<result property="loginDate" column="login_date" />
<result property="pwdUpdateDate" column="pwd_update_date" />
<result property="openId" column="open_id" />
<result property="unionId" column="union_id" />
<result property="ddUserId" column="dd_user_id" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="employeeType" column="employee_type" />
<result property="studentId" column="student_id" />
<result property="sign" column="sign" />
</resultMap>
<sql id="selectDdUserVo">
select u.user_id, u.dept_id, u.user_name, u.login_name,u.user_type, u.user_login_type,u.email, u.avatar, u.phonenumber, u.password, u.salt,u.sex, u.status, u.del_flag, u.login_ip, u.login_date,u.pwd_update_date, u.create_by, u.create_time, u.remark,u.sign,u.employee_type,u.student_id,
from sys_dd_user u
</sql>
<select id="selectDdUserList" parameterType="SysDdUser" resultMap="SysDdUserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.union_id, u.dd_user_id, u.create_by, u.create_time, u.remark from sys_dd_user u
where u.del_flag = '0' and user_login_type = '0'
<if test="userId != null and userId != 0">
AND u.user_id = #{userId}
</if>
<if test="userName != null and userName != ''">
AND u.user_name like concat('%', #{userName}, '%')
</if>
<if test="status != null and status != ''">
AND u.status = #{status}
</if>
<if test="phonenumber != null and phonenumber != ''">
AND u.phonenumber like concat('%', #{phonenumber}, '%')
</if>
<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
</if>
<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
</if>
<if test="deptId != null and deptId != 0">
AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId}, ancestors) ))
</if>
<!-- 数据范围过滤 -->
${params.dataScope}
</select>
<select id="selectDdUserByDdUserId" parameterType="String" resultMap="SysDdUserResult">
select u.user_id, u.dept_id, u.login_name, u.user_name,u.user_type, u.user_login_type, u.email, u.avatar, u.phonenumber, u.sex,u.salt, u.status, u.del_flag, u.login_ip, u.login_date, u.union_id, u.dd_user_id, u.create_by, u.create_time, u.remark from sys_dd_user u
where u.del_flag = '0' and user_login_type = '0' and dd_user_id = #{ddUserId}
</select>
<insert id="insertDdUser" parameterType="SysDdUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_dd_user(
<if test="userId != null and userId != 0">user_id,</if>
<if test="deptId != null and deptId != 0">dept_id,</if>
<if test="userName != null and userName != ''">user_name,</if>
<if test="loginName != null and loginName != ''">login_name,</if>
<if test="userType != null and userType != ''">user_type,</if>
<if test="userLoginType != null and userLoginType != ''">user_login_type,</if>
<if test="email != null and email != ''">email,</if>
<if test="avatar != null and avatar != ''">avatar,</if>
<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
<if test="sex != null and sex != ''">sex,</if>
<if test="password != null and password != ''">password,</if>
<if test="salt != null and salt != ''">salt,</if>
<if test="status != null and status != ''">status,</if>
<if test="pwdUpdateDate != null">pwd_update_date,</if>
<if test="unionId != null">union_id,</if>
<if test="ddUserId != null">dd_user_id,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="sign != null and sign != ''">sign,</if>
<if test="studentId != null and studentId != 0">student_id,</if>
<if test="employeeType != null and employeeType != ''">employee_type,</if>
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
<if test="deptId != null and deptId != ''">#{deptId},</if>
<if test="userName != null and userName != ''">#{userName},</if>
<if test="loginName != null and loginName != ''">#{loginName},</if>
<if test="userType != null and userType != ''">#{userType},</if>
<if test="userLoginType != null and userLoginType != ''">#{userLoginType},</if>
<if test="email != null and email != ''">#{email},</if>
<if test="avatar != null and avatar != ''">#{avatar},</if>
<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
<if test="sex != null and sex != ''">#{sex},</if>
<if test="password != null and password != ''">#{password},</if>
<if test="salt != null and salt != ''">#{salt},</if>
<if test="status != null and status != ''">#{status},</if>
<if test="pwdUpdateDate != null">#{pwdUpdateDate},</if>
<if test="unionId != null">#{unionId},</if>
<if test="ddUserId != null">#{ddUserId},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="sign != null and sign != ''">#{sign},</if>
<if test="studentId != null and studentId != ''">#{studentId},</if>
<if test="employeeType != null and employeeType != ''">#{employeeType},</if>
sysdate()
)
</insert>
<update id="updateDdUser" parameterType="SysDdUser">
update sys_dd_user
<set>
<if test="deptId != null and deptId != 0">dept_id = #{deptId},</if>
<if test="userName != null and userName != ''">user_name = #{userName},</if>
<if test="loginName != null and loginName != ''">login_name = #{loginName},</if>
<if test="userType != null and userType != ''">user_type = #{userType},</if>
<if test="email != null ">email = #{email},</if>
<if test="phonenumber != null ">phonenumber = #{phonenumber},</if>
<if test="sex != null and sex != ''">sex = #{sex},</if>
<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
<if test="password != null and password != ''">password = #{password},</if>
<if test="salt != null and salt != ''">salt = #{salt},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
<if test="loginDate != null">login_date = #{loginDate},</if>
<if test="pwdUpdateDate != null">pwd_update_date = #{pwdUpdateDate},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="employeeType != null and employeeType != ''">employee_type = #{employeeType},</if>
<if test="studentId != null and studentId != 0">student_id = #{studentId},</if>
<if test="sign != null and sign != ''">sign = #{sign},</if>
<if test="openId != null and openId != ''">open_id = #{openId},</if>
<if test="ddUserId != null and ddUserId != ''">dd_user_id = #{ddUserId},</if>
<if test="unionId != null and unionId != ''">union_id = #{unionId},</if>
update_time = sysdate()
</set>
where user_id = #{userId}
</update>
<update id="updateUserList" parameterType="SysDdUser">
<foreach collection="list" item="data" separator=";">
update sys_dd_user
<trim prefix="SET" suffixOverrides=",">
<if test="data.userName != null and data.userName != ''">
user_name = #{data.userName},
</if>
</trim>
where user_id = #{data.userId}
</foreach>
</update>
<insert id="addUserList" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
<foreach collection="list" item="data" separator=";">
insert into sys_dd_user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="data.userLoginType != null and data.userLoginType != ''">
user_login_type,
</if>
<if test="data.userName != null and data.userName != ''">
user_name,
</if>
<if test="data.phonenumber != null and data.phonenumber != ''">
phonenumber,
</if>
<if test="data.studentId != null">
student_id,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="data.userLoginType != null and data.userLoginType != ''">
#{data.userLoginType},
</if>
<if test="data.userName != null and data.userName != ''">
#{data.userName},
</if>
<if test="data.phonenumber != null and data.phonenumber != ''">
#{data.phonenumber},
</if>
<if test="data.studentId != null">
#{data.studentId},
</if>
</trim>
</foreach>
</insert>
<insert id="addDdUserList" parameterType="SysDdUser" useGeneratedKeys="true" keyProperty="userId">
insert into sys_dd_user(
<if test="userId != null and userId != 0">user_id,</if>
<if test="deptId != null and deptId != 0">dept_id,</if>
<if test="userName != null and userName != ''">user_name,</if>
<if test="loginName != null and loginName != ''">login_name,</if>
<if test="userType != null and userType != ''">user_type,</if>
<if test="userLoginType != null and userLoginType != ''">user_login_type,</if>
<if test="email != null and email != ''">email,</if>
<if test="avatar != null and avatar != ''">avatar,</if>
<if test="phonenumber != null and phonenumber != ''">phonenumber,</if>
<if test="sex != null and sex != ''">sex,</if>
<if test="password != null and password != ''">password,</if>
<if test="salt != null and salt != ''">salt,</if>
<if test="status != null and status != ''">status,</if>
<if test="pwdUpdateDate != null">pwd_update_date,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="sign != null and sign != ''">sign,</if>
<if test="studentId != null and studentId != 0">student_id,</if>
<if test="employeeType != null and employeeType != ''">employee_type,</if>
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
<if test="deptId != null and deptId != ''">#{deptId},</if>
<if test="userName != null and userName != ''">#{userName},</if>
<if test="loginName != null and loginName != ''">#{loginName},</if>
<if test="userType != null and userType != ''">#{userType},</if>
<if test="userLoginType != null and userLoginType != ''">#{userLoginType},</if>
<if test="email != null and email != ''">#{email},</if>
<if test="avatar != null and avatar != ''">#{avatar},</if>
<if test="phonenumber != null and phonenumber != ''">#{phonenumber},</if>
<if test="sex != null and sex != ''">#{sex},</if>
<if test="password != null and password != ''">#{password},</if>
<if test="salt != null and salt != ''">#{salt},</if>
<if test="status != null and status != ''">#{status},</if>
<if test="pwdUpdateDate != null">#{pwdUpdateDate},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="sign != null and sign != ''">#{sign},</if>
<if test="studentId != null and studentId != ''">#{studentId},</if>
<if test="employeeType != null and employeeType != ''">#{employeeType},</if>
sysdate()
)
</insert>
<!--批量新增钉钉用户-->
<insert id="batchInsertDdUser" parameterType="SysDdUser" useGeneratedKeys="true" keyProperty="userId">
<foreach collection="list" item="data" separator=";">
insert into sys_dd_user(
<if test="data.userId != null and data.userId != 0">user_id,</if>
<if test="data.deptId != null and data.deptId != 0">dept_id,</if>
<if test="data.userName != null and data.userName != ''">user_name,</if>
<if test="data.loginName != null and data.loginName != ''">login_name,</if>
<if test="data.userType != null and data.userType != ''">user_type,</if>
<if test="data.userLoginType != null and data.userLoginType != ''">user_login_type,</if>
<if test="data.email != null and data.email != ''">email,</if>
<if test="data.avatar != null and data.avatar != ''">avatar,</if>
<if test="data.phonenumber != null and data.phonenumber != ''">phonenumber,</if>
<if test="data.sex != null and data.sex != ''">sex,</if>
<if test="data.password != null and data.password != ''">password,</if>
<if test="data.salt != null and data.salt != ''">salt,</if>
<if test="data.status != null and data.status != ''">status,</if>
<if test="data.pwdUpdateDate != null">pwd_update_date,</if>
<if test="data.unionId != null">union_id,</if>
<if test="data.ddUserId != null">dd_user_id,</if>
<if test="data.createBy != null and data.createBy != ''">create_by,</if>
<if test="data.remark != null and data.remark != ''">remark,</if>
<if test="data.sign != null and data.sign != ''">sign,</if>
<if test="data.studentId != null and data.studentId != 0">student_id,</if>
<if test="data.employeeType != null and data.employeeType != ''">employee_type,</if>
create_time
)values(
<if test="data.userId != null and data.userId != ''">#{data.userId},</if>
<if test="data.deptId != null and data.deptId != ''">#{data.deptId},</if>
<if test="data.userName != null and data.userName != ''">#{data.userName},</if>
<if test="data.loginName != null and data.loginName != ''">#{data.loginName},</if>
<if test="data.userType != null and data.userType != ''">#{data.userType},</if>
<if test="data.userLoginType != null and data.userLoginType != ''">#{data.userLoginType},</if>
<if test="data.email != null and data.email != ''">#{data.email},</if>
<if test="data.avatar != null and data.avatar != ''">#{data.avatar},</if>
<if test="data.phonenumber != null and data.phonenumber != ''">#{data.phonenumber},</if>
<if test="data.sex != null and data.sex != ''">#{data.sex},</if>
<if test="data.password != null and data.password != ''">#{data.password},</if>
<if test="data.salt != null and data.salt != ''">#{data.salt},</if>
<if test="data.status != null and data.status != ''">#{data.status},</if>
<if test="data.pwdUpdateDate != null">#{data.pwdUpdateDate},</if>
<if test="data.unionId != null">#{data.unionId},</if>
<if test="data.ddUserId != null">#{data.ddUserId},</if>
<if test="data.createBy != null and data.createBy != ''">#{data.createBy},</if>
<if test="data.remark != null and data.remark != ''">#{data.remark},</if>
<if test="data.sign != null and data.sign != ''">#{data.sign},</if>
<if test="data.studentId != null and data.studentId != ''">#{data.studentId},</if>
<if test="data.employeeType != null and data.employeeType != ''">#{data.employeeType},</if>
sysdate()
)
</foreach>
</insert>
<insert id="insertDdUserDept" parameterType="SysDdUserDept">
insert into sys_dd_user_dept(user_id, dept_id) values (#{userId},#{deptId})
</insert>
<update id="deleteDdUser" parameterType="Long">
update sys_dd_user set del_flag = "2" where user_id = #{userId}
</update>
<delete id="deleteDdUserDept">
delete from sys_dd_user_dept where user_id = #{userId}
</delete>
<update id="deleteDdTeacher" parameterType="Long">
update sys_dd_teacher set del_flag = "2" where id = #{userId}
</update>
<select id="selectDeptIdByUserId" parameterType="Long" resultType="Long">
select dept_id from sys_dd_user_dept where user_id = #{userId}
</select>
<!--新增级部成员-->
<insert id="insertGradeMentor" parameterType="SchoolGradeMentorCopy">
insert into school_grade_mentor_copy
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="teacherId != null">teacher_id,</if>
<if test="gradeId != null">grade_id,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="type != null and type != ''">type,</if>
<if test="teacherPost != null and teacherPost != ''">teacher_post,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="teacherId != null">#{teacherId},</if>
<if test="gradeId != null">#{gradeId},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="type != null and type != ''">#{type},</if>
<if test="teacherPost != null and teacherPost != ''">#{teacherPost},</if>
</trim>
</insert>
<!--删除级部成员-->
<update id="deleteGradeMentor" parameterType="Long">
update school_grade_mentor_copy set del_flag = "1" where teacher_id = #{userId}
</update>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment