shangke 2 năm trước cách đây
mục cha
commit
8428349303

+ 73 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SchoolStaff.java

@@ -0,0 +1,73 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 学校员工
+ * 2023-05-06 10:49:23
+ */
+@Data
+@ApiModel(" SchoolStaff-学校员工")
+@TableName("school_staff")
+public class SchoolStaff implements Serializable {
+
+    @ApiModelProperty("主键") 
+    @TableId(value = "id_", type = IdType.ID_WORKER)
+    private Long id;
+
+    @ApiModelProperty("学校ID") 
+	@TableField(value = "school_id_")
+    private Long schoolId;
+
+    @ApiModelProperty("用户帐号ID") 
+	@TableField(value = "user_id_")
+    private Long userId;
+
+    @ApiModelProperty("头像") 
+	@TableField(value = "avatar_")
+    private String avatar;
+
+    @ApiModelProperty("昵称") 
+	@TableField(value = "nickname_")
+    private String nickname;
+
+    @ApiModelProperty("用户身份(校长,乐团领队,分管领导,负责老师)") 
+	@TableField(value = "user_type_")
+    private String userType;
+
+    @ApiModelProperty("帐号状态(注销,冻结,激活)") 
+	@TableField(value = "status_")
+    private String status;
+
+    @ApiModelProperty("恢复状态") 
+	@TableField(value = "recovery_status_")
+    private Boolean recoveryStatus;
+
+    @ApiModelProperty("所在分部编号") 
+	@TableField(value = "organ_id_list_")
+    private String organIdList;
+
+    @ApiModelProperty("机构编号") 
+	@TableField(value = "tenant_id_")
+    private Integer tenantId;
+
+    @ApiModelProperty("更新时间") 
+	@TableField(value = "update_time_")
+    private Date updateTime;
+
+    @ApiModelProperty("创建时间") 
+	@TableField(value = "create_time_")
+    private Date createTime;
+
+}

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/school/ESchoolStaffType.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.enums.school;
 import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.ym.mec.common.enums.BaseEnum;
 import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
 
 /***
  * 学校员工类型
@@ -33,4 +34,21 @@ public enum ESchoolStaffType implements BaseEnum<String, ESchoolStaffType> {
 	public String getCode() {
 		return this.name();
 	}
+
+	/**
+	 * 参数合法性校验
+	 * @param code 枚举code
+	 * @return boolean
+	 */
+	public static boolean invalid(String code) {
+
+		if (StringUtils.isNotEmpty(code)) {
+			for (ESchoolStaffType e : ESchoolStaffType.values()) {
+				if (e.getCode().equals(code)) {
+					return false;
+				}
+			}
+		}
+		return true;
+	}
 }

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/SchoolStaffMapper.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.dal.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+import com.ym.mec.biz.dal.entity.SchoolStaff;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+
+/**
+ * 学校员工
+ * 2023-05-06 10:49:23
+ */
+@Repository
+public interface SchoolStaffMapper extends BaseMapper<SchoolStaff> {
+
+	/**
+	 * 分页查询
+	 * @param page IPage<SchoolStaffWrapper.SchoolStaff>
+	 * @param param SchoolStaffWrapper.SchoolStaffQuery
+	 * @return List<SchoolStaffWrapper.SchoolStaff>
+	 */
+	List<SchoolStaff> selectPage(@Param("page") IPage<SchoolStaff> page, @Param("param") SchoolStaffWrapper.SchoolStaffQuery param);
+	
+}

+ 103 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolStaffWrapper.java

@@ -0,0 +1,103 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Optional;
+
+/**
+ * 学校员工
+ * 2023-05-06 10:49:23
+ */
+@ApiModel(value = "SchoolStaffWrapper对象", description = "学校员工查询对象")
+public class SchoolStaffWrapper {
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" SchoolStaffQuery-学校员工")
+    public static class SchoolStaffQuery implements QueryInfo {
+    
+    	@ApiModelProperty("当前页")
+        private Integer page;
+        
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+        
+        @ApiModelProperty("关键字匹配")
+		private String keyword;
+        
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static SchoolStaffQuery from(String json) {
+            return JSON.parseObject(json, SchoolStaffQuery.class);
+        }
+    }  
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+	@ApiModel(" SchoolStaff-学校员工")
+    public static class SchoolStaff {
+
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("学校ID")
+        private Long schoolId;
+
+        @ApiModelProperty("用户帐号ID")
+        private Long userId;
+
+        @ApiModelProperty("用户身份(校长,乐团领队,分管领导,负责老师)")
+        private ESchoolStaffType userType;
+
+        @ApiModelProperty("所在分部编号")
+        private String organIdList;
+
+        @ApiModelProperty("机构编号")
+        private Integer tenantId;
+
+        @ApiModelProperty("用户名称")
+        private String username;
+
+        @ApiModelProperty("联系方式")
+        private String mobile;
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static SchoolStaff from(String json) {
+            return JSON.parseObject(json, SchoolStaff.class);
+        }
+
+
+        public SchoolStaff organIdList(String organIdList) {
+            this.organIdList = organIdList;
+            return this;
+        }
+
+        public SchoolStaff tenantId(Integer tenantId) {
+            this.tenantId = tenantId;
+            return this;
+        }
+    }
+
+}

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SchoolStaffService.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+import com.ym.mec.biz.dal.entity.SchoolStaff;
+
+/**
+ * 学校员工
+ * 2023-05-06 10:53:06
+ */
+public interface SchoolStaffService extends IService<SchoolStaff>  {
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return SchoolStaff
+     */
+	SchoolStaff detail(Long id);
+
+    /**
+     * 分页查询
+     * @param page IPage<SchoolStaff>
+     * @param query SchoolStaffWrapper.SchoolStaffQuery
+     * @return IPage<SchoolStaff>
+     */
+    IPage<SchoolStaff> selectPage(IPage<SchoolStaff> page, SchoolStaffWrapper.SchoolStaffQuery query);
+	
+    /**
+     * 添加
+     * @param schoolStaff SchoolStaffWrapper.SchoolStaff
+     * @return Boolean
+     */
+     Boolean add(SchoolStaffWrapper.SchoolStaff schoolStaff);   
+
+    /**
+     * 更新
+     * @param schoolStaff SchoolStaffWrapper.SchoolStaff
+     * @return Boolean
+     */
+     Boolean update(SchoolStaffWrapper.SchoolStaff schoolStaff);
+     
+}

+ 208 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java

@@ -0,0 +1,208 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.enums.SysUserType;
+import com.ym.mec.auth.api.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.SchoolStaff;
+import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
+import com.ym.mec.biz.dal.mapper.SchoolStaffMapper;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+import com.ym.mec.biz.service.CooperationOrganService;
+import com.ym.mec.biz.service.SchoolStaffService;
+import com.ym.mec.common.exception.BizException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/**
+ * 学校员工
+ * 2023-05-06 10:53:06
+ */
+@Slf4j
+@Service
+public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, SchoolStaff> implements SchoolStaffService {
+
+    @Autowired
+    private CooperationOrganService cooperationOrganService;
+    @Autowired
+    private RedissonClient redissonClient;
+    @Autowired
+    private TeacherDao teacherDao;
+
+	/**
+     * 查询详情
+     * @param id 详情ID
+     * @return SchoolStaff
+     */
+	@Override
+    public SchoolStaff detail(Long id) {
+        
+        return baseMapper.selectById(id);
+    }
+    
+    /**
+     * 分页查询
+     * @param page IPage<SchoolStaff>
+     * @param query SchoolStaffWrapper.SchoolStaffQuery
+     * @return IPage<SchoolStaff>
+     */
+    @Override
+    public IPage<SchoolStaff> selectPage(IPage<SchoolStaff> page, SchoolStaffWrapper.SchoolStaffQuery query) {
+        
+        return page.setRecords(baseMapper.selectPage(page, query));
+    }
+	
+    /**
+     * 添加
+     * @param schoolStaff SchoolStaffWrapper.SchoolStaff
+     * @return Boolean
+     */
+    @Transactional
+    @Override
+    public Boolean add(SchoolStaffWrapper.SchoolStaff schoolStaff) {
+
+        String submitLockKey = MessageFormat.format("school_staff_lock:{0}", schoolStaff.getMobile());
+        // 数据重复提交校验
+        RBucket<Object> bucket = redissonClient.getBucket(submitLockKey);
+        if (!bucket.trySet(schoolStaff.getMobile(), 5L, TimeUnit.SECONDS)) {
+            throw new BizException("请勿重复提交");
+        }
+
+        // 合作单位编号
+        CooperationOrgan cooperation = cooperationOrganService.get(schoolStaff.getSchoolId().intValue());
+        if (Objects.isNull(cooperation)) {
+            throw new BizException("无效的合作单位编号");
+        }
+
+        // 系统用户信息
+        SysUser user = getSysUser(schoolStaff, cooperation);
+
+        // 设置默认参数
+        schoolStaff.tenantId(cooperation.getTenantId())
+                .organIdList(String.valueOf(cooperation.getOrganId()))
+                .setUserId(Long.valueOf(user.getId()));
+
+        // 校长或乐团领队最多一人
+        if (ESchoolStaffType.SCHOOLMASTER == schoolStaff.getUserType()
+                || ESchoolStaffType.ORCHESTRA_LEADER == schoolStaff.getUserType()) {
+            // 校长或乐团领队,需要校验人数是否葡,默认最多添加一人
+            Integer exists = lambdaQuery()
+                    .eq(SchoolStaff::getSchoolId, schoolStaff.getSchoolId())
+                    .eq(SchoolStaff::getUserType, schoolStaff.getUserType().getCode()).count();
+            if (exists > 0) {
+                throw new BizException("校长或乐团领队最多添加一人");
+            }
+        }
+
+        // 添加学校员工信息
+        this.save(JSON.parseObject(schoolStaff.jsonString(), SchoolStaff.class));
+
+        // 自动创建学校管理IM群
+        // 自动添加员工到学校乐团群
+
+        // 删除缓存锁
+        redissonClient.getBucket(submitLockKey).delete();
+
+        return true;
+    }
+
+    /**
+     * 系统用户信息
+     * @param schoolStaff SchoolStaffWrapper.SchoolStaff
+     * @param cooperation CooperationOrgan
+     * @return SysUser
+     */
+    private SysUser getSysUser(SchoolStaffWrapper.SchoolStaff schoolStaff, CooperationOrgan cooperation) {
+        // 用户默认密码:gym + 联系人手机后4位
+        int phoneStrLen = schoolStaff.getMobile().length();
+        // 生成默认密码
+        String defaultPassword = new BCryptPasswordEncoder()
+                .encode("gym" + schoolStaff.getMobile().substring(phoneStrLen - 4, phoneStrLen));
+
+        // 用户帐号信息
+        SysUser user = teacherDao.getUserWithPhone(schoolStaff.getMobile());
+        if (Objects.nonNull(user)) {
+
+            // 校验用户是否已存在学校员工帐号
+            List<String> collect = Arrays.stream(user.getUserType().split(",")).collect(Collectors.toList());
+            if (collect.contains(SysUserType.SCHOOL.getCode())) {
+
+                // 匹配合作单位编号是否一致
+                List<SchoolStaff> staffs = lambdaQuery().eq(SchoolStaff::getUserId, user.getId()).list();
+                if (CollectionUtils.isNotEmpty(staffs)) {
+                    SchoolStaff staff = staffs.get(0);
+
+                    if (staff.getSchoolId().longValue() != schoolStaff.getSchoolId()) {
+                        throw new BizException("员工帐号已存在");
+                    }
+                }
+            }
+
+            // 设置默认密码
+            SysUser updateInfo = new SysUser();
+            if (StringUtils.isEmpty(user.getPassword())) {
+                // 修改 gym + 联系人手机后4位
+                updateInfo.setPassword(defaultPassword);
+            }
+
+            // 用户身份,排除学校身份
+            Set<String> userTypes = Arrays.stream(user.getUserType().split(",")).collect(Collectors.toSet());
+            userTypes.add(SysUserType.SCHOOL.getCode());
+
+            updateInfo.setUserType(String.join(",", userTypes));
+            // 更新用户信息
+            teacherDao.updateUser(updateInfo);
+
+        } else {
+
+            // 创建默认用户信息
+            user = new SysUser();
+            user.setUsername(schoolStaff.getUsername());
+            user.setPassword(defaultPassword);
+            user.setAvatar("");
+            user.setPhone(schoolStaff.getMobile());
+            user.setTenantId(cooperation.getTenantId());
+            user.setOrganId(cooperation.getOrganId());
+            user.setDelFlag(YesOrNoEnum.NO);
+            user.setLockFlag(YesOrNoEnum.NO.getCode());
+            user.setUserType(SysUserType.SCHOOL.getCode());
+            user.setUpdateTime(DateTime.now().toDate());
+            user.setCreateTime(DateTime.now().toDate());
+
+            // 添加用户信息
+            teacherDao.addSysUser(user);
+        }
+        return user;
+    }
+
+    /**
+     * 更新
+     * @param schoolStaff SchoolStaffWrapper.SchoolStaff
+     * @return Boolean
+     */
+    @Override
+    public Boolean update(SchoolStaffWrapper.SchoolStaff schoolStaff){
+
+        return this.updateById(JSON.parseObject(schoolStaff.jsonString(), SchoolStaff.class));       
+    }
+}

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/SchoolStaffMapper.xml

@@ -0,0 +1,11 @@
+<?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="com.ym.mec.biz.dal.mapper.SchoolStaffMapper">
+    
+    <select id="selectPage" resultType="com.ym.mec.biz.dal.entity.SchoolStaff">
+		SELECT         
+        	t.*
+		FROM school_staff t
+	</select>
+    
+</mapper>

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/config/ResourceServerConfig.java

@@ -43,7 +43,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/tenantInfo/info/*", "/tenantInfo/checkInfo/*", "/tenantInfo/pay/*","/tenantInfo/testCheck", "/tenantInfo/getContract/*",
                         "/tenantPreJoin/add","/imLiveBroadcastRoom/queryRoomInfo","/imLiveBroadcastRoom/test",
                         "/eduOrganization/queryAllOrgan","/eduOrganization/queryAll","/eduOrganization/getOrganCooperation","/import/oaUploadFile",
-                        "/tenantInfo/callback","/adapay/callback","/temp/*"
+                        "/tenantInfo/callback","/adapay/callback","/temp/*", "/open/**"
                 )
                 .permitAll().anyRequest().authenticated().and().httpBasic();
     }

+ 49 - 0
mec-web/src/main/java/com/ym/mec/web/controller/open/OpenSchoolController.java

@@ -0,0 +1,49 @@
+package com.ym.mec.web.controller.open;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+import com.ym.mec.biz.service.SchoolStaffService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.web.vo.SchoolStaffVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/open/school")
+@Api(tags = "学校开放接口")
+public class OpenSchoolController extends BaseController {
+
+    @Autowired
+    private SchoolStaffService schoolStaffService;
+
+    @ApiOperation(value = "学校员工新增", notes = "学校员工- 传入 SchoolStaffWrapper.SchoolStaff")
+	@PostMapping("/staffSave")
+	public HttpResponseResult<JSONObject> add(@Validated @RequestBody SchoolStaffVo.SchoolStaff info) {
+
+        // 参数有效性校验
+        if (Objects.isNull(info.getUserType())) {
+            throw new BizException("领队类型无效");
+        }
+
+        // 数据对象转换
+        SchoolStaffWrapper.SchoolStaff wrapper = SchoolStaffWrapper.SchoolStaff.from(info.jsonString());
+        // 新增数据
+        schoolStaffService.add(wrapper);
+        
+        return succeed();
+	}
+}

+ 85 - 0
mec-web/src/main/java/com/ym/mec/web/controller/school/SchoolStaffController.java

@@ -0,0 +1,85 @@
+package com.ym.mec.web.controller.school;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.entity.SchoolStaff;
+import com.ym.mec.biz.dal.wrapper.SchoolStaffWrapper;
+import com.ym.mec.biz.service.SchoolStaffService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/schoolStaff")
+@Api(tags = "学校员工")
+public class SchoolStaffController extends BaseController {
+
+    @Autowired
+    private SchoolStaffService schoolStaffService;
+
+	@ApiOperation(value = "详情", notes = "学校员工-根据详情ID查询单条, 传入id")
+    @PreAuthorize("@pcs.hasPermissions('schoolStaff/detail')")
+    @GetMapping("/detail/{id}")
+    public HttpResponseResult<SchoolStaff> detail(@PathVariable("id") Long id) {
+    
+    	SchoolStaff wrapper = schoolStaffService.detail(id);
+        
+        return succeed(wrapper);
+	}
+    
+    @ApiOperation(value = "查询分页", notes = "学校员工- 传入 SchoolStaffWrapper.SchoolStaffQuery") 
+    @PreAuthorize("@pcs.hasPermissions('schoolStaff/page')")
+    @PostMapping("/page")
+    public HttpResponseResult<PageInfo<SchoolStaff>> page(@RequestBody SchoolStaffWrapper.SchoolStaffQuery query) {
+        
+        IPage<SchoolStaff> pages = schoolStaffService.selectPage(QueryInfo.getPage(query), query);
+        
+        return succeed(QueryInfo.pageInfo(pages));
+	}
+    
+    @ApiOperation(value = "新增", notes = "学校员工- 传入 SchoolStaffWrapper.SchoolStaff")
+    @PreAuthorize("@pcs.hasPermissions('schoolStaff/save')")
+	@PostMapping("/save")
+	public HttpResponseResult<JSONObject> add(@Validated @RequestBody SchoolStaff schoolStaff) {
+        
+        // 新增数据
+        schoolStaffService.save(schoolStaff);
+        
+        return succeed();
+	}
+    
+    @ApiOperation(value = "修改", notes = "学校员工- 传入 SchoolStaffWrapper.SchoolStaff")
+    @PreAuthorize("@pcs.hasPermissions('schoolStaff/update')")
+	@PostMapping("/update")
+	public HttpResponseResult<JSONObject> update(@Validated @RequestBody SchoolStaff schoolStaff) {
+        
+        // 更新数据
+        schoolStaffService.updateById(schoolStaff);
+        
+        return succeed();
+	}
+
+	@ApiOperation(value = "删除", notes = "学校员工- 传入id")
+    @PreAuthorize("@pcs.hasPermissions('schoolStaff/remove')")
+	@PostMapping("/remove")    
+	public HttpResponseResult<Boolean> remove(@RequestParam Long id) {
+    
+		return succeed(schoolStaffService.removeById(id));
+	}
+}

+ 76 - 0
mec-web/src/main/java/com/ym/mec/web/vo/SchoolStaffVo.java

@@ -0,0 +1,76 @@
+package com.ym.mec.web.vo;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+
+/**
+ * 学校员工
+ * 2023-05-06 11:08:00
+ */
+@ApiModel(value = "SchoolStaffVo对象", description = "学校员工查询视图对象")
+public class SchoolStaffVo {
+
+    @Data
+    @ApiModel(" SchoolStaffQuery-学校员工")
+    public static class SchoolStaffQuery implements QueryInfo {
+    
+        @ApiModelProperty("当前页")
+        private Integer page;
+        
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+        
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static SchoolStaffQuery from(String json) {
+            return JSON.parseObject(json, SchoolStaffQuery.class);
+        }
+    }
+    
+    @Data
+    @ApiModel(" SchoolStaff-学校员工")
+    public static class SchoolStaff {
+    	
+		@ApiModelProperty("主键")
+        private Long id;
+                
+        @NotNull(message = "合作单位编号不能为空")
+		@ApiModelProperty("合作单位编号")
+        private Long schoolId;
+                
+		@ApiModelProperty("用户身份(校长,乐团领队,分管领导,负责老师)")
+        private ESchoolStaffType userType;
+                
+        @NotBlank(message = "用户名称不能为空")
+        @Length(min = 1, max = 8, message = "用户名称长度必须在1-8个字符之间")
+        @ApiModelProperty("用户名称")
+        private String username;
+
+        @NotBlank(message = "手机号码不能为空")
+        @Pattern(regexp = "1[3456789][0-9]{9}", message = "手机号码格式不正确")
+        @ApiModelProperty("手机号码")
+        private String mobile;
+                
+                
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static SchoolStaff from(String json) {
+            return JSON.parseObject(json, SchoolStaff.class);
+        }
+
+    }
+    
+}