ソースを参照

Merge remote-tracking branch 'origin/feature/0427-school' into feature/0427-school

zouxuan 2 年 前
コミット
d7286048c1

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/mapper/SchoolStaffMapper.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ym.mec.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 import com.ym.mec.biz.dal.entity.SchoolStaff;
@@ -23,5 +24,11 @@ public interface SchoolStaffMapper extends BaseMapper<SchoolStaff> {
 	 * @return List<SchoolStaffWrapper.SchoolStaff>
 	 */
 	List<SchoolStaffWrapper.SchoolStaff> selectPage(@Param("page") IPage<SchoolStaffWrapper.SchoolStaff> page, @Param("param") SchoolStaffWrapper.SchoolStaffQuery param);
-	
+
+	/**
+	 * 学校员工身份数统计
+	 * @param schoolId 学校Id
+	 * @return List<StatGroupWrapper>
+	 */
+    List<StatGroupWrapper> selectUserTypeNumsStat(@Param("schoolId") Integer schoolId);
 }

+ 85 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/SchoolStaffWrapper.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.wrapper;
 import com.alibaba.fastjson.JSON;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.enums.school.ESchoolStaffType;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.ApiModel;
@@ -12,8 +13,8 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
 
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Optional;
@@ -97,6 +98,9 @@ public class SchoolStaffWrapper {
 
         @ApiModelProperty("用户头像")
         private String avatar;
+
+        @ApiModelProperty("验证码")
+        private String smsCode;
         
         public String jsonString() {
             return JSON.toJSONString(this);
@@ -267,4 +271,84 @@ public class SchoolStaffWrapper {
             return this;
         }
     }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("学校统计信息")
+    public static class SchoolStaffStat implements Serializable {
+
+        @ApiModelProperty("校长数")
+        private Integer schoolmasterNums;
+
+        @ApiModelProperty("分管领导数")
+        private Integer schoolLeaderNums;
+
+        @ApiModelProperty("乐团领队")
+        private Integer orchestraLeaderNums;
+
+        @ApiModelProperty("负责老师数")
+        private Integer teacherNums;
+
+        @ApiModelProperty("乐团数")
+        private Integer orchestraNums;
+
+        @ApiModelProperty("在读学员数")
+        private Integer studentNums;
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("学校合作单位")
+    public static class SchoolCooperation implements Serializable {
+
+        @ApiModelProperty("合作单位")
+        private CooperationOrgan cooperation;
+
+        @ApiModelProperty("员工身份统计")
+        private SchoolStaffStat staffStat;
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("合作单位")
+    public static class Cooperation implements Serializable {
+
+        @ApiModelProperty("合作单位编号")
+        private Integer id;
+
+        @ApiModelProperty("合作单位logo")
+        private String logo;
+
+        @ApiModelProperty("合作单位名称")
+        private String name;
+
+        @ApiModelProperty("更新时间")
+        private Date updateTime;
+
+        @ApiModelProperty("机构编号")
+        private Integer tenantId;
+
+        public Date getUpdateTime() {
+            return Optional.ofNullable(updateTime).orElse(DateTime.now().toDate());
+        }
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public Integer getTenantId() {
+            return Optional.ofNullable(tenantId).orElse(TenantContextHolder.getTenantId());
+        }
+
+        public Cooperation tenantId(Integer tenantId) {
+            this.tenantId = tenantId;
+            return this;
+        }
+    }
 }

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StatGroupWrapper.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 分组统计指标
+ * Created by Eric.Shang on 28/7/17.
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class StatGroupWrapper implements Serializable {
+
+    private Long id;
+    private Integer total;
+    private String gid; // 字符串分组ID
+
+    private Double number;
+
+}

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

@@ -55,4 +55,17 @@ public interface SchoolStaffService extends IService<SchoolStaff>  {
      * @return List<SchoolStaffWrapper.SchoolStaff>
      */
     List<SchoolStaffWrapper.SchoolStaff> getAllStaffsBySchoolId(Long userId);
+
+    /**
+     * 根据用户ID获取学校所有员工身份
+     * @param schoolId 学校ID
+     * @return SchoolStaffWrapper.SchoolStaffStat
+     */
+    SchoolStaffWrapper.SchoolStaffStat getUserTypeStatByCooperationId(Integer schoolId);
+
+    /***
+     * 更新合作单位信息
+     * @param info SchoolStaffWrapper.Cooperation
+     */
+    void updateCooperation(SchoolStaffWrapper.Cooperation info);
 }

+ 55 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SchoolStaffServiceImpl.java

@@ -8,6 +8,7 @@ import com.microsvc.toolkit.common.response.paging.QueryInfo;
 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.CooperationOrganDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.dal.entity.SchoolStaff;
@@ -15,8 +16,10 @@ import com.ym.mec.biz.dal.entity.SysConfig;
 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.dal.wrapper.StatGroupWrapper;
 import com.ym.mec.biz.service.CooperationOrganService;
 import com.ym.mec.biz.service.SchoolStaffService;
+import com.ym.mec.biz.service.SmsCodeService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.exception.BizException;
 import lombok.extern.slf4j.Slf4j;
@@ -26,6 +29,7 @@ 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.beans.factory.annotation.Value;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -56,6 +60,14 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
     private TeacherDao teacherDao;
     @Autowired
     private SysConfigService sysConfigService;
+    @Autowired
+    private CooperationOrganDao cooperationOrganDao;
+    @Autowired
+    private SmsCodeService smsCodeService;
+
+
+    @Value("${message.debugMode:false}")
+    private boolean debugMode;
 
 	/**
      * 查询详情
@@ -96,6 +108,13 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
             throw new BizException("请勿重复提交");
         }
 
+        // 验证码合法性校验
+        if(smsCodeService.verifyValidCode(schoolStaff.getMobile(), schoolStaff.getSmsCode())
+                && !debugMode) {
+
+            throw new BizException("验证码错误");
+        }
+
         // 合作单位编号
         CooperationOrgan cooperation = cooperationOrganService.get(schoolStaff.getSchoolId().intValue());
         if (Objects.isNull(cooperation)) {
@@ -181,7 +200,7 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         if (Objects.nonNull(user)) {
             // 学校员工帐号平台惟一,不能与其他帐号共存
             if (StringUtils.isNotBlank(user.getUserType())) {
-                throw new BizException("帐号已存在");
+                throw new BizException(999, "帐号已存在");
             }
 
             // 后续流程暂时忽略,用户允许存在多个身份时才走以下创建账号流程
@@ -327,4 +346,39 @@ public class SchoolStaffServiceImpl extends ServiceImpl<SchoolStaffMapper, Schoo
         return sorted;
     }
 
+    /**
+     * 根据用户ID获取学校所有员工身份
+     *
+     * @param schoolId 学校ID
+     * @return SchoolStaffWrapper.SchoolStaffStat
+     */
+    @Override
+    public SchoolStaffWrapper.SchoolStaffStat getUserTypeStatByCooperationId(Integer schoolId) {
+
+        Map<String, Integer> collect = baseMapper.selectUserTypeNumsStat(schoolId).stream()
+                .collect(Collectors.toMap(StatGroupWrapper::getGid, StatGroupWrapper::getTotal, (o, n) -> n));
+
+        // 统计学校员工身份
+        return SchoolStaffWrapper.SchoolStaffStat.builder()
+                .schoolmasterNums(collect.getOrDefault(ESchoolStaffType.SCHOOLMASTER.getCode(), 0))
+                .schoolLeaderNums(collect.getOrDefault(ESchoolStaffType.SCHOOL_LEADER.getCode(), 0))
+                .orchestraNums(collect.getOrDefault(ESchoolStaffType.ORCHESTRA_LEADER.getCode(), 0))
+                .teacherNums(collect.getOrDefault(ESchoolStaffType.TEACHER.getCode(), 0))
+                .orchestraNums(0)
+                .studentNums(0)
+                .build();
+    }
+
+    /***
+     * 更新合作单位信息
+     * @param info SchoolStaffWrapper.Cooperation
+     */
+    @Override
+    public void updateCooperation(SchoolStaffWrapper.Cooperation info) {
+
+        // 合作单位信息
+        cooperationOrganDao.update(JSON.parseObject(info.jsonString(), CooperationOrgan.class));
+    }
+
+
 }

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml

@@ -94,6 +94,9 @@
             <if test="isEnable != null">
                 is_enable_ = #{isEnable},
             </if>
+            <if test="logo != null">
+                logo_ = #{logo},
+            </if>
         </set>
         WHERE id_ = #{id} and tenant_id_ = #{tenantId}
     </update>

+ 8 - 1
mec-biz/src/main/resources/config/mybatis/SchoolStaffMapper.xml

@@ -21,5 +21,12 @@
 		</where>
 		ORDER BY id_ DESC
 	</select>
-    
+
+	<!--学校员工身份数统计-->
+	<select id="selectUserTypeNumsStat" resultType="com.ym.mec.biz.dal.wrapper.StatGroupWrapper">
+		SELECT t1.user_type_ AS gid, COUNT(t1.user_id_) AS total
+		FROM school_staff t1 WHERE t1.school_id_ = #{schoolId} GROUP BY t1.user_type_
+	</select>
+	<!--学校员工身份数统计-->
+
 </mapper>

+ 17 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/controller/BaseController.java

@@ -26,7 +26,6 @@ import javax.servlet.http.HttpServletRequest;
 import java.net.URLEncoder;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 @ControllerAdvice
@@ -75,6 +74,15 @@ public class BaseController {
 		return obj;
 	}
 
+	private static <T> HttpResponseResult<T> getResponseData(boolean status, int statusCode, T data, String message) {
+		HttpResponseResult<T> obj = new HttpResponseResult<T>();
+		obj.setStatus(status);
+		obj.setCode(statusCode);
+		obj.setData(data);
+		obj.setMsg(message);
+		return obj;
+	}
+
 	/**
 	 * 处理一般异常
 	 *
@@ -94,6 +102,14 @@ public class BaseController {
 			if(e.getMessage().equals("205")){
 				return failed(HttpStatus.RESET_CONTENT,e.getMessage());
 			}
+
+			// 自定义错误码
+			if (e instanceof BizException) {
+				BizException bizException = (BizException) e;
+				return getResponseData(false, bizException.getCode(), null, bizException.getMessage());
+			}
+
+			// 默认返回错误码
 			return failed(e.getMessage());
 		} else if (e instanceof AccessDeniedException) {
 			return failed("禁止访问");

+ 10 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/exception/BizException.java

@@ -4,6 +4,7 @@ import com.ym.mec.util.string.MessageFormatter;
 
 public class BizException extends RuntimeException {
 
+	private int code = 200;
 	/**
 	 * 
 	 */
@@ -17,6 +18,12 @@ public class BizException extends RuntimeException {
 		super(message);
 	}
 
+	public BizException(Integer code, String message) {
+		super(message);
+		// 统一错误码
+		this.code = code;
+	}
+
 	public BizException(Throwable cause) {
 		super(cause);
 	}
@@ -33,4 +40,7 @@ public class BizException extends RuntimeException {
 		super(MessageFormatter.arrayFormat(message, args), cause);
 	}
 
+	public int getCode() {
+		return code;
+	}
 }

+ 12 - 2
mec-web/src/main/java/com/ym/mec/web/controller/open/OpenSchoolController.java

@@ -61,14 +61,24 @@ public class OpenSchoolController extends BaseController {
             @ApiImplicitParam(name = "id", value = "合作单位ID", dataType = "long")
     })
     @GetMapping("/cooperation")
-    public HttpResponseResult<CooperationOrgan> queryCooperationById(@RequestParam Long id) {
+    public HttpResponseResult<SchoolStaffWrapper.SchoolCooperation> queryCooperationById(@RequestParam Long id) {
 
     	CooperationOrgan cooperationOrgan = cooperationOrganService.get(Optional.ofNullable(id).orElse(-1L).intValue());
         if (Objects.isNull(cooperationOrgan)) {
             throw new BizException("合作单位编号无效");
         }
 
-    	return succeed(cooperationOrgan);
+        // 学校员工身份统计
+        SchoolStaffWrapper.SchoolStaffStat staffStat = schoolStaffService.getUserTypeStatByCooperationId(cooperationOrgan.getId());
+
+        // 数据对象转换
+        SchoolStaffWrapper.SchoolCooperation schoolCooperation = SchoolStaffWrapper.SchoolCooperation
+                .builder()
+                .cooperation(cooperationOrgan)
+                .staffStat(staffStat)
+                .build();
+
+        return succeed(schoolCooperation);
     }
 
 }

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

@@ -163,4 +163,65 @@ public class SchoolStaffController extends BaseController {
 
         return succeed(user);
     }
+
+    @ApiOperation(value = "合作单位查询", notes = "学校合作单位查询")
+    @GetMapping("/cooperation")
+    public HttpResponseResult<SchoolStaffWrapper.SchoolCooperation> queryCooperation() {
+
+        // 查询用户信息
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            throw new BizException("请先登录");
+        }
+
+        // 查询学校员工信息
+        SchoolStaff schoolStaff = schoolStaffService.queryByUserId(Long.valueOf(sysUser.getId()));
+        if (Objects.isNull(schoolStaff)) {
+            throw new BizException("员工账号不存在");
+        }
+
+        CooperationOrgan cooperationOrgan = cooperationOrganService.get(schoolStaff.getSchoolId().intValue());
+        if (Objects.isNull(cooperationOrgan)) {
+            throw new BizException("合作单位编号无效");
+        }
+
+        // 学校员工身份统计
+        SchoolStaffWrapper.SchoolStaffStat staffStat = schoolStaffService.getUserTypeStatByCooperationId(cooperationOrgan.getId());
+
+        // 数据对象转换
+        SchoolStaffWrapper.SchoolCooperation schoolCooperation = SchoolStaffWrapper.SchoolCooperation
+                .builder()
+                .cooperation(cooperationOrgan)
+                .staffStat(staffStat)
+                .build();
+
+        return succeed(schoolCooperation);
+    }
+
+    @ApiOperation(value = "更新合作单位", notes = "学校合作单位查询")
+    @GetMapping("/updateCooperation")
+    public HttpResponseResult<Boolean> updateCooperation(@RequestBody SchoolStaffWrapper.Cooperation info) {
+
+        // 查询用户信息
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            throw new BizException("请先登录");
+        }
+
+        // 查询学校员工信息
+        SchoolStaff schoolStaff = schoolStaffService.queryByUserId(Long.valueOf(sysUser.getId()));
+        if (Objects.isNull(schoolStaff)) {
+            throw new BizException("员工账号不存在");
+        }
+
+        // 设置默认参数
+        info.tenantId(schoolStaff.getTenantId())
+                .setId(schoolStaff.getSchoolId().intValue());
+
+        // 更新合作单位信息
+        schoolStaffService.updateCooperation(info);
+
+        return succeed();
+    }
+
 }

+ 4 - 1
mec-web/src/main/java/com/ym/mec/web/vo/SchoolStaffVo.java

@@ -61,7 +61,10 @@ public class SchoolStaffVo {
         @Pattern(regexp = "1[3456789][0-9]{9}", message = "手机号码格式不正确")
         @ApiModelProperty("手机号码")
         private String mobile;
-                
+
+        @NotBlank(message = "验证码不能为空")
+        @ApiModelProperty("验证码")
+        private String smsCode;
                 
         public String jsonString() {
             return JSON.toJSONString(this);