feat: 东区缴费分支初始化

This commit is contained in:
张云杰 2025-05-15 15:08:15 +08:00
parent 39f3acc15f
commit bafd4aa3ab
261 changed files with 3751 additions and 9416 deletions

View File

@ -3,14 +3,12 @@ package com.yida.data.auth.controller;
import com.yida.data.auth.entity.BindUser;
import com.yida.data.auth.service.SocialLoginService;
import com.yida.data.common.core.common.ModuleName;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.FebsResponse;
import com.yida.data.common.core.entity.constant.StringConstant;
import com.yida.data.common.core.entity.system.UserConnection;
import com.yida.data.common.core.exception.FebsException;
import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.log.annotation.OperationLog;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -31,7 +29,6 @@ import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* @author MrBird
@ -206,20 +203,4 @@ public class SocialLoginController {
@ApiParam("0-教师1-家长") Integer type) {
return new FebsResponse().data(socialLoginService.h5Login(schoolId, mobile, type));
}
@ResponseBody
@ApiOperation("检查openId状态")
@GetMapping("smart/checkOpenId")
public ResultBean<Map<String, Object>> checkOpenId(@RequestParam @ApiParam(value = "微信公众号授权code", required = true) String code,
@RequestParam @ApiParam(value = "学校id(链接上附带)", required = true) Long deptId) {
return ResultBean.buildSuccess(socialLoginService.checkOpenId(code, deptId));
}
@ResponseBody
@ApiOperation("智慧迎新学生端登录接口")
@GetMapping("wxPublic/welcome/login")
public FebsResponse wxPublicLogin(@RequestParam @ApiParam(value = "微信openId", required = true) String openId,
@RequestParam @ApiParam(value = "学校id(链接上附带)", required = true) Long deptId) {
return new FebsResponse().data(socialLoginService.wxPublicLogin(openId, deptId));
}
}

View File

@ -1,7 +1,6 @@
package com.yida.data.auth.manager;
import cc.mrbird.febs.common.redis.service.RedisService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.auth.mapper.EduUserLogoMapper;
@ -18,7 +17,6 @@ import com.yida.data.common.core.entity.system.EduUserLogo;
import com.yida.data.common.core.entity.system.Menu;
import com.yida.data.common.core.entity.system.Role;
import com.yida.data.common.core.entity.system.SystemUser;
import com.yida.data.common.core.entity.system.SystemUserMenu;
import com.yida.data.common.core.entity.system.UserRole;
import com.yida.data.common.service.CommonService;
import com.yida.data.user.feign.RemoteTeacherService;
@ -81,24 +79,11 @@ public class UserManager {
* @param username 用户名
* @return 权限
*/
public List<String> findUserPermissions(String username) {
// 获取角色权限
List<String> menus = menuMapper.findUserPermissions(username);
// 获取用户权限
List<SystemUserMenu> userPermissions = userMenuMapper.findUserPermissions(username);
// 过滤
if (CollUtil.isNotEmpty(userPermissions)) {
menus.addAll(
userPermissions.stream().filter(x -> x.getType() == 0).map(SystemUserMenu::getPerms).filter(StrUtil::isNotBlank)
.collect(Collectors.toList()));
List<String> excludePerms = userPermissions.stream().filter(x -> x.getType() == 1).map(SystemUserMenu::getPerms)
.filter(StrUtil::isNotBlank).collect(Collectors.toList());
if (CollUtil.isNotEmpty(excludePerms)) {
menus = menus.stream().filter(x -> !excludePerms.contains(x)).collect(Collectors.toList());
}
}
// 只返回串
return menus;
public String findUserPermissions(String username) {
// List<Menu> userPermissions = menuMapper.findUserPermissions(username);
// 从用户对应权限表查询权限数据
List<Menu> userPermissions = userMenuMapper.findUserPermissions(username);
return userPermissions.stream().map(Menu::getPerms).collect(Collectors.joining(StringConstant.COMMA));
}
/**
@ -169,6 +154,6 @@ public class UserManager {
public String findMainRole(Long mainDeptId) {
// 查询主角色code
List<String> rolePerms = userMapper.findMainRole(mainDeptId);
return rolePerms.stream().filter(StringUtils::isNotBlank).distinct().collect(Collectors.joining(StringConstant.COMMA));
return rolePerms.stream().filter(StringUtils::isNotBlank).collect(Collectors.joining());
}
}

View File

@ -16,5 +16,5 @@ public interface MenuMapper extends BaseMapper<Menu> {
* @param username 用户名
* @return 权限集合
*/
List<String> findUserPermissions(String username);
List<Menu> findUserPermissions(String username);
}

View File

@ -22,5 +22,5 @@ public interface UserMenuMapper extends BaseMapper<SystemUserMenu> {
* @author ZYJ
* @date 2021/11/8 15:54
*/
List<SystemUserMenu> findUserPermissions(String username);
List<Menu> findUserPermissions(String username);
}

View File

@ -105,26 +105,4 @@ public interface SocialLoginService {
Map<String, Object> wxpublicLogin(String code, String appId, Integer type, Long schoolId, String mobile);
Map<String, Object> h5Login(Long schoolId, String mobile, Integer type);
/**
* 检查openId状态
*
* @param code 微信公众号授权code
* @param deptId 学校id
* @return java.util.Map<java.lang.String, java.lang.Object>
* @author ZYJ
* @date 2023/6/2 10:31
*/
Map<String, Object> checkOpenId(String code, Long deptId);
/**
* 迎新功能微信公众号登录
*
* @param openId 微信openId
* @param deptId 学校id
* @return java.util.Map<java.lang.String, java.lang.Object>
* @author ZYJ
* @date 2023/5/18 11:09
*/
Map<String, Object> wxPublicLogin(String openId, Long deptId);
}

View File

@ -1,6 +1,5 @@
package com.yida.data.auth.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.yida.data.auth.manager.UserManager;
import cc.mrbird.febs.common.redis.service.RedisService;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@ -45,7 +44,7 @@ public class FebsUserDetailServiceImpl implements UserDetailsService {
HttpServletRequest httpServletRequest = FebsUtil.getHttpServletRequest();
SystemUser systemUser = userManager.findByName(username);
if (systemUser != null) {
List<String> permissions = userManager.findUserPermissions(systemUser.getUsername());
String permissions = userManager.findUserPermissions(systemUser.getUsername());
boolean notLocked = false;
if (StringUtils.equals(SystemUser.STATUS_VALID, systemUser.getStatus())) {
notLocked = true;
@ -60,31 +59,31 @@ public class FebsUserDetailServiceImpl implements UserDetailsService {
// 设置角色权限
if (StringUtils.isNotBlank(systemUser.getRolePerms())) {
List<String> collect = Arrays.stream(systemUser.getRolePerms().split(StringConstant.COMMA))
.map(s -> FebsConstant.SECURITY_ROLE_PREFIX + s)
.distinct()
.collect(Collectors.toList());
.map(s -> FebsConstant.SECURITY_ROLE_PREFIX + s)
.collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) {
grantedAuthorities = AuthorityUtils
.commaSeparatedStringToAuthorityList(String.join(StringConstant.COMMA, collect));
grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(String.join(StringConstant.COMMA, collect));
}
}
// 设置菜单权限
if (CollUtil.isNotEmpty(permissions)) {
grantedAuthorities.addAll(AuthorityUtils.createAuthorityList(permissions.toArray(new String[0])));
if (StringUtils.isNotBlank(permissions)) {
if (CollectionUtils.isNotEmpty(grantedAuthorities)) {
grantedAuthorities.addAll(AuthorityUtils.commaSeparatedStringToAuthorityList(permissions));
} else {
grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(permissions);
}
}
// 查询主角色信息
if (Objects.nonNull(systemUser.getMainDeptId())) {
String role = this.userManager.findMainRole(systemUser.getMainDeptId());
systemUser.setMainRolePerms(role);
}
//查询登录所属部门学校对应的
log.info("登陆用户信息sysUser: {}", systemUser);
log.info("登陆权限数据permission: {}", grantedAuthorities);
log.info("登陆主角色数据mainRole: {}", systemUser.getMainRolePerms());
FebsAuthUser authUser = new FebsAuthUser(systemUser.getUsername(), password, true, true, true, notLocked,
grantedAuthorities);
grantedAuthorities);
BeanUtils.copyProperties(systemUser, authUser);
return authUser;

View File

@ -13,8 +13,6 @@ import com.yida.data.auth.service.SocialLoginService;
import com.yida.data.auth.service.UserConnectionService;
import com.yida.data.common.core.entity.FebsResponse;
import com.yida.data.common.core.entity.constant.*;
import com.yida.data.common.core.entity.smart.EduSmartWelcomeGuideRosterRelation;
import com.yida.data.common.core.entity.smart.EduSmartWelcomeGuideStep;
import com.yida.data.common.core.entity.system.*;
import com.yida.data.common.core.entity.user.EduStaff;
import com.yida.data.common.core.enums.RoleName;
@ -24,12 +22,11 @@ import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.common.core.utils.WxPublicUtil;
import com.yida.data.common.core.utils.WxUtil;
import com.yida.data.common.service.CommonService;
import com.yida.data.school.feign.smart.RemoteSmartWelcomeService;
import com.yida.data.school.feign.transaction.RemoteStudentApplyService;
import com.yida.data.system.feign.RemoteDeptService;
import com.yida.data.system.feign.RemoteRoleService;
import com.yida.data.system.feign.RemoteUserService;
import com.yida.data.user.feign.RemoteStaffService;
import com.yida.data.user.feign.RemoteStudentApplyService;
import com.yida.data.user.feign.RemoteStudentService;
import com.yida.data.user.feign.RemoteTeacherService;
import com.yida.data.user.vo.ParentInfoVO;
@ -64,6 +61,7 @@ public class SocialLoginServiceImpl implements SocialLoginService {
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
private static final String NOT_BIND = "not_bind";
private static final String SOCIAL_LOGIN_SUCCESS = "social_login_success";
@ -75,16 +73,17 @@ public class SocialLoginServiceImpl implements SocialLoginService {
private final UserConnectionService userConnectionService;
private final ResourceOwnerPasswordTokenGranter granter;
private final RedisClientDetailsService redisClientDetailsService;
private final RemoteStaffService remoteStaffService;
private final RemoteStudentService remoteStudentService;
private final RemoteTeacherService remoteTeacherService;
private final RemoteSmartWelcomeService remoteSmartWelcomeService;
private final WxUtil wxUtil;
private final WxPublicUtil wxPublicUtil;
private final RedisService redisService;
private final RemoteStudentService remoteStudentService;
private final RemoteTeacherService remoteTeacherService;
private final RemoteStaffService remoteStaffService;
private final RemoteDeptService remoteDeptService;
private final CommonService commonService;
private final RemoteRoleService remoteRoleService;
private final RemoteUserService remoteUserService;
private final RemoteStudentApplyService remoteStudentApplyService;
private final RedisService redisService;
@Override
public AuthRequest renderAuth(String oauthType) throws FebsException {
@ -580,43 +579,4 @@ public class SocialLoginServiceImpl implements SocialLoginService {
res.put("identity", type == 0 ? teacher : parent);
return res;
}
@Override
public Map<String, Object> checkOpenId(String code, Long deptId) {
Dept school = commonService.getDept(deptId);
if (Objects.isNull(school)) {
throw new FebsException("学校信息错误");
}
// 查询用户信息
String openId = wxPublicUtil.getOpenId(school.getWxPublicAppId(), school.getWxPublicSecret(), code);
// 查询openId是否绑定了对应的信息
EduSmartWelcomeGuideRosterRelation relation = remoteSmartWelcomeService.getOpenIdRelation(openId, deptId).getData();
Map<String, Object> map = new HashMap<>();
// true代表已经绑定false代表未绑定
map.put("status", Objects.nonNull(relation));
// 微信openId
map.put("openId", openId);
return map;
}
@Override
public Map<String, Object> wxPublicLogin(String openId, Long deptId) {
// 查询关联关系
EduSmartWelcomeGuideRosterRelation relation = remoteSmartWelcomeService.getOpenIdRelation(openId, deptId).getData();
if (Objects.isNull(relation) || Objects.isNull(relation.getGuideRoster())) {
throw new FebsException("信息错误");
}
// 用户信息
SystemUser systemUser = userManager.findByName(relation.getGuideRoster().getMobile());
// 登录返回token和用户信息
Map<String, Object> res = new HashMap<>();
res.put("token", getOauth2AccessToken(systemUser));
systemUser.setPassword(null);
res.put("user", systemUser);
// // 查询人员步骤信息
// List<EduSmartWelcomeGuideStep> stepList = remoteSmartWelcomeService.listStepInfo(relation.getId(), relation.getGuideId()).getData();
// relation.setStepList(stepList);
res.put("info", relation);
return res;
}
}

View File

@ -2,15 +2,15 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yida.data.auth.mapper.MenuMapper">
<select id="findUserPermissions" resultType="java.lang.String">
select distinct m.perms
from t_role r
left join t_user_role ur on (r.role_id = ur.role_id)
left join t_user u on (u.user_id = ur.user_id)
left join t_role_menu rm on (rm.role_id = r.role_id)
left join t_menu m on (m.menu_id = rm.menu_id)
where u.username = #{userName}
and m.perms is not null
and m.perms &lt;&gt; ''
</select>
<select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.Menu">
select distinct m.perms
from t_role r
left join t_user_role ur on (r.role_id = ur.role_id)
left join t_user u on (u.user_id = ur.user_id)
left join t_role_menu rm on (rm.role_id = r.role_id)
left join t_menu m on (m.menu_id = rm.menu_id)
where u.username = #{userName}
and m.perms is not null
and m.perms &lt;&gt; ''
</select>
</mapper>

View File

@ -18,7 +18,6 @@
u.description,
u.avatar,
d.dept_type deptType,
d.school_nature schoolNature,
d.dept_name deptName,
u.agent_id agentId,
GROUP_CONCAT(r.role_id) roleId,
@ -60,7 +59,6 @@
<select id="findMainRole"
resultType="java.lang.String">
SELECT
distinct
r.ROLE_PERMS
FROM
t_user u

View File

@ -2,13 +2,13 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yida.data.auth.mapper.UserMenuMapper">
<select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.SystemUserMenu">
select um.*, m.perms
from t_user_menu um
left join t_user u on (u.user_id = um.user_id)
left join t_menu m on (m.menu_id = um.menu_id)
where u.username = #{userName}
and m.perms is not null
and m.perms <![CDATA[!=]]> ''
<select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.Menu">
select distinct m.perms
from t_user_menu um
left join t_user u on (u.user_id = um.user_id)
left join t_menu m on (m.menu_id = um.menu_id)
where u.username = #{userName}
and m.perms is not null
and m.perms &lt;&gt; ''
</select>
</mapper>

View File

@ -148,30 +148,18 @@
<version>${wxpay.apiv3.version}</version>
<scope>compile</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.github.wechatpay-apiv3</groupId>-->
<!-- <artifactId>wechatpay-apache-httpclient</artifactId>-->
<!-- <version>${wxpay.apiv3.version}</version>-->
<!-- <scope>compile</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>${wxpay.apiv3.version}</version>
<scope>compile</scope>
</dependency>
<!-- 二维码依赖 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>${qr.code.version}</version>
</dependency>
<!-- 百度api -->
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>${baidu.api.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>

View File

@ -8,24 +8,15 @@ public enum ModuleName {
AUTH("认证中心"),
APPLY_PARODUCT("应用商品"),
ATTENDANCE("考勤"),
DEVICE("设备"),
LETTER_BOX("校长信箱"),
NOTICE("通知"),
SCHOOL("校园主页"),
STUDENT_EXAM("考试管理"),
USER("用户管理"),
STUDENT("学生管理"),
STAFF("职工管理"),
JOB("任务调度"),
SYSTEM("系统管理"),
DEPT("系统部门"),
USER_DEPT("家校部门"),
INSTRUCTION("系统指南"),
ELECTRONIC_STUDENT_CARD("电子学生证"),
TELEPHONE("亲情电话"),
COURSE("课程表"),
PRODUCT("商品管理"),
TRANSATION("交易管理"),
HEALTH("健康管理");
@Getter
String name;

View File

@ -21,29 +21,22 @@ public enum ResultMsgType {
IMPORT_EXCEL_FAIL("导入失败!", 500),
FILE_TYPE_ERROR("导入文件类型错误", 500),
ID_CARD_EXIST("身份证号码已存在!", 500),
STUDENT_CARD_NUMBER_EXIST("校园学号已存在!", 500),
STUDENT_NUMBER_EXIST("学号已存在!", 500),
STUDENT_NUMBER_NOT_EXIST("学号不存在!", 500),
CAMPUS_NAME_ERROR("学区名称错误", 500),
SECTION_NAME_ERROR("学段名称错误", 500),
GRADE_NAME_ERROR("年级名称错误", 500),
CLASS_NAME_ERROR("班级名称错误", 500),
START_DATE_ERROR("入学时间错误", 500),
SERVER_ERROR("服务器繁忙!请稍后再试", 500),
LOGIN_INFO_ERROR("用户登陆信息异常", 500),
PAY_TYPE_ERROR("暂不支持此支付方式", 500),
ORDER_FAIL("创建订单失败!请稍后再试", 500),
ORDER_NOT_FOUND("未找到订单信息", 500),
ORDER_INVALID("该订单已失效!无法执行该操作", 500),
ORDER_QUERY_FAIL("订单查询失败", 500),
ORDER_CLOSE_FAIL("关闭订单失败", 500),
ORDER_REFUND_FAIL("订单退款失败", 500),
REFUND_QUERY_FAIL("退款查询失败", 500),
ORDER_MONEY_ERROR("订单金额异常", 500),
CARD_STATUS_ERROR("卡状态异常", 500),
;
private final String value;

View File

@ -91,12 +91,6 @@ public class CurrentUser implements Serializable {
*/
private String mainRolePerms;
/**
* 学校性质0幼儿园1小学2中学3九年一贯4十二年一贯5高校
*/
private Integer schoolNature;
@JsonIgnore
private EduUserLogo userLogo;
}

View File

@ -55,8 +55,6 @@ public class FebsAuthUser extends User {
private String status;
private Integer schoolNature;
private String deptIds;
private Long identityId;

View File

@ -35,9 +35,6 @@ public class EduAttendanceRecord {
private String className;
@ApiModelProperty("0上学1宿舍")
private Integer type;
@ApiModelProperty("宿舍id")
private Long dormId;
@ -86,8 +83,5 @@ public class EduAttendanceRecord {
@ApiModelProperty("该条记录使用的考勤时间段")
private Long ruleTimeId;
@ApiModelProperty("考勤时间段类型0开始时间1结束时间")
private Integer ruleTimeType;
private transient String deviceName;
}

View File

@ -109,15 +109,9 @@ public class EduAttendanceResult {
/**
* 考勤结果100-正常 201-迟到202-早退203-迟到早退204-旷课,205-请假, 211-晚归212-异常晚归213-旷宿214-已被核查但学生还未归寝
*/
@ApiModelProperty(value = "考勤结果100-正常201-迟到202-早退203-迟到早退204-旷课,205-请假,206-上班未打卡|下班正常,207-上班未打卡|下班早退,208-上班未打卡|下班未在有效打卡时间段内,209-上班未在有效打卡时间段内|下班早退,210-上班迟到|下班未打卡,211-晚归212-异常晚归213-旷宿214-已被核查但学生还未归寝")
@ApiModelProperty(value = "考勤结果100-正常201-迟到202-早退203-迟到早退204-旷课,205-请假,211-晚归212-异常晚归213-旷宿214-已被核查但学生还未归寝")
@TableField("status")
private Integer status;
@ApiModelProperty(value = "开始时间考勤结果1正常0异常空未打卡")
@TableField("begin_status")
private Integer beginStatus;
@ApiModelProperty(value = "结束时间考勤结果1正常0异常空未打卡")
@TableField("end_status")
private Integer endStatus;
/**
* 核查时间
@ -171,7 +165,4 @@ public class EduAttendanceResult {
@ApiModelProperty("学号")
private transient String stuNo;
@ApiModelProperty("类型:1宿舍考勤0上学考勤")
private transient Integer type;
}

View File

@ -11,7 +11,6 @@ import java.time.LocalDateTime;
@Data
@ApiModel("规则设备")
public class EduAttendanceRuleDevice {
@TableId(type = IdType.AUTO)
private Long id;
@ -24,12 +23,9 @@ public class EduAttendanceRuleDevice {
@ApiModelProperty("设备编号")
private String deviceSn;
@ApiModelProperty("设备名称")
private String deviceName;
@ApiModelProperty("创建时间")
private LocalDateTime createDate;
@ApiModelProperty("创建人ID")
private Long createId;

View File

@ -1,13 +1,11 @@
package com.yida.data.common.core.entity.attendance;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@ -62,21 +60,10 @@ public class EduAttendanceStaffResult {
/**
* 考勤结果0-正常1-迟到2-早退,3-旷工4-迟到早退5-上班未在打卡时间段6-下班未在打卡时间段
*/
@ApiModelProperty(value = "考勤结果0-正常1-迟到2-早退,3-旷工4-迟到早退5-上班未在打卡时间段6-下班未在打卡时间段,7-上班未在打卡时间段|早退8-上班迟到|下班未打卡")
@ApiModelProperty(value = "考勤结果0-正常1-迟到2-早退,3-旷工4-迟到早退5-上班未在打卡时间段6-下班未在打卡时间段")
@TableField("status")
private Integer status;
/**
* 上班考勤状态 0 正常 1 异常
*/
@TableField("start_status")
private Integer startStatus;
/**
* 下班考勤状态 0 正常 1 异常
*/
@TableField("end_status")
private Integer endStatus;
/**
* 考勤日期
*/
@ -105,14 +92,4 @@ public class EduAttendanceStaffResult {
@DateTimeFormat(pattern = "HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "HH:mm:ss")
private LocalTime endRealTime;
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
}

View File

@ -3,18 +3,9 @@ package com.yida.data.common.core.entity.constant;
public interface AppConstant {
/**
* 通讯录(用于操作) https://developer.work.weixin.qq.com/document/path/96078
* 通讯录
*/
String CONTACT = "通讯录";
/**
* 通讯录(用于查询) 职工端智慧迎新
*/
String CONTACT_SELECT = "contact_resources";
/**
* 家校沟通
*/
String CONTACT_SCHOOL = "家校沟通";
/**
@ -89,28 +80,8 @@ public interface AppConstant {
*/
String TEACHER_LEAVE_REQUEST = "teacher_leave_request";
/**
* 请假家长端
*/
String STUDENT_LEAVE_REQUEST = "student_leave_request";
/**
* 访客教师端
*/
String VISITOR_STAFF = "visitor_staff";
/**
* 微官网 家长端智慧迎新
*/
String INDEX_PARENT = "index_parent";
/**
* 查寝
*/
String DORM_ATTENDANCE_STAFF = "dorm_attendance_staff";
/**
* 智慧迎新职工端
*/
String SMART_WELCOME_STAFF = "smart_welcome_staff";
}

View File

@ -2,31 +2,11 @@ package com.yida.data.common.core.entity.constant;
public interface CachePrefixConstant {
/**
* 企业微信服务商缓存前缀
*/
String SYS_SERVICE_PROVIDER = "sys:service:provider.";
/**
* 企业微信应用缓存前缀
*/
String SYS_APP = "sys:app.";
/**
* 系统白名单信息
*/
String SYS_WHITE_LIST = "sys:white:list.";
/**
* 部门对应的第三方系统功能
*/
String SYS_DEPT_FUNCTION = "sys:dept:function.";
/**
* 企业微信应用模板缓存前缀
*/
String SYS_APP_TEMPLATE = "sys:app.template.";
/**
* 部门公众号
*/
@ -81,18 +61,6 @@ public interface CachePrefixConstant {
String IMPORT_STUDENT_KEY = "import.student.";
String IMPORT_STUDENT_FILE = "import.student.file.";
String IMPORT_STUDENT_CARD_NUMBER_KEY = "import.student.cardNo";
/**
* 学生导出信息
*/
String EXPORT_STUDENT_DATA = "student:data:export.";
/**
* 学生宿舍导出信息
*/
String EXPORT_STUDENT_DORM_DATA = "student:dorm:data:export.";
/**
* 登录用户将要登录的部门id
*/
@ -139,31 +107,6 @@ public interface CachePrefixConstant {
*/
String UNION_PAY_CONFIG = "sys:union.pay.config";
/**
* 建行支付配置信息
*/
String CONSTRUCTION_PAY_CONFIG = "sys:construction.pay.config";
/**
* 收钱吧支付配置信息
*/
String U_PAY_CONFIG = "sys:u.pay.config";
/**
* 百度api配置信息
*/
String BAI_DU_API_CONFIG = "baidu:api.config";
/**
* 学校收钱吧终端信息
*/
String DEPT_CONSUME_TERMINAL = "dept:consume:terminal.";
/**
* 学校消费机服务器信息
*/
String CONSUME_CONFIG = "sys:consume.config";
//------------------学校-------------------
/**
* 导入寝室 进度信息
@ -183,20 +126,11 @@ public interface CachePrefixConstant {
//------------------用户-------------------
String STUDENT_DATA = "user:student.data";
//------------------用户-------------------
String STUDENT_BASE_DATA = "user:student.base.data";
/**
* 导入住宿学生 进度信息
*/
String IMPORT_STUDENT_DORM = "user:studentDorm.import";
/**
* 导入学生类型 进度信息
*/
String IMPORT_STUDENT_TYPE = "user:studentType.import";
/**
* 学生在校离校在寝不在寝状态
*/
@ -229,11 +163,6 @@ public interface CachePrefixConstant {
*/
String ISSUE_FACE_ERROR_MSG = "user:face:issue.error.msg.";
/**
* 设备组人脸下发成功数量
*/
String ISSUE_GROUP_USER_FACE_SUCCESS = "group.user.face.success.";
/**
* 大华code与人员id对应
*/
@ -256,11 +185,6 @@ public interface CachePrefixConstant {
*/
String DEVICE_DATA = "attendance:device:data";
/**
* 设备数据
*/
String DEVICE_DATA_BY_ID = "attendance:device:id:data";
/**
* 最新考勤记录时间
*/
@ -276,31 +200,11 @@ public interface CachePrefixConstant {
*/
String ISSUE_FACE_GROUP_DEVICE = "attendance:device:face-group.";
/**
* 设备下发的人脸组鼠标数量
*/
String ISSUE_FACE_GROUP_DEVICE_NUMBER = "attendance:device:face-group.number.";
/**
* 海清设备批量编辑列表
*/
String HQ_EDIT_BATCH = "hq.edit.batch.";
/**
* 海清人脸新增信息
*/
String HQ_BATCH_ADD = "hq.batch.add.";
/**
* 海清人脸新编辑信息
*/
String HQ_BATCH_EDIT = "hq.batch.edit.";
/**
* 接收的认证消息缓存
*/
String HQ_RECEIVE_INFO = "hq.receive.info.";
//--------------商品订单------------------
/**
@ -436,13 +340,6 @@ public interface CachePrefixConstant {
* 宿舍信息
*/
String FACILITY_DORM_ROOM = "facility:dorm:room";
// --------------------宿舍数据-----------------
/**
* 宿舍信息
*/
String FACILITY_DORM_MASTER = "facility:dorm:master.";
// --------------------第二课堂----------------
/**
* 菜单配置
@ -469,7 +366,7 @@ public interface CachePrefixConstant {
String BILL_ORDER = "bill.order.";
/**
* 账单订单调起支付所需参数微信jsapi为prepay_id微信h5为支付地址银联支付为支付地址
* 账单订单调起支付所需参数微信jsapi为prepay_id微信h5为回调地址银联支付为支付地址
*/
String BILL_ORDER_FLAG = "bill.order.flag.";
@ -508,27 +405,6 @@ public interface CachePrefixConstant {
*/
String BILL_PAY_DETAIL_EXPORT_URL = "bill:pay:detail:export:url:";
// --------------------消费充值----------------
/**
* 学生消费订单缓存
*/
String CONSUME_ORDER_STUDENT = "consume.order.student.";
/**
* 消费订单信息
*/
String CONSUME_ORDER = "consume.order.";
/**
* 消费订单调起支付所需参数微信jsapi为prepay_id微信h5为支付地址银联支付为支付地址收钱吧为支付地址
*/
String CONSUME_ORDER_FLAG = "consume.order.flag.";
/**
* 商品描述
*/
String CONSUME_ORDER_DESC = "充值缴费";
// -----------摄像头-------------------------
/**
* 摄像头
@ -542,41 +418,6 @@ public interface CachePrefixConstant {
*/
String USER_PIC_DOWNLOAD = "user:pic:downLoad.";
/**
* 职工通行记录下载
*/
String STAFF_ATTENDANCE_RECORD_DOWNLOAD = "staff:attendance:record:downLoad.";
/**
* 职工考勤记录下载
*/
String STAFF_ATTENDANCE_RESULT_DOWNLOAD = "staff:attendance:result:downLoad.";
/**
* 学生宿舍考勤下载
*/
String STUDENT_DORM_ATTENDANCE_RESULT_DOWNLOAD = "student:dorm:attendance:result:downLoad.";
/**
* 通行记录下载
*/
String ATTENDANCE_RECORD_DOWNLOAD = "attendance:record:download.";
/**
* 考勤日报下载
*/
String ATTENDANCE_DAY_REPORT_DOWNLOAD = "attendance:day:report:download.";
/**
* 商品购买情况下载
*/
String PRODUCT_BUY_DATA_DOWNLOAD = "product:buy:data:downLoad.";
/**
* 下载学生照片
*/
@ -590,7 +431,7 @@ public interface CachePrefixConstant {
/**
* 学校对应关键功能点配置
*/
String SCHOOL_FUNCATION_CODE = "school:funcation:code:";
String SCHOOL_FUNCATION_CODE = "school:funcation:code.";
String ATTENDANCE_DORMITORY_CLASS = "attendance:Dormitory:class.";
@ -599,9 +440,6 @@ public interface CachePrefixConstant {
String STAFF_MANGE_DEPT = "staff:mange:dept.";
String STAFF_MANGE_CLASS = "staff:mange:class.";
/**
* 对应设备策略id(人脸组id)缓存
*/
@ -641,165 +479,6 @@ public interface CachePrefixConstant {
String ADD_MANUSCRIPT_PROGRESS = "add:manuscript:progress";
// --------------------智慧迎新-----------------
/**
* 花名册下载缓存
*/
String GUIDE_ROSTER_DATA_DOWNLOAD = "guide:roster:data:download.";
/**
* 花名册身份证通知书下载图片缓存
*/
String GUIDE_ROSTER_PIC_DATA_DOWNLOAD = "guide:roster:pic:data:download.";
// --------------------智慧迎新-----------------
/**
* 新生迎新步骤信息
*/
String GUIDE_ROSTER_STEP_DATA = "guide:roster:step:data.";
/**
* 花名册人员迎新订单缓存
*/
String GUIDE_STEP_ORDER_ROSTER = "guide.step.order.roster.";
/**
* 迎新步骤订单缓存
*/
String GUIDE_STEP_ORDER = "guide.step.order.";
/**
* 迎新订单调起支付所需参数微信jsapi为prepay_id微信h5为支付地址银联支付为支付地址建行为支付地址
*/
String GUIDE_STEP_ORDER_FLAG = "guide.step.order.flag.";
/**
* 智慧迎新导入学生人脸
*/
String IMPORT_GUIDE_AVATAR_KEY = "guide:avatar:import.key.";
/**
* 智慧迎新导入花名册
*/
String IMPORT_GUIDE_ROSTER_KEY = "guide:roster:import.key.";
/**
* 智慧迎新系部专业数据
*/
String WELCOME_DEPARTMENT_DATA = "welcome:department:data.";
/**
* 智慧迎新预分班级数据
*/
String WELCOME_CLASS_DATA = "welcome:class:data.";
/**
* 智慧迎新班级对应人员数量
*/
String WELCOME_CLASS_STUDENT_NUMBER = "welcome:class:student:number:";
/**
* 智慧迎新预分宿舍数据
*/
String WELCOME_DORM_DATA = "welcome:dorm:data.";
/**
* 智慧迎新宿舍对应人员数量
*/
String WELCOME_DROM_STUDENT_NUMBER = "welcome:dorm:student:number:";
/**
* 智慧迎新宿舍对应人员数量
*/
String WELCOME_DROM_STUDENT_NUMBER_BUDING = "welcome:dorm:student:number:buding";
/**
* 智慧迎新预分班级导入进度
*/
String WELCOME_CLASS_IMPOST_PROGRESS = "welcome:class:import:progress:";
/**
* 智慧迎新预分宿舍导入进度
*/
String WELCOME_DORM_IMPOST_PROGRESS = "welcome:dorm:import:progress:";
/**
* 智慧迎新花名册信息
*/
String WELCOME_ROSTER = "welcome:roster";
/**
* 学生考勤结果 每月记录
*/
String ATTENDANCE_DATE_STATUS = "attendance:date:status.";
/**
* 管理员查看 每月记录
*/
String ATTENDANCE_MANAGE_DATE_STATUS = "attendance:manage:date:status.";
/**
* 学生考勤结果 每日记录
*/
String ATTENDANCE_STATUS_DAY_STUDENT = "attendance:status:day:student:";
/**
* 教职工考勤结果 每日记录
*/
String ATTENDANCE_STATUS_DAY_STAFF = "attendance:status:day:staff:";
/**
* 考勤管理管理部门树
*/
String ATTENDANCE_USER_MANAGE_TREE = "attendance:user:manage:tree:";
/**
* 考勤管理管理部门树
*/
String ATTENDANCE_STAFF_IDENTITY = "attendance:staff:identity:";
/**
* 职工管理规则
*/
String ATTENDANCE_STAFF_MANAGE_RULE = "attendance:staff:manage:rule";
/**
* 用户打卡记录
*/
String ATTENDANCE_USER_RECORD = "attendance:user:record";
/**
* 学生匹配的考勤规则
*/
String ATTENDANCE_STUDENT_RULE = "attendance:student:rule";
/**
* 校园主页信息
*/
String SCHOOL_HOME_INFO = "school:home:info";
/**
* 学校小程序信息
*/
String DEPT_HOME_APP_INFO = "dept:home:app:info";
/**
* 用户对应微信小程序
*/
String USER_GENERATE_URL_LINK = "user:generate:url:link:";
/**
* 考勤规则
*/
String ATTENDANCE_RULE_DATA = "attendance:rule";
}

View File

@ -79,20 +79,10 @@ public interface FebsConstant {
String TP_TOKEN = "tupu.token.";
/**
* 微信公众号 token key前缀 7200s
* 微信公众号 token key前缀
*/
String WX_PUBLIC_ACCESS_TOKEN = "wx.public:access.token.";
/**
* 微信 JS-SDK jsapi_ticket key前缀 7200s
*/
String WX_PUBLIC_JS_API_TICKET = "wx.public:jsapi.ticket.";
/**
* 企业微信 JS-SDK jsapi_ticket key前缀 7200s
*/
String QYWX_WX_JS_API_TICKET = "qywx.wx:jsapi.ticket.";
/**
* 几米 access_token key前缀
*/

View File

@ -43,12 +43,7 @@ public interface LockPrefixConstant {
String CARD_CMD_LOCK = "device:card:cmd-lock";
/**
* 设备下发处理返回数据
* 学生账单订单
*/
String ISSUE_FACE_DEVICE_LOCK = "user:face:issue.device.lock.";
/**
* 设备组下发处理人脸数据锁
*/
String ISSUE_FACE_GROUP_LOCK = "user:face:group.lock.";
String STUDENT_BILL_ORDER_LOCK = "student.bill.order.lock.";
}

View File

@ -38,21 +38,11 @@ public interface QywxConstant {
*/
String USER_DETAIL_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/get";
/**
* 获取访问用户敏感信息 post https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=ACCESS_TOKEN
*/
String USER_SENSITIVE_INFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=";
/**
* 查询部门成员详情 get https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=ACCESS_TOKEN&department_id=DEPARTMENT_ID&fetch_child=FETCH_CHILD
*/
String USER_DETAIL_LIST_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/list";
/**
* 获取成员ID列表 POST https://qyapi.weixin.qq.com/cgi-bin/user/list_id?access_token=ACCESS_TOKEN
*/
String USER_ID_LIST_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/list_id?access_token=";
/**
* 创建部门 POST https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=ACCESS_TOKEN
*/
@ -73,16 +63,6 @@ public interface QywxConstant {
*/
String DEPT_LIST_URL = "https://qyapi.weixin.qq.com/cgi-bin/department/list";
/**
* 获取子部门ID列表 GET https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token=ACCESS_TOKEN&id=ID
*/
String SIMPLE_DEPT_LIST_URL = "https://qyapi.weixin.qq.com/cgi-bin/department/simplelist";
/**
* 获取单个部门详情 GET https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=ACCESS_TOKEN&id=ID
*/
String DEPT_INFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/department/get";
/**
* 创建部门家校沟通 POST https://qyapi.weixin.qq.com/cgi-bin/school/department/create?access_token=ACCESS_TOKEN
*/
@ -225,39 +205,16 @@ public interface QywxConstant {
*/
String CONTACT_EVENT = "change_contact";
/**
* 创建部门
*/
String DEPT_CREATE_TYPE = "create_party";
/**
* 更新部门
*/
String DEPT_UPDATE_TYPE = "update_party";
/**
* 删除部门
*/
String DEPT_DELETE_TYPE = "delete_party";
/**
* 创建成员
*/
String USER_CREATE_TYPE = "create_user";
/**
* 更新成员
*/
String USER_UPDATE_TYPE = "update_user";
/**
* 删除成员
*/
String USER_DELETE_TYPE = "delete_user";
/**
* 获取企业微信的jsapi_ticket
* https://developer.work.weixin.qq.com/document/path/96909
*/
String GET_JS_API_TICKET_URL = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket";
}

View File

@ -61,10 +61,4 @@ public interface WxPublicConstant {
* 获取微信小程序 URL Link
*/
String GENERATE_URL_LINK = "https://api.weixin.qq.com/wxa/generate_urllink";
/**
* 获取JS-SDK jsapi_ticket
* https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62
*/
String GET_JS_API_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
}

View File

@ -15,6 +15,11 @@ public class AppNotice {
*/
private List<String> userIds;
/**
* 用户id
*/
private List<String> userIdList;
/**
* 订阅号 消息内容
*/

View File

@ -63,4 +63,5 @@ public class PushMessage {
public static final String AUDIO = "audio";
public static final String NORMAL = "NORMAL";
public static final String ACCOUNT = "MSG_ACCOUNT_MSG";
public static final String H5_SUB_MSG_TYPE = "NEWSEDUCATION";
}

View File

@ -23,7 +23,7 @@ import java.math.BigDecimal;
@AllArgsConstructor
public class UnionPayOrder implements Serializable {
private static final long serialVersionUID = -1580486861180880702L;
private static final long serialVersionUID = -1548806861180880702L;
@ApiModelProperty("银联云闪付支付类型")
private Integer unionPayType;

View File

@ -89,7 +89,7 @@ public class EduSchoolManuscript {
@TableField("author_id")
private Long authorId;
@ApiModelProperty("发布位置0-城市书房, 1-第二课堂(精彩推荐)2-微信公众号,多个用逗号分割")
@ApiModelProperty("发布位置0-城市书房, 1-第二课堂(精彩推荐)2-微信公众号,多个用逗号分割,3-首页")
@TableField("publish_path")
private String publishPath;
@ -132,7 +132,7 @@ public class EduSchoolManuscript {
private transient String authorName;
// 新闻区
public static final String NEWS_PATH = "0";
public static final String NEWS_PATH = "3";
// 第二课堂
public static final String SECOND_CLASS_PATH = "1";
// 公众号

View File

@ -54,7 +54,8 @@ public class Dept implements Serializable {
@ApiModelProperty("部门简称")
private String deptAbbreviation;
/**
* 部门类型0表示学校5公司6部门, 7教育局, 8代理商 {@link DeptTypeEnum}
* 部门类型0表示学校5公司6部门, 7教育局, 8代理商
* {@link DeptTypeEnum}
*/
@ApiModelProperty("部门类型0表示学校5公司6部门, 7教育局, 8代理商")
private Integer deptType;
@ -70,11 +71,6 @@ public class Dept implements Serializable {
private String wxAesKey;
@ApiModelProperty("学校关联类型类型0-企业微信1-易达app2-大华平台 多类型使用','连接")
private String schoolType;
@ApiModelProperty("学校性质0小学1中学2九年一贯3十二年一贯4高校")
@TableField(value = "school_nature")
private Integer schoolNature;
private Long wxId;
private Long parentWxId;
/**

View File

@ -45,12 +45,4 @@ public class EduApp {
@ApiModelProperty("应用地址")
private String appSrc;
@ApiModelProperty("应用类型。0-自建应用, 1-服务商代开发应用")
private Integer appType;
@ApiModelProperty("应用模板id")
private String templateId;
@ApiModelProperty("服务商企业微信corpId")
private String serviceCorpId;
}

View File

@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.time.LocalDateTime;
@ -106,7 +105,5 @@ public class Menu implements Serializable {
private transient String createTimeFrom;
private transient String createTimeTo;
@ApiModelProperty("菜单类型(0-合并, 1-剔除)")
private transient Integer userMenuType;
}

View File

@ -244,9 +244,4 @@ public class SystemUser implements Serializable {
private String mainRolePerms;
private transient EduUserLogo userLogo;
/**
* 学校性质0幼儿园1小学2中学3九年一贯4十二年一贯5高校
*/
private transient Integer schoolNature;
}

View File

@ -25,13 +25,4 @@ public class SystemUserMenu {
@ApiModelProperty("菜单id")
@TableField("menu_id")
private Long menuId;
@ApiModelProperty("菜单类型(0-合并, 1-剔除)")
private Integer type;
/**
* 权限串
*/
private transient String perms;
}

View File

@ -27,9 +27,7 @@ public enum RoleEnum {
ROLE_CLASS_PRINCIPAL("role:class:principal", "班主任", 9, 5),
ROLE_EDUCATION_PRINCIPAL("role:education:principal", "教育局负责人", 8, 2),
ROLE_TEACHER("role:teacher", "教师基础角色", 10, 8);
ROLE_EDUCATION_PRINCIPAL("role:education:principal", "教育局负责人", 8, 2);
/**
* 角色标识值

View File

@ -49,9 +49,6 @@ public class EduStaffDept {
@ApiModelProperty(value = "")
private String staffName;
@ApiModelProperty(value = "z职工用户头像")
private String avatar;
/**
* 部门id
*/

View File

@ -51,42 +51,6 @@ public class EduStudent implements Serializable {
@ApiModelProperty("学生姓名")
private String stuName;
@ApiModelProperty("曾用名")
private String formerName;
@ApiModelProperty("考生号")
private String stuExamNumber;
@ApiModelProperty("银行卡号")
private String creditCardNumbers;
@ApiModelProperty("民族")
private String nation;
@ApiModelProperty("QQ号")
private String qqCode;
@ApiModelProperty("微信号")
private String wxCode;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("入学年级")
private String startGrade;
@ApiModelProperty("政治面貌")
private String politicsStatus;
@ApiModelProperty("邮政编码")
private String postalCode;
@ApiModelProperty("籍贯")
private String nativePlace;
@ApiModelProperty("现住址")
private String presentAddress;
@ApiModelProperty("学生头像url")
private String avatar;
@ -136,9 +100,6 @@ public class EduStudent implements Serializable {
@ApiModelProperty("学生当前状态,0=在校/在寝1=离校/离寝")
private Integer status;
@ApiModelProperty("学籍状态:关联字典表")
private String studentStatus;
@ApiModelProperty("学生在寝状态,0-在寝1-离寝")
private Integer dormStatus;

View File

@ -9,11 +9,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import lombok.Data;
/**
* 用户人脸图像 Entity
*
@ -82,30 +84,7 @@ public class EduUserFace {
private String picPath;
/**
* 人脸组id
* 人脸与人脸的关联id
*/
private transient Long faceGroupUserId;
/**
* 学生对应卡号
*/
private transient String rfidCard;
/**
* 是否为会员 1=0=针对学生教师全是会员
*/
private transient Integer notes;
/**
* 会员开始时间
*/
private transient String cardValidBegin;
/**
* 会员结束时间
*/
private transient String cardValidEnd;
/**
* 下发的设备名称
*/
private transient String deviceName;
}

View File

@ -14,11 +14,6 @@ public enum AttendanceResult {
*/
NORMAL(100, "正常"),
/**
* 异常状态
*/
ABNORMAL(999, "异常"),
/**
* 上学未在打卡有效时间段
*/
@ -45,33 +40,10 @@ public enum AttendanceResult {
* 走读-旷课
*/
STU_NOTARRIVE(204, "旷课"),
/**
* 走读-请假
*/
STU_REQUEST(205, "请假"),
/**
* 上班未打卡|下班正常
*/
STU_NOSTART_AND_END_NORMAL(206, "上班未打卡|下班正常"),
/**
* 上班未打卡|下班正常
*/
STU_NOSTART_AND_END_LATE(207, "上班未打卡|下班早退"),
/**
* 上班未打卡|下班正常
*/
STU_NOSTART_AND_END_NOTIN(208, "上班未打卡|下班未在有效打卡时间段内"),
/**
* 上班未在有效打卡时间段内|下班早退
*/
STU_NOSTARTIN_AND_END_LEAVE(209, "上班未在有效打卡时间段内|下班早退"),
/**
* 上班迟到|下班未打卡
*/
STU_NOSTARTIN_AND_END_NO(210, "上班迟到|下班未打卡"),
/**
* 住宿-晚归
*/

View File

@ -6,10 +6,8 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public enum MsgChannel {
MQTT("mqtt","mqtt(人脸设备)"),
ACTIVE("activeMq","active(人脸设备)"),
WIFI("WIFI", "WIFI打卡");
ACTIVE("activeMq","active(人脸设备)");
private String value;
private String name;

View File

@ -16,11 +16,9 @@ public enum PayWay {
/**
* 支付方式枚举
*/
WEI_XIN("1", "微信"),
WEIXIN("1", "微信"),
ALIPAY("2", "支付宝"),
UNION("3", "银联"),
U_PAY("4", "收钱吧"),
CONSTRUCTION_PAY("5", "建行");
UNION("3", "银联");
/**
* 类型

View File

@ -17,7 +17,7 @@ public enum UnionPayTypeEnum {
/**
* 银联云闪付支付类型枚举
*/
WX_H5_TYPE(0, "微信H5", UnionPayConstant.UNION_H5_PAY),
WX_H5_TYPE(0, "微信H5", UnionPayConstant.WX_H5_PAY),
WX_TO_MINI_H5_TYPE(1, "微信H5转小程序", UnionPayConstant.WX_TO_MINI_H5_PAY),
ALI_H5_TYPE(2, "支付宝H5", UnionPayConstant.ALI_H5_PAY),
UNION_H5_TYPE(3, "银联H5", UnionPayConstant.UNION_H5_PAY);

View File

@ -5,8 +5,7 @@ import com.yida.data.common.core.entity.constant.StringConstant;
import com.yida.data.common.core.exception.FebsException;
import com.yida.data.common.core.exception.FileDownloadException;
import com.yida.data.common.core.utils.FebsUtil;
import feign.FeignException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.AccessDeniedException;
@ -19,11 +18,15 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.List;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Path;
import java.util.List;
import java.util.Set;
import feign.FeignException;
import lombok.extern.slf4j.Slf4j;
/**
* @author MrBird
@ -135,7 +138,7 @@ public class BaseExceptionHandler {
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public FebsResponse handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
log.error("error: ", e);
log.error("error:{},{}", e.getMessage(), e.getStackTrace());
String message = "该方法不支持" + StringUtils.substringBetween(e.getMessage(), "'", "'") + "请求方法";
log.error(message);
return new FebsResponse().message(message);

View File

@ -178,25 +178,55 @@ public class AppUtil {
}
}
/**
* 推送app消息
*
* @param appNotice 消息配置类
* @param app app信息
* @author ZYJ
* @date 2023/7/14 16:04
*/
public static void sendPushMsg(AppNotice appNotice, EduYidaApp app) {
StringBuilder url = new StringBuilder();
AppNotice appNotice1 = new AppNotice();
BeanUtils.copyProperties(appNotice, appNotice1);
appNotice1.setMsgList(null);
url.append(app.getAppUrl()).append(YidaAppConstant.JIGUANG_SEND_MSG);
// url.append("http://10.143.132.192:8082/push/sendMulti").append(YidaAppConstant.JIGUANG_SEND_MSG);
String body = JSONUtil.toJsonStr(appNotice1);
// 1s后超时 不保证收到推送
try {
String res = HttpUtil.post(url.toString(), body, 1000);
log.info("app消息推送,res:[{}],params:[{}]", res, body);
} catch (Exception e) {
log.error("app消息推送超时,url:[{}],params:[{}]", url, body);
}
}
/**
* 发送稿件
*/
public static String publishManuscript(EduSchoolManuscript manuscript, EduYidaApp yidaApp, String columnId,
String yidaUserId) {
JSONObject body = new JSONObject() {{
set("title", manuscript.getTitle());
set("fileType", manuscript.getCoverType());
set("type", 1);
set("isPush", 1);
set("isSub", 1);
set("isPublish", 1);
set("from", 2);
set("isTop", 0);
set("titleFilePath", manuscript.getCoverUrl());
set("areaId", yidaApp.getAppAreaId());
set("createById", yidaUserId);
}};
JSONObject body = JSONUtil.createObj()
.set("title", manuscript.getTitle())
.set("fileType", manuscript.getCoverType())
.set("type", 1)
.set("isPush", 1)
.set("isSub", 1)
.set("isPublish", 1)
.set("from", 2)
.set("isTop", 0)
.set("titleFilePath", manuscript.getCoverUrl())
.set("areaId", yidaApp.getAppAreaId())
.set("createById", yidaUserId);
// 判断稿件id
if (StrUtil.isNotBlank(manuscript.getYidaAppMunascriptId())) {
body.set("id", manuscript.getYidaAppMunascriptId());
body.set("isNewRecord", false);
} else {
body.set("isNewRecord", true);
}
// 是否发布到栏目
if (StrUtil.isNotBlank(columnId)) {
body.set("columnId", columnId);
@ -207,9 +237,9 @@ public class AppUtil {
if (StrUtil.isNotBlank(manuscript.getContentUrl())) {
body.set("contenUrl", manuscript.getContentUrl());
}
if (StrUtil.isNotBlank(manuscript.getYidaAppMunascriptId())) {
body.set("id", manuscript.getYidaAppMunascriptId());
}
// if (StrUtil.isNotBlank(manuscript.getYidaAppMunascriptId())) {
// body.set("id", manuscript.getYidaAppMunascriptId());
// }
String res = HttpUtil.post(yidaApp.getAppUrl() + YidaAppConstant.MANUSCRIPT_SAVE, body);
JSONObject resJson = JSONUtil.parseObj(res);
log.info("易达发送稿件,res:[{}],params:[{}]", res, body);
@ -258,10 +288,16 @@ public class AppUtil {
/**
* 删除稿件
*/
public static void manuscriptDel(List<String> ids, EduYidaApp yidaApp) {
public static void manuscriptDel(List<String> ids, EduYidaApp yidaApp, String userId) {
if (CollUtil.isEmpty(ids)) {
log.info("易达删除稿件IDS为空");
return;
}
JSONObject body = new JSONObject() {{
set("ids", CollUtil.join(ids, ","));
set("operateUserId", userId);
}};
log.info("易达删除稿件params:{}", body);
HttpUtil.post(yidaApp.getAppUrl() + YidaAppConstant.MANUSCRIPT_DEL, body);
}

View File

@ -1,19 +1,14 @@
package com.yida.data.common.core.utils;
import cn.hutool.core.date.DateUnit;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
* 时间工具类
@ -99,115 +94,4 @@ public abstract class DateUtil {
LocalTime now = LocalTime.now();
return now.isAfter(from) && now.isBefore(to);
}
/**
* 计算两个时间点相差的天数
*
* @param
* @return
*/
public static Long daysBetween(Date beginDate, Date endDate) {
return cn.hutool.core.date.DateUtil.between(beginDate, endDate, DateUnit.DAY);
}
/**
* 获取指定年指定月的开始天数和结束天数
*
* @param yearMonth
* @return
*/
public static Map<String, Date> getFirstDayAndLastDayOfTheSpecifiedMonth(String yearMonth) {
int year = Integer.parseInt(yearMonth.split("-")[0]);
int month = Integer.parseInt(yearMonth.split("-")[1]);
// 获取当前分区的日历信息(这里可以使用参数指定时区)
Calendar calendar = Calendar.getInstance();
// 设置年
calendar.set(Calendar.YEAR, year);
// 设置月月份从0开始
calendar.set(Calendar.MONTH, month - 1);
// 设置为指定月的第一天
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 获取指定月第一天的时间
Date start = calendar.getTime();
// 设置日历天数为当前月实际天数的最大值即指定月份的最后一天
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
// 获取最后一天的时间
Date end = calendar.getTime();
// 设置返回信息,返回样式根据需求自行格式化
Map<String, Date> dateMap = new HashMap<>();
dateMap.put("start", start);
dateMap.put("end", end);
return dateMap;
}
/**
* 查询日期间有几天一周中的某一天 日期格式 yyyy-MM-dd yyyy-MM-dd 1-7(表示周一到周日)
*
* @param startDate 准备查询的起始日期
* @param endDate 准备查询的结束日期
* @param dayOfWeek 准备查的一周中的某一天(准备查周几)
* @return 包含所查周几的天数
* @throws ParseException 不支持跨年查询不支持结束日期早于起始日期周几输入错误等
*/
public static Integer getMondayNumber(LocalDate startDate, LocalDate endDate, int dayOfWeek) throws ParseException {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
int differenceDay = 0;
//实例化起始和结束Calendar对象
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
//分别设置Calendar对象的时间
ZoneId zone = ZoneId.systemDefault();
Instant instantStartDate = startDate.atStartOfDay().atZone(zone).toInstant();
Instant instantEndDate = endDate.atStartOfDay().atZone(zone).toInstant();
startCalendar.setTime(Date.from(instantStartDate));
endCalendar.setTime(Date.from(instantEndDate));
//定义起始日期和结束日期分别属于第几周
int startWeek = startCalendar.get(Calendar.WEEK_OF_YEAR);
int endWeek = endCalendar.get(Calendar.WEEK_OF_YEAR);
//拿到起始日期是星期几
int startDayOfWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
if (startDayOfWeek == 1) {
startDayOfWeek = 7;
startWeek--;
} else {
startDayOfWeek--;
}
//拿到结束日期是星期几
int endDayOfWeek = endCalendar.get(Calendar.DAY_OF_WEEK);
if (endDayOfWeek == 1) {
endDayOfWeek = 7;
endWeek--;
} else {
endDayOfWeek--;
}
//计算相差的周数
int differenceWeek = endWeek - startWeek;
//开始计算
if (startDayOfWeek <= dayOfWeek) {
if (endDayOfWeek >= dayOfWeek) {
differenceDay = differenceWeek + 1;
}
} else if (startDayOfWeek > dayOfWeek) {
if (endDayOfWeek < dayOfWeek) {
differenceDay = differenceWeek - 1;
}
} else {
differenceDay = differenceWeek;
}
return differenceDay;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

View File

@ -9,10 +9,8 @@ import com.yida.data.common.core.entity.constant.PageConstant;
import com.yida.data.common.core.entity.constant.RegexpConstant;
import com.yida.data.common.core.entity.constant.StringConstant;
import com.yida.data.common.core.exception.FebsException;
import java.time.LocalDate;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.omg.CORBA.UNKNOWN;
import org.springframework.core.env.Environment;
import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils;
@ -49,7 +47,6 @@ import java.util.stream.IntStream;
public abstract class FebsUtil {
private static final String UNKNOW = "unknown";
private static final String UNKNOWN = "unknown";
/**
* 驼峰转下划线
@ -216,18 +213,13 @@ public abstract class FebsUtil {
public static String getHttpServletRequestIpAddress() {
HttpServletRequest request = getHttpServletRequest();
String ip = request.getHeader("x-forwarded-for");
if (ip != null && ip.length() != 0 && !UNKNOWN.equalsIgnoreCase(ip)) {
if (ip.contains(StringConstant.COMMA)) {
ip = ip.split(StringConstant.COMMA)[0];
}
}
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0 || UNKNOW.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0 || UNKNOW.equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
if (ip == null || ip.length() == 0 || UNKNOW.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
@ -409,91 +401,11 @@ public abstract class FebsUtil {
res = "星期六";
break;
case 7:
res = "星期";
res = "星期";
break;
default:
}
}
return res;
}
public static boolean isWeek(String weekStr, Integer week) {
boolean flag = false;
switch (week) {
case 1:
if (weekStr.contains("星期一")) {
flag = true;
}
break;
case 2:
if (weekStr.contains("星期二")) {
flag = true;
}
break;
case 3:
if (weekStr.contains("星期三")) {
flag = true;
}
break;
case 4:
if (weekStr.contains("星期四")) {
flag = true;
}
break;
case 5:
if (weekStr.contains("星期五")) {
flag = true;
}
break;
case 6:
if (weekStr.contains("星期六")) {
flag = true;
}
break;
case 7:
if (weekStr.contains("星期日")) {
flag = true;
}
break;
default:
break;
}
return flag;
}
/**
* 通过身份证号码获取性别(sex)
*
* @param idCardNo 身份证号码
* @return 性别格式1:0:
*/
public static Integer getSexByIdCardNo(String idCardNo) {
Integer sexCode = null;
char[] number = idCardNo.toCharArray();
boolean flag = true;
if (number.length == 15) {
for (int x = 0; x < number.length; x++) {
if (!flag) {
return null;
}
flag = Character.isDigit(number[x]);
}
} else if (number.length == 18) {
for (int x = 0; x < number.length - 1; x++) {
if (!flag) {
return null;
}
flag = Character.isDigit(number[x]);
}
}
if (flag && idCardNo.length() == 15) {
sexCode = Integer.parseInt(idCardNo.substring(idCardNo.length() - 3, idCardNo.length())) % 2 == 0 ? 1 : 0;
} else if (flag && idCardNo.length() == 18) {
sexCode = Integer.parseInt(idCardNo.substring(idCardNo.length() - 4, idCardNo.length() - 1)) % 2 == 0 ? 1 : 0;
}
return sexCode;
}
}

View File

@ -111,7 +111,7 @@ public abstract class FileUtil {
put("source", 50);
}
});
// log.info("上传响应,[{}]", resp);
log.info("上传响应,[{}]", resp);
JSONObject respJson = JSONUtil.parseObj(resp);
if (!"200".equals(respJson.get("status").toString())) {
throw new FebsException(respJson.getStr("message"));
@ -261,14 +261,6 @@ public abstract class FileUtil {
public static String downloadToLocal(String url) {
LocalDateTime now = LocalDateTime.now();
String path = TEMP_DIR + now.getYear() + "/" + now.getMonthValue() + "/" + now.getDayOfMonth() + "/";
// String filename = cn.hutool.core.io.FileUtil.getName(url);
// if (filename.contains(".jpg") || filename.contains(".png")) {
// if (filename.contains("?")) {
// filename = filename.split("\\?")[0];
// }
// } else {
// filename = UUID.randomUUID() + ".jpg";
// }
String filename = UUID.randomUUID() + ".jpg";
try {
HttpUtil.downloadFile(url, path + filename);

View File

@ -106,7 +106,7 @@ public class WxPublicUtil {
public String getAccessToken(String appId, String secret) {
String accessToken =
String.valueOf(redisService.get(FebsConstant.WX_PUBLIC_ACCESS_TOKEN + appId + "." + secret));
String.valueOf(redisService.get(FebsConstant.WX_PUBLIC_ACCESS_TOKEN + appId + "." + secret));
if ("null".equals(accessToken)) {
Map<String, Object> params = new HashMap<>();
params.put("grant_type", "client_credential");
@ -117,7 +117,7 @@ public class WxPublicUtil {
JSONObject token = JSONUtil.parseObj(response);
if (token.containsKey("errcode") && !"0".equals(token.get("errcode").toString())) {
log.error("请求微信公众号access token失败code:{},msg:{}", token.get("errcode").toString(),
token.get("errmsg").toString());
token.get("errmsg").toString());
throw new FebsException("验证失败");
}
accessToken = token.get("access_token").toString();
@ -138,7 +138,7 @@ public class WxPublicUtil {
JSONObject token = JSONUtil.parseObj(response);
if (token.containsKey("errcode") && !"0".equals(token.get("errcode"))) {
log.error("请微信求access token失败code:{},msg:{}", token.get("errcode"),
token.get("errmsg"));
token.get("errmsg"));
throw new FebsException("验证失败");
}
return token.getStr("openid");
@ -151,10 +151,10 @@ public class WxPublicUtil {
Map<String, Object> body = new HashMap<>();
body.put("media", img);
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.UPLOAD_NEWS_IMG + "?access_token=" + token, body));
post(WxPublicConstant.UPLOAD_NEWS_IMG + "?access_token=" + token, body));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("上传图片失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("上传图片失败");
}
return response.getStr("url");
@ -166,10 +166,10 @@ public class WxPublicUtil {
public String uploadNews(News news, String token) {
String body = JSONUtil.toJsonPrettyStr(news);
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.UPLOAD_NEWS + "?access_token=" + token, body));
post(WxPublicConstant.UPLOAD_NEWS + "?access_token=" + token, body));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("上传图文素材失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("上传图文素材失败");
}
return response.getStr("media_id");
@ -190,10 +190,10 @@ public class WxPublicUtil {
put("send_ignore_reprint", 1);
}};
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, JSONUtil.toJsonStr(body)));
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, JSONUtil.toJsonStr(body)));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("群发图文消息失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("群发图文消息失败");
}
return response.getStr("msg_data_id");
@ -213,10 +213,10 @@ public class WxPublicUtil {
set("msgtype", "text");
}};
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("群发文本消息失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("群发文本消息失败");
}
return response.getStr("msg_data_id");
@ -236,10 +236,10 @@ public class WxPublicUtil {
set("msgtype", "voice");
}};
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("群发音频消息失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("群发音频消息失败");
}
return response.getStr("msg_data_id");
@ -259,10 +259,10 @@ public class WxPublicUtil {
set("msgtype", "image");
}};
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("群发音频消息失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("群发音频消息失败");
}
return response.getStr("msg_data_id");
@ -282,10 +282,10 @@ public class WxPublicUtil {
set("msgtype", "mpvideo");
}};
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("群发音频消息失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("群发音频消息失败");
}
return response.getStr("msg_data_id");
@ -305,10 +305,10 @@ public class WxPublicUtil {
}}));
}
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.UPLOAD_MATERIAL + "?access_token=" + token + "&type=" + type, body));
post(WxPublicConstant.UPLOAD_MATERIAL + "?access_token=" + token + "&type=" + type, body));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("上传永久素材失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("上传永久素材失败");
}
return response.getStr("media_id");
@ -322,10 +322,10 @@ public class WxPublicUtil {
put("media_id", mediaId);
}};
JSONObject response = JSONUtil.parseObj(
post(WxPublicConstant.DELETE_MATERIAL + "?access_token=" + token, JSONUtil.toJsonStr(body)));
post(WxPublicConstant.DELETE_MATERIAL + "?access_token=" + token, JSONUtil.toJsonStr(body)));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("删除永久素材失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("删除永久素材失败");
}
}
@ -334,15 +334,15 @@ public class WxPublicUtil {
* 上传临时素材 图片image语音voice视频video和缩略图thumb
*/
public String uploadTempMaterial(String type, File file,
String token) {
String token) {
Map<String, Object> body = new HashMap<String, Object>() {{
put("media", file);
}};
JSONObject response = JSONUtil.parseObj(
HttpUtil.post(WxPublicConstant.UPLOAD_TEMP_MATERIAL + "?access_token=" + token + "&type=" + type, body));
HttpUtil.post(WxPublicConstant.UPLOAD_TEMP_MATERIAL + "?access_token=" + token + "&type=" + type, body));
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
log.error("上传临时素材失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("上传临时素材失败");
}
if ("thumb".equals(type)) {
@ -364,7 +364,7 @@ public class WxPublicUtil {
return null;
}
String url = new StringBuilder(WxPublicConstant.QR_CODE).append("?access_token=").append(accessToken)
.toString();
.toString();
JSONObject body = new JSONObject() {{
if (expire != null) {
set("expire_seconds", expire);
@ -408,13 +408,13 @@ public class WxPublicUtil {
}});
}};
String post = HttpUtil.post(
new StringBuilder(WxPublicConstant.PUSH_CUSTOM_MSG).append("?access_token=").append(accessToken).toString(),
body.toString());
new StringBuilder(WxPublicConstant.PUSH_CUSTOM_MSG).append("?access_token=").append(accessToken).toString(),
body.toString());
log.info("发送客户消息,res:[{}],body:[{}]", post, body);
}
public void publishTemplateMsg(String accessToken, String openUserId, String templateId, String url,
JSONObject data) {
JSONObject data) {
JSONObject body = new JSONObject() {{
set("touser", openUserId);
if (StrUtil.isNotBlank(url)) {
@ -424,12 +424,13 @@ public class WxPublicUtil {
set("data", data);
}};
String post = HttpUtil.post(new StringBuilder(WxPublicConstant.PUSH_TEMPLATE_MSG).append(
"?access_token=").append(accessToken).toString(), body.toString());
"?access_token=").append(accessToken).toString(), body.toString());
log.info("发送模板消息,res:[{}],body:[{}]", post, body);
}
/**
* 获取小程序URL Link https + post
* 获取小程序URL Link
* https + post
*
* @param accessToken token值
* @param generateUrlLink 获取小程序URL Link请求类
@ -440,62 +441,30 @@ public class WxPublicUtil {
public String generateUrlLink(String accessToken, GenerateUrlLink generateUrlLink) {
// 封装参数
JSONObject body = JSONUtil.createObj()
.set("path", generateUrlLink.getPath())
.set("query", generateUrlLink.getQuery())
.set("env_version", generateUrlLink.getEnvVersion())
.set("expire_type", generateUrlLink.getExpireType())
.set("expire_interval", 30);
.set("path", generateUrlLink.getPath())
.set("query", generateUrlLink.getQuery())
.set("env_version", generateUrlLink.getEnvVersion())
.set("expire_type", generateUrlLink.getExpireType())
.set("expire_interval", 30);
if (Objects.nonNull(generateUrlLink.getCloudBase())) {
GenerateUrlLink.CloudBase cloudBase = generateUrlLink.getCloudBase();
body.set("cloud_base", JSONUtil.createObj()
.set("env", cloudBase.getEnv())
.set("domain", cloudBase.getDomain())
.set("path", cloudBase.getPath())
.set("query", cloudBase.getQuery())
.set("resource_appid", cloudBase.getResourceAppId())
.set("env", cloudBase.getEnv())
.set("domain", cloudBase.getDomain())
.set("path", cloudBase.getPath())
.set("query", cloudBase.getQuery())
.set("resource_appid", cloudBase.getResourceAppId())
);
}
// 请求接口
String result = HttpUtil.post(WxPublicConstant.GENERATE_URL_LINK + "?access_token=" + accessToken, body.toString());
// log.info("获取小程序URL Link接口, result: [{}], body: [{}]", result, body);
log.info("获取小程序URL Link接口, result: [{}], body: [{}]", result, body);
JSONObject response = JSONUtil.parseObj(result);
if (response.containsKey("errcode") && !"0".equals(response.getStr("errcode"))) {
log.error("获取小程序URL Link接口失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
response.get("errmsg"));
throw new FebsException("获取小程序URL Link接口失败");
}
return response.getStr("url_link");
}
/**
* 微信获取JS-SDK jsapi_ticket
*
* @param appId 微信appId
* @param secret 微信secret
* @return java.lang.String
* @author ZYJ
* @date 2023/6/5 14:50
*/
public String getJsApiTicket(String appId, String secret) {
String jsApiTicket =
String.valueOf(redisService.get(FebsConstant.WX_PUBLIC_JS_API_TICKET + appId + "." + secret));
if ("null".equals(jsApiTicket)) {
Map<String, Object> params = new HashMap<>();
params.put("access_token", getAccessToken(appId, secret));
params.put("type", "jsapi");
// 获取JS-SDK jsapi_ticket
String response = get(WxPublicConstant.GET_JS_API_TICKET_URL, params);
JSONObject token = JSONUtil.parseObj(response);
if (token.containsKey("errcode") && !"0".equals(token.get("errcode").toString())) {
log.error("获取JS-SDK jsapi_ticket失败code:{},msg:{}", token.get("errcode").toString(),
token.get("errmsg").toString());
throw new FebsException("验证失败");
}
jsApiTicket = token.get("ticket").toString();
// 缓存accessToken两小时
redisService.set(FebsConstant.WX_PUBLIC_JS_API_TICKET + appId + "." + secret, jsApiTicket, 7200L);
}
return jsApiTicket;
}
}

View File

@ -9,20 +9,28 @@ import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.yida.data.common.core.entity.constant.FebsConstant;
import com.yida.data.common.core.entity.constant.QywxConstant;
import com.yida.data.common.core.entity.constant.WxPublicConstant;
import com.yida.data.common.core.entity.notice.qywx.BaseSchoolNotice;
import com.yida.data.common.core.entity.notice.qywx.BaseStaffNotice;
import com.yida.data.common.core.entity.system.Dept;
import com.yida.data.common.core.entity.user.*;
import com.yida.data.common.core.entity.user.EduParent;
import com.yida.data.common.core.entity.user.EduStaff;
import com.yida.data.common.core.entity.user.EduStaffDept;
import com.yida.data.common.core.entity.user.EduStudent;
import com.yida.data.common.core.entity.user.EduTeacherDept;
import com.yida.data.common.core.entity.user.EduUserDept;
import com.yida.data.common.core.exception.FebsException;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.File;
import java.util.*;
import java.util.stream.Collectors;
@Component
@Slf4j
public class WxUtil {
@ -168,7 +176,7 @@ public class WxUtil {
public Boolean pushSchoolNotice(String token, BaseSchoolNotice notice) {
JSONObject resp = JSONUtil.parseObj(post(QywxConstant.PUSH_SCHOOL_NOTICE_URL + token,
JSONUtil.toJsonStr(notice).replace("\\n", "\n")));
// log.info("打印学校消息推送信息: {}", JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
log.info("打印学校消息推送信息: {}", JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
if (!"0".equals(resp.containsKey("errcode") ? resp.get("errcode").toString() : null)) {
log.error("微信通知发送失败,msg:{},notice:{}", resp, notice);
return false;
@ -176,14 +184,12 @@ public class WxUtil {
return true;
}
public Boolean pushStaffNotice(String token, BaseStaffNotice notice) {
// log.info("打印学校消息推送信息: {}", JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
JSONObject resp = JSONUtil.parseObj(post(QywxConstant.PUSH_STAFF_NOTICE_URL + token,
JSONUtil.toJsonStr(notice).replace("\\n", "\n")));
// log.info("打印学校消息推送信息返回信息: {}", resp);
log.info("打印学校消息推送信息: {}", JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
if (!"0".equals(resp.containsKey("errcode") ? resp.get("errcode").toString() : null)) {
log.error("微信通知发送失败,msg:{},notice:{}", resp.get("errmsg"), JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
log.error("微信通知发送失败,msg:{},notice:{}", resp.get("errmsg"), notice);
return false;
}
return true;
@ -220,41 +226,6 @@ public class WxUtil {
return user.getJSONArray("userlist");
}
/**
* 获取成员ID列表
*
* @param accessToken 调用接口凭证
* @param cursor 用于分页查询的游标字符串类型由上一次调用返回首次调用不填
* @param limit 分页预期请求的数据量取值范围 1 ~ 10000
* @return cn.hutool.json.JSONArray
* @author ZYJ
* @date 2022/12/6 17:35
*/
public JSONArray getUserIdList(String accessToken, String cursor, String limit, JSONArray jsonArray) {
// 封装请求参数
JSONObject params = JSONUtil.createObj()
.set("limit", limit);
if (StrUtil.isNotBlank(cursor)) {
params.set("cursor", cursor);
}
String response = post(QywxConstant.USER_ID_LIST_URL + accessToken, params.toString());
JSONObject jsonObject = JSONUtil.parseObj(response);
log.info("企业微信获取成员ID列表请求参数: {}, 返回值: {}", params, jsonObject);
if (!SUCCESS_CODE.equals(jsonObject.containsKey(ERR_CODE) ? jsonObject.get(ERR_CODE).toString() : null)) {
log.error("企业微信获取获取成员ID列表失败code:{},msg:{}", jsonObject.get(ERR_CODE), jsonObject.get(ERR_MESSAGE));
throw new FebsException("企业微信获取获取成员ID列表失败");
}
// 获取成员列表id数据
JSONArray deptUser = jsonObject.getJSONArray("dept_user");
jsonArray.addAll(deptUser);
// 获取分页游标
String nextCursor = jsonObject.getStr("next_cursor");
if (StrUtil.isNotBlank(nextCursor)) {
getUserIdList(accessToken, nextCursor, limit, jsonArray);
}
return jsonArray;
}
/**
* 使用授权登陆code获取成员信息通讯录成员返回UserId家长返回parent_userid
*/
@ -265,17 +236,14 @@ public class WxUtil {
params.put("code", code);
String response = get(QywxConstant.USER_INFO_URL, params);
JSONObject user = JSONUtil.parseObj(response);
if (!SUCCESS_CODE.equals(user.containsKey(ERR_CODE) ? user.get(ERR_CODE).toString() : null)) {
log.error("请求微信用户信息失败code:{},msg:{}", user.get(ERR_CODE),
user.get(ERR_MESSAGE));
if (!"0".equals(user.containsKey("errcode") ? user.get("errcode").toString() : null)) {
log.error("请求微信用户信息失败code:{},msg:{}", user.get("errcode"),
user.get("errmsg"));
throw new FebsException("获取用户信息失败");
}
return user;
}
/**
* 查询用户详细信息
*/
public JSONObject getUserDetail(String accessToken, String userId) {
// 查询用户微信userid
Map<String, Object> params = new HashMap<>();
@ -283,34 +251,10 @@ public class WxUtil {
params.put("userid", userId);
String userDetailResponse = get(QywxConstant.USER_DETAIL_URL, params);
JSONObject userDetail = JSONUtil.parseObj(userDetailResponse);
log.info("请求企业微信用户详细信息请求参数: {}, 返回值: {}", params, userDetail);
if (!SUCCESS_CODE.equals(userDetail.containsKey(ERR_CODE) ? userDetail.get(ERR_CODE).toString() : null)) {
log.error("请求企业微信用户详细信息失败code:{},msg:{}", userDetail.get(ERR_CODE),
userDetail.get(ERR_MESSAGE));
throw new FebsException("请求企业微信用户详细信息失败");
}
return userDetail;
}
/**
* 查询用户敏感信息
*
* @param accessToken 调用接口凭证
* @param userTicket 成员票据
* @return cn.hutool.json.JSONObject
* @author ZYJ
* @date 2022/11/28 15:35
*/
public JSONObject getUserSensitiveInfo(String accessToken, String userTicket) {
JSONObject params = JSONUtil.createObj()
.set("user_ticket", userTicket);
String userDetailResponse = post(QywxConstant.USER_SENSITIVE_INFO_URL + accessToken, params.toString());
JSONObject userDetail = JSONUtil.parseObj(userDetailResponse);
log.info("查询用户敏感信息请求参数: {}, 返回值: {}", params, userDetail);
if (!SUCCESS_CODE.equals(userDetail.containsKey(ERR_CODE) ? userDetail.get(ERR_CODE).toString() : null)) {
log.error("查询用户敏感信息失败code:{}, msg:{}", userDetail.get(ERR_CODE),
userDetail.get(ERR_MESSAGE));
throw new FebsException("查询用户敏感信息失败");
if (!"0".equals(userDetail.containsKey("errcode") ? userDetail.get("errcode").toString() : null)) {
log.error("请求微信用户详细信息失败code:{},msg:{}", userDetail.get("errcode"),
userDetail.get("errmsg"));
throw new FebsException("获取用户信息失败");
}
return userDetail;
}
@ -384,9 +328,9 @@ public class WxUtil {
if (deptId != null) {
params.put("id", deptId);
}
JSONObject response = JSONUtil.parseObj(
get(QywxConstant.DEPT_LIST_URL, params));
log.info("获取企业微信部门列表请求参数: {}, 返回值: {}", params, response);
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("获取企业微信部门列表失败code:{},msg:{},params:{}", response.get("errcode"),
response.get("errmsg"), params);
@ -396,50 +340,6 @@ public class WxUtil {
return response.getJSONArray("department").toList(Map.class);
}
/**
* 获取子部门ID列表
*
* @param accessToken 调用接口凭证
* @param deptId 部门id获取指定部门及其下的子部门以及子部门的子部门等等递归 如果不填默认获取全量组织架构
* @return java.util.List<java.util.Map>
* @author ZYJ
* @date 2023/4/24 10:46
*/
public List<Map> listSimpleDept(String accessToken, Long deptId) {
Map<String, Object> params = new HashMap<>();
params.put("access_token", accessToken);
if (deptId != null) {
params.put("id", deptId);
}
JSONObject response = JSONUtil.parseObj(get(QywxConstant.SIMPLE_DEPT_LIST_URL, params));
log.info("获取企业微信子部门ID列表请求参数: {}, 返回值: {}", params, response);
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
log.error("获取企业微信子部门ID列表失败code:{},msg:{},params:{}", response.get(ERR_CODE),
response.get(ERR_MESSAGE), params);
throw new FebsException("获取企业微信子部门ID列表失败");
}
return response.getJSONArray("department_id").toList(Map.class);
}
/**
* 获取单个部门详情
*/
public JSONObject getDeptInfo(String accessToken, String deptId) {
Map<String, Object> params = new HashMap<>();
params.put("access_token", accessToken);
if (deptId != null) {
params.put("id", deptId);
}
JSONObject response = JSONUtil.parseObj(get(QywxConstant.DEPT_INFO_URL, params));
log.info("获取企业单个部门详情请求参数: {}, 返回值: {}", params, response);
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
log.error("获取企业单个部门详情失败code:{},msg:{},params:{}", response.get(ERR_CODE),
response.get(ERR_MESSAGE), params);
throw new FebsException("获取企业单个部门详情失败");
}
return response.getJSONObject("department");
}
/**
* 创建企业微信部门家校沟通
*/
@ -507,10 +407,10 @@ public class WxUtil {
JSONObject response = JSONUtil.parseObj(
post(QywxConstant.SCHOOL_DEPT_UPDATE_URL + "?access_token=" + accessToken,
JSONUtil.toJsonStr(body)));
log.info("删除部门管理员接口,params:[{}],res:[{}]", body, response);
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
log.error("企业微信删除部门(家校)管理员失败code:{},msg:{}", response.get(ERR_CODE),
response.get(ERR_MESSAGE));
log.info("删除部门,params:[{}],res:[{}]", body, response);
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("企业微信删除部门(家校)管理员失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
throw new FebsException("删除部门(家校)管理员失败");
}
}
@ -544,10 +444,9 @@ public class WxUtil {
}
JSONObject response = JSONUtil.parseObj(
get(QywxConstant.SCHOOL_DEPT_LIST_URL, params));
log.info("获取家校沟通部门列表请求参数: {}, 返回值: {}", params, response);
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
log.error("获取企业微信部门(家校)列表失败code:{},msg:{},params:{}", response.get(ERR_CODE),
response.get(ERR_MESSAGE), params);
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("获取企业微信部门(家校)列表失败code:{},msg:{},params:{}", response.get("errcode"),
response.get("errmsg"), params);
throw new FebsException("获取企业微信部门(家校)列表失败");
}
@ -590,9 +489,6 @@ public class WxUtil {
if (StrUtil.isNotBlank(staff.getLandLine())) {
body.put("telephone", staff.getLandLine());
}
if (StrUtil.isNotBlank(staff.getAddress())) {
body.put("address", staff.getAddress());
}
log.info(JSONUtil.toJsonStr(body));
JSONObject response = JSONUtil.parseObj(
post(QywxConstant.USER_CREATE_URL + "?access_token=" + accessToken,
@ -668,15 +564,12 @@ public class WxUtil {
if (StrUtil.isNotBlank(staff.getLandLine())) {
body.put("telephone", staff.getLandLine());
}
if (StrUtil.isNotBlank(staff.getAddress())) {
body.put("address", staff.getAddress());
}
log.info(JSONUtil.toJsonStr(body));
JSONObject response = JSONUtil.parseObj(
post(QywxConstant.USER_UPDATE_URL + "?access_token=" + accessToken,
JSONUtil.toJsonStr(body)));
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("企业微信修改用户失败code:{},msg:{}", response.get("errcode"),
log.error("企业微信新增用户失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
throw new FebsException("更新职工失败");
}
@ -691,7 +584,6 @@ public class WxUtil {
JSONObject response = JSONUtil.parseObj(
post(QywxConstant.USER_DELETE_URL + "?access_token=" + accessToken,
JSONUtil.toJsonStr(body)));
log.info("企业微信删除用户请求参数: {}, 返回值: {}", body, response);
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("企业微信删除用户失败code:{},msg:{}", response.get("errcode"),
response.get("errmsg"));
@ -827,7 +719,6 @@ public class WxUtil {
JSONObject response = JSONUtil.parseObj(
post(QywxConstant.PARENT_CREATE_URL + "?access_token=" + accessToken,
JSONUtil.toJsonStr(body)));
log.info("企业微信新增家长,res:[{}],params:[{}]", response, body);
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("企业微信新增家长失败code:{},msg:{},result_list:{}", response.get("errcode"),
response.get("errmsg"), response.get("result_list"));
@ -983,43 +874,10 @@ public class WxUtil {
JSONObject response = JSONUtil.parseObj(
get(QywxConstant.SCHOOL_DEPT_DELETE_URL, params));
String code = response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null;
// 60003代表企业微信部门不存在
if (!SUCCESS_CODE.equals(code) && !"60003".equals(code)) {
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
log.error("企业微信删除家校部门失败code:{},msg:{},params:{}", response.get(ERR_CODE),
response.get(ERR_MESSAGE), params);
throw new FebsException("删除家校部门失败,请检查是否包含成员或子部门");
}
}
/**
* 获取企业微信JS-SDK jsapi_ticket
*
* @param accessToken 应用token
* @param deptId 部门id
* @return java.lang.String
* @author ZYJ
* @date 2023/6/5 14:50
*/
public String getJsApiTicket(String accessToken, Long deptId) {
String jsApiTicket =
String.valueOf(redisService.get(FebsConstant.QYWX_WX_JS_API_TICKET + deptId));
if ("null".equals(jsApiTicket)) {
Map<String, Object> params = new HashMap<>();
params.put("access_token", accessToken);
// 获取JS-SDK jsapi_ticket
String response = get(QywxConstant.GET_JS_API_TICKET_URL, params);
JSONObject token = JSONUtil.parseObj(response);
if (token.containsKey("errcode") && !"0".equals(token.get("errcode").toString())) {
log.error("获取JS-SDK jsapi_ticket失败code:{},msg:{}", token.get("errcode").toString(),
token.get("errmsg").toString());
throw new FebsException("验证失败");
}
jsApiTicket = token.get("ticket").toString();
// 缓存accessToken两小时
redisService.set(FebsConstant.QYWX_WX_JS_API_TICKET + deptId, jsApiTicket, 7200L);
}
return jsApiTicket;
}
}

View File

@ -5,5 +5,4 @@ com.yida.data.common.core.utils.WxUtil,\
com.yida.data.common.core.utils.WxPublicUtil,\
com.yida.data.common.core.utils.UnionPayPublicUtil,\
com.yida.data.common.core.configure.AsyncPollConfigure,\
com.yida.data.common.core.handler.BaseExceptionHandler,\
com.yida.data.common.core.utils.WxServiceProviderUtil
com.yida.data.common.core.handler.BaseExceptionHandler

View File

@ -3,7 +3,6 @@ package com.yida.data.log.aspect;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yida.data.common.core.entity.CurrentUser;
import com.yida.data.common.core.exception.FebsException;
import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.log.service.LogService;
@ -61,24 +60,13 @@ public class OperationLogAspect {
public Object insertOperationLog(ProceedingJoinPoint joinPoint) throws Throwable {
//返回结果
Object result;
HttpServletRequest request = ((ServletRequestAttributes) Objects
.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
//请求参数
String params = getRequestParams(joinPoint, request);
//执行接口
result = joinPoint.proceed();
//异步保存日志
Long createId = null;
String createName = null;
if (FebsUtil.isLogin()) {
CurrentUser currentUser = FebsUtil.getCurrentUser();
if (currentUser != null) {
createId = currentUser.getUserId();
createName = currentUser.getUsername();
}
}
logService.saveOperationLog(joinPoint, FebsUtil.getHttpServletRequestIpAddress(), params, result, createId,
createName);
logService.saveOperationLog(joinPoint, FebsUtil.getHttpServletRequestIpAddress(), params, result);
return result;
}

View File

@ -15,7 +15,6 @@ import com.yida.data.log.annotation.OperationLog;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.lang.reflect.Method;
@ -50,23 +49,21 @@ public class LogService {
* @author ZYJ
* @date 2021/1/8 16:30
*/
@Async
public void saveOperationLog(JoinPoint joinPoint, String ip, String params, Object result, Long createId, String createName) {
//@Async
public void saveOperationLog(JoinPoint joinPoint, String ip, String params, Object result) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
OperationLog opLog = method.getAnnotation(OperationLog.class);
//ip地址
Log systemLogInfo = new Log();
systemLogInfo.setCreateId(createId);
systemLogInfo.setCreateName(createName);
// 创建人
// if (FebsUtil.isLogin()) {
// CurrentUser currentUser = FebsUtil.getCurrentUser();
// if (currentUser != null) {
// systemLogInfo.setCreateId(currentUser.getUserId());
// systemLogInfo.setCreateName(currentUser.getUsername());
// }
// }
if (FebsUtil.isLogin()) {
CurrentUser currentUser = FebsUtil.getCurrentUser();
if (currentUser != null) {
systemLogInfo.setCreateId(currentUser.getUserId());
systemLogInfo.setCreateName(currentUser.getUsername());
}
}
systemLogInfo.setIp(ip);
//设置开始时间
systemLogInfo.setStartTime(LocalDateTime.now());
@ -87,8 +84,8 @@ public class LogService {
systemLogInfo.setResult(JSON.toJSONString(result));
//将返回值转换为对象
ResultBean<Object> logResult = JSON.parseObject(JSON.toJSONString(result),
new TypeReference<ResultBean<Object>>() {
});
new TypeReference<ResultBean<Object>>() {
});
int successStatus = 200;
if (logResult != null) {
if (logResult.getStatus() == successStatus) {
@ -112,7 +109,7 @@ public class LogService {
systemLogInfo.setEndTime(LocalDateTime.now());
//操作时长
systemLogInfo.setOperationTime(LocalDateTimeUtil.between(systemLogInfo.getStartTime(),
systemLogInfo.getEndTime(), ChronoUnit.MILLIS));
systemLogInfo.getEndTime(), ChronoUnit.MILLIS));
//保存数据到redis list数据
redisService.lSet(CachePrefixConstant.OPERATION_LOG_LIST, systemLogInfo);
}

View File

@ -104,19 +104,4 @@ public interface RabbitConstant {
* websocket推送队列与交换机绑定key
*/
String MSG_WEBSOCKET_KEY = "msg_websocket_key";
/**
* 企业微信处理交换机
*/
String QYWX_HANDLE_EXCHANGE = "qywx_handle_exchange";
/**
* 企业微信处理队列
*/
String QYWX_HANDLE_QUEUE = "qywx_handle_queue";
/**
* 企业微信处理绑定key值
*/
String QYWX_HANDLE_KEY = "qywx_handle_key";
}

View File

@ -1,132 +1,43 @@
package com.yida.data.common.service;
import static com.yida.data.common.core.entity.constant.CachePrefixConstant.STAFF_DATA;
import cc.mrbird.febs.common.redis.service.RedisService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.net.URLEncoder;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.yida.data.common.core.entity.CurrentUser;
import com.yida.data.common.core.entity.Dict;
import com.yida.data.common.core.entity.constant.AppConstant;
import com.yida.data.common.core.entity.constant.CachePrefixConstant;
import com.yida.data.common.core.entity.constant.QywxServiceProviderConstant;
import com.yida.data.common.core.entity.constant.UPayConstant;
import com.yida.data.common.core.entity.consume.DeptConsumeTerminalCache;
import com.yida.data.common.core.entity.consume.EduConsumeConfig;
import com.yida.data.common.core.entity.school.EduDeptHomeApp;
import com.yida.data.common.core.entity.school.EduYidaAppAccount;
import com.yida.data.common.core.entity.system.BaiduApiConfig;
import com.yida.data.common.core.entity.system.ConstructionPayConfig;
import com.yida.data.common.core.entity.system.Dept;
import com.yida.data.common.core.entity.system.EduApp;
import com.yida.data.common.core.entity.system.EduAppTemplate;
import com.yida.data.common.core.entity.system.EduArea;
import com.yida.data.common.core.entity.system.EduDeptFunction;
import com.yida.data.common.core.entity.system.EduDeptPayType;
import com.yida.data.common.core.entity.system.EduDeptWxPublic;
import com.yida.data.common.core.entity.system.EduHoliday;
import com.yida.data.common.core.entity.system.EduPayWxConfig;
import com.yida.data.common.core.entity.system.EduQywxServiceProvider;
import com.yida.data.common.core.entity.system.EduQywxServiceProviderSchool;
import com.yida.data.common.core.entity.system.EduYidaApp;
import com.yida.data.common.core.entity.system.UPayConfig;
import com.yida.data.common.core.entity.system.UnionPayConfig;
import com.yida.data.common.core.entity.system.WhiteList;
import com.yida.data.common.core.entity.system.enums.RoleEnum;
import com.yida.data.common.core.entity.system.enums.SysFunctionEnum;
import com.yida.data.common.core.entity.user.EduStaff;
import com.yida.data.common.core.entity.user.EduStudent;
import com.yida.data.common.core.entity.system.*;
import com.yida.data.common.core.entity.user.EduUserDept;
import com.yida.data.common.core.entity.user.enums.UserDeptTypeEnum;
import com.yida.data.common.core.enums.BaiDuModuleEnum;
import com.yida.data.common.core.enums.school.DeptAppTypeEnum;
import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.common.core.utils.NumberUtil;
import com.yida.data.common.core.utils.RedisUtil;
import com.yida.data.common.core.utils.UPayUtil;
import com.yida.data.common.core.utils.WxServiceProviderUtil;
import com.yida.data.common.core.utils.WxUtil;
import com.yida.data.school.feign.index.RemoteDeptHomeIndexService;
import com.yida.data.system.feign.RemoteAppService;
import com.yida.data.system.feign.RemoteBaiDuApiConfigService;
import com.yida.data.system.feign.RemoteCommonService;
import com.yida.data.system.feign.RemoteConstructionPayConfigService;
import com.yida.data.system.feign.RemoteConsumeConfigService;
import com.yida.data.system.feign.RemoteDeptFunctionService;
import com.yida.data.system.feign.RemoteDeptService;
import com.yida.data.system.feign.RemoteDictService;
import com.yida.data.system.feign.RemoteHolidayService;
import com.yida.data.system.feign.RemotePayTypeService;
import com.yida.data.system.feign.RemotePayWxConfigService;
import com.yida.data.system.feign.RemoteQywxService;
import com.yida.data.system.feign.RemoteUPayConfigService;
import com.yida.data.system.feign.RemoteUnionPayConfigService;
import com.yida.data.system.feign.RemoteWhiteListService;
import com.yida.data.system.feign.RemoteYidaAppAccountService;
import com.yida.data.system.feign.RemoteYidaAppService;
import com.yida.data.user.feign.RemoteStaffService;
import com.yida.data.user.feign.RemoteStudentService;
import com.yida.data.system.feign.*;
import com.yida.data.user.feign.RemoteUserDeptService;
import com.yida.data.user.vo.TeacherDeptVO;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
@RequiredArgsConstructor
public class CommonService {
private final RemoteAppService remoteAppService;
private final RemoteQywxService remoteQywxService;
private final RemoteDeptService remoteDeptService;
private final RemoteDictService remoteDictService;
private final RemoteCommonService remoteCommonService;
private final RemoteAppService remoteAppService;
private final RemoteYidaAppService remoteYidaAppService;
private final RemoteHolidayService remoteHolidayService;
private final RemotePayTypeService remotePayTypeService;
private final RemoteUserDeptService remoteUserDeptService;
private final RemoteWhiteListService remoteWhiteListService;
private final RemoteUPayConfigService remoteUPayConfigService;
private final RemotePayWxConfigService remotePayWxConfigService;
private final RemoteDeptFunctionService remoteDeptFunctionService;
private final RemoteConsumeConfigService remoteConsumeConfigService;
private final RemoteUnionPayConfigService remoteUnionPayConfigService;
private final RemoteYidaAppAccountService remoteYidaAppAccountService;
private final RemoteBaiDuApiConfigService remoteBaiDuApiConfigService;
private final RemoteConstructionPayConfigService remoteConstructionPayConfigService;
private final RemoteStaffService remoteStaffService;
private final RemoteStudentService remoteStudentService;
private final RemoteDeptHomeIndexService remoteDeptHomeIndexService;
private final WxUtil wxUtil;
private final WxServiceProviderUtil wxServiceProviderUtil;
private final RemotePayWxConfigService remotePayWxConfigService;
private final RemoteHolidayService remoteHolidayService;
private final RemoteCommonService remoteCommonService;
private final RemoteUserDeptService remoteUserDeptService;
private final RemotePayTypeService remotePayTypeService;
private final RemoteUnionPayConfigService remoteUnionPayConfigService;
private final RedisService redisService;
public List<Dict> selectDict(String type) {
if (ObjectUtil.isNull(type)) {
return null;
}
return remoteDictService.selectDict(type).getData();
}
public Dict getDictByTypeAndValueOrLabel(String type, String value, String label) {
if (ObjectUtil.isNull(type)) {
return null;
}
return remoteDictService.getDictByTypeAndValueOrLabel(type, value, label).getData();
}
public Dept getDept(Long deptId) {
if (deptId == null) {
return null;
@ -300,7 +211,7 @@ public class CommonService {
redisService.llSet(CachePrefixConstant.HOLIDAY, data);
for (EduHoliday holiday : data) {
// 节假日
if (target.equals(holiday.getDate())) {
if (target.equals(holiday)) {
return false;
}
}
@ -309,7 +220,7 @@ public class CommonService {
for (Object o : objects) {
// 节假日
EduHoliday holiday = (EduHoliday) o;
if (target.equals(holiday.getDate())) {
if (target.equals(holiday)) {
return false;
}
}
@ -317,38 +228,6 @@ public class CommonService {
return true;
}
/**
* 时间段内 节假日集合
*/
public List<LocalDate> inHolidayDateList(LocalDate startDate, LocalDate endDate) {
List<LocalDate> inHolidayList = new ArrayList<>();
List<Object> objects = redisService.lGet(CachePrefixConstant.HOLIDAY, 0L, -1L);
if (CollUtil.isEmpty(objects)) {
List<EduHoliday> data = remoteHolidayService.listAllHoliday().getData();
if (CollUtil.isNotEmpty(data)) {
redisService.llSet(CachePrefixConstant.HOLIDAY, data);
for (EduHoliday holiday : data) {
// 节假日
LocalDate date = holiday.getDate();
if ((date.isAfter(startDate) && date.isBefore(endDate)) || date.equals(startDate) || date.equals(endDate)) {
inHolidayList.add(date);
}
}
}
} else {
for (Object o : objects) {
// 节假日
EduHoliday holiday = (EduHoliday) o;
LocalDate date = holiday.getDate();
if ((date.isAfter(startDate) && date.isBefore(endDate)) || date.equals(startDate) || date.equals(endDate)) {
inHolidayList.add(date);
}
}
}
return inHolidayList;
}
/**
* 查询当天的上一个工作日
*/
@ -427,83 +306,6 @@ public class CommonService {
return config;
}
/**
* 根据部门查询建行支付配置
*
* @param deptId 部门id
* @return com.yida.data.common.core.entity.system.ConstructionPayConfig
* @author ZYJ
* @date 2023/6/19 16:50
*/
public ConstructionPayConfig getConstructionPayConfigByDept(Long deptId) {
ConstructionPayConfig config = redisService.hasKey(CachePrefixConstant.CONSTRUCTION_PAY_CONFIG)
? (ConstructionPayConfig) redisService.hget(CachePrefixConstant.CONSTRUCTION_PAY_CONFIG, deptId.toString())
: null;
if (config == null) {
config = remoteConstructionPayConfigService.getConstructionPayConfigByDept(deptId).getData();
redisService.hset(CachePrefixConstant.CONSTRUCTION_PAY_CONFIG, deptId.toString(), config);
}
return config;
}
/**
* 根据部门查询收钱吧支付配置
*
* @param deptId 部门id
* @return com.yida.data.common.core.entity.system.UPayConfig
* @author ZYJ
* @date 2023/3/21 10:42
*/
public UPayConfig getUPayConfigByDept(Long deptId) {
UPayConfig config = redisService.hasKey(CachePrefixConstant.U_PAY_CONFIG)
? (UPayConfig) redisService.hget(CachePrefixConstant.U_PAY_CONFIG, deptId.toString())
: null;
if (config == null) {
config = remoteUPayConfigService.getUPayConfigByDept(deptId).getData();
redisService.hset(CachePrefixConstant.U_PAY_CONFIG, deptId.toString(), config);
}
return config;
}
/**
* 获取学校消费机服务器信息
*
* @param deptId 部门id
* @return com.yida.data.common.core.entity.consume.EduConsumeConfig
* @author ZYJ
* @date 2023/4/6 17:46
*/
public EduConsumeConfig getConsumeConfigByDept(Long deptId) {
EduConsumeConfig config = redisService.hasKey(CachePrefixConstant.CONSUME_CONFIG)
? (EduConsumeConfig) redisService.hget(CachePrefixConstant.CONSUME_CONFIG, deptId.toString())
: null;
if (config == null) {
config = remoteConsumeConfigService.getConsumeConfigByDept(deptId).getData();
redisService.hset(CachePrefixConstant.CONSUME_CONFIG, deptId.toString(), config);
}
return config;
}
/**
* 获取学校收钱吧终端信息
*
* @param deptId 学校id
* @return com.yida.data.common.core.entity.consume.DeptConsumeTerminalCache
* @author ZYJ
* @date 2023/4/3 14:47
*/
public DeptConsumeTerminalCache getDeptConsumeTerminal(Long deptId) {
DeptConsumeTerminalCache cache = redisService.hasKey(CachePrefixConstant.DEPT_CONSUME_TERMINAL + deptId.toString())
? (DeptConsumeTerminalCache) redisService.get(CachePrefixConstant.DEPT_CONSUME_TERMINAL + deptId.toString())
: null;
if (cache == null) {
cache = UPayUtil.active(getUPayConfigByDept(deptId), UPayConstant.ACTIVE_DEVICE_NAME);
cache.setDeptId(deptId);
redisService.set(CachePrefixConstant.DEPT_CONSUME_TERMINAL + deptId.toString(), cache);
}
return cache;
}
/**
* 向下查询指定家校部门类型的家校部门id(可查询非直接子家校部门) 未毕业家校部门
*
@ -529,360 +331,14 @@ public class CommonService {
return remoteUserDeptService.findChildIdByParentAndTypeNoPermission(deptId, type).getData();
}
/**
* 获取服务商信息
*
* @param serviceCorpId 服务商企业微信corpId
* @return com.yida.data.common.core.entity.system.EduQywxServiceProvider
* @author ZYJ
* @date 2022/12/1 10:46
*/
public EduQywxServiceProvider getServiceProvider(String serviceCorpId) {
EduQywxServiceProvider serviceProvider = redisService.hasKey(CachePrefixConstant.SYS_SERVICE_PROVIDER)
? (EduQywxServiceProvider) redisService.hget(CachePrefixConstant.SYS_SERVICE_PROVIDER, serviceCorpId)
: null;
if (Objects.isNull(serviceProvider)) {
serviceProvider = remoteAppService.getServiceProviderByServiceCorpId(serviceCorpId).getData();
if (Objects.nonNull(serviceProvider)) {
redisService.hset(CachePrefixConstant.SYS_SERVICE_PROVIDER, serviceCorpId, serviceProvider);
}
}
return serviceProvider;
}
/**
* 获取对应服务商模板信息
* 工具学校名称查找机构信息
*
* @param templateId 模板id
* @param serviceCorpId 服务商corpId
* @return com.yida.data.common.core.entity.system.EduAppTemplate
* @author ZYJ
* @date 2022/12/1 9:27
*/
public EduAppTemplate getAppTemplateByTemplateId(String templateId, String serviceCorpId) {
EduAppTemplate eduAppTemplate = redisService.hasKey(CachePrefixConstant.SYS_APP_TEMPLATE)
? (EduAppTemplate) redisService.hget(CachePrefixConstant.SYS_APP_TEMPLATE, serviceCorpId + "." + templateId)
: null;
if (Objects.isNull(eduAppTemplate)) {
eduAppTemplate = remoteAppService.getAppTemplateByTemplateId(templateId, serviceCorpId).getData();
if (Objects.nonNull(eduAppTemplate)) {
redisService.hset(CachePrefixConstant.SYS_APP_TEMPLATE, serviceCorpId + "." + templateId, eduAppTemplate);
}
}
return eduAppTemplate;
}
/**
* 根据学校对应的通讯录应用类型获取不同的access_token 创建编辑删除获取部门ID列表获取成员ID列表时使用
*
* @param schoolId 学校id
* @return java.lang.String
* @author ZYJ
* @date 2022/12/1 9:46
*/
public String getAddressListToken(Long schoolId) {
String accessToken;
// 获取学校通讯录应用
EduApp app = getAppByCodeAndSchool(AppConstant.CONTACT, null, schoolId);
if (Objects.isNull(app.getTemplateId())) {
// 自建应用
accessToken = wxUtil.getAccessToken(app.getWxCorpId(), app.getWxSecret());
} else {
// 服务商代开发应用
// 获取对应模板信息
EduAppTemplate appTemplate = getAppTemplateByTemplateId(app.getTemplateId(), app.getServiceCorpId());
// 获取第三方应用凭证
String suiteAccessToken = wxServiceProviderUtil.getSuiteAccessToken(appTemplate.getTemplateId(),
appTemplate.getTemplateSecret(),
String.valueOf(redisService.get(QywxServiceProviderConstant.SERVICE_SUITE_TICKET + appTemplate.getTemplateId())));
// 获取企业微信信息缓存
// EduQywxServiceProviderSchool providerSchool = (EduQywxServiceProviderSchool) redisService
// .hget(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA,
// app.getServiceCorpId() + "." + app.getWxCorpId());
EduQywxServiceProviderSchool providerSchool = getCorpByOriginalData(app.getServiceCorpId(), app.getWxCorpId());
accessToken = wxServiceProviderUtil
.getCorpToken(providerSchool.getDeptEncryptionCorpId(), app.getWxSecret(), suiteAccessToken);
}
return accessToken;
}
/**
* 服务商对应学校加密corpId数据(原始值为key)
*
* @param providerCorpId 服务商corpId
* @param deptOriginalCorpId 部门原始corpId
* @return com.yida.data.common.core.common.ResultBean<com.yida.data.common.core.entity.system.EduQywxServiceProviderSchool>
* @author ZYJ
* @date 2023/9/25 17:48
*/
public EduQywxServiceProviderSchool getCorpByOriginalData(String providerCorpId, String deptOriginalCorpId) {
EduQywxServiceProviderSchool providerSchool =
redisService.hasKey(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA)
? (EduQywxServiceProviderSchool) redisService.hget(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA,
providerCorpId + "." + deptOriginalCorpId)
: null;
if (providerSchool == null) {
providerSchool = remoteQywxService.getCorpByOriginalData(providerCorpId, deptOriginalCorpId).getData();
redisService
.hset(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA, providerCorpId + "." + deptOriginalCorpId,
providerSchool);
}
return providerSchool;
}
/**
* 服务商对应学校加密corpId数据(加密值为key)
*
* @param providerCorpId 服务商corpId
* @param deptEncryptionCorpId 部门加密corpId
* @return com.yida.data.common.core.common.ResultBean<com.yida.data.common.core.entity.system.EduQywxServiceProviderSchool>
* @author ZYJ
* @date 2023/9/25 17:48
*/
public EduQywxServiceProviderSchool getCorpByEncryptionData(String providerCorpId, String deptEncryptionCorpId) {
EduQywxServiceProviderSchool providerSchool = redisService.hasKey(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_DATA)
? (EduQywxServiceProviderSchool) redisService.hget(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_DATA,
providerCorpId + "." + deptEncryptionCorpId)
: null;
if (providerSchool == null) {
providerSchool = remoteQywxService.getCorpByEncryptionData(providerCorpId, deptEncryptionCorpId).getData();
redisService.hset(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_DATA, providerCorpId + "." + deptEncryptionCorpId,
providerSchool);
}
return providerSchool;
}
/**
* 获取企业凭证
*
* @param app 通讯录应用信息
* @return java.lang.String
* @author ZYJ
* @date 2022/12/1 11:24
*/
public String getCorpToken(EduApp app) {
// 获取对应模板信息
EduAppTemplate appTemplate = getAppTemplateByTemplateId(app.getTemplateId(), app.getServiceCorpId());
// 获取第三方应用凭证
String suiteAccessToken = wxServiceProviderUtil.getSuiteAccessToken(appTemplate.getTemplateId(),
appTemplate.getTemplateSecret(),
String.valueOf(redisService.get(QywxServiceProviderConstant.SERVICE_SUITE_TICKET + appTemplate.getTemplateId())));
// 获取企业微信信息缓存
// EduQywxServiceProviderSchool providerSchool = (EduQywxServiceProviderSchool) redisService
// .hget(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA,
// app.getServiceCorpId() + "." + app.getWxCorpId());
EduQywxServiceProviderSchool providerSchool = getCorpByOriginalData(app.getServiceCorpId(), app.getWxCorpId());
return wxServiceProviderUtil.getCorpToken(providerSchool.getDeptEncryptionCorpId(), app.getWxSecret(), suiteAccessToken);
}
/**
* 设置职工授权url
*
* @param corpId 企业的CorpID
* @param redirectUrl 授权后重定向的回调链接地址请使用urlencode对链接进行处理
* @param agentId 应用agentidsnsapi_privateinfo时必填
* @return java.lang.String
* @author ZYJ
* @date 2022/11/25 15:11
*/
public String setAuthUrl(String corpId, String redirectUrl, String agentId) {
return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + corpId
+ "&redirect_uri=" + URLEncoder.createDefault().encode(redirectUrl, CharsetUtil.CHARSET_UTF_8)
+ "&response_type=code&scope=snsapi_privateinfo&state=STATE"
+ "&agentid=" + agentId + "#wechat_redirect";
}
/**
* 根据通讯录应用情况获取对应用户明文id 如果不是通讯录模板授权则返回本身userId
*
* @param userId 企业微信userId
* @param schoolId 学校id
* @param eduApp 通讯录app
* @return java.lang.String
* @author ZYJ
* @date 2023/2/2 10:41
*/
public String getPlainUserId(String userId, Long schoolId, EduApp eduApp) {
// 获取学校通讯录应用
EduApp app = getAppByCodeAndSchool(AppConstant.CONTACT, null, schoolId);
// 本身就是明文id
if (Objects.isNull(app.getTemplateId())) {
return userId;
} else {
// 企业自建应用或基础应用的调用接口凭证
EduApp appContactSchool = getAppByCodeAndSchool(AppConstant.CONTACT_SCHOOL, null, schoolId);
String accessToken = wxUtil.getAccessToken(appContactSchool.getWxCorpId(), appContactSchool.getWxSecret());
// 密文转换成明文id
return wxServiceProviderUtil.convertUserIdToPlain(accessToken, userId, eduApp.getWxAgentId());
}
}
/**
* 根据通讯录应用情况获取对应用户密文id 如果不是通讯录模板授权则返回本身userId
*
* @param userId 企业微信userId
* @param schoolId 学校id
* @return java.lang.String
* @author ZYJ
* @date 2023/2/2 14:45
*/
public String getSecretUserId(String userId, Long schoolId) {
// 获取学校通讯录应用
EduApp app = getAppByCodeAndSchool(AppConstant.CONTACT, null, schoolId);
// 本身就是明文id
if (Objects.isNull(app.getTemplateId())) {
return userId;
} else {
EduApp eduApp = getAppByCodeAndSchool(AppConstant.CONTACT_SELECT, null, schoolId);
// 明文转换成密文id
return wxServiceProviderUtil.convertUserIdToSecret(
wxUtil.getAccessToken(eduApp.getWxCorpId(), eduApp.getWxSecret()), userId);
}
}
/**
* 查询学校用于查询的通讯录应用
*
* @param schoolId 学校id
* @return com.yida.data.common.core.entity.system.EduApp
* @author ZYJ
* @date 2023/4/23 20:25
*/
public EduApp getAppContactUsedBySelect(Long schoolId) {
// 获取学校通讯录应用
EduApp app = getAppByCodeAndSchool(AppConstant.CONTACT, null, schoolId);
// 本身就是明文id
if (Objects.isNull(app.getTemplateId())) {
return app;
} else {
return getAppByCodeAndSchool(AppConstant.CONTACT_SELECT, null, schoolId);
}
}
/**
* 根据学校名称查找机构信息
*
* @param schoolName 学校名称
* @return com.yida.data.common.core.entity.system.Dept
* @author ZYJ
* @date 2023/2/2 11:03
* @param schoolName
* @return
*/
public Dept getSchoolByName(String schoolName) {
return remoteDeptService.getSchoolByName(schoolName).getData();
}
/**
* 获取系统白名单信息
*
* @param functionName 功能名称 {@link SysFunctionEnum}
* @return com.yida.data.common.core.entity.system.WhiteList
* @author ZYJ
* @date 2023/2/20 18:00
*/
public WhiteList getWhiteList(String functionName) {
WhiteList whiteList = redisService.hasKey(CachePrefixConstant.SYS_WHITE_LIST)
? (WhiteList) redisService.hget(CachePrefixConstant.SYS_WHITE_LIST, functionName)
: null;
if (whiteList == null) {
whiteList = remoteWhiteListService.getWhiteList(functionName).getData();
redisService.hset(CachePrefixConstant.SYS_WHITE_LIST, functionName, whiteList);
}
return whiteList;
}
/**
* 获取部门是否开通当前功能
*
* @param functionName 功能名称
* @param schoolId 部门id
* @return com.yida.data.common.core.entity.system.EduDeptFunction
* @author ZYJ
* @date 2023/2/21 16:08
*/
public EduDeptFunction getDeptFunction(String functionName, Long schoolId) {
EduDeptFunction eduDeptFunction = redisService.hasKey(CachePrefixConstant.SYS_DEPT_FUNCTION + schoolId)
? (EduDeptFunction) redisService.hget(CachePrefixConstant.SYS_DEPT_FUNCTION + schoolId, functionName)
: null;
if (eduDeptFunction == null) {
eduDeptFunction = remoteDeptFunctionService.getDeptFunction(functionName, schoolId).getData();
redisService.hset(CachePrefixConstant.SYS_DEPT_FUNCTION + schoolId, functionName, eduDeptFunction);
}
return eduDeptFunction;
}
/**
* 根据学校id查询百度api配置
*
* @param deptId 学校id
* @param moduleName 百度模块名称 {@link BaiDuModuleEnum}
* @return com.yida.data.common.core.entity.system.BaiduApiConfig
* @author ZYJ
* @date 2023/6/20 20:57
*/
public BaiduApiConfig getBaiDuApiConfigByDept(Long deptId, String moduleName) {
BaiduApiConfig config = redisService.hasKey(CachePrefixConstant.BAI_DU_API_CONFIG + deptId)
? (BaiduApiConfig) redisService.hget(CachePrefixConstant.BAI_DU_API_CONFIG + deptId, moduleName)
: null;
if (config == null) {
config = remoteBaiDuApiConfigService.getBaiDuApiConfigByDept(deptId, moduleName).getData();
redisService.hset(CachePrefixConstant.BAI_DU_API_CONFIG + deptId.toString(), moduleName, config);
}
return config;
}
public EduStaff getStaffById(Long staffId) {
EduStaff staff = (EduStaff) redisService.hget(STAFF_DATA, staffId.toString());
if (ObjectUtil.isNull(staff)) {
staff = remoteStaffService.getStaff(staffId).getData();
if (ObjectUtil.isNotNull(staff)) {
redisService.hset(STAFF_DATA, staffId.toString(), staff);
}
}
return staff;
}
public EduStudent getStudentById(Long id) {
EduStudent student = (EduStudent) redisService
.hget(CachePrefixConstant.STUDENT_DATA, id.toString());
if (ObjectUtil.isNull(student)) {
student = remoteStudentService.getStudentNoPermission(id).getData();
if (student == null) {
log.error("学生不存在,id:[{}]", id);
return null;
} else {
redisService.hset(CachePrefixConstant.STUDENT_DATA, id.toString(), student);
}
}
return student;
}
/**
* 清除 人员匹配考勤规则
*/
public void clearAttendanceRuleData() {
redisService.del(CachePrefixConstant.ATTENDANCE_STUDENT_RULE);
}
public void delUserGenerateUrlLinkCache(Long schoolId, Long userId, Integer userType) {
//查询所有的微信小程序app
List<EduDeptHomeApp> eduDeptHomeAppList = remoteDeptHomeIndexService.getDeptAppList(schoolId).getData();
List<EduDeptHomeApp> wxAppList = eduDeptHomeAppList.stream()
.filter(e -> DeptAppTypeEnum.WX.getType().equals(e.getAppType()))
.collect(Collectors.toList());
for (EduDeptHomeApp homeApp : wxAppList) {
redisService.del(CachePrefixConstant.USER_GENERATE_URL_LINK + userId + "" + userType + "" + homeApp.getId());
}
}
public List<Long> findStaffMangerClassIdList() {
List<Long> ClassIdList = new ArrayList<>();
CurrentUser currentUser = FebsUtil.getCurrentUser();
String rolePerms = FebsUtil.getCurrentUser().getRolePerms();
return null;
}
}

View File

@ -9,7 +9,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>edu-custom-form-biz</artifactId>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>

View File

@ -1,5 +1,4 @@
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.yida.data.device.fallback.RemoteStudentCardServiceFallback,\
com.yida.data.device.fallback.RemoteTelephoneServiceFallback,\
com.yida.data.device.fallback.RemoteConsumeCardServiceFallback
com.yida.data.device.fallback.RemoteTelephoneServiceFallback

View File

@ -119,7 +119,7 @@ public class CardRabbitReceiver {
redisService.hset(CachePrefixConstant.STUDENT_DATA, card.getStudentId().toString(), student);
}
EduApp app = commonService
.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null, card.getSchoolId());
.getAppByCodeAndSchool(AppConstant.ELECTRONIC_PARENT, null, card.getSchoolId());
String accessToken = wxUtil.getAccessToken(app.getWxCorpId(), app.getWxSecret());
TextSchoolNotice notice = new TextSchoolNotice();
notice.setAgentid(app.getWxAgentId());

View File

@ -2,6 +2,7 @@ package com.yida.data.device.studentCard.controller;
import cc.mrbird.febs.common.redis.service.RedisService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yida.data.common.core.annotation.ControllerLog;
import com.yida.data.common.core.common.ModuleName;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.CurrentUser;
@ -20,12 +21,12 @@ import com.yida.data.device.dto.studentCard.CardWithAddressDTO;
import com.yida.data.device.dto.studentCard.DisturbStatusDTO;
import com.yida.data.device.studentCard.service.EduStudentCardDisturbTimeService;
import com.yida.data.device.studentCard.service.EduStudentCardService;
import com.yida.data.device.vo.OnlineCountVO;
import com.yida.data.device.vo.studentCard.CardInfoVO;
import com.yida.data.device.vo.studentCard.CardPageVO;
import com.yida.data.device.vo.studentCard.CardWithAddressVO;
import com.yida.data.device.vo.studentCard.ListStudentCardVO;
import com.yida.data.device.vo.studentCard.LocationVO;
import com.yida.data.device.vo.OnlineCountVO;
import com.yida.data.device.vo.studentCard.TrackVO;
import com.yida.data.log.annotation.OperationLog;
import com.yida.data.system.feign.RemoteDeptService;
@ -82,7 +83,6 @@ public class EduStudentCardController {
@ApiOperation("更新学生证")
@PostMapping("/updateCard")
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "更新学生证", type = OperationLogTypeEnum.UPDATE)
public ResultBean updateCard(@RequestBody EduStudentCard card) {
eduStudentCardService.updateCard(card);
return ResultBean.buildSuccess();
@ -154,7 +154,9 @@ public class EduStudentCardController {
@ApiOperation("家长对应学生列表")
@GetMapping("/listStudentCard")
@ControllerLog(operation = "家长对应学生列表")
public ResultBean<List<ListStudentCardVO>> listStudentCard(@ApiParam("家长id") @RequestParam Long parentId) {
return ResultBean.buildSuccess(eduStudentCardService.listStudentCard(parentId));
}
@ -180,7 +182,7 @@ public class EduStudentCardController {
@ApiOperation("批量免打扰")
@PostMapping("/setDisturbStatus")
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "批量免打扰", type = OperationLogTypeEnum.UPDATE)
@ControllerLog(operation = "批量免打扰")
public ResultBean setDisturbStatus(@RequestBody DisturbStatusDTO disturbStatusDTO) {
eduStudentCardService.setDisturbStatus(disturbStatusDTO);
return ResultBean.buildSuccess();
@ -211,7 +213,6 @@ public class EduStudentCardController {
@ApiOperation("下发监听指令")
@GetMapping("/issueMonitor")
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "下发监听指令", type = OperationLogTypeEnum.SELECT)
public ResultBean issueMonitor(@ApiParam("接收监听手机号") String mobile,
@ApiParam("学生证imei号") String imei) {
eduStudentCardService.issueMonitor(mobile, imei);

View File

@ -2,12 +2,9 @@ package com.yida.data.device.studentCard.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.annotation.ControllerLog;
import com.yida.data.common.core.common.ModuleName;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.card.EduStudentCardPhone;
import com.yida.data.common.core.entity.system.enums.OperationLogTypeEnum;
import com.yida.data.device.studentCard.service.EduStudentCardPhoneService;
import com.yida.data.log.annotation.OperationLog;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -42,6 +39,7 @@ public class EduStudentCardPhoneController {
@ApiOperation("查询学生证电话")
@GetMapping("/getFamilyPhone")
@ControllerLog(operation = "查询亲情电话")
public ResultBean getFamilyPhone(@ApiParam("iMei号") @RequestParam String imei,
@ApiParam("1是亲情电话2是sos电话3是通话白名单") @RequestParam Integer type) {
List<EduStudentCardPhone> list = eduStudentCardPhoneService.list(Wrappers.lambdaQuery(new EduStudentCardPhone())
@ -52,7 +50,7 @@ public class EduStudentCardPhoneController {
@ApiOperation("保存电话")
@PostMapping("/savePhone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "保存电话", type = OperationLogTypeEnum.SAVE)
@ControllerLog(operation = "保存电话")
public ResultBean savePhone(@RequestBody EduStudentCardPhone phone) {
eduStudentCardPhoneService.savePhone(phone);
return ResultBean.buildSuccess();
@ -61,7 +59,7 @@ public class EduStudentCardPhoneController {
@ApiOperation("通用删除电话")
@GetMapping("/delPhone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "通用删除电话", type = OperationLogTypeEnum.DELETE)
@ControllerLog(operation = "通用删除电话")
public ResultBean delPhone(@RequestParam Long id) {
eduStudentCardPhoneService.delPhone(id);
return ResultBean.buildSuccess();
@ -69,7 +67,7 @@ public class EduStudentCardPhoneController {
@ApiOperation("批量修改电话")
@PostMapping("/updateFamilyPhoneBatch")
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量修改电话", type = OperationLogTypeEnum.UPDATE)
@ControllerLog(operation = "修改电话")
public ResultBean updateFamilyPhoneBatch(@RequestBody List<EduStudentCardPhone> phones,
@ApiParam("1-亲情电话2-sos3-白名单") Integer type, String imei) {
eduStudentCardPhoneService.updatePhoneBatch(phones, type, imei);

View File

@ -158,7 +158,7 @@ public class EduStudentCardAlarmServiceImpl extends ServiceImpl
}
private void pushSchoolNotice(EduStudent student, EduStudentCardAlarm alarm, Dept school) {
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null, school.getDeptId());
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.ELECTRONIC_PARENT, null, school.getDeptId());
TextSchoolNotice notice = new TextSchoolNotice();
notice.setAgentid(app.getWxAgentId());
notice.setTo_student_userid(Collections.singletonList(student.getWxId()));

View File

@ -2,11 +2,9 @@ package com.yida.data.device.telephone.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.annotation.ControllerLog;
import com.yida.data.common.core.common.ModuleName;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.CurrentUser;
import com.yida.data.common.core.entity.system.Dept;
import com.yida.data.common.core.entity.system.enums.OperationLogTypeEnum;
import com.yida.data.common.core.entity.telephone.EduTelephone;
import com.yida.data.common.core.entity.telephone.EduTelephoneBlack;
import com.yida.data.common.core.entity.telephone.EduTelephoneCard;
@ -21,7 +19,6 @@ import com.yida.data.device.telephone.service.EduTelephoneService;
import com.yida.data.device.vo.OnlineCountVO;
import com.yida.data.device.vo.telephone.DeviceNumberVO;
import com.yida.data.device.vo.telephone.TelephoneVO;
import com.yida.data.log.annotation.OperationLog;
import com.yida.data.system.feign.RemoteDeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -87,13 +84,13 @@ public class EduTelephoneController {
*/
@ApiOperation("话机设备数量统计")
@GetMapping("/findDeviceNumber")
@ControllerLog(operation = "话机设备数量统计")
public ResultBean<DeviceNumberVO> findDeviceNumber() throws NoSuchMethodException {
return eduTelephoneService.findDeviceNumber();
}
@ApiOperation("修改或新增")
@PostMapping("/insertTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "修改或新增亲情电话", type = OperationLogTypeEnum.SAVE)
public ResultBean insertTelephone(@RequestBody EduTelephone eduTelephone) {
eduTelephoneService.saveOrUpdate(eduTelephone);
return ResultBean.buildSuccess();
@ -101,7 +98,6 @@ public class EduTelephoneController {
@ApiOperation("批量设置")
@PostMapping("/updateTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量设置亲情电话", type = OperationLogTypeEnum.UPDATE)
public ResultBean updateTelephone(@RequestBody TelephoneDTO telephoneDTO) {
eduTelephoneService.updateTelephone(telephoneDTO);
return ResultBean.buildSuccess();
@ -116,7 +112,6 @@ public class EduTelephoneController {
@ApiOperation("重置本月通话时间")
@GetMapping("/delTelephoneTime")
@OperationLog(module = ModuleName.TELEPHONE, methods = "重置本月通话时间", type = OperationLogTypeEnum.UPDATE)
public ResultBean delTelephoneTime(@ApiParam("话机Id") @RequestParam Long id) {
EduTelephone eduTelephone = new EduTelephone();
eduTelephone.setId(id);
@ -127,7 +122,6 @@ public class EduTelephoneController {
@ApiOperation("停运")
@GetMapping("/stopTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "停运亲情电话", type = OperationLogTypeEnum.UPDATE)
public ResultBean stopTelephone(@ApiParam("话机Id") @RequestParam Long id,
@ApiParam("1停运0正常") @RequestParam Integer status) {
@ -139,7 +133,6 @@ public class EduTelephoneController {
@ApiOperation("删除和批量删除")
@PostMapping("/delTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "删除和批量删除亲情电话", type = OperationLogTypeEnum.DELETE)
public ResultBean delTelephone(@ApiParam("ids") @RequestBody List<Long> ids) {
eduTelephoneService.removeByIds(ids);
for (Long id : ids) {
@ -153,7 +146,6 @@ public class EduTelephoneController {
@ApiOperation("批量停运")
@PostMapping("/listStopTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量停运亲情电话", type = OperationLogTypeEnum.UPDATE)
public ResultBean listStopTelephone(@ApiParam("话机Id") @RequestBody PhoneStatusDTO phoneStatusDTO) {
List<Long> ids = phoneStatusDTO.getIds();

View File

@ -4,17 +4,14 @@ import cc.mrbird.febs.common.redis.service.RedisService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.annotation.ControllerLog;
import com.yida.data.common.core.common.ModuleName;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.constant.CachePrefixConstant;
import com.yida.data.common.core.entity.system.enums.OperationLogTypeEnum;
import com.yida.data.common.core.entity.telephone.EduTelephoneOrder;
import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.device.dto.telephone.OrderPageDTO;
import com.yida.data.device.telephone.service.EduTelephoneOrderService;
import com.yida.data.device.vo.telephone.OrderInfoVO;
import com.yida.data.device.vo.telephone.OrderPageVO;
import com.yida.data.log.annotation.OperationLog;
import com.yida.data.school.vo.transcation.PayInfoVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -68,17 +65,17 @@ public class EduTelephoneOrderController {
@GetMapping("/listOrder")
public ResultBean<List<EduTelephoneOrder>> listOrder(@ApiParam("卡id") @RequestParam Long cardId) {
return ResultBean.buildSuccess(eduTelephoneOrderService.list(Wrappers.lambdaQuery(new EduTelephoneOrder())
.eq(EduTelephoneOrder::getCardId, cardId).orderByDesc(EduTelephoneOrder::getCreateDate)));
.eq(EduTelephoneOrder::getCardId, cardId).orderByDesc(EduTelephoneOrder::getCreateDate)));
}
@ApiOperation("生成订单")
@GetMapping("/createOrder")
@OperationLog(module = ModuleName.TELEPHONE, methods = "生成订单", type = OperationLogTypeEnum.INSERT)
@ControllerLog(operation = "生成订单")
public ResultBean<PayInfoVO> insertEduProductOrder(@ApiParam("充值金额") Double money,
@ApiParam("ic卡id") Long icCardId,
@ApiParam("支付方式0-微信jsapi1-微信h5") Integer payType) {
@ApiParam("ic卡id") Long icCardId,
@ApiParam("支付方式0-微信jsapi1-微信h5") Integer payType) {
return ResultBean.buildSuccess(eduTelephoneOrderService.createOrder(money, icCardId, payType, FebsUtil.getCurrentUser(),
FebsUtil.getHttpServletRequestIpAddress()));
FebsUtil.getHttpServletRequestIpAddress()));
}
@ApiOperation("订单完成(前台支付完成后调用)")
@ -90,7 +87,6 @@ public class EduTelephoneOrderController {
@ApiOperation("发起支付")
@GetMapping("/payOrder")
@OperationLog(module = ModuleName.TELEPHONE, methods = "发起支付", type = OperationLogTypeEnum.INSERT)
public ResultBean<PayInfoVO> payOrder(String orderCode) {
Object prepay = redisService.get(CachePrefixConstant.ORDER_FLAG + orderCode);
PayInfoVO infoVO = eduTelephoneOrderService.getWxJsSign(orderCode, prepay.toString());

View File

@ -42,6 +42,6 @@ public class BillOrderStudentCacheVO implements Serializable {
@ApiModelProperty("家长手机号码")
private String mobile;
@ApiModelProperty("订单号")
@ApiModelProperty("'订单号'")
private String orderNo;
}

View File

@ -123,6 +123,15 @@ public class EduBillController {
return ResultBean.buildSuccess(eduBillStudentService.exportBillPayData(billStudentSelectPageDTO, response));
}
@GetMapping(value = "sendBillNotice")
@ApiOperation(value = "账单催缴")
public ResultBean<String> sendBillNotice(
@ApiParam(value = "账单id", required = true) @RequestParam Long billId,
@ApiParam(value = "推送标题", required = true) @RequestParam String noticeTitle) {
eduBillStudentService.sendBillNotice(billId, noticeTitle);
return ResultBean.buildSuccess();
}
@PostMapping(value = "listBillOrderPage")
@ApiOperation(value = "查询账单订单列表数据")
public ResultBean<IPage<BillOrderSelectPageVO>> listBillOrderPage(BillOrderSelectPageDTO dto) {

View File

@ -53,4 +53,19 @@ public interface EduBillOrderItemMapper extends BaseMapper<EduBillOrderItem> {
*/
List<BillPayVO> listItemPayInfo(@Param("billId") Long billId,
@Param("studentId") Long studentId);
/**
* 查询学生是否有对应账单项目的缴费信息
*
* @param billId 账单id
* @param studentId 学生id
* @param itemId 项目id
* @return int
* @author ZYJ
* @date 2023/9/19 14:58
*/
int countItemPayInfo(@Param("billId") Long billId,
@Param("studentId") Long studentId,
@Param("itemId") Long itemId);
}

View File

@ -62,12 +62,14 @@ public interface EduBillOrderMapper extends BaseMapper<EduBillOrder> {
* 查询账单缴费人数
* 缴费金额大于0
*
* @param billId 账单id
* @param billId 账单id
* @param studentIds 学生id集合
* @return java.lang.Long
* @author ZYJ
* @date 2022/4/18 16:30
*/
Long sumPayStudentNumber(@Param("billId") Long billId);
Long sumPayStudentNumber(@Param("billId") Long billId,
@Param("studentIds") List<Long> studentIds);
/**
* 查询所有已经超时订单

View File

@ -48,4 +48,16 @@ public interface EduBillOrderItemService extends IService<EduBillOrderItem> {
* @date 2022/4/19 17:04
*/
List<BillPayVO> listItemPayInfo(Long billId, Long studentId);
/**
* 查询学生是否有对应账单项目的缴费信息
*
* @param billId 账单id
* @param studentId 学生id
* @param itemId 项目id
* @return int
* @author ZYJ
* @date 2023/9/19 14:57
*/
int countItemPayInfo(Long billId, Long studentId, Long itemId);
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.mall.EduBillOrder;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
@ -45,12 +46,13 @@ public interface EduBillOrderService extends IService<EduBillOrder> {
/**
* 查询账单缴费人数
*
* @param billId 账单id
* @param billId 账单id
* @param studentIds 学生id集合
* @return java.lang.Long
* @author ZYJ
* @date 2022/4/18 16:29
*/
Long sumPayStudentNumber(Long billId);
Long sumPayStudentNumber(Long billId, List<Long> studentIds);
/**
* 银联支付通知结果回调

View File

@ -2,10 +2,12 @@ package com.yida.data.mall.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.constant.FebsConstant;
import com.yida.data.common.core.entity.mall.EduBillStudent;
import com.yida.data.mall.dto.BillStudentSelectPageDTO;
import com.yida.data.mall.dto.BillUserSaveDTO;
import com.yida.data.mall.vo.BillStudentInfoVO;
import org.springframework.scheduling.annotation.Async;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
@ -79,4 +81,15 @@ public interface EduBillStudentService extends IService<EduBillStudent> {
* @date 2022/10/11 17:29
*/
String exportBillPayData(BillStudentSelectPageDTO billStudentSelectPageDTO, HttpServletResponse response);
/**
* 账单催缴
*
* @param billId 账单id
* @param noticeTitle 推送标题
* @author ZYJ
* @date 2023/7/14 14:30
*/
@Async(FebsConstant.ASYNC_POOL)
void sendBillNotice(Long billId, String noticeTitle);
}

View File

@ -92,7 +92,7 @@ public interface H5EduBillService {
H5BillOrderInfoVO getH5BillOrderInfo(Long billOrderId, String orderCode);
/**
* 继续支付
* continuePayOrder
*
* @param orderCode 订单号
* @param deptId 学校id

View File

@ -38,4 +38,9 @@ public class EduBillOrderItemServiceImpl extends ServiceImpl
public List<BillPayVO> listItemPayInfo(Long billId, Long studentId) {
return baseMapper.listItemPayInfo(billId, studentId);
}
@Override
public int countItemPayInfo(Long billId, Long studentId, Long itemId) {
return baseMapper.countItemPayInfo(billId, studentId, itemId);
}
}

View File

@ -65,8 +65,8 @@ public class EduBillOrderServiceImpl extends ServiceImpl
}
@Override
public Long sumPayStudentNumber(Long billId) {
return baseMapper.sumPayStudentNumber(billId);
public Long sumPayStudentNumber(Long billId, List<Long> studentIds) {
return baseMapper.sumPayStudentNumber(billId, studentIds);
}
@Override
@ -76,7 +76,7 @@ public class EduBillOrderServiceImpl extends ServiceImpl
if (CollUtil.isNotEmpty(list)) {
for (EduBillOrder order : list) {
// 微信订单
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) {
if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
updateWxBillOrderStatus(order);
} else if (PayWay.UNION.getValue().equals(order.getPayWay())) {
updateUnionBillOrderStatus(order);
@ -210,7 +210,7 @@ public class EduBillOrderServiceImpl extends ServiceImpl
if (CollUtil.isNotEmpty(refundOrderList)) {
refundOrderList.forEach(billRefundOrderVO -> {
// 微信
if (PayWay.WEI_XIN.getValue().equals(billRefundOrderVO.getPayWay())) {
if (PayWay.WEIXIN.getValue().equals(billRefundOrderVO.getPayWay())) {
updateWxRefundStatus(billRefundOrderVO);
} else if (PayWay.UNION.getValue().equals(billRefundOrderVO.getPayWay())) {
updateUnionRefundStatus(billRefundOrderVO);

View File

@ -89,7 +89,7 @@ public class EduBillServiceImpl extends ServiceImpl
billSelectPageVO.setTotalNumber(totalNumber);
// 缴费人数 缴费金额大于0
if (totalNumber > 0) {
billSelectPageVO.setPayNumber(eduBillOrderService.sumPayStudentNumber(billSelectPageVO.getId()));
billSelectPageVO.setPayNumber(eduBillOrderService.sumPayStudentNumber(billSelectPageVO.getId(), studentIds));
}
});
return page;
@ -199,10 +199,8 @@ public class EduBillServiceImpl extends ServiceImpl
new LambdaQueryWrapper<>(new EduBillStudent()).eq(EduBillStudent::getBillId, billSaveDTO.getId()));
}
saveOrUpdate(eduBill);
boolean flag = Objects.isNull(billSaveDTO.getId()) ||
(Objects.nonNull(billSaveDTO.getId()) &&
(Objects.isNull(billSaveDTO.getOldBillStartDate())
|| billSaveDTO.getOldBillStartDate().isAfter(LocalDateTime.now())));
boolean flag = Objects.isNull(billSaveDTO.getId()) || Objects.isNull(billSaveDTO.getOldBillStartDate())
|| billSaveDTO.getOldBillStartDate().isAfter(LocalDateTime.now());
List<EduBillItem> saveItemList = new ArrayList<>();
if (flag) {
// 保存对应的缴费项目数据
@ -282,8 +280,7 @@ public class EduBillServiceImpl extends ServiceImpl
if (BillStatusEnum.ENABLE_STATUS.getStatus().equals(bill.getEnableStatus())) {
throw new FebsException("当前账单已启用, 无法删除!");
}
if (Objects.isNull(bill.getBillStartDate()) ||
Objects.nonNull(bill.getBillStartDate()) && bill.getBillStartDate().isAfter(LocalDateTime.now())) {
if (Objects.isNull(bill.getBillStartDate()) || bill.getBillStartDate().isAfter(LocalDateTime.now())) {
// 删除项目子选项
eduBillItemSubService.remove(
new LambdaQueryWrapper<>(new EduBillItemSub()).eq(EduBillItemSub::getBillId, billId));

View File

@ -123,8 +123,6 @@ public class EduBillStatisticsServiceImpl implements EduBillStatisticsService {
// 查询指定账单数据
billList.add(eduBillService.getById(billId));
}
// 查询已开始的账单
// List<EduBill> billList = eduBillMapper.selectStartBill();
if (CollUtil.isNotEmpty(billList)) {
for (EduBill eduBill : billList) {

View File

@ -2,6 +2,7 @@ package com.yida.data.mall.service.impl;
import cc.mrbird.febs.common.redis.service.RedisService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
@ -15,10 +16,16 @@ import com.yida.data.common.core.entity.constant.StringConstant;
import com.yida.data.common.core.entity.mall.EduBill;
import com.yida.data.common.core.entity.mall.EduBillOrder;
import com.yida.data.common.core.entity.mall.EduBillStudent;
import com.yida.data.common.core.entity.notice.app.AppNotice;
import com.yida.data.common.core.entity.notice.app.inside.PushMessage;
import com.yida.data.common.core.entity.system.EduYidaApp;
import com.yida.data.common.core.entity.user.EduParent;
import com.yida.data.common.core.entity.user.EduStudent;
import com.yida.data.common.core.enums.OrderStatusEnum;
import com.yida.data.common.core.exception.FebsException;
import com.yida.data.common.core.utils.AppUtil;
import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.common.service.CommonService;
import com.yida.data.mall.dto.BillStudentSelectPageDTO;
import com.yida.data.mall.dto.BillUserSaveDTO;
import com.yida.data.mall.mapper.EduBillMapper;
@ -31,11 +38,13 @@ import com.yida.data.mall.vo.BillItemInfoVO;
import com.yida.data.mall.vo.BillStudentInfoVO;
import com.yida.data.mall.vo.h5.H5BillItemVO;
import com.yida.data.system.feign.RemoteCommonService;
import com.yida.data.user.dto.ListStudentDTO;
import com.yida.data.user.feign.RemoteStudentService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -44,10 +53,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -63,8 +69,8 @@ import java.util.stream.Collectors;
public class EduBillStudentServiceImpl extends ServiceImpl
<EduBillStudentMapper, EduBillStudent> implements EduBillStudentService {
private final CommonService commonService;
private final RemoteStudentService remoteStudentService;
private final RemoteCommonService remoteCommonService;
private final EduBillOrderService eduBillOrderService;
private final EduBillOrderItemService eduBillOrderItemService;
@ -77,6 +83,12 @@ public class EduBillStudentServiceImpl extends ServiceImpl
private final RedisService redisService;
@Value("${febs.pushUrl}")
private String pushUrl;
@Value("${febs.billUrl}")
private String billUrl;
@Override
public IPage<BillStudentInfoVO> listBillUserPage(BillStudentSelectPageDTO dto) {
// 查询学生信息
@ -363,4 +375,79 @@ public class EduBillStudentServiceImpl extends ServiceImpl
return "";
}
}
@Override
public void sendBillNotice(Long billId, String noticeTitle) {
EduBill bill = eduBillService.getById(billId);
if (Objects.isNull(bill) || bill.getBillEndDate().isAfter(LocalDateTime.now())) {
log.error("当前账单无法进行催缴功能!");
}
// 查询学生信息
ListStudentDTO studentDTO = ListStudentDTO.builder().schoolId(FebsUtil.getDeptId())
.isQueryUserDept(false).isQuerySchoolName(false)
.build();
List<EduStudent> studentList = remoteStudentService.listStudent(studentDTO).getData();
// 学生分组
Map<Long, List<EduStudent>> studentMap = studentList.stream().collect(
Collectors.groupingBy(EduStudent::getId));
if (CollUtil.isNotEmpty(studentList)) {
// 需要推送的家长集合
List<EduParent> parentList = new ArrayList<>();
// 查询账单人员列表
List<BillStudentInfoVO> list = baseMapper.listBillUserPage(null,
BillStudentSelectPageDTO.builder()
.billId(billId)
.build(),
studentList);
list.forEach(billStudentInfoVO -> {
// 匹配学生信息
EduStudent student = studentMap.get(billStudentInfoVO.getStudentId()).get(0);
BigDecimal payOrderPrice = eduBillOrderService.sumPayOrderPrice(billId, student.getId());
if (Objects.isNull(payOrderPrice) && CollUtil.isNotEmpty(student.getParents())) {
// 添加需要推送的家长信息
parentList.addAll(student.getParents());
}
});
// 推送消息
List<String> appUserIds = parentList.stream().map(EduParent::getYidaAppUserId)
.filter(StringUtils::isNotBlank).collect(Collectors.toList());
if (CollUtil.isNotEmpty(appUserIds)) {
EduYidaApp yidaApp = new EduYidaApp();
yidaApp.setAppUrl(pushUrl);
// 创建发送对象
AppNotice notice = new AppNotice();
// 消息主体
PushMessage message = new PushMessage();
message.setTitle(noticeTitle);
message.setContent(String.format("您有一条待缴费信息:%s截止日期%s点击查询详情。", bill.getBillTitle(),
LocalDateTimeUtil.format(bill.getBillEndDate(), "yyyy年MM月dd日HH时mm分秒")));
message.setUrl(billUrl);
message.setMsgType(PushMessage.NORMAL);
message.setMsgSubType(PushMessage.H5_SUB_MSG_TYPE);
notice.setPushMessage(message);
notice.setUserIdList(appUserIds);
AppUtil.sendPushMsg(notice, yidaApp);
}
}
}
public static void main(String[] args) {
EduYidaApp yidaApp = new EduYidaApp();
yidaApp.setAppUrl("https://push.pzhdqrmtzx.com");
// 创建发送对象
AppNotice notice = new AppNotice();
// 消息主体
PushMessage message = new PushMessage();
message.setTitle("测试");
message.setContent(String.format("您有一条待缴费信息:%s截止日期%s点击查询详情。", "sdad",
LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy年MM月dd日HH时mm分秒")));
message.setUrl("https://jyjf.pzhdqrmtzx.com/view/billApp/#/index?deptId=10548&loginType=2");
message.setMsgType(PushMessage.NORMAL);
message.setMsgSubType(PushMessage.H5_SUB_MSG_TYPE);
notice.setPushMessage(message);
notice.setUserIdList(CollUtil.toList("f15f25a55fad4b61a527c67abbf1dcd1"));
AppUtil.sendPushMsg(notice, yidaApp);
}
}

View File

@ -7,6 +7,7 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
@ -20,6 +21,7 @@ import com.yida.data.common.core.common.ResultMsgType;
import com.yida.data.common.core.entity.CurrentUser;
import com.yida.data.common.core.entity.apply.EduApplyProductOrder;
import com.yida.data.common.core.entity.constant.CachePrefixConstant;
import com.yida.data.common.core.entity.constant.LockPrefixConstant;
import com.yida.data.common.core.entity.constant.StringConstant;
import com.yida.data.common.core.entity.constant.UnionPayConstant;
import com.yida.data.common.core.entity.mall.*;
@ -80,12 +82,12 @@ public class H5EduBillServiceImpl implements H5EduBillService {
private final EduBillService eduBillService;
private final EduBillItemService eduBillItemService;
private final EduBillItemSubService eduBillItemSubService;
private final EduBillOrderService eduBillOrderService;
private final EduBillItemSubService eduBillItemSubService;
private final EduBillOrderItemService eduBillOrderItemService;
private final EduBillOrderRefundService eduBillOrderRefundService;
private final EduBillOrderItemSubService eduBillOrderItemSubService;
private final EduBillOrderStudentService eduBillOrderStudentService;
private final EduBillOrderRefundService eduBillOrderRefundService;
private final EduBillMapper eduBillMapper;
private final EduBillOrderMapper eduBillOrderMapper;
@ -183,16 +185,26 @@ public class H5EduBillServiceImpl implements H5EduBillService {
public BillPayInfoVO createBillOrder(CreateBillOrderDTO createBillOrderDTO) {
CurrentUser currentUser = FebsUtil.getCurrentUser();
// 判断学生账单订单锁
String lockKey = LockPrefixConstant.STUDENT_BILL_ORDER_LOCK + createBillOrderDTO.getStudentId() + StringConstant.DOT + createBillOrderDTO.getBillId();
Asserts.isFalse(redisService.hasKey(lockKey), "该学生正在缴费中,请稍后再试!");
// 加锁
redisService.lock(lockKey);
// 判断是否有下单缓存信息
BillOrderStudentCacheVO existBillOrderStudent = (BillOrderStudentCacheVO) redisService.get(
CachePrefixConstant.BILL_ORDER_STUDENT + createBillOrderDTO.getStudentId().toString()
+ StringConstant.DOT + createBillOrderDTO.getBillId().toString());
if (Objects.nonNull(existBillOrderStudent)) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException(String.format("%s%s正在支付中, 请耐心等待",
existBillOrderStudent.getStudentName(), existBillOrderStudent.getParentType()));
}
if (StringUtils.isEmpty(createBillOrderDTO.getPayWay()) ||
PayWay.ALIPAY.getValue().equals(createBillOrderDTO.getPayWay())) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException(ResultMsgType.PAY_TYPE_ERROR.getValue());
}
// 查询账单信息
@ -200,11 +212,15 @@ public class H5EduBillServiceImpl implements H5EduBillService {
if (Objects.isNull(bill)
|| BillStatusEnum.DISABLE_STATUS.getStatus().equals(bill.getEnableStatus())
|| bill.getBillEndDate().isBefore(LocalDateTime.now())) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException("当前账单暂时无法缴费");
}
// 查询学生信息
EduStudent student = remoteStudentService.getStudentNoPermission(createBillOrderDTO.getStudentId()).getData();
if (Objects.isNull(student)) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException("学生信息错误");
}
// 家长信息
@ -212,6 +228,8 @@ public class H5EduBillServiceImpl implements H5EduBillService {
EduParent orderParent = parents.stream().filter(
x -> currentUser.getMobile().equals(x.getMobile())).collect(Collectors.toList()).get(0);
if (Objects.isNull(orderParent)) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException("家长信息错误");
}
@ -219,7 +237,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
try {
// 订单号 需要根据支付方式生成不同的订单号
String orderNo = "";
if (PayWay.WEI_XIN.getValue().equals(createBillOrderDTO.getPayWay())) {
if (PayWay.WEIXIN.getValue().equals(createBillOrderDTO.getPayWay())) {
// 微信
orderNo = String.valueOf(ORDER_CODE_GENERATOR.nextId());
} else if (PayWay.UNION.getValue().equals(createBillOrderDTO.getPayWay())) {
@ -258,6 +276,9 @@ public class H5EduBillServiceImpl implements H5EduBillService {
redisService.del(CachePrefixConstant.BILL_ORDER_FLAG + orderCode);
}
throw new FebsException(e.getMessage());
} finally {
// 解锁
redisService.unlock(lockKey);
}
}
@ -290,6 +311,11 @@ public class H5EduBillServiceImpl implements H5EduBillService {
for (CreateBillOrderDTO.CreateBillOrderItemDTO itemDTO : createBillOrderDTO.getItemList()) {
// 根据项目id查询具体信息
EduBillItem billItem = eduBillItemService.getById(itemDTO.getItemId());
// TODO: 2023/9/19 判断当前费项是否缴费(排除多项选择多项此处直接查询主费项)
int itemPayCount = eduBillOrderItemService.countItemPayInfo(bill.getId(), student.getId(), itemDTO.getItemId());
if (itemPayCount > 0) {
throw new FebsException(String.format("【%s】已支付请刷新页面后重新操作", billItem.getItemName()));
}
String itemFamilyType = billItem.getFamilyType();
// 判断当前学生能否减免
boolean reductionFlag = false;
@ -495,7 +521,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
// 下单返回信息
String result = "";
try {
if (PayWay.WEI_XIN.getValue().equals(eduBillOrder.getPayWay())) {
if (PayWay.WEIXIN.getValue().equals(eduBillOrder.getPayWay())) {
// 微信支付
EduPayWxConfig config = commonService.getPayWxConfigBySchool(student.getSchoolId());
EduApplyProductOrder order = new EduApplyProductOrder();
@ -553,7 +579,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
public BillPayInfoVO getPayInfo(String orderCode, String billOrderFlag, Long deptId,
boolean needToPay, String payWay, Integer payType) {
BillPayInfoVO billPayInfoVO = null;
if (PayWay.WEI_XIN.getValue().equals(payWay)) {
if (PayWay.WEIXIN.getValue().equals(payWay)) {
// 微信
billPayInfoVO = getWxJsSign(orderCode, billOrderFlag, deptId, needToPay, payType);
} else if (PayWay.UNION.getValue().equals(payWay)) {
@ -587,7 +613,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
BillPayInfoVO infoVO = new BillPayInfoVO();
infoVO.setOrderCode(orderCode);
infoVO.setNeedToPay(needToPay);
infoVO.setPayWay(PayWay.WEI_XIN.getValue());
infoVO.setPayWay(PayWay.WEIXIN.getValue());
infoVO.setPayType(wxPayType);
// js api类型
@ -621,7 +647,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
if (Objects.nonNull(order)
&& (OrderStatusEnum.NOT_PAY.getStatus().equals(order.getOrderStatus()) || OrderStatusEnum.USER_PAYING.getStatus().equals(order.getOrderStatus()))) {
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) {
if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
// 微信
wxBillOrderSuccess(order);
} else if (PayWay.UNION.getValue().equals(order.getPayWay())) {
@ -675,7 +701,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
if (flag) {
break;
}
Thread.sleep(1000L);
ThreadUtil.sleep(1000L);
} catch (Exception e) {
log.error("账单订单(微信支付方式)完成失败, orderNo: {}", orderCode, e);
}
@ -734,9 +760,9 @@ public class H5EduBillServiceImpl implements H5EduBillService {
if (flag) {
break;
}
Thread.sleep(1000L);
ThreadUtil.sleep(1000L);
} catch (Exception e) {
log.error("账单订单(云闪付支付方式)完成失败, orderNo: {}", orderCode, e);
log.error("账单订单(微信支付方式)完成失败, orderNo: {}", orderCode, e);
}
}
}
@ -814,7 +840,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
eduBillOrderService.updateById(order);
try {
// 判断支付方式
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) {
if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
// 关闭微信订单
WxPayUtil.closeOrder(commonService.getPayWxConfigBySchool(order.getDeptId()), order.getOrderCode());
} else if (PayWay.UNION.getValue().equals(order.getPayWay())
@ -851,7 +877,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
eduBillOrderRefund.setOrderCode(orderCode);
// 生成退款订单号
String refundOrderCode = "";
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) {
if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
// 微信
refundOrderCode = "R" + orderCode;
} else if (PayWay.UNION.getValue().equals(order.getPayWay())) {
@ -873,7 +899,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
PayWay.class.getMethod("getValue"));
switch (Objects.requireNonNull(payWay)) {
// 微信
case WEI_XIN:
case WEIXIN:
// 查询学校微信支付配置
EduPayWxConfig config = commonService.getPayWxConfigBySchool(order.getDeptId());
WxPayUtil.refund(config, eduBillOrderRefund.getOrderCode(),

View File

@ -125,5 +125,19 @@
</otherwise>
</choose>
</select>
<!-- 查询学生是否有对应账单项目的缴费信息 -->
<select id="countItemPayInfo" resultType="int">
SELECT
count(DISTINCT o.order_id)
FROM
edu_bill_order_item i
LEFT JOIN edu_bill_order o ON i.order_id = o.order_id
WHERE
o.pay_status = '1'
AND o.bill_id = #{billId}
AND o.student_id = #{studentId}
AND i.item_id = #{itemId}
</select>
</mapper>

View File

@ -25,6 +25,10 @@
AND s.del_flag = 0
AND o.pay_status = '1'
AND o.bill_id = #{billId}
AND s.student_id IN
<foreach collection="studentIds" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</select>
<!-- 前端查询账单订单列表数据 -->

View File

@ -3,7 +3,6 @@ package com.yida.data.school.fallback.facility;
import com.yida.data.common.core.annotation.Fallback;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.school.EduDormitory;
import com.yida.data.common.core.entity.school.EduDormitoryMaster;
import com.yida.data.common.core.entity.school.EduDormitoryRoom;
import com.yida.data.school.dto.index.EditPersonNumDTO;
import com.yida.data.school.dto.index.ListDormRoomDTO;
@ -106,11 +105,6 @@ public class RemoteDormitoryServiceFallback implements FallbackFactory<RemoteDor
return null;
}
@Override
public ResultBean editPersonNumNoPermission(List<EditPersonNumDTO> dtos) {
return null;
}
/**
* 获取宿舍
*
@ -134,16 +128,6 @@ public class RemoteDormitoryServiceFallback implements FallbackFactory<RemoteDor
public ResultBean<EduDormitory> getDormNoPermission(Long id) {
return null;
}
@Override
public ResultBean<List<EduDormitory>> getDormBySchoolId(Long schoolId) {
return null;
}
@Override
public ResultBean<List<EduDormitoryRoom>> listDormRoomNoAuth(ListDormRoomDTO dto) {
return null;
}
};
}
}

View File

@ -3,11 +3,8 @@ package com.yida.data.school.fallback.leave;
import com.yida.data.common.core.annotation.Fallback;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.school.dto.leave.ListStudentRequestDetailDTO;
import com.yida.data.school.dto.userLeave.ListUserRequestDTO;
import com.yida.data.school.feign.leave.RemoteLeaveRequestService;
import com.yida.data.school.vo.userLeave.EduLeaveRequestUserVO;
import feign.hystrix.FallbackFactory;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
/**
@ -25,16 +22,16 @@ public class RemoteLeaveRequestServiceFallback implements FallbackFactory<Remote
log.error("RemoteLeaveRequestService fallback reason:{}", throwable.getMessage());
return new RemoteLeaveRequestService() {
/**
* 是否存在通过的请假条
*
* @param dto
* @return
*/
@Override
public ResultBean<Boolean> existRequest(ListStudentRequestDetailDTO dto) {
return null;
}
@Override
public ResultBean<List<EduLeaveRequestUserVO>> findList(ListUserRequestDTO dto) {
return null;
}
};
}
}

View File

@ -3,7 +3,6 @@ package com.yida.data.school.feign.facility;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.constant.FebsServerConstant;
import com.yida.data.common.core.entity.school.EduDormitory;
import com.yida.data.common.core.entity.school.EduDormitoryMaster;
import com.yida.data.common.core.entity.school.EduDormitoryRoom;
import com.yida.data.school.dto.index.EditPersonNumDTO;
import com.yida.data.school.dto.index.ListDormRoomDTO;
@ -18,7 +17,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
@FeignClient(value = FebsServerConstant.EDU_SCHOOL, contextId = "dormitoryServiceClient",
fallbackFactory = RemoteDormitoryServiceFallback.class)
fallbackFactory = RemoteDormitoryServiceFallback.class)
public interface RemoteDormitoryService {
/**
@ -37,9 +36,6 @@ public interface RemoteDormitoryService {
@PostMapping("/facility/dormRoom/listDormRoom")
ResultBean<List<EduDormitoryRoom>> listDormRoom(@RequestBody ListDormRoomDTO dto);
@PostMapping("/in/facility/dormRoom/listDormRoom")
ResultBean<List<EduDormitoryRoom>> listDormRoomNoAuth(@RequestBody ListDormRoomDTO dto);
/**
* 查询寝室
*
@ -66,7 +62,7 @@ public interface RemoteDormitoryService {
*/
@GetMapping("/facility/dormRoom/getDormRoomByNameAndDorm")
ResultBean<EduDormitoryRoom> getDormRoomByNameAndDorm(@RequestParam("name") String name,
@RequestParam("dormId") Long dormId);
@RequestParam("dormId") Long dormId);
/**
* 根据名称查询宿舍
@ -76,7 +72,7 @@ public interface RemoteDormitoryService {
*/
@GetMapping("/facility/dorm/getDormByName")
ResultBean<EduDormitory> getDormByName(@RequestParam("name") String name,
@RequestParam("schoolId") Long schoolId);
@RequestParam("schoolId") Long schoolId);
/**
* 修改寝室入住的人数
@ -86,14 +82,6 @@ public interface RemoteDormitoryService {
@PostMapping("/facility/dormRoom/editPersonNum")
ResultBean editPersonNum(@RequestBody List<EditPersonNumDTO> dtos);
/**
* 修改寝室入住的人数
*
* @return
*/
@PostMapping("in/facility/dormRoom/editPersonNum")
ResultBean editPersonNumNoPermission(@RequestBody List<EditPersonNumDTO> dtos);
/**
* 获取宿舍
*
@ -113,8 +101,4 @@ public interface RemoteDormitoryService {
*/
@GetMapping("/in/facility/dorm/getDorm")
ResultBean<EduDormitory> getDormNoPermission(@RequestParam("id") Long id);
@GetMapping("/in/facility/dorm/getDormListBySchoolId")
ResultBean<List<EduDormitory>> getDormBySchoolId(@RequestParam("schoolId") Long schoolId);
}

View File

@ -3,10 +3,7 @@ package com.yida.data.school.feign.leave;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.constant.FebsServerConstant;
import com.yida.data.school.dto.leave.ListStudentRequestDetailDTO;
import com.yida.data.school.dto.userLeave.ListUserRequestDTO;
import com.yida.data.school.fallback.leave.RemoteLeaveRequestServiceFallback;
import com.yida.data.school.vo.userLeave.EduLeaveRequestUserVO;
import java.util.List;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@ -14,7 +11,7 @@ import org.springframework.web.bind.annotation.PostMapping;
* @author ccl
*/
@FeignClient(value = FebsServerConstant.EDU_SCHOOL, contextId = "leaveRequestServiceClient",
fallbackFactory = RemoteLeaveRequestServiceFallback.class)
fallbackFactory = RemoteLeaveRequestServiceFallback.class)
public interface RemoteLeaveRequestService {
/**
@ -25,12 +22,4 @@ public interface RemoteLeaveRequestService {
*/
@PostMapping("/in/request/leaveRequest/existRequest")
ResultBean<Boolean> existRequest(ListStudentRequestDetailDTO dto);
/**
* @param dto
* @return
*/
@PostMapping("/in/eduLeaveRequestUser/findList")
ResultBean<List<EduLeaveRequestUserVO>> findList(ListUserRequestDTO dto);
}

View File

@ -1,7 +1,6 @@
package com.yida.data.school.vo.index;
import com.yida.data.common.core.entity.home.EduHomeFunction;
import com.yida.data.common.core.entity.school.EduDeptHomeApp;
import com.yida.data.common.core.entity.school.EduSchoolHomeAnnouncement;
import com.yida.data.common.core.entity.school.EduSchoolHomeApp;
import com.yida.data.common.core.entity.school.EduSchoolHomeCover;
@ -40,6 +39,4 @@ public class HomeInfoVO {
private EduSchoolHomeNews news;
private Integer deptType;
@ApiModelProperty("关联小程序List:新版")
private List<EduDeptHomeApp> eduDeptHomeAppList;
}

View File

@ -11,6 +11,7 @@ import lombok.Data;
@ApiModel("稿件分页信息")
@Data
public class ManuscriptPageInfoVO {
private Long id;
@ApiModelProperty("标题")
@ -41,4 +42,7 @@ public class ManuscriptPageInfoVO {
@ApiModelProperty("标签:以逗号分隔")
private String labels;
@ApiModelProperty("状态")
private Integer status;
}

View File

@ -13,7 +13,6 @@ import lombok.Data;
@Data
@ApiModel("分页查询数据")
public class SchoolNoticePageVO {
private Long id;
@ApiModelProperty("发送时间")
@ -24,9 +23,6 @@ public class SchoolNoticePageVO {
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("作者")
private String author;
@ApiModelProperty("描述")
private String description;

View File

@ -9,5 +9,5 @@ com.yida.data.school.fallback.news.RemoteNoticeSystemUserServiceFallback,\
com.yida.data.school.fallback.news.RemoteNoticeUpdateServiceFallback,\
com.yida.data.school.fallback.transaction.RemoteProductOrderServiceFallback,\
com.yida.data.school.fallback.transaction.RemoteProductServiceFallback,\
com.yida.data.school.fallback.visitor.RemoteVisitorServiceFallback,\
com.yida.data.school.fallback.smart.RemoteSmartWelcomeServiceFallback
com.yida.data.school.fallback.transaction.RemoteStudentApplyServiceFallback,\
com.yida.data.school.fallback.visitor.RemoteVisitorServiceFallback

View File

@ -1,84 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>edu-school</artifactId>
<groupId>com.yida.data.school</groupId>
<version>2.2-RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>edu-school</artifactId>
<groupId>com.yida.data.school</groupId>
<version>2.2-RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>edu-school-biz</artifactId>
<dependencies>
<dependency>
<groupId>com.yida.data.school</groupId>
<artifactId>edu-school-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.job</groupId>
<artifactId>febs-server-job-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.device</groupId>
<artifactId>edu-device-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.system</groupId>
<artifactId>febs-server-system-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.user</groupId>
<artifactId>edu-user-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.common</groupId>
<artifactId>edu-common</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>${emoji.version}</version>
</dependency>
<dependency>
<groupId>com.yida.data.websocket</groupId>
<artifactId>edu-websocket-api</artifactId>
<version>2.2-RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.attendance</groupId>
<artifactId>attendance-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<artifactId>edu-school-biz</artifactId>
<dependencies>
<dependency>
<groupId>com.yida.data.school</groupId>
<artifactId>edu-school-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.job</groupId>
<artifactId>febs-server-job-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.device</groupId>
<artifactId>edu-device-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.system</groupId>
<artifactId>febs-server-system-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.user</groupId>
<artifactId>edu-user-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.yida.data.common</groupId>
<artifactId>edu-common</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>${emoji.version}</version>
</dependency>
<dependency>
<groupId>com.yida.data.websocket</groupId>
<artifactId>edu-websocket-api</artifactId>
<version>2.2-RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<outputDirectory>../../../febs-jar</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<outputDirectory>../../../febs-jar</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -13,9 +13,11 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import cc.mrbird.febs.common.security.starter.annotation.EnableFebsCloudResourceServer;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootConfiguration
@EnableAsync
@EnableTransactionManagement
@EnableFeignClients(basePackages = "com.yida.data")
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
@EnableFebsCloudResourceServer

View File

@ -225,7 +225,7 @@ public class CoreExaminationPublishServiceImpl extends
private void pushScoreNotice(CoreExamination coreExamination, List<CoreExaminationStudent> studentList) {
Dept school = commonService.getDept(coreExamination.getSchoolId());
EduApp eduApp = commonService.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null, school.getDeptId());
EduApp eduApp = commonService.getAppByCodeAndSchool(AppConstant.SCORE_PARENT, null, school.getDeptId());
List<Long> studentId = studentList.stream().map(x -> x.getCoreStudentId()).collect(Collectors.toList());
String accessToken = null;
EduYidaApp yidaApp = null;

View File

@ -1,20 +1,10 @@
package com.yida.data.school.facility.controller;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.school.EduDormitory;
import com.yida.data.common.core.entity.school.EduDormitoryMaster;
import com.yida.data.common.core.entity.school.EduDormitoryRoom;
import com.yida.data.school.dto.index.ListDormRoomDTO;
import com.yida.data.school.facility.mapper.EduDormitoryRoomMapper;
import com.yida.data.school.facility.service.EduDormitoryMasterService;
import com.yida.data.school.facility.service.EduDormitoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
@ -39,35 +29,9 @@ public class InEduDormitoryController {
private final EduDormitoryService eduDormitoryService;
private final EduDormitoryRoomMapper eduDormitoryRoomMapper;
private final EduDormitoryMasterService eduDormitoryMasterService;
@ApiOperation("获取宿舍楼")
@GetMapping("/getDorm")
ResultBean<EduDormitory> getDorm(@RequestParam("id") Long id) {
return ResultBean.buildSuccess(eduDormitoryService.getDorm(id));
}
@ApiOperation("根据学校ID获取宿舍楼List")
@GetMapping("/getDormListBySchoolId")
ResultBean<List<EduDormitory>> getDormListBySchoolId(@RequestParam("schoolId") Long schoolId) {
List<EduDormitory> list = eduDormitoryService
.list(Wrappers.lambdaQuery(new EduDormitory()).eq(EduDormitory::getSchoolId, schoolId));
list.forEach(eduDormitory -> {
ListDormRoomDTO dto = new ListDormRoomDTO();
dto.setDormIds(Collections.singletonList(eduDormitory.getId()));
List<EduDormitoryRoom> eduDormitoryRooms = eduDormitoryRoomMapper.listDormRoom(dto);
eduDormitory.setDormRoomList(eduDormitoryRooms);
//宿管
List<EduDormitoryMaster> masterList = eduDormitoryMasterService
.list(Wrappers.lambdaQuery(new EduDormitoryMaster()).eq(EduDormitoryMaster::getSchoolId, schoolId)
.eq(EduDormitoryMaster::getDormitoryId, eduDormitory.getId()));
if (CollUtil.isNotEmpty(masterList)) {
eduDormitory.setMasterIds(masterList.stream().map(EduDormitoryMaster::getMasterId).collect(Collectors.toList()));
}
});
return ResultBean.buildSuccess(list);
}
}

View File

@ -2,15 +2,9 @@ package com.yida.data.school.facility.controller;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.school.EduDormitoryRoom;
import com.yida.data.school.dto.index.EditPersonNumDTO;
import com.yida.data.school.dto.index.ListDormRoomDTO;
import com.yida.data.school.facility.service.EduDormitoryRoomService;
import io.swagger.annotations.ApiOperation;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
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;
@ -34,17 +28,4 @@ public class InEduDormitoryRoomController {
ResultBean<EduDormitoryRoom> getDormRoomNoPermission(@RequestParam("id") Long id) {
return ResultBean.buildSuccess(eduDormitoryRoomService.getDormRoom(id));
}
@ApiOperation("寝室入住")
@PostMapping("/editPersonNum")
public ResultBean editPersonNumNoPermission(@RequestBody List<EditPersonNumDTO> dtos) {
eduDormitoryRoomService.editPersonNum(dtos);
return ResultBean.buildSuccess();
}
@ApiOperation("查询寝室列表")
@PostMapping("/listDormRoom")
public ResultBean<List<EduDormitoryRoom>> listDormRoom(@RequestBody ListDormRoomDTO dto) {
return ResultBean.buildSuccess(eduDormitoryRoomService.listDormRoom(dto));
}
}

View File

@ -11,5 +11,7 @@ import com.yida.data.common.core.entity.school.EduDormitoryMaster;
* @date 2022/8/22
*/
public interface EduDormitoryMasterService extends IService<EduDormitoryMaster> {
}

View File

@ -54,6 +54,4 @@ public interface EduDormitoryService extends IService<EduDormitory> {
* @date 2022/7/15 14:31
*/
EduDormitory getDorm(Long id);
}

View File

@ -45,7 +45,7 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
@Transactional(rollbackFor = Exception.class)
public class EduDormitoryServiceImpl extends ServiceImpl
<EduDormitoryMapper, EduDormitory> implements EduDormitoryService {
<EduDormitoryMapper, EduDormitory> implements EduDormitoryService {
private final EduDormitoryRoomMapper eduDormitoryRoomMapper;
private final EduDormitoryMasterMapper eduDormitoryMasterMapper;
@ -62,15 +62,14 @@ public class EduDormitoryServiceImpl extends ServiceImpl
public IPage<DormInfoVO> listDormPage(PageDormDTO dto) {
if (Objects.nonNull(dto.getMasterId())) {
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper
.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
.eq(EduDormitoryMaster::getMasterId, dto.getMasterId()).select(EduDormitoryMaster::getDormitoryId));
if (CollUtil.isEmpty(masterList)) {
return new Page<>();
}
dto.setDormIds(masterList.stream().map(EduDormitoryMaster::getDormitoryId)
.distinct()
.collect(Collectors.toList()));
.distinct()
.collect(Collectors.toList()));
}
IPage<DormInfoVO> dormPage = baseMapper.listDormPage(dto.toPage(), dto);
// 查询宿管名称
@ -78,18 +77,18 @@ public class EduDormitoryServiceImpl extends ServiceImpl
// 查询宿管id集合
for (DormInfoVO dormInfoVO : dormPage.getRecords()) {
List<Long> masterIds = eduDormitoryMasterMapper.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
.eq(EduDormitoryMaster::getDormitoryId, dormInfoVO.getDormId())
.select(EduDormitoryMaster::getMasterId)
.eq(EduDormitoryMaster::getDormitoryId, dormInfoVO.getDormId())
.select(EduDormitoryMaster::getMasterId)
).stream().map(EduDormitoryMaster::getMasterId).collect(Collectors.toList());
dormInfoVO.setMasterIds(masterIds);
List<EduStaff> staffList = CollUtil.isNotEmpty(masterIds)
? remoteStaffService.listStaff(ListStaffDTO.builder().ids(masterIds).build()).getData()
: Collections.emptyList();
? remoteStaffService.listStaff(ListStaffDTO.builder().ids(masterIds).build()).getData()
: Collections.emptyList();
// 匹配宿管
if (CollUtil.isNotEmpty(staffList)) {
dormInfoVO.setMasterName(staffList.stream().map(EduStaff::getName)
.collect(Collectors.joining(StringConstant.COMMA)));
.collect(Collectors.joining(StringConstant.COMMA)));
}
}
}
@ -107,8 +106,8 @@ public class EduDormitoryServiceImpl extends ServiceImpl
}
}
LambdaQueryWrapper<EduDormitory> condition = Wrappers.<EduDormitory>lambdaQuery()
.eq(EduDormitory::getSchoolId, dorm.getSchoolId())
.eq(EduDormitory::getName, dorm.getName());
.eq(EduDormitory::getSchoolId, dorm.getSchoolId())
.eq(EduDormitory::getName, dorm.getName());
if (dorm.getId() != null) {
condition.ne(EduDormitory::getId, dorm.getId());
}
@ -116,14 +115,13 @@ public class EduDormitoryServiceImpl extends ServiceImpl
saveOrUpdate(dorm);
// 删除旧宿管数据
eduDormitoryMasterMapper
.delete(Wrappers.<EduDormitoryMaster>lambdaQuery().in(EduDormitoryMaster::getDormitoryId, dorm.getId()));
eduDormitoryMasterMapper.delete(Wrappers.<EduDormitoryMaster>lambdaQuery().in(EduDormitoryMaster::getDormitoryId, dorm.getId()));
dorm.getMasterIds().forEach(masterId -> {
EduDormitoryMaster master = EduDormitoryMaster.builder()
.dormitoryId(dorm.getId())
.masterId(masterId)
.schoolId(dorm.getSchoolId())
.build();
.dormitoryId(dorm.getId())
.masterId(masterId)
.schoolId(dorm.getSchoolId())
.build();
eduDormitoryMasterMapper.insert(master);
});
}
@ -131,7 +129,7 @@ public class EduDormitoryServiceImpl extends ServiceImpl
@Override
public void delDormBatch(List<Long> ids) {
List<EduDormitoryRoom> rooms = eduDormitoryRoomMapper.selectList(
Wrappers.<EduDormitoryRoom>lambdaQuery().in(EduDormitoryRoom::getDormId, ids).select(EduDormitoryRoom::getId));
Wrappers.<EduDormitoryRoom>lambdaQuery().in(EduDormitoryRoom::getDormId, ids).select(EduDormitoryRoom::getId));
//删除寝室
eduDormitoryRoomMapper.delete(Wrappers.<EduDormitoryRoom>lambdaQuery().in(EduDormitoryRoom::getDormId, ids));
// 删除宿舍楼
@ -147,15 +145,14 @@ public class EduDormitoryServiceImpl extends ServiceImpl
EduDormitory eduDormitory = getById(id);
Optional.ofNullable(eduDormitory).ifPresent(dormitory -> {
// 查询宿管信息
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper
.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
.eq(EduDormitoryMaster::getDormitoryId, dormitory.getId()).select(EduDormitoryMaster::getMasterId));
if (CollUtil.isNotEmpty(masterList)) {
dormitory.setEduStaffList(
remoteStaffService.listStaff(
ListStaffDTO.builder().ids(masterList.stream().map(EduDormitoryMaster::getMasterId)
.collect(Collectors.toList())).build())
.getData());
remoteStaffService.listStaff(
ListStaffDTO.builder().ids(masterList.stream().map(EduDormitoryMaster::getMasterId)
.collect(Collectors.toList())).build())
.getData());
}
});
return eduDormitory;

View File

@ -94,7 +94,7 @@ public class EduHealthStudentPhysicalExaminationGroupServiceImpl extends Service
public void sendHealthNotice(Long groupId,Long schoolId) {
List<Long> studentId = baseMapper.findStudentId(groupId);
EduHealthStudentPhysicalExaminationGroup group = getById(groupId);
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null,
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.PRODUCT_PARENT, null,
schoolId);
String accessToken = wxUtil.getAccessToken(app.getWxCorpId(), app.getWxSecret());

View File

@ -13,7 +13,6 @@ import com.yida.data.common.core.entity.school.EduSchoolHomeMicroPic;
import com.yida.data.common.core.entity.school.EduSchoolHomeNews;
import com.yida.data.common.core.entity.school.EduSchoolManuscript;
import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.school.index.service.EduDeptHomeAppService;
import com.yida.data.school.index.service.EduHomeFunctionService;
import com.yida.data.school.index.service.EduSchoolHomeAnnouncementService;
import com.yida.data.school.index.service.EduSchoolHomeAppService;
@ -64,15 +63,14 @@ public class EduSchoolHomeController {
private final EduSchoolHomeMicroIndexService eduSchoolHomeMicroIndexService;
private final EduSchoolHomeMicroPicService eduSchoolHomeMicroPicService;
private final EduSchoolManuscriptService eduSchoolManuscriptService;
private final EduDeptHomeAppService eduDeptHomeAppService;
@ApiOperation("主页信息查询")
@GetMapping("/getHomeInfo")
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId, @RequestParam(required = false) Integer userType) {
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId) {
if (schoolId == null) {
schoolId = FebsUtil.getTopDeptId();
}
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId, userType));
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId));
}
@ApiOperation("更新轮播图(新增、编辑、删除)")
@ -204,15 +202,4 @@ public class EduSchoolHomeController {
eduHomeFunctionService.updateFunction(functionData);
return ResultBean.buildSuccess();
}
@GetMapping("/getWxPublicURLLink")
@ApiOperation("获取微信小程序短链接")
ResultBean<String> getWxPublicURLLink(
@RequestParam @ApiParam(value = "学校ID", required = true) String schoolId,
@RequestParam @ApiParam(value = "用户ID", required = true) Long userId,
@RequestParam @ApiParam(value = "用户类型", required = true) Integer userType,
@RequestParam @ApiParam(value = "系统内部小程序ID", required = true) Long localAppId) {
return ResultBean.buildSuccess(eduDeptHomeAppService.getWxPublicURLLink(schoolId, userId, userType, localAppId));
}
}

View File

@ -2,9 +2,7 @@ package com.yida.data.school.index.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.school.EduDeptHomeApp;
import com.yida.data.common.core.entity.school.EduSchoolHomeMicroPic;
import com.yida.data.school.index.service.EduDeptHomeAppService;
import com.yida.data.school.index.service.EduSchoolHomeCoverService;
import com.yida.data.school.index.service.EduSchoolHomeMicroIndexService;
import com.yida.data.school.index.service.EduSchoolHomeMicroPicService;
@ -28,11 +26,9 @@ import lombok.RequiredArgsConstructor;
@RestController
@RequiredArgsConstructor
public class InEduSchoolHomeController {
private final EduSchoolHomeMicroIndexService eduSchoolHomeMicroIndexService;
private final EduSchoolHomeMicroPicService eduSchoolHomeMicroPicService;
private final EduSchoolHomeCoverService eduSchoolHomeCoverService;
private final EduDeptHomeAppService eduDeptHomeAppService;
@ApiOperation("查询校园概况")
@ -48,20 +44,13 @@ public class InEduSchoolHomeController {
@GetMapping("/listPicByCol")
public ResultBean<List<EduSchoolHomeMicroPic>> listPicByCol(@ApiParam("栏目id") Long colId) {
return ResultBean.buildSuccess(eduSchoolHomeMicroPicService.list(Wrappers.lambdaQuery(new EduSchoolHomeMicroPic())
.eq(EduSchoolHomeMicroPic::getColId, colId)
.orderByAsc(EduSchoolHomeMicroPic::getSort)));
.eq(EduSchoolHomeMicroPic::getColId, colId)
.orderByAsc(EduSchoolHomeMicroPic::getSort)));
}
@ApiOperation("主页信息查询")
@GetMapping("/getHomeInfo")
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId, @RequestParam(required = false) Integer userType) {
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId, userType));
}
@ApiOperation("主页信息查询")
@GetMapping("/getDeptAppList")
public ResultBean<List<EduDeptHomeApp>> getDeptAppList(@RequestParam("schoolId") Long schoolId) {
return ResultBean.buildSuccess(eduDeptHomeAppService.list(Wrappers.lambdaQuery(new EduDeptHomeApp())
.eq(EduDeptHomeApp::getDeptId, schoolId)));
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId) {
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId));
}
}

View File

@ -3,9 +3,7 @@ package com.yida.data.school.index.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.school.EduSchoolHomeApp;
import io.swagger.annotations.ApiParam;
import java.util.List;
import org.springframework.web.bind.annotation.RequestParam;
/**
* Service接口

View File

@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.school.EduSchoolHomeCover;
import com.yida.data.school.vo.index.HomeInfoVO;
import io.swagger.models.auth.In;
import java.util.List;
/**
@ -15,7 +14,7 @@ import java.util.List;
*/
public interface EduSchoolHomeCoverService extends IService<EduSchoolHomeCover> {
HomeInfoVO getHomeInfo(Long schoolId, Integer userType);
HomeInfoVO getHomeInfo(Long schoolId);
/**
* 更新轮播图

View File

@ -1,11 +1,9 @@
package com.yida.data.school.index.service.impl;
import cc.mrbird.febs.common.redis.service.RedisService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yida.data.common.core.entity.constant.CachePrefixConstant;
import com.yida.data.common.core.entity.school.EduSchoolHomeApp;
import com.yida.data.common.core.entity.school.EduSchoolHomeAppShow;
import com.yida.data.common.core.entity.user.EduStaffDept;
@ -41,7 +39,6 @@ public class EduSchoolHomeAppServiceImpl extends ServiceImpl
private final RemoteDeptService remoteDeptService;
private final RemoteUserDeptService remoteUserDeptService;
private final EduSchoolMatterService eduSchoolMatterService;
private final RedisService redisService;
@Override
@Transactional

Some files were not shown because too many files have changed in this diff Show More