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.entity.BindUser;
import com.yida.data.auth.service.SocialLoginService; import com.yida.data.auth.service.SocialLoginService;
import com.yida.data.common.core.common.ModuleName; 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.FebsResponse;
import com.yida.data.common.core.entity.constant.StringConstant; import com.yida.data.common.core.entity.constant.StringConstant;
import com.yida.data.common.core.entity.system.UserConnection; import com.yida.data.common.core.entity.system.UserConnection;
import com.yida.data.common.core.exception.FebsException; import com.yida.data.common.core.exception.FebsException;
import com.yida.data.common.core.utils.FebsUtil; import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.log.annotation.OperationLog; import com.yida.data.log.annotation.OperationLog;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -31,7 +29,6 @@ import javax.validation.Valid;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* @author MrBird * @author MrBird
@ -206,20 +203,4 @@ public class SocialLoginController {
@ApiParam("0-教师1-家长") Integer type) { @ApiParam("0-教师1-家长") Integer type) {
return new FebsResponse().data(socialLoginService.h5Login(schoolId, mobile, 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; package com.yida.data.auth.manager;
import cc.mrbird.febs.common.redis.service.RedisService; import cc.mrbird.febs.common.redis.service.RedisService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.auth.mapper.EduUserLogoMapper; 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.Menu;
import com.yida.data.common.core.entity.system.Role; 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.SystemUser;
import com.yida.data.common.core.entity.system.SystemUserMenu;
import com.yida.data.common.core.entity.system.UserRole; import com.yida.data.common.core.entity.system.UserRole;
import com.yida.data.common.service.CommonService; import com.yida.data.common.service.CommonService;
import com.yida.data.user.feign.RemoteTeacherService; import com.yida.data.user.feign.RemoteTeacherService;
@ -81,24 +79,11 @@ public class UserManager {
* @param username 用户名 * @param username 用户名
* @return 权限 * @return 权限
*/ */
public List<String> findUserPermissions(String username) { public String findUserPermissions(String username) {
// 获取角色权限 // List<Menu> userPermissions = menuMapper.findUserPermissions(username);
List<String> menus = menuMapper.findUserPermissions(username); // 从用户对应权限表查询权限数据
// 获取用户权限 List<Menu> userPermissions = userMenuMapper.findUserPermissions(username);
List<SystemUserMenu> userPermissions = userMenuMapper.findUserPermissions(username); return userPermissions.stream().map(Menu::getPerms).collect(Collectors.joining(StringConstant.COMMA));
// 过滤
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;
} }
/** /**
@ -169,6 +154,6 @@ public class UserManager {
public String findMainRole(Long mainDeptId) { public String findMainRole(Long mainDeptId) {
// 查询主角色code // 查询主角色code
List<String> rolePerms = userMapper.findMainRole(mainDeptId); 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 用户名 * @param username 用户名
* @return 权限集合 * @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 * @author ZYJ
* @date 2021/11/8 15:54 * @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> wxpublicLogin(String code, String appId, Integer type, Long schoolId, String mobile);
Map<String, Object> h5Login(Long schoolId, String mobile, Integer type); 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; package com.yida.data.auth.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.yida.data.auth.manager.UserManager; import com.yida.data.auth.manager.UserManager;
import cc.mrbird.febs.common.redis.service.RedisService; import cc.mrbird.febs.common.redis.service.RedisService;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@ -45,7 +44,7 @@ public class FebsUserDetailServiceImpl implements UserDetailsService {
HttpServletRequest httpServletRequest = FebsUtil.getHttpServletRequest(); HttpServletRequest httpServletRequest = FebsUtil.getHttpServletRequest();
SystemUser systemUser = userManager.findByName(username); SystemUser systemUser = userManager.findByName(username);
if (systemUser != null) { if (systemUser != null) {
List<String> permissions = userManager.findUserPermissions(systemUser.getUsername()); String permissions = userManager.findUserPermissions(systemUser.getUsername());
boolean notLocked = false; boolean notLocked = false;
if (StringUtils.equals(SystemUser.STATUS_VALID, systemUser.getStatus())) { if (StringUtils.equals(SystemUser.STATUS_VALID, systemUser.getStatus())) {
notLocked = true; notLocked = true;
@ -61,24 +60,24 @@ public class FebsUserDetailServiceImpl implements UserDetailsService {
if (StringUtils.isNotBlank(systemUser.getRolePerms())) { if (StringUtils.isNotBlank(systemUser.getRolePerms())) {
List<String> collect = Arrays.stream(systemUser.getRolePerms().split(StringConstant.COMMA)) List<String> collect = Arrays.stream(systemUser.getRolePerms().split(StringConstant.COMMA))
.map(s -> FebsConstant.SECURITY_ROLE_PREFIX + s) .map(s -> FebsConstant.SECURITY_ROLE_PREFIX + s)
.distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) { if (CollectionUtils.isNotEmpty(collect)) {
grantedAuthorities = AuthorityUtils grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(String.join(StringConstant.COMMA, collect));
.commaSeparatedStringToAuthorityList(String.join(StringConstant.COMMA, collect));
} }
} }
// 设置菜单权限 // 设置菜单权限
if (CollUtil.isNotEmpty(permissions)) { if (StringUtils.isNotBlank(permissions)) {
grantedAuthorities.addAll(AuthorityUtils.createAuthorityList(permissions.toArray(new String[0]))); if (CollectionUtils.isNotEmpty(grantedAuthorities)) {
grantedAuthorities.addAll(AuthorityUtils.commaSeparatedStringToAuthorityList(permissions));
} else {
grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(permissions);
}
} }
// 查询主角色信息 // 查询主角色信息
if (Objects.nonNull(systemUser.getMainDeptId())) { if (Objects.nonNull(systemUser.getMainDeptId())) {
String role = this.userManager.findMainRole(systemUser.getMainDeptId()); String role = this.userManager.findMainRole(systemUser.getMainDeptId());
systemUser.setMainRolePerms(role); systemUser.setMainRolePerms(role);
} }
//查询登录所属部门学校对应的
log.info("登陆用户信息sysUser: {}", systemUser); log.info("登陆用户信息sysUser: {}", systemUser);
log.info("登陆权限数据permission: {}", grantedAuthorities); log.info("登陆权限数据permission: {}", grantedAuthorities);
log.info("登陆主角色数据mainRole: {}", systemUser.getMainRolePerms()); log.info("登陆主角色数据mainRole: {}", systemUser.getMainRolePerms());

View File

@ -13,8 +13,6 @@ import com.yida.data.auth.service.SocialLoginService;
import com.yida.data.auth.service.UserConnectionService; import com.yida.data.auth.service.UserConnectionService;
import com.yida.data.common.core.entity.FebsResponse; import com.yida.data.common.core.entity.FebsResponse;
import com.yida.data.common.core.entity.constant.*; 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.system.*;
import com.yida.data.common.core.entity.user.EduStaff; import com.yida.data.common.core.entity.user.EduStaff;
import com.yida.data.common.core.enums.RoleName; 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.WxPublicUtil;
import com.yida.data.common.core.utils.WxUtil; import com.yida.data.common.core.utils.WxUtil;
import com.yida.data.common.service.CommonService; 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.RemoteDeptService;
import com.yida.data.system.feign.RemoteRoleService; import com.yida.data.system.feign.RemoteRoleService;
import com.yida.data.system.feign.RemoteUserService; import com.yida.data.system.feign.RemoteUserService;
import com.yida.data.user.feign.RemoteStaffService; 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.RemoteStudentService;
import com.yida.data.user.feign.RemoteTeacherService; import com.yida.data.user.feign.RemoteTeacherService;
import com.yida.data.user.vo.ParentInfoVO; 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 USERNAME = "username";
private static final String PASSWORD = "password"; private static final String PASSWORD = "password";
private static final String NOT_BIND = "not_bind"; private static final String NOT_BIND = "not_bind";
private static final String SOCIAL_LOGIN_SUCCESS = "social_login_success"; 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 UserConnectionService userConnectionService;
private final ResourceOwnerPasswordTokenGranter granter; private final ResourceOwnerPasswordTokenGranter granter;
private final RedisClientDetailsService redisClientDetailsService; 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 WxUtil wxUtil;
private final WxPublicUtil wxPublicUtil; 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 CommonService commonService;
private final RemoteRoleService remoteRoleService;
private final RemoteUserService remoteUserService;
private final RemoteStudentApplyService remoteStudentApplyService;
private final RedisService redisService;
@Override @Override
public AuthRequest renderAuth(String oauthType) throws FebsException { public AuthRequest renderAuth(String oauthType) throws FebsException {
@ -580,43 +579,4 @@ public class SocialLoginServiceImpl implements SocialLoginService {
res.put("identity", type == 0 ? teacher : parent); res.put("identity", type == 0 ? teacher : parent);
return res; 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,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!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"> <mapper namespace="com.yida.data.auth.mapper.MenuMapper">
<select id="findUserPermissions" resultType="java.lang.String"> <select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.Menu">
select distinct m.perms select distinct m.perms
from t_role r from t_role r
left join t_user_role ur on (r.role_id = ur.role_id) left join t_user_role ur on (r.role_id = ur.role_id)

View File

@ -18,7 +18,6 @@
u.description, u.description,
u.avatar, u.avatar,
d.dept_type deptType, d.dept_type deptType,
d.school_nature schoolNature,
d.dept_name deptName, d.dept_name deptName,
u.agent_id agentId, u.agent_id agentId,
GROUP_CONCAT(r.role_id) roleId, GROUP_CONCAT(r.role_id) roleId,
@ -60,7 +59,6 @@
<select id="findMainRole" <select id="findMainRole"
resultType="java.lang.String"> resultType="java.lang.String">
SELECT SELECT
distinct
r.ROLE_PERMS r.ROLE_PERMS
FROM FROM
t_user u 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"> <!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"> <mapper namespace="com.yida.data.auth.mapper.UserMenuMapper">
<select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.SystemUserMenu"> <select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.Menu">
select um.*, m.perms select distinct m.perms
from t_user_menu um from t_user_menu um
left join t_user u on (u.user_id = um.user_id) left join t_user u on (u.user_id = um.user_id)
left join t_menu m on (m.menu_id = um.menu_id) left join t_menu m on (m.menu_id = um.menu_id)
where u.username = #{userName} where u.username = #{userName}
and m.perms is not null and m.perms is not null
and m.perms <![CDATA[!=]]> '' and m.perms &lt;&gt; ''
</select> </select>
</mapper> </mapper>

View File

@ -148,30 +148,18 @@
<version>${wxpay.apiv3.version}</version> <version>${wxpay.apiv3.version}</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<!-- <dependency>--> <dependency>
<!-- <groupId>com.github.wechatpay-apiv3</groupId>--> <groupId>com.github.wechatpay-apiv3</groupId>
<!-- <artifactId>wechatpay-apache-httpclient</artifactId>--> <artifactId>wechatpay-apache-httpclient</artifactId>
<!-- <version>${wxpay.apiv3.version}</version>--> <version>${wxpay.apiv3.version}</version>
<!-- <scope>compile</scope>--> <scope>compile</scope>
<!-- </dependency>--> </dependency>
<!-- 二维码依赖 --> <!-- 二维码依赖 -->
<dependency> <dependency>
<groupId>com.google.zxing</groupId> <groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId> <artifactId>javase</artifactId>
<version>${qr.code.version}</version> <version>${qr.code.version}</version>
</dependency> </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> </dependencies>
</project> </project>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -109,15 +109,9 @@ public class EduAttendanceResult {
/** /**
* 考勤结果100-正常 201-迟到202-早退203-迟到早退204-旷课,205-请假, 211-晚归212-异常晚归213-旷宿214-已被核查但学生还未归寝 * 考勤结果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") @TableField("status")
private Integer 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("学号") @ApiModelProperty("学号")
private transient String stuNo; private transient String stuNo;
@ApiModelProperty("类型:1宿舍考勤0上学考勤")
private transient Integer type;
} }

View File

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

View File

@ -1,13 +1,11 @@
package com.yida.data.common.core.entity.attendance; 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.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -62,21 +60,10 @@ public class EduAttendanceStaffResult {
/** /**
* 考勤结果0-正常1-迟到2-早退,3-旷工4-迟到早退5-上班未在打卡时间段6-下班未在打卡时间段 * 考勤结果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") @TableField("status")
private Integer 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") @DateTimeFormat(pattern = "HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "HH:mm:ss") @JsonFormat(timezone = "GMT+8", pattern = "HH:mm:ss")
private LocalTime endRealTime; 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 { public interface AppConstant {
/** /**
* 通讯录(用于操作) https://developer.work.weixin.qq.com/document/path/96078 * 通讯录
*/ */
String CONTACT = "通讯录"; String CONTACT = "通讯录";
/**
* 通讯录(用于查询) 职工端智慧迎新
*/
String CONTACT_SELECT = "contact_resources";
/**
* 家校沟通
*/
String CONTACT_SCHOOL = "家校沟通"; String CONTACT_SCHOOL = "家校沟通";
/** /**
@ -89,28 +80,8 @@ public interface AppConstant {
*/ */
String TEACHER_LEAVE_REQUEST = "teacher_leave_request"; String TEACHER_LEAVE_REQUEST = "teacher_leave_request";
/**
* 请假家长端
*/
String STUDENT_LEAVE_REQUEST = "student_leave_request";
/** /**
* 访客教师端 * 访客教师端
*/ */
String VISITOR_STAFF = "visitor_staff"; 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 { public interface CachePrefixConstant {
/**
* 企业微信服务商缓存前缀
*/
String SYS_SERVICE_PROVIDER = "sys:service:provider.";
/** /**
* 企业微信应用缓存前缀 * 企业微信应用缓存前缀
*/ */
String SYS_APP = "sys:app."; 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_KEY = "import.student.";
String IMPORT_STUDENT_FILE = "import.student.file."; 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 * 登录用户将要登录的部门id
*/ */
@ -139,31 +107,6 @@ public interface CachePrefixConstant {
*/ */
String UNION_PAY_CONFIG = "sys:union.pay.config"; 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_DATA = "user:student.data";
//------------------用户-------------------
String STUDENT_BASE_DATA = "user:student.base.data";
/** /**
* 导入住宿学生 进度信息 * 导入住宿学生 进度信息
*/ */
String IMPORT_STUDENT_DORM = "user:studentDorm.import"; 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_FACE_ERROR_MSG = "user:face:issue.error.msg.";
/**
* 设备组人脸下发成功数量
*/
String ISSUE_GROUP_USER_FACE_SUCCESS = "group.user.face.success.";
/** /**
* 大华code与人员id对应 * 大华code与人员id对应
*/ */
@ -256,11 +185,6 @@ public interface CachePrefixConstant {
*/ */
String DEVICE_DATA = "attendance:device:data"; 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 = "attendance:device:face-group.";
/**
* 设备下发的人脸组鼠标数量
*/
String ISSUE_FACE_GROUP_DEVICE_NUMBER = "attendance:device:face-group.number.";
/** /**
* 海清设备批量编辑列表 * 海清设备批量编辑列表
*/ */
String HQ_EDIT_BATCH = "hq.edit.batch."; 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_ROOM = "facility:dorm:room";
// --------------------宿舍数据-----------------
/**
* 宿舍信息
*/
String FACILITY_DORM_MASTER = "facility:dorm:master.";
// --------------------第二课堂---------------- // --------------------第二课堂----------------
/** /**
* 菜单配置 * 菜单配置
@ -469,7 +366,7 @@ public interface CachePrefixConstant {
String BILL_ORDER = "bill.order."; String BILL_ORDER = "bill.order.";
/** /**
* 账单订单调起支付所需参数微信jsapi为prepay_id微信h5为支付地址银联支付为支付地址 * 账单订单调起支付所需参数微信jsapi为prepay_id微信h5为回调地址银联支付为支付地址
*/ */
String BILL_ORDER_FLAG = "bill.order.flag."; 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 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 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."; String ATTENDANCE_DORMITORY_CLASS = "attendance:Dormitory:class.";
@ -599,9 +440,6 @@ public interface CachePrefixConstant {
String STAFF_MANGE_DEPT = "staff:mange:dept."; String STAFF_MANGE_DEPT = "staff:mange:dept.";
String STAFF_MANGE_CLASS = "staff:mange:class.";
/** /**
* 对应设备策略id(人脸组id)缓存 * 对应设备策略id(人脸组id)缓存
*/ */
@ -641,165 +479,6 @@ public interface CachePrefixConstant {
String ADD_MANUSCRIPT_PROGRESS = "add:manuscript:progress"; String ADD_MANUSCRIPT_PROGRESS = "add:manuscript:progress";
// --------------------智慧迎新----------------- // --------------------智慧迎新-----------------
/**
* 花名册下载缓存
*/
String GUIDE_ROSTER_DATA_DOWNLOAD = "guide:roster:data:download."; 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."; String TP_TOKEN = "tupu.token.";
/** /**
* 微信公众号 token key前缀 7200s * 微信公众号 token key前缀
*/ */
String WX_PUBLIC_ACCESS_TOKEN = "wx.public:access.token."; 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前缀 * 几米 access_token key前缀
*/ */

View File

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

View File

@ -38,21 +38,11 @@ public interface QywxConstant {
*/ */
String USER_DETAIL_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/get"; 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 * 查询部门成员详情 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"; 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 * 创建部门 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"; 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 * 创建部门家校沟通 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 CONTACT_EVENT = "change_contact";
/**
* 创建部门
*/
String DEPT_CREATE_TYPE = "create_party"; String DEPT_CREATE_TYPE = "create_party";
/**
* 更新部门
*/
String DEPT_UPDATE_TYPE = "update_party"; String DEPT_UPDATE_TYPE = "update_party";
/**
* 删除部门
*/
String DEPT_DELETE_TYPE = "delete_party"; String DEPT_DELETE_TYPE = "delete_party";
/**
* 创建成员
*/
String USER_CREATE_TYPE = "create_user"; String USER_CREATE_TYPE = "create_user";
/**
* 更新成员
*/
String USER_UPDATE_TYPE = "update_user"; String USER_UPDATE_TYPE = "update_user";
/**
* 删除成员
*/
String USER_DELETE_TYPE = "delete_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 * 获取微信小程序 URL Link
*/ */
String GENERATE_URL_LINK = "https://api.weixin.qq.com/wxa/generate_urllink"; 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; 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 AUDIO = "audio";
public static final String NORMAL = "NORMAL"; public static final String NORMAL = "NORMAL";
public static final String ACCOUNT = "MSG_ACCOUNT_MSG"; 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 @AllArgsConstructor
public class UnionPayOrder implements Serializable { public class UnionPayOrder implements Serializable {
private static final long serialVersionUID = -1580486861180880702L; private static final long serialVersionUID = -1548806861180880702L;
@ApiModelProperty("银联云闪付支付类型") @ApiModelProperty("银联云闪付支付类型")
private Integer unionPayType; private Integer unionPayType;

View File

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

View File

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

View File

@ -45,12 +45,4 @@ public class EduApp {
@ApiModelProperty("应用地址") @ApiModelProperty("应用地址")
private String appSrc; 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.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -107,6 +106,4 @@ public class Menu implements Serializable {
private transient String createTimeFrom; private transient String createTimeFrom;
private transient String createTimeTo; 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 String mainRolePerms;
private transient EduUserLogo userLogo; 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") @ApiModelProperty("菜单id")
@TableField("menu_id") @TableField("menu_id")
private Long menuId; 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_CLASS_PRINCIPAL("role:class:principal", "班主任", 9, 5),
ROLE_EDUCATION_PRINCIPAL("role:education:principal", "教育局负责人", 8, 2), ROLE_EDUCATION_PRINCIPAL("role:education:principal", "教育局负责人", 8, 2);
ROLE_TEACHER("role:teacher", "教师基础角色", 10, 8);
/** /**
* 角色标识值 * 角色标识值

View File

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

View File

@ -51,42 +51,6 @@ public class EduStudent implements Serializable {
@ApiModelProperty("学生姓名") @ApiModelProperty("学生姓名")
private String stuName; 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") @ApiModelProperty("学生头像url")
private String avatar; private String avatar;
@ -136,9 +100,6 @@ public class EduStudent implements Serializable {
@ApiModelProperty("学生当前状态,0=在校/在寝1=离校/离寝") @ApiModelProperty("学生当前状态,0=在校/在寝1=离校/离寝")
private Integer status; private Integer status;
@ApiModelProperty("学籍状态:关联字典表")
private String studentStatus;
@ApiModelProperty("学生在寝状态,0-在寝1-离寝") @ApiModelProperty("学生在寝状态,0-在寝1-离寝")
private Integer dormStatus; 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.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import lombok.Data;
/** /**
* 用户人脸图像 Entity * 用户人脸图像 Entity
* *
@ -82,30 +84,7 @@ public class EduUserFace {
private String picPath; private String picPath;
/** /**
* 人脸组id * 人脸与人脸的关联id
*/ */
private transient Long faceGroupUserId; 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, "正常"), NORMAL(100, "正常"),
/**
* 异常状态
*/
ABNORMAL(999, "异常"),
/** /**
* 上学未在打卡有效时间段 * 上学未在打卡有效时间段
*/ */
@ -45,33 +40,10 @@ public enum AttendanceResult {
* 走读-旷课 * 走读-旷课
*/ */
STU_NOTARRIVE(204, "旷课"), STU_NOTARRIVE(204, "旷课"),
/** /**
* 走读-请假 * 走读-请假
*/ */
STU_REQUEST(205, "请假"), 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 @Getter
@AllArgsConstructor @AllArgsConstructor
public enum MsgChannel { public enum MsgChannel {
MQTT("mqtt","mqtt(人脸设备)"), MQTT("mqtt","mqtt(人脸设备)"),
ACTIVE("activeMq","active(人脸设备)"), ACTIVE("activeMq","active(人脸设备)");
WIFI("WIFI", "WIFI打卡");
private String value; private String value;
private String name; private String name;

View File

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

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), WX_TO_MINI_H5_TYPE(1, "微信H5转小程序", UnionPayConstant.WX_TO_MINI_H5_PAY),
ALI_H5_TYPE(2, "支付宝H5", UnionPayConstant.ALI_H5_PAY), ALI_H5_TYPE(2, "支付宝H5", UnionPayConstant.ALI_H5_PAY),
UNION_H5_TYPE(3, "银联H5", UnionPayConstant.UNION_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.FebsException;
import com.yida.data.common.core.exception.FileDownloadException; import com.yida.data.common.core.exception.FileDownloadException;
import com.yida.data.common.core.utils.FebsUtil; import com.yida.data.common.core.utils.FebsUtil;
import feign.FeignException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.security.access.AccessDeniedException; 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.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.List;
import java.util.Set;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import javax.validation.Path; import javax.validation.Path;
import java.util.List;
import java.util.Set; import feign.FeignException;
import lombok.extern.slf4j.Slf4j;
/** /**
* @author MrBird * @author MrBird
@ -135,7 +138,7 @@ public class BaseExceptionHandler {
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class) @ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public FebsResponse handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { public FebsResponse handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
log.error("error: ", e); log.error("error:{},{}", e.getMessage(), e.getStackTrace());
String message = "该方法不支持" + StringUtils.substringBetween(e.getMessage(), "'", "'") + "请求方法"; String message = "该方法不支持" + StringUtils.substringBetween(e.getMessage(), "'", "'") + "请求方法";
log.error(message); log.error(message);
return new FebsResponse().message(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, public static String publishManuscript(EduSchoolManuscript manuscript, EduYidaApp yidaApp, String columnId,
String yidaUserId) { String yidaUserId) {
JSONObject body = new JSONObject() {{ JSONObject body = JSONUtil.createObj()
set("title", manuscript.getTitle()); .set("title", manuscript.getTitle())
set("fileType", manuscript.getCoverType()); .set("fileType", manuscript.getCoverType())
set("type", 1); .set("type", 1)
set("isPush", 1); .set("isPush", 1)
set("isSub", 1); .set("isSub", 1)
set("isPublish", 1); .set("isPublish", 1)
set("from", 2); .set("from", 2)
set("isTop", 0); .set("isTop", 0)
set("titleFilePath", manuscript.getCoverUrl()); .set("titleFilePath", manuscript.getCoverUrl())
set("areaId", yidaApp.getAppAreaId()); .set("areaId", yidaApp.getAppAreaId())
set("createById", yidaUserId); .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)) { if (StrUtil.isNotBlank(columnId)) {
body.set("columnId", columnId); body.set("columnId", columnId);
@ -207,9 +237,9 @@ public class AppUtil {
if (StrUtil.isNotBlank(manuscript.getContentUrl())) { if (StrUtil.isNotBlank(manuscript.getContentUrl())) {
body.set("contenUrl", manuscript.getContentUrl()); body.set("contenUrl", manuscript.getContentUrl());
} }
if (StrUtil.isNotBlank(manuscript.getYidaAppMunascriptId())) { // if (StrUtil.isNotBlank(manuscript.getYidaAppMunascriptId())) {
body.set("id", manuscript.getYidaAppMunascriptId()); // body.set("id", manuscript.getYidaAppMunascriptId());
} // }
String res = HttpUtil.post(yidaApp.getAppUrl() + YidaAppConstant.MANUSCRIPT_SAVE, body); String res = HttpUtil.post(yidaApp.getAppUrl() + YidaAppConstant.MANUSCRIPT_SAVE, body);
JSONObject resJson = JSONUtil.parseObj(res); JSONObject resJson = JSONUtil.parseObj(res);
log.info("易达发送稿件,res:[{}],params:[{}]", res, body); 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() {{ JSONObject body = new JSONObject() {{
set("ids", CollUtil.join(ids, ",")); set("ids", CollUtil.join(ids, ","));
set("operateUserId", userId);
}}; }};
log.info("易达删除稿件params:{}", body);
HttpUtil.post(yidaApp.getAppUrl() + YidaAppConstant.MANUSCRIPT_DEL, body); HttpUtil.post(yidaApp.getAppUrl() + YidaAppConstant.MANUSCRIPT_DEL, body);
} }

View File

@ -1,19 +1,14 @@
package com.yida.data.common.core.utils; package com.yida.data.common.core.utils;
import cn.hutool.core.date.DateUnit;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
import java.util.Map;
/** /**
* 时间工具类 * 时间工具类
@ -99,115 +94,4 @@ public abstract class DateUtil {
LocalTime now = LocalTime.now(); LocalTime now = LocalTime.now();
return now.isAfter(from) && now.isBefore(to); 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.RegexpConstant;
import com.yida.data.common.core.entity.constant.StringConstant; import com.yida.data.common.core.entity.constant.StringConstant;
import com.yida.data.common.core.exception.FebsException; import com.yida.data.common.core.exception.FebsException;
import java.time.LocalDate;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.omg.CORBA.UNKNOWN;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBuffer;
import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DataBufferUtils;
@ -49,7 +47,6 @@ import java.util.stream.IntStream;
public abstract class FebsUtil { public abstract class FebsUtil {
private static final String UNKNOW = "unknown"; private static final String UNKNOW = "unknown";
private static final String UNKNOWN = "unknown";
/** /**
* 驼峰转下划线 * 驼峰转下划线
@ -216,18 +213,13 @@ public abstract class FebsUtil {
public static String getHttpServletRequestIpAddress() { public static String getHttpServletRequestIpAddress() {
HttpServletRequest request = getHttpServletRequest(); HttpServletRequest request = getHttpServletRequest();
String ip = request.getHeader("x-forwarded-for"); String ip = request.getHeader("x-forwarded-for");
if (ip != null && ip.length() != 0 && !UNKNOWN.equalsIgnoreCase(ip)) { if (ip == null || ip.length() == 0 || UNKNOW.equalsIgnoreCase(ip)) {
if (ip.contains(StringConstant.COMMA)) {
ip = ip.split(StringConstant.COMMA)[0];
}
}
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-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"); 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(); ip = request.getRemoteAddr();
} }
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; 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 = "星期六"; res = "星期六";
break; break;
case 7: case 7:
res = "星期"; res = "星期";
break; break;
default: default:
} }
} }
return res; 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); put("source", 50);
} }
}); });
// log.info("上传响应,[{}]", resp); log.info("上传响应,[{}]", resp);
JSONObject respJson = JSONUtil.parseObj(resp); JSONObject respJson = JSONUtil.parseObj(resp);
if (!"200".equals(respJson.get("status").toString())) { if (!"200".equals(respJson.get("status").toString())) {
throw new FebsException(respJson.getStr("message")); throw new FebsException(respJson.getStr("message"));
@ -261,14 +261,6 @@ public abstract class FileUtil {
public static String downloadToLocal(String url) { public static String downloadToLocal(String url) {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
String path = TEMP_DIR + now.getYear() + "/" + now.getMonthValue() + "/" + now.getDayOfMonth() + "/"; 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"; String filename = UUID.randomUUID() + ".jpg";
try { try {
HttpUtil.downloadFile(url, path + filename); HttpUtil.downloadFile(url, path + filename);

View File

@ -429,7 +429,8 @@ public class WxPublicUtil {
} }
/** /**
* 获取小程序URL Link https + post * 获取小程序URL Link
* https + post
* *
* @param accessToken token值 * @param accessToken token值
* @param generateUrlLink 获取小程序URL Link请求类 * @param generateUrlLink 获取小程序URL Link请求类
@ -457,7 +458,7 @@ public class WxPublicUtil {
} }
// 请求接口 // 请求接口
String result = HttpUtil.post(WxPublicConstant.GENERATE_URL_LINK + "?access_token=" + accessToken, body.toString()); 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); JSONObject response = JSONUtil.parseObj(result);
if (response.containsKey("errcode") && !"0".equals(response.getStr("errcode"))) { if (response.containsKey("errcode") && !"0".equals(response.getStr("errcode"))) {
log.error("获取小程序URL Link接口失败code:{},msg:{}", response.get("errcode"), log.error("获取小程序URL Link接口失败code:{},msg:{}", response.get("errcode"),
@ -466,36 +467,4 @@ public class WxPublicUtil {
} }
return response.getStr("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 cn.hutool.json.JSONUtil;
import com.yida.data.common.core.entity.constant.FebsConstant; 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.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.BaseSchoolNotice;
import com.yida.data.common.core.entity.notice.qywx.BaseStaffNotice; 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.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 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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.File;
import java.util.*;
import java.util.stream.Collectors;
@Component @Component
@Slf4j @Slf4j
public class WxUtil { public class WxUtil {
@ -168,7 +176,7 @@ public class WxUtil {
public Boolean pushSchoolNotice(String token, BaseSchoolNotice notice) { public Boolean pushSchoolNotice(String token, BaseSchoolNotice notice) {
JSONObject resp = JSONUtil.parseObj(post(QywxConstant.PUSH_SCHOOL_NOTICE_URL + token, JSONObject resp = JSONUtil.parseObj(post(QywxConstant.PUSH_SCHOOL_NOTICE_URL + token,
JSONUtil.toJsonStr(notice).replace("\\n", "\n"))); 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)) { if (!"0".equals(resp.containsKey("errcode") ? resp.get("errcode").toString() : null)) {
log.error("微信通知发送失败,msg:{},notice:{}", resp, notice); log.error("微信通知发送失败,msg:{},notice:{}", resp, notice);
return false; return false;
@ -176,14 +184,12 @@ public class WxUtil {
return true; return true;
} }
public Boolean pushStaffNotice(String token, BaseStaffNotice notice) { 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, JSONObject resp = JSONUtil.parseObj(post(QywxConstant.PUSH_STAFF_NOTICE_URL + token,
JSONUtil.toJsonStr(notice).replace("\\n", "\n"))); 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)) { 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 false;
} }
return true; return true;
@ -220,41 +226,6 @@ public class WxUtil {
return user.getJSONArray("userlist"); 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 * 使用授权登陆code获取成员信息通讯录成员返回UserId家长返回parent_userid
*/ */
@ -265,17 +236,14 @@ public class WxUtil {
params.put("code", code); params.put("code", code);
String response = get(QywxConstant.USER_INFO_URL, params); String response = get(QywxConstant.USER_INFO_URL, params);
JSONObject user = JSONUtil.parseObj(response); JSONObject user = JSONUtil.parseObj(response);
if (!SUCCESS_CODE.equals(user.containsKey(ERR_CODE) ? user.get(ERR_CODE).toString() : null)) { if (!"0".equals(user.containsKey("errcode") ? user.get("errcode").toString() : null)) {
log.error("请求微信用户信息失败code:{},msg:{}", user.get(ERR_CODE), log.error("请求微信用户信息失败code:{},msg:{}", user.get("errcode"),
user.get(ERR_MESSAGE)); user.get("errmsg"));
throw new FebsException("获取用户信息失败"); throw new FebsException("获取用户信息失败");
} }
return user; return user;
} }
/**
* 查询用户详细信息
*/
public JSONObject getUserDetail(String accessToken, String userId) { public JSONObject getUserDetail(String accessToken, String userId) {
// 查询用户微信userid // 查询用户微信userid
Map<String, Object> params = new HashMap<>(); Map<String, Object> params = new HashMap<>();
@ -283,34 +251,10 @@ public class WxUtil {
params.put("userid", userId); params.put("userid", userId);
String userDetailResponse = get(QywxConstant.USER_DETAIL_URL, params); String userDetailResponse = get(QywxConstant.USER_DETAIL_URL, params);
JSONObject userDetail = JSONUtil.parseObj(userDetailResponse); JSONObject userDetail = JSONUtil.parseObj(userDetailResponse);
log.info("请求企业微信用户详细信息请求参数: {}, 返回值: {}", params, userDetail); if (!"0".equals(userDetail.containsKey("errcode") ? userDetail.get("errcode").toString() : null)) {
if (!SUCCESS_CODE.equals(userDetail.containsKey(ERR_CODE) ? userDetail.get(ERR_CODE).toString() : null)) { log.error("请求微信用户详细信息失败code:{},msg:{}", userDetail.get("errcode"),
log.error("请求企业微信用户详细信息失败code:{},msg:{}", userDetail.get(ERR_CODE), userDetail.get("errmsg"));
userDetail.get(ERR_MESSAGE)); throw new FebsException("获取用户信息失败");
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("查询用户敏感信息失败");
} }
return userDetail; return userDetail;
} }
@ -384,9 +328,9 @@ public class WxUtil {
if (deptId != null) { if (deptId != null) {
params.put("id", deptId); params.put("id", deptId);
} }
JSONObject response = JSONUtil.parseObj( JSONObject response = JSONUtil.parseObj(
get(QywxConstant.DEPT_LIST_URL, params)); get(QywxConstant.DEPT_LIST_URL, params));
log.info("获取企业微信部门列表请求参数: {}, 返回值: {}", params, response);
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) { if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("获取企业微信部门列表失败code:{},msg:{},params:{}", response.get("errcode"), log.error("获取企业微信部门列表失败code:{},msg:{},params:{}", response.get("errcode"),
response.get("errmsg"), params); response.get("errmsg"), params);
@ -396,50 +340,6 @@ public class WxUtil {
return response.getJSONArray("department").toList(Map.class); 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( JSONObject response = JSONUtil.parseObj(
post(QywxConstant.SCHOOL_DEPT_UPDATE_URL + "?access_token=" + accessToken, post(QywxConstant.SCHOOL_DEPT_UPDATE_URL + "?access_token=" + accessToken,
JSONUtil.toJsonStr(body))); JSONUtil.toJsonStr(body)));
log.info("删除部门管理员接口,params:[{}],res:[{}]", body, response); log.info("删除部门,params:[{}],res:[{}]", body, response);
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) { if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("企业微信删除部门(家校)管理员失败code:{},msg:{}", response.get(ERR_CODE), log.error("企业微信删除部门(家校)管理员失败code:{},msg:{}", response.get("errcode"),
response.get(ERR_MESSAGE)); response.get("errmsg"));
throw new FebsException("删除部门(家校)管理员失败"); throw new FebsException("删除部门(家校)管理员失败");
} }
} }
@ -544,10 +444,9 @@ public class WxUtil {
} }
JSONObject response = JSONUtil.parseObj( JSONObject response = JSONUtil.parseObj(
get(QywxConstant.SCHOOL_DEPT_LIST_URL, params)); get(QywxConstant.SCHOOL_DEPT_LIST_URL, params));
log.info("获取家校沟通部门列表请求参数: {}, 返回值: {}", params, response); if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) { log.error("获取企业微信部门(家校)列表失败code:{},msg:{},params:{}", response.get("errcode"),
log.error("获取企业微信部门(家校)列表失败code:{},msg:{},params:{}", response.get(ERR_CODE), response.get("errmsg"), params);
response.get(ERR_MESSAGE), params);
throw new FebsException("获取企业微信部门(家校)列表失败"); throw new FebsException("获取企业微信部门(家校)列表失败");
} }
@ -590,9 +489,6 @@ public class WxUtil {
if (StrUtil.isNotBlank(staff.getLandLine())) { if (StrUtil.isNotBlank(staff.getLandLine())) {
body.put("telephone", staff.getLandLine()); body.put("telephone", staff.getLandLine());
} }
if (StrUtil.isNotBlank(staff.getAddress())) {
body.put("address", staff.getAddress());
}
log.info(JSONUtil.toJsonStr(body)); log.info(JSONUtil.toJsonStr(body));
JSONObject response = JSONUtil.parseObj( JSONObject response = JSONUtil.parseObj(
post(QywxConstant.USER_CREATE_URL + "?access_token=" + accessToken, post(QywxConstant.USER_CREATE_URL + "?access_token=" + accessToken,
@ -668,15 +564,12 @@ public class WxUtil {
if (StrUtil.isNotBlank(staff.getLandLine())) { if (StrUtil.isNotBlank(staff.getLandLine())) {
body.put("telephone", staff.getLandLine()); body.put("telephone", staff.getLandLine());
} }
if (StrUtil.isNotBlank(staff.getAddress())) {
body.put("address", staff.getAddress());
}
log.info(JSONUtil.toJsonStr(body)); log.info(JSONUtil.toJsonStr(body));
JSONObject response = JSONUtil.parseObj( JSONObject response = JSONUtil.parseObj(
post(QywxConstant.USER_UPDATE_URL + "?access_token=" + accessToken, post(QywxConstant.USER_UPDATE_URL + "?access_token=" + accessToken,
JSONUtil.toJsonStr(body))); JSONUtil.toJsonStr(body)));
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) { 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")); response.get("errmsg"));
throw new FebsException("更新职工失败"); throw new FebsException("更新职工失败");
} }
@ -691,7 +584,6 @@ public class WxUtil {
JSONObject response = JSONUtil.parseObj( JSONObject response = JSONUtil.parseObj(
post(QywxConstant.USER_DELETE_URL + "?access_token=" + accessToken, post(QywxConstant.USER_DELETE_URL + "?access_token=" + accessToken,
JSONUtil.toJsonStr(body))); JSONUtil.toJsonStr(body)));
log.info("企业微信删除用户请求参数: {}, 返回值: {}", body, response);
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) { 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")); response.get("errmsg"));
@ -827,7 +719,6 @@ public class WxUtil {
JSONObject response = JSONUtil.parseObj( JSONObject response = JSONUtil.parseObj(
post(QywxConstant.PARENT_CREATE_URL + "?access_token=" + accessToken, post(QywxConstant.PARENT_CREATE_URL + "?access_token=" + accessToken,
JSONUtil.toJsonStr(body))); JSONUtil.toJsonStr(body)));
log.info("企业微信新增家长,res:[{}],params:[{}]", response, body);
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) { if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
log.error("企业微信新增家长失败code:{},msg:{},result_list:{}", response.get("errcode"), log.error("企业微信新增家长失败code:{},msg:{},result_list:{}", response.get("errcode"),
response.get("errmsg"), response.get("result_list")); response.get("errmsg"), response.get("result_list"));
@ -983,43 +874,10 @@ public class WxUtil {
JSONObject response = JSONUtil.parseObj( JSONObject response = JSONUtil.parseObj(
get(QywxConstant.SCHOOL_DEPT_DELETE_URL, params)); get(QywxConstant.SCHOOL_DEPT_DELETE_URL, params));
String code = response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null; if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
// 60003代表企业微信部门不存在
if (!SUCCESS_CODE.equals(code) && !"60003".equals(code)) {
log.error("企业微信删除家校部门失败code:{},msg:{},params:{}", response.get(ERR_CODE), log.error("企业微信删除家校部门失败code:{},msg:{},params:{}", response.get(ERR_CODE),
response.get(ERR_MESSAGE), params); response.get(ERR_MESSAGE), params);
throw new FebsException("删除家校部门失败,请检查是否包含成员或子部门"); 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.WxPublicUtil,\
com.yida.data.common.core.utils.UnionPayPublicUtil,\ com.yida.data.common.core.utils.UnionPayPublicUtil,\
com.yida.data.common.core.configure.AsyncPollConfigure,\ com.yida.data.common.core.configure.AsyncPollConfigure,\
com.yida.data.common.core.handler.BaseExceptionHandler,\ com.yida.data.common.core.handler.BaseExceptionHandler
com.yida.data.common.core.utils.WxServiceProviderUtil

View File

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

View File

@ -15,7 +15,6 @@ import com.yida.data.log.annotation.OperationLog;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature; import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -50,23 +49,21 @@ public class LogService {
* @author ZYJ * @author ZYJ
* @date 2021/1/8 16:30 * @date 2021/1/8 16:30
*/ */
@Async //@Async
public void saveOperationLog(JoinPoint joinPoint, String ip, String params, Object result, Long createId, String createName) { public void saveOperationLog(JoinPoint joinPoint, String ip, String params, Object result) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature(); MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod(); Method method = signature.getMethod();
OperationLog opLog = method.getAnnotation(OperationLog.class); OperationLog opLog = method.getAnnotation(OperationLog.class);
//ip地址 //ip地址
Log systemLogInfo = new Log(); Log systemLogInfo = new Log();
systemLogInfo.setCreateId(createId);
systemLogInfo.setCreateName(createName);
// 创建人 // 创建人
// if (FebsUtil.isLogin()) { if (FebsUtil.isLogin()) {
// CurrentUser currentUser = FebsUtil.getCurrentUser(); CurrentUser currentUser = FebsUtil.getCurrentUser();
// if (currentUser != null) { if (currentUser != null) {
// systemLogInfo.setCreateId(currentUser.getUserId()); systemLogInfo.setCreateId(currentUser.getUserId());
// systemLogInfo.setCreateName(currentUser.getUsername()); systemLogInfo.setCreateName(currentUser.getUsername());
// } }
// } }
systemLogInfo.setIp(ip); systemLogInfo.setIp(ip);
//设置开始时间 //设置开始时间
systemLogInfo.setStartTime(LocalDateTime.now()); systemLogInfo.setStartTime(LocalDateTime.now());

View File

@ -104,19 +104,4 @@ public interface RabbitConstant {
* websocket推送队列与交换机绑定key * websocket推送队列与交换机绑定key
*/ */
String MSG_WEBSOCKET_KEY = "msg_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; 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 cc.mrbird.febs.common.redis.service.RedisService;
import cn.hutool.core.collection.CollUtil; 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 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.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.school.EduYidaAppAccount;
import com.yida.data.common.core.entity.system.BaiduApiConfig; import com.yida.data.common.core.entity.system.*;
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.user.EduUserDept; 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.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.NumberUtil;
import com.yida.data.common.core.utils.RedisUtil; import com.yida.data.common.core.utils.RedisUtil;
import com.yida.data.common.core.utils.UPayUtil; import com.yida.data.system.feign.*;
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.user.feign.RemoteUserDeptService; 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.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
@Slf4j @Slf4j
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class CommonService { public class CommonService {
private final RemoteAppService remoteAppService;
private final RemoteQywxService remoteQywxService;
private final RemoteDeptService remoteDeptService; private final RemoteDeptService remoteDeptService;
private final RemoteDictService remoteDictService; private final RemoteAppService remoteAppService;
private final RemoteCommonService remoteCommonService;
private final RemoteYidaAppService remoteYidaAppService; 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 RemoteYidaAppAccountService remoteYidaAppAccountService;
private final RemoteBaiDuApiConfigService remoteBaiDuApiConfigService; private final RemotePayWxConfigService remotePayWxConfigService;
private final RemoteConstructionPayConfigService remoteConstructionPayConfigService; private final RemoteHolidayService remoteHolidayService;
private final RemoteStaffService remoteStaffService; private final RemoteCommonService remoteCommonService;
private final RemoteStudentService remoteStudentService; private final RemoteUserDeptService remoteUserDeptService;
private final RemoteDeptHomeIndexService remoteDeptHomeIndexService; private final RemotePayTypeService remotePayTypeService;
private final RemoteUnionPayConfigService remoteUnionPayConfigService;
private final WxUtil wxUtil;
private final WxServiceProviderUtil wxServiceProviderUtil;
private final RedisService redisService; 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) { public Dept getDept(Long deptId) {
if (deptId == null) { if (deptId == null) {
return null; return null;
@ -300,7 +211,7 @@ public class CommonService {
redisService.llSet(CachePrefixConstant.HOLIDAY, data); redisService.llSet(CachePrefixConstant.HOLIDAY, data);
for (EduHoliday holiday : data) { for (EduHoliday holiday : data) {
// 节假日 // 节假日
if (target.equals(holiday.getDate())) { if (target.equals(holiday)) {
return false; return false;
} }
} }
@ -309,7 +220,7 @@ public class CommonService {
for (Object o : objects) { for (Object o : objects) {
// 节假日 // 节假日
EduHoliday holiday = (EduHoliday) o; EduHoliday holiday = (EduHoliday) o;
if (target.equals(holiday.getDate())) { if (target.equals(holiday)) {
return false; return false;
} }
} }
@ -317,38 +228,6 @@ public class CommonService {
return true; 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; 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(可查询非直接子家校部门) 未毕业家校部门 * 向下查询指定家校部门类型的家校部门id(可查询非直接子家校部门) 未毕业家校部门
* *
@ -529,360 +331,14 @@ public class CommonService {
return remoteUserDeptService.findChildIdByParentAndTypeNoPermission(deptId, type).getData(); 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 schoolName
* @param serviceCorpId 服务商corpId * @return
* @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
*/ */
public Dept getSchoolByName(String schoolName) { public Dept getSchoolByName(String schoolName) {
return remoteDeptService.getSchoolByName(schoolName).getData(); 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> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>edu-custom-form-biz</artifactId> <artifactId>edu-custom-form-biz</artifactId>
<packaging>jar</packaging>
<properties> <properties>
<maven.compiler.source>8</maven.compiler.source> <maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target> <maven.compiler.target>8</maven.compiler.target>

View File

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

View File

@ -119,7 +119,7 @@ public class CardRabbitReceiver {
redisService.hset(CachePrefixConstant.STUDENT_DATA, card.getStudentId().toString(), student); redisService.hset(CachePrefixConstant.STUDENT_DATA, card.getStudentId().toString(), student);
} }
EduApp app = commonService 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()); String accessToken = wxUtil.getAccessToken(app.getWxCorpId(), app.getWxSecret());
TextSchoolNotice notice = new TextSchoolNotice(); TextSchoolNotice notice = new TextSchoolNotice();
notice.setAgentid(app.getWxAgentId()); 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 cc.mrbird.febs.common.redis.service.RedisService;
import com.baomidou.mybatisplus.core.metadata.IPage; 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.ModuleName;
import com.yida.data.common.core.common.ResultBean; import com.yida.data.common.core.common.ResultBean;
import com.yida.data.common.core.entity.CurrentUser; 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.dto.studentCard.DisturbStatusDTO;
import com.yida.data.device.studentCard.service.EduStudentCardDisturbTimeService; import com.yida.data.device.studentCard.service.EduStudentCardDisturbTimeService;
import com.yida.data.device.studentCard.service.EduStudentCardService; 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.CardInfoVO;
import com.yida.data.device.vo.studentCard.CardPageVO; import com.yida.data.device.vo.studentCard.CardPageVO;
import com.yida.data.device.vo.studentCard.CardWithAddressVO; import com.yida.data.device.vo.studentCard.CardWithAddressVO;
import com.yida.data.device.vo.studentCard.ListStudentCardVO; import com.yida.data.device.vo.studentCard.ListStudentCardVO;
import com.yida.data.device.vo.studentCard.LocationVO; 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.device.vo.studentCard.TrackVO;
import com.yida.data.log.annotation.OperationLog; import com.yida.data.log.annotation.OperationLog;
import com.yida.data.system.feign.RemoteDeptService; import com.yida.data.system.feign.RemoteDeptService;
@ -82,7 +83,6 @@ public class EduStudentCardController {
@ApiOperation("更新学生证") @ApiOperation("更新学生证")
@PostMapping("/updateCard") @PostMapping("/updateCard")
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "更新学生证", type = OperationLogTypeEnum.UPDATE)
public ResultBean updateCard(@RequestBody EduStudentCard card) { public ResultBean updateCard(@RequestBody EduStudentCard card) {
eduStudentCardService.updateCard(card); eduStudentCardService.updateCard(card);
return ResultBean.buildSuccess(); return ResultBean.buildSuccess();
@ -154,7 +154,9 @@ public class EduStudentCardController {
@ApiOperation("家长对应学生列表") @ApiOperation("家长对应学生列表")
@GetMapping("/listStudentCard") @GetMapping("/listStudentCard")
@ControllerLog(operation = "家长对应学生列表")
public ResultBean<List<ListStudentCardVO>> listStudentCard(@ApiParam("家长id") @RequestParam Long parentId) { public ResultBean<List<ListStudentCardVO>> listStudentCard(@ApiParam("家长id") @RequestParam Long parentId) {
return ResultBean.buildSuccess(eduStudentCardService.listStudentCard(parentId)); return ResultBean.buildSuccess(eduStudentCardService.listStudentCard(parentId));
} }
@ -180,7 +182,7 @@ public class EduStudentCardController {
@ApiOperation("批量免打扰") @ApiOperation("批量免打扰")
@PostMapping("/setDisturbStatus") @PostMapping("/setDisturbStatus")
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "批量免打扰", type = OperationLogTypeEnum.UPDATE) @ControllerLog(operation = "批量免打扰")
public ResultBean setDisturbStatus(@RequestBody DisturbStatusDTO disturbStatusDTO) { public ResultBean setDisturbStatus(@RequestBody DisturbStatusDTO disturbStatusDTO) {
eduStudentCardService.setDisturbStatus(disturbStatusDTO); eduStudentCardService.setDisturbStatus(disturbStatusDTO);
return ResultBean.buildSuccess(); return ResultBean.buildSuccess();
@ -211,7 +213,6 @@ public class EduStudentCardController {
@ApiOperation("下发监听指令") @ApiOperation("下发监听指令")
@GetMapping("/issueMonitor") @GetMapping("/issueMonitor")
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "下发监听指令", type = OperationLogTypeEnum.SELECT)
public ResultBean issueMonitor(@ApiParam("接收监听手机号") String mobile, public ResultBean issueMonitor(@ApiParam("接收监听手机号") String mobile,
@ApiParam("学生证imei号") String imei) { @ApiParam("学生证imei号") String imei) {
eduStudentCardService.issueMonitor(mobile, 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.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.annotation.ControllerLog; 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.common.ResultBean;
import com.yida.data.common.core.entity.card.EduStudentCardPhone; 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.device.studentCard.service.EduStudentCardPhoneService;
import com.yida.data.log.annotation.OperationLog;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
@ -42,6 +39,7 @@ public class EduStudentCardPhoneController {
@ApiOperation("查询学生证电话") @ApiOperation("查询学生证电话")
@GetMapping("/getFamilyPhone") @GetMapping("/getFamilyPhone")
@ControllerLog(operation = "查询亲情电话")
public ResultBean getFamilyPhone(@ApiParam("iMei号") @RequestParam String imei, public ResultBean getFamilyPhone(@ApiParam("iMei号") @RequestParam String imei,
@ApiParam("1是亲情电话2是sos电话3是通话白名单") @RequestParam Integer type) { @ApiParam("1是亲情电话2是sos电话3是通话白名单") @RequestParam Integer type) {
List<EduStudentCardPhone> list = eduStudentCardPhoneService.list(Wrappers.lambdaQuery(new EduStudentCardPhone()) List<EduStudentCardPhone> list = eduStudentCardPhoneService.list(Wrappers.lambdaQuery(new EduStudentCardPhone())
@ -52,7 +50,7 @@ public class EduStudentCardPhoneController {
@ApiOperation("保存电话") @ApiOperation("保存电话")
@PostMapping("/savePhone") @PostMapping("/savePhone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "保存电话", type = OperationLogTypeEnum.SAVE) @ControllerLog(operation = "保存电话")
public ResultBean savePhone(@RequestBody EduStudentCardPhone phone) { public ResultBean savePhone(@RequestBody EduStudentCardPhone phone) {
eduStudentCardPhoneService.savePhone(phone); eduStudentCardPhoneService.savePhone(phone);
return ResultBean.buildSuccess(); return ResultBean.buildSuccess();
@ -61,7 +59,7 @@ public class EduStudentCardPhoneController {
@ApiOperation("通用删除电话") @ApiOperation("通用删除电话")
@GetMapping("/delPhone") @GetMapping("/delPhone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "通用删除电话", type = OperationLogTypeEnum.DELETE) @ControllerLog(operation = "通用删除电话")
public ResultBean delPhone(@RequestParam Long id) { public ResultBean delPhone(@RequestParam Long id) {
eduStudentCardPhoneService.delPhone(id); eduStudentCardPhoneService.delPhone(id);
return ResultBean.buildSuccess(); return ResultBean.buildSuccess();
@ -69,7 +67,7 @@ public class EduStudentCardPhoneController {
@ApiOperation("批量修改电话") @ApiOperation("批量修改电话")
@PostMapping("/updateFamilyPhoneBatch") @PostMapping("/updateFamilyPhoneBatch")
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量修改电话", type = OperationLogTypeEnum.UPDATE) @ControllerLog(operation = "修改电话")
public ResultBean updateFamilyPhoneBatch(@RequestBody List<EduStudentCardPhone> phones, public ResultBean updateFamilyPhoneBatch(@RequestBody List<EduStudentCardPhone> phones,
@ApiParam("1-亲情电话2-sos3-白名单") Integer type, String imei) { @ApiParam("1-亲情电话2-sos3-白名单") Integer type, String imei) {
eduStudentCardPhoneService.updatePhoneBatch(phones, type, 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) { 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(); TextSchoolNotice notice = new TextSchoolNotice();
notice.setAgentid(app.getWxAgentId()); notice.setAgentid(app.getWxAgentId());
notice.setTo_student_userid(Collections.singletonList(student.getWxId())); 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.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.annotation.ControllerLog; 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.common.ResultBean;
import com.yida.data.common.core.entity.CurrentUser; 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.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.EduTelephone;
import com.yida.data.common.core.entity.telephone.EduTelephoneBlack; import com.yida.data.common.core.entity.telephone.EduTelephoneBlack;
import com.yida.data.common.core.entity.telephone.EduTelephoneCard; 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.OnlineCountVO;
import com.yida.data.device.vo.telephone.DeviceNumberVO; import com.yida.data.device.vo.telephone.DeviceNumberVO;
import com.yida.data.device.vo.telephone.TelephoneVO; import com.yida.data.device.vo.telephone.TelephoneVO;
import com.yida.data.log.annotation.OperationLog;
import com.yida.data.system.feign.RemoteDeptService; import com.yida.data.system.feign.RemoteDeptService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -87,13 +84,13 @@ public class EduTelephoneController {
*/ */
@ApiOperation("话机设备数量统计") @ApiOperation("话机设备数量统计")
@GetMapping("/findDeviceNumber") @GetMapping("/findDeviceNumber")
@ControllerLog(operation = "话机设备数量统计")
public ResultBean<DeviceNumberVO> findDeviceNumber() throws NoSuchMethodException { public ResultBean<DeviceNumberVO> findDeviceNumber() throws NoSuchMethodException {
return eduTelephoneService.findDeviceNumber(); return eduTelephoneService.findDeviceNumber();
} }
@ApiOperation("修改或新增") @ApiOperation("修改或新增")
@PostMapping("/insertTelephone") @PostMapping("/insertTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "修改或新增亲情电话", type = OperationLogTypeEnum.SAVE)
public ResultBean insertTelephone(@RequestBody EduTelephone eduTelephone) { public ResultBean insertTelephone(@RequestBody EduTelephone eduTelephone) {
eduTelephoneService.saveOrUpdate(eduTelephone); eduTelephoneService.saveOrUpdate(eduTelephone);
return ResultBean.buildSuccess(); return ResultBean.buildSuccess();
@ -101,7 +98,6 @@ public class EduTelephoneController {
@ApiOperation("批量设置") @ApiOperation("批量设置")
@PostMapping("/updateTelephone") @PostMapping("/updateTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量设置亲情电话", type = OperationLogTypeEnum.UPDATE)
public ResultBean updateTelephone(@RequestBody TelephoneDTO telephoneDTO) { public ResultBean updateTelephone(@RequestBody TelephoneDTO telephoneDTO) {
eduTelephoneService.updateTelephone(telephoneDTO); eduTelephoneService.updateTelephone(telephoneDTO);
return ResultBean.buildSuccess(); return ResultBean.buildSuccess();
@ -116,7 +112,6 @@ public class EduTelephoneController {
@ApiOperation("重置本月通话时间") @ApiOperation("重置本月通话时间")
@GetMapping("/delTelephoneTime") @GetMapping("/delTelephoneTime")
@OperationLog(module = ModuleName.TELEPHONE, methods = "重置本月通话时间", type = OperationLogTypeEnum.UPDATE)
public ResultBean delTelephoneTime(@ApiParam("话机Id") @RequestParam Long id) { public ResultBean delTelephoneTime(@ApiParam("话机Id") @RequestParam Long id) {
EduTelephone eduTelephone = new EduTelephone(); EduTelephone eduTelephone = new EduTelephone();
eduTelephone.setId(id); eduTelephone.setId(id);
@ -127,7 +122,6 @@ public class EduTelephoneController {
@ApiOperation("停运") @ApiOperation("停运")
@GetMapping("/stopTelephone") @GetMapping("/stopTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "停运亲情电话", type = OperationLogTypeEnum.UPDATE)
public ResultBean stopTelephone(@ApiParam("话机Id") @RequestParam Long id, public ResultBean stopTelephone(@ApiParam("话机Id") @RequestParam Long id,
@ApiParam("1停运0正常") @RequestParam Integer status) { @ApiParam("1停运0正常") @RequestParam Integer status) {
@ -139,7 +133,6 @@ public class EduTelephoneController {
@ApiOperation("删除和批量删除") @ApiOperation("删除和批量删除")
@PostMapping("/delTelephone") @PostMapping("/delTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "删除和批量删除亲情电话", type = OperationLogTypeEnum.DELETE)
public ResultBean delTelephone(@ApiParam("ids") @RequestBody List<Long> ids) { public ResultBean delTelephone(@ApiParam("ids") @RequestBody List<Long> ids) {
eduTelephoneService.removeByIds(ids); eduTelephoneService.removeByIds(ids);
for (Long id : ids) { for (Long id : ids) {
@ -153,7 +146,6 @@ public class EduTelephoneController {
@ApiOperation("批量停运") @ApiOperation("批量停运")
@PostMapping("/listStopTelephone") @PostMapping("/listStopTelephone")
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量停运亲情电话", type = OperationLogTypeEnum.UPDATE)
public ResultBean listStopTelephone(@ApiParam("话机Id") @RequestBody PhoneStatusDTO phoneStatusDTO) { public ResultBean listStopTelephone(@ApiParam("话机Id") @RequestBody PhoneStatusDTO phoneStatusDTO) {
List<Long> ids = phoneStatusDTO.getIds(); 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.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.annotation.ControllerLog; 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.common.ResultBean;
import com.yida.data.common.core.entity.constant.CachePrefixConstant; 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.entity.telephone.EduTelephoneOrder;
import com.yida.data.common.core.utils.FebsUtil; import com.yida.data.common.core.utils.FebsUtil;
import com.yida.data.device.dto.telephone.OrderPageDTO; import com.yida.data.device.dto.telephone.OrderPageDTO;
import com.yida.data.device.telephone.service.EduTelephoneOrderService; import com.yida.data.device.telephone.service.EduTelephoneOrderService;
import com.yida.data.device.vo.telephone.OrderInfoVO; import com.yida.data.device.vo.telephone.OrderInfoVO;
import com.yida.data.device.vo.telephone.OrderPageVO; import com.yida.data.device.vo.telephone.OrderPageVO;
import com.yida.data.log.annotation.OperationLog;
import com.yida.data.school.vo.transcation.PayInfoVO; import com.yida.data.school.vo.transcation.PayInfoVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -73,7 +70,7 @@ public class EduTelephoneOrderController {
@ApiOperation("生成订单") @ApiOperation("生成订单")
@GetMapping("/createOrder") @GetMapping("/createOrder")
@OperationLog(module = ModuleName.TELEPHONE, methods = "生成订单", type = OperationLogTypeEnum.INSERT) @ControllerLog(operation = "生成订单")
public ResultBean<PayInfoVO> insertEduProductOrder(@ApiParam("充值金额") Double money, public ResultBean<PayInfoVO> insertEduProductOrder(@ApiParam("充值金额") Double money,
@ApiParam("ic卡id") Long icCardId, @ApiParam("ic卡id") Long icCardId,
@ApiParam("支付方式0-微信jsapi1-微信h5") Integer payType) { @ApiParam("支付方式0-微信jsapi1-微信h5") Integer payType) {
@ -90,7 +87,6 @@ public class EduTelephoneOrderController {
@ApiOperation("发起支付") @ApiOperation("发起支付")
@GetMapping("/payOrder") @GetMapping("/payOrder")
@OperationLog(module = ModuleName.TELEPHONE, methods = "发起支付", type = OperationLogTypeEnum.INSERT)
public ResultBean<PayInfoVO> payOrder(String orderCode) { public ResultBean<PayInfoVO> payOrder(String orderCode) {
Object prepay = redisService.get(CachePrefixConstant.ORDER_FLAG + orderCode); Object prepay = redisService.get(CachePrefixConstant.ORDER_FLAG + orderCode);
PayInfoVO infoVO = eduTelephoneOrderService.getWxJsSign(orderCode, prepay.toString()); PayInfoVO infoVO = eduTelephoneOrderService.getWxJsSign(orderCode, prepay.toString());

View File

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

View File

@ -123,6 +123,15 @@ public class EduBillController {
return ResultBean.buildSuccess(eduBillStudentService.exportBillPayData(billStudentSelectPageDTO, response)); 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") @PostMapping(value = "listBillOrderPage")
@ApiOperation(value = "查询账单订单列表数据") @ApiOperation(value = "查询账单订单列表数据")
public ResultBean<IPage<BillOrderSelectPageVO>> listBillOrderPage(BillOrderSelectPageDTO dto) { 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, List<BillPayVO> listItemPayInfo(@Param("billId") Long billId,
@Param("studentId") Long studentId); @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

@ -63,11 +63,13 @@ public interface EduBillOrderMapper extends BaseMapper<EduBillOrder> {
* 缴费金额大于0 * 缴费金额大于0
* *
* @param billId 账单id * @param billId 账单id
* @param studentIds 学生id集合
* @return java.lang.Long * @return java.lang.Long
* @author ZYJ * @author ZYJ
* @date 2022/4/18 16:30 * @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 * @date 2022/4/19 17:04
*/ */
List<BillPayVO> listItemPayInfo(Long billId, Long studentId); 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 com.yida.data.common.core.entity.mall.EduBillOrder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -46,11 +47,12 @@ public interface EduBillOrderService extends IService<EduBillOrder> {
* 查询账单缴费人数 * 查询账单缴费人数
* *
* @param billId 账单id * @param billId 账单id
* @param studentIds 学生id集合
* @return java.lang.Long * @return java.lang.Long
* @author ZYJ * @author ZYJ
* @date 2022/4/18 16:29 * @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.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; 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.common.core.entity.mall.EduBillStudent;
import com.yida.data.mall.dto.BillStudentSelectPageDTO; import com.yida.data.mall.dto.BillStudentSelectPageDTO;
import com.yida.data.mall.dto.BillUserSaveDTO; import com.yida.data.mall.dto.BillUserSaveDTO;
import com.yida.data.mall.vo.BillStudentInfoVO; import com.yida.data.mall.vo.BillStudentInfoVO;
import org.springframework.scheduling.annotation.Async;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
@ -79,4 +81,15 @@ public interface EduBillStudentService extends IService<EduBillStudent> {
* @date 2022/10/11 17:29 * @date 2022/10/11 17:29
*/ */
String exportBillPayData(BillStudentSelectPageDTO billStudentSelectPageDTO, HttpServletResponse response); 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); H5BillOrderInfoVO getH5BillOrderInfo(Long billOrderId, String orderCode);
/** /**
* 继续支付 * continuePayOrder
* *
* @param orderCode 订单号 * @param orderCode 订单号
* @param deptId 学校id * @param deptId 学校id

View File

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

View File

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

View File

@ -123,8 +123,6 @@ public class EduBillStatisticsServiceImpl implements EduBillStatisticsService {
// 查询指定账单数据 // 查询指定账单数据
billList.add(eduBillService.getById(billId)); billList.add(eduBillService.getById(billId));
} }
// 查询已开始的账单
// List<EduBill> billList = eduBillMapper.selectStartBill();
if (CollUtil.isNotEmpty(billList)) { if (CollUtil.isNotEmpty(billList)) {
for (EduBill eduBill : 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 cc.mrbird.febs.common.redis.service.RedisService;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; 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.EduBill;
import com.yida.data.common.core.entity.mall.EduBillOrder; 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.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.entity.user.EduStudent;
import com.yida.data.common.core.enums.OrderStatusEnum; import com.yida.data.common.core.enums.OrderStatusEnum;
import com.yida.data.common.core.exception.FebsException; 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.core.utils.FebsUtil;
import com.yida.data.common.service.CommonService;
import com.yida.data.mall.dto.BillStudentSelectPageDTO; import com.yida.data.mall.dto.BillStudentSelectPageDTO;
import com.yida.data.mall.dto.BillUserSaveDTO; import com.yida.data.mall.dto.BillUserSaveDTO;
import com.yida.data.mall.mapper.EduBillMapper; 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.BillStudentInfoVO;
import com.yida.data.mall.vo.h5.H5BillItemVO; import com.yida.data.mall.vo.h5.H5BillItemVO;
import com.yida.data.system.feign.RemoteCommonService; import com.yida.data.system.feign.RemoteCommonService;
import com.yida.data.user.dto.ListStudentDTO;
import com.yida.data.user.feign.RemoteStudentService; import com.yida.data.user.feign.RemoteStudentService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -44,10 +53,7 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -63,8 +69,8 @@ import java.util.stream.Collectors;
public class EduBillStudentServiceImpl extends ServiceImpl public class EduBillStudentServiceImpl extends ServiceImpl
<EduBillStudentMapper, EduBillStudent> implements EduBillStudentService { <EduBillStudentMapper, EduBillStudent> implements EduBillStudentService {
private final CommonService commonService;
private final RemoteStudentService remoteStudentService; private final RemoteStudentService remoteStudentService;
private final RemoteCommonService remoteCommonService;
private final EduBillOrderService eduBillOrderService; private final EduBillOrderService eduBillOrderService;
private final EduBillOrderItemService eduBillOrderItemService; private final EduBillOrderItemService eduBillOrderItemService;
@ -77,6 +83,12 @@ public class EduBillStudentServiceImpl extends ServiceImpl
private final RedisService redisService; private final RedisService redisService;
@Value("${febs.pushUrl}")
private String pushUrl;
@Value("${febs.billUrl}")
private String billUrl;
@Override @Override
public IPage<BillStudentInfoVO> listBillUserPage(BillStudentSelectPageDTO dto) { public IPage<BillStudentInfoVO> listBillUserPage(BillStudentSelectPageDTO dto) {
// 查询学生信息 // 查询学生信息
@ -363,4 +375,79 @@ public class EduBillStudentServiceImpl extends ServiceImpl
return ""; 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.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil; 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.CurrentUser;
import com.yida.data.common.core.entity.apply.EduApplyProductOrder; 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.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.StringConstant;
import com.yida.data.common.core.entity.constant.UnionPayConstant; import com.yida.data.common.core.entity.constant.UnionPayConstant;
import com.yida.data.common.core.entity.mall.*; import com.yida.data.common.core.entity.mall.*;
@ -80,12 +82,12 @@ public class H5EduBillServiceImpl implements H5EduBillService {
private final EduBillService eduBillService; private final EduBillService eduBillService;
private final EduBillItemService eduBillItemService; private final EduBillItemService eduBillItemService;
private final EduBillItemSubService eduBillItemSubService;
private final EduBillOrderService eduBillOrderService; private final EduBillOrderService eduBillOrderService;
private final EduBillItemSubService eduBillItemSubService;
private final EduBillOrderItemService eduBillOrderItemService; private final EduBillOrderItemService eduBillOrderItemService;
private final EduBillOrderRefundService eduBillOrderRefundService;
private final EduBillOrderItemSubService eduBillOrderItemSubService; private final EduBillOrderItemSubService eduBillOrderItemSubService;
private final EduBillOrderStudentService eduBillOrderStudentService; private final EduBillOrderStudentService eduBillOrderStudentService;
private final EduBillOrderRefundService eduBillOrderRefundService;
private final EduBillMapper eduBillMapper; private final EduBillMapper eduBillMapper;
private final EduBillOrderMapper eduBillOrderMapper; private final EduBillOrderMapper eduBillOrderMapper;
@ -183,16 +185,26 @@ public class H5EduBillServiceImpl implements H5EduBillService {
public BillPayInfoVO createBillOrder(CreateBillOrderDTO createBillOrderDTO) { public BillPayInfoVO createBillOrder(CreateBillOrderDTO createBillOrderDTO) {
CurrentUser currentUser = FebsUtil.getCurrentUser(); 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( BillOrderStudentCacheVO existBillOrderStudent = (BillOrderStudentCacheVO) redisService.get(
CachePrefixConstant.BILL_ORDER_STUDENT + createBillOrderDTO.getStudentId().toString() CachePrefixConstant.BILL_ORDER_STUDENT + createBillOrderDTO.getStudentId().toString()
+ StringConstant.DOT + createBillOrderDTO.getBillId().toString()); + StringConstant.DOT + createBillOrderDTO.getBillId().toString());
if (Objects.nonNull(existBillOrderStudent)) { if (Objects.nonNull(existBillOrderStudent)) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException(String.format("%s%s正在支付中, 请耐心等待", throw new FebsException(String.format("%s%s正在支付中, 请耐心等待",
existBillOrderStudent.getStudentName(), existBillOrderStudent.getParentType())); existBillOrderStudent.getStudentName(), existBillOrderStudent.getParentType()));
} }
if (StringUtils.isEmpty(createBillOrderDTO.getPayWay()) || if (StringUtils.isEmpty(createBillOrderDTO.getPayWay()) ||
PayWay.ALIPAY.getValue().equals(createBillOrderDTO.getPayWay())) { PayWay.ALIPAY.getValue().equals(createBillOrderDTO.getPayWay())) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException(ResultMsgType.PAY_TYPE_ERROR.getValue()); throw new FebsException(ResultMsgType.PAY_TYPE_ERROR.getValue());
} }
// 查询账单信息 // 查询账单信息
@ -200,11 +212,15 @@ public class H5EduBillServiceImpl implements H5EduBillService {
if (Objects.isNull(bill) if (Objects.isNull(bill)
|| BillStatusEnum.DISABLE_STATUS.getStatus().equals(bill.getEnableStatus()) || BillStatusEnum.DISABLE_STATUS.getStatus().equals(bill.getEnableStatus())
|| bill.getBillEndDate().isBefore(LocalDateTime.now())) { || bill.getBillEndDate().isBefore(LocalDateTime.now())) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException("当前账单暂时无法缴费"); throw new FebsException("当前账单暂时无法缴费");
} }
// 查询学生信息 // 查询学生信息
EduStudent student = remoteStudentService.getStudentNoPermission(createBillOrderDTO.getStudentId()).getData(); EduStudent student = remoteStudentService.getStudentNoPermission(createBillOrderDTO.getStudentId()).getData();
if (Objects.isNull(student)) { if (Objects.isNull(student)) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException("学生信息错误"); throw new FebsException("学生信息错误");
} }
// 家长信息 // 家长信息
@ -212,6 +228,8 @@ public class H5EduBillServiceImpl implements H5EduBillService {
EduParent orderParent = parents.stream().filter( EduParent orderParent = parents.stream().filter(
x -> currentUser.getMobile().equals(x.getMobile())).collect(Collectors.toList()).get(0); x -> currentUser.getMobile().equals(x.getMobile())).collect(Collectors.toList()).get(0);
if (Objects.isNull(orderParent)) { if (Objects.isNull(orderParent)) {
// 解锁
redisService.unlock(lockKey);
throw new FebsException("家长信息错误"); throw new FebsException("家长信息错误");
} }
@ -219,7 +237,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
try { try {
// 订单号 需要根据支付方式生成不同的订单号 // 订单号 需要根据支付方式生成不同的订单号
String orderNo = ""; String orderNo = "";
if (PayWay.WEI_XIN.getValue().equals(createBillOrderDTO.getPayWay())) { if (PayWay.WEIXIN.getValue().equals(createBillOrderDTO.getPayWay())) {
// 微信 // 微信
orderNo = String.valueOf(ORDER_CODE_GENERATOR.nextId()); orderNo = String.valueOf(ORDER_CODE_GENERATOR.nextId());
} else if (PayWay.UNION.getValue().equals(createBillOrderDTO.getPayWay())) { } else if (PayWay.UNION.getValue().equals(createBillOrderDTO.getPayWay())) {
@ -258,6 +276,9 @@ public class H5EduBillServiceImpl implements H5EduBillService {
redisService.del(CachePrefixConstant.BILL_ORDER_FLAG + orderCode); redisService.del(CachePrefixConstant.BILL_ORDER_FLAG + orderCode);
} }
throw new FebsException(e.getMessage()); throw new FebsException(e.getMessage());
} finally {
// 解锁
redisService.unlock(lockKey);
} }
} }
@ -290,6 +311,11 @@ public class H5EduBillServiceImpl implements H5EduBillService {
for (CreateBillOrderDTO.CreateBillOrderItemDTO itemDTO : createBillOrderDTO.getItemList()) { for (CreateBillOrderDTO.CreateBillOrderItemDTO itemDTO : createBillOrderDTO.getItemList()) {
// 根据项目id查询具体信息 // 根据项目id查询具体信息
EduBillItem billItem = eduBillItemService.getById(itemDTO.getItemId()); 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(); String itemFamilyType = billItem.getFamilyType();
// 判断当前学生能否减免 // 判断当前学生能否减免
boolean reductionFlag = false; boolean reductionFlag = false;
@ -495,7 +521,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
// 下单返回信息 // 下单返回信息
String result = ""; String result = "";
try { try {
if (PayWay.WEI_XIN.getValue().equals(eduBillOrder.getPayWay())) { if (PayWay.WEIXIN.getValue().equals(eduBillOrder.getPayWay())) {
// 微信支付 // 微信支付
EduPayWxConfig config = commonService.getPayWxConfigBySchool(student.getSchoolId()); EduPayWxConfig config = commonService.getPayWxConfigBySchool(student.getSchoolId());
EduApplyProductOrder order = new EduApplyProductOrder(); EduApplyProductOrder order = new EduApplyProductOrder();
@ -553,7 +579,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
public BillPayInfoVO getPayInfo(String orderCode, String billOrderFlag, Long deptId, public BillPayInfoVO getPayInfo(String orderCode, String billOrderFlag, Long deptId,
boolean needToPay, String payWay, Integer payType) { boolean needToPay, String payWay, Integer payType) {
BillPayInfoVO billPayInfoVO = null; BillPayInfoVO billPayInfoVO = null;
if (PayWay.WEI_XIN.getValue().equals(payWay)) { if (PayWay.WEIXIN.getValue().equals(payWay)) {
// 微信 // 微信
billPayInfoVO = getWxJsSign(orderCode, billOrderFlag, deptId, needToPay, payType); billPayInfoVO = getWxJsSign(orderCode, billOrderFlag, deptId, needToPay, payType);
} else if (PayWay.UNION.getValue().equals(payWay)) { } else if (PayWay.UNION.getValue().equals(payWay)) {
@ -587,7 +613,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
BillPayInfoVO infoVO = new BillPayInfoVO(); BillPayInfoVO infoVO = new BillPayInfoVO();
infoVO.setOrderCode(orderCode); infoVO.setOrderCode(orderCode);
infoVO.setNeedToPay(needToPay); infoVO.setNeedToPay(needToPay);
infoVO.setPayWay(PayWay.WEI_XIN.getValue()); infoVO.setPayWay(PayWay.WEIXIN.getValue());
infoVO.setPayType(wxPayType); infoVO.setPayType(wxPayType);
// js api类型 // js api类型
@ -621,7 +647,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
if (Objects.nonNull(order) if (Objects.nonNull(order)
&& (OrderStatusEnum.NOT_PAY.getStatus().equals(order.getOrderStatus()) || OrderStatusEnum.USER_PAYING.getStatus().equals(order.getOrderStatus()))) { && (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); wxBillOrderSuccess(order);
} else if (PayWay.UNION.getValue().equals(order.getPayWay())) { } else if (PayWay.UNION.getValue().equals(order.getPayWay())) {
@ -675,7 +701,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
if (flag) { if (flag) {
break; break;
} }
Thread.sleep(1000L); ThreadUtil.sleep(1000L);
} catch (Exception e) { } catch (Exception e) {
log.error("账单订单(微信支付方式)完成失败, orderNo: {}", orderCode, e); log.error("账单订单(微信支付方式)完成失败, orderNo: {}", orderCode, e);
} }
@ -734,9 +760,9 @@ public class H5EduBillServiceImpl implements H5EduBillService {
if (flag) { if (flag) {
break; break;
} }
Thread.sleep(1000L); ThreadUtil.sleep(1000L);
} catch (Exception e) { } 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); eduBillOrderService.updateById(order);
try { try {
// 判断支付方式 // 判断支付方式
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) { if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
// 关闭微信订单 // 关闭微信订单
WxPayUtil.closeOrder(commonService.getPayWxConfigBySchool(order.getDeptId()), order.getOrderCode()); WxPayUtil.closeOrder(commonService.getPayWxConfigBySchool(order.getDeptId()), order.getOrderCode());
} else if (PayWay.UNION.getValue().equals(order.getPayWay()) } else if (PayWay.UNION.getValue().equals(order.getPayWay())
@ -851,7 +877,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
eduBillOrderRefund.setOrderCode(orderCode); eduBillOrderRefund.setOrderCode(orderCode);
// 生成退款订单号 // 生成退款订单号
String refundOrderCode = ""; String refundOrderCode = "";
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) { if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
// 微信 // 微信
refundOrderCode = "R" + orderCode; refundOrderCode = "R" + orderCode;
} else if (PayWay.UNION.getValue().equals(order.getPayWay())) { } else if (PayWay.UNION.getValue().equals(order.getPayWay())) {
@ -873,7 +899,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
PayWay.class.getMethod("getValue")); PayWay.class.getMethod("getValue"));
switch (Objects.requireNonNull(payWay)) { switch (Objects.requireNonNull(payWay)) {
// 微信 // 微信
case WEI_XIN: case WEIXIN:
// 查询学校微信支付配置 // 查询学校微信支付配置
EduPayWxConfig config = commonService.getPayWxConfigBySchool(order.getDeptId()); EduPayWxConfig config = commonService.getPayWxConfigBySchool(order.getDeptId());
WxPayUtil.refund(config, eduBillOrderRefund.getOrderCode(), WxPayUtil.refund(config, eduBillOrderRefund.getOrderCode(),

View File

@ -126,4 +126,18 @@
</choose> </choose>
</select> </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> </mapper>

View File

@ -25,6 +25,10 @@
AND s.del_flag = 0 AND s.del_flag = 0
AND o.pay_status = '1' AND o.pay_status = '1'
AND o.bill_id = #{billId} AND o.bill_id = #{billId}
AND s.student_id IN
<foreach collection="studentIds" open="(" close=")" item="item" separator=",">
#{item}
</foreach>
</select> </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.annotation.Fallback;
import com.yida.data.common.core.common.ResultBean; 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.EduDormitory;
import com.yida.data.common.core.entity.school.EduDormitoryMaster;
import com.yida.data.common.core.entity.school.EduDormitoryRoom; import com.yida.data.common.core.entity.school.EduDormitoryRoom;
import com.yida.data.school.dto.index.EditPersonNumDTO; import com.yida.data.school.dto.index.EditPersonNumDTO;
import com.yida.data.school.dto.index.ListDormRoomDTO; import com.yida.data.school.dto.index.ListDormRoomDTO;
@ -106,11 +105,6 @@ public class RemoteDormitoryServiceFallback implements FallbackFactory<RemoteDor
return null; 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) { public ResultBean<EduDormitory> getDormNoPermission(Long id) {
return null; 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.annotation.Fallback;
import com.yida.data.common.core.common.ResultBean; import com.yida.data.common.core.common.ResultBean;
import com.yida.data.school.dto.leave.ListStudentRequestDetailDTO; 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.feign.leave.RemoteLeaveRequestService;
import com.yida.data.school.vo.userLeave.EduLeaveRequestUserVO;
import feign.hystrix.FallbackFactory; import feign.hystrix.FallbackFactory;
import java.util.List;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
@ -25,16 +22,16 @@ public class RemoteLeaveRequestServiceFallback implements FallbackFactory<Remote
log.error("RemoteLeaveRequestService fallback reason:{}", throwable.getMessage()); log.error("RemoteLeaveRequestService fallback reason:{}", throwable.getMessage());
return new RemoteLeaveRequestService() { return new RemoteLeaveRequestService() {
/**
* 是否存在通过的请假条
*
* @param dto
* @return
*/
@Override @Override
public ResultBean<Boolean> existRequest(ListStudentRequestDetailDTO dto) { public ResultBean<Boolean> existRequest(ListStudentRequestDetailDTO dto) {
return null; 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.common.ResultBean;
import com.yida.data.common.core.entity.constant.FebsServerConstant; 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.EduDormitory;
import com.yida.data.common.core.entity.school.EduDormitoryMaster;
import com.yida.data.common.core.entity.school.EduDormitoryRoom; import com.yida.data.common.core.entity.school.EduDormitoryRoom;
import com.yida.data.school.dto.index.EditPersonNumDTO; import com.yida.data.school.dto.index.EditPersonNumDTO;
import com.yida.data.school.dto.index.ListDormRoomDTO; import com.yida.data.school.dto.index.ListDormRoomDTO;
@ -37,9 +36,6 @@ public interface RemoteDormitoryService {
@PostMapping("/facility/dormRoom/listDormRoom") @PostMapping("/facility/dormRoom/listDormRoom")
ResultBean<List<EduDormitoryRoom>> listDormRoom(@RequestBody ListDormRoomDTO dto); ResultBean<List<EduDormitoryRoom>> listDormRoom(@RequestBody ListDormRoomDTO dto);
@PostMapping("/in/facility/dormRoom/listDormRoom")
ResultBean<List<EduDormitoryRoom>> listDormRoomNoAuth(@RequestBody ListDormRoomDTO dto);
/** /**
* 查询寝室 * 查询寝室
* *
@ -86,14 +82,6 @@ public interface RemoteDormitoryService {
@PostMapping("/facility/dormRoom/editPersonNum") @PostMapping("/facility/dormRoom/editPersonNum")
ResultBean editPersonNum(@RequestBody List<EditPersonNumDTO> dtos); 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") @GetMapping("/in/facility/dorm/getDorm")
ResultBean<EduDormitory> getDormNoPermission(@RequestParam("id") Long id); 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.common.ResultBean;
import com.yida.data.common.core.entity.constant.FebsServerConstant; import com.yida.data.common.core.entity.constant.FebsServerConstant;
import com.yida.data.school.dto.leave.ListStudentRequestDetailDTO; 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.fallback.leave.RemoteLeaveRequestServiceFallback;
import com.yida.data.school.vo.userLeave.EduLeaveRequestUserVO;
import java.util.List;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -25,12 +22,4 @@ public interface RemoteLeaveRequestService {
*/ */
@PostMapping("/in/request/leaveRequest/existRequest") @PostMapping("/in/request/leaveRequest/existRequest")
ResultBean<Boolean> existRequest(ListStudentRequestDetailDTO dto); 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; package com.yida.data.school.vo.index;
import com.yida.data.common.core.entity.home.EduHomeFunction; 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.EduSchoolHomeAnnouncement;
import com.yida.data.common.core.entity.school.EduSchoolHomeApp; import com.yida.data.common.core.entity.school.EduSchoolHomeApp;
import com.yida.data.common.core.entity.school.EduSchoolHomeCover; import com.yida.data.common.core.entity.school.EduSchoolHomeCover;
@ -40,6 +39,4 @@ public class HomeInfoVO {
private EduSchoolHomeNews news; private EduSchoolHomeNews news;
private Integer deptType; private Integer deptType;
@ApiModelProperty("关联小程序List:新版")
private List<EduDeptHomeApp> eduDeptHomeAppList;
} }

View File

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

View File

@ -13,7 +13,6 @@ import lombok.Data;
@Data @Data
@ApiModel("分页查询数据") @ApiModel("分页查询数据")
public class SchoolNoticePageVO { public class SchoolNoticePageVO {
private Long id; private Long id;
@ApiModelProperty("发送时间") @ApiModelProperty("发送时间")
@ -24,9 +23,6 @@ public class SchoolNoticePageVO {
@ApiModelProperty("标题") @ApiModelProperty("标题")
private String title; private String title;
@ApiModelProperty("作者")
private String author;
@ApiModelProperty("描述") @ApiModelProperty("描述")
private String description; 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.news.RemoteNoticeUpdateServiceFallback,\
com.yida.data.school.fallback.transaction.RemoteProductOrderServiceFallback,\ com.yida.data.school.fallback.transaction.RemoteProductOrderServiceFallback,\
com.yida.data.school.fallback.transaction.RemoteProductServiceFallback,\ com.yida.data.school.fallback.transaction.RemoteProductServiceFallback,\
com.yida.data.school.fallback.visitor.RemoteVisitorServiceFallback,\ com.yida.data.school.fallback.transaction.RemoteStudentApplyServiceFallback,\
com.yida.data.school.fallback.smart.RemoteSmartWelcomeServiceFallback com.yida.data.school.fallback.visitor.RemoteVisitorServiceFallback

View File

@ -58,12 +58,6 @@
<version>2.2-RELEASE</version> <version>2.2-RELEASE</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>com.yida.data.attendance</groupId>
<artifactId>attendance-api</artifactId>
<version>${febs-cloud.version}</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<properties> <properties>

View File

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

View File

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

View File

@ -1,20 +1,10 @@
package com.yida.data.school.facility.controller; 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.common.ResultBean;
import com.yida.data.common.core.entity.school.EduDormitory; 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 com.yida.data.school.facility.service.EduDormitoryService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -39,35 +29,9 @@ public class InEduDormitoryController {
private final EduDormitoryService eduDormitoryService; private final EduDormitoryService eduDormitoryService;
private final EduDormitoryRoomMapper eduDormitoryRoomMapper;
private final EduDormitoryMasterService eduDormitoryMasterService;
@ApiOperation("获取宿舍楼") @ApiOperation("获取宿舍楼")
@GetMapping("/getDorm") @GetMapping("/getDorm")
ResultBean<EduDormitory> getDorm(@RequestParam("id") Long id) { ResultBean<EduDormitory> getDorm(@RequestParam("id") Long id) {
return ResultBean.buildSuccess(eduDormitoryService.getDorm(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.common.ResultBean;
import com.yida.data.common.core.entity.school.EduDormitoryRoom; 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 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.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.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -34,17 +28,4 @@ public class InEduDormitoryRoomController {
ResultBean<EduDormitoryRoom> getDormRoomNoPermission(@RequestParam("id") Long id) { ResultBean<EduDormitoryRoom> getDormRoomNoPermission(@RequestParam("id") Long id) {
return ResultBean.buildSuccess(eduDormitoryRoomService.getDormRoom(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

@ -12,4 +12,6 @@ import com.yida.data.common.core.entity.school.EduDormitoryMaster;
*/ */
public interface EduDormitoryMasterService extends IService<EduDormitoryMaster> { public interface EduDormitoryMasterService extends IService<EduDormitoryMaster> {
} }

View File

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

View File

@ -62,8 +62,7 @@ public class EduDormitoryServiceImpl extends ServiceImpl
public IPage<DormInfoVO> listDormPage(PageDormDTO dto) { public IPage<DormInfoVO> listDormPage(PageDormDTO dto) {
if (Objects.nonNull(dto.getMasterId())) { if (Objects.nonNull(dto.getMasterId())) {
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
.eq(EduDormitoryMaster::getMasterId, dto.getMasterId()).select(EduDormitoryMaster::getDormitoryId)); .eq(EduDormitoryMaster::getMasterId, dto.getMasterId()).select(EduDormitoryMaster::getDormitoryId));
if (CollUtil.isEmpty(masterList)) { if (CollUtil.isEmpty(masterList)) {
return new Page<>(); return new Page<>();
@ -116,8 +115,7 @@ public class EduDormitoryServiceImpl extends ServiceImpl
saveOrUpdate(dorm); saveOrUpdate(dorm);
// 删除旧宿管数据 // 删除旧宿管数据
eduDormitoryMasterMapper eduDormitoryMasterMapper.delete(Wrappers.<EduDormitoryMaster>lambdaQuery().in(EduDormitoryMaster::getDormitoryId, dorm.getId()));
.delete(Wrappers.<EduDormitoryMaster>lambdaQuery().in(EduDormitoryMaster::getDormitoryId, dorm.getId()));
dorm.getMasterIds().forEach(masterId -> { dorm.getMasterIds().forEach(masterId -> {
EduDormitoryMaster master = EduDormitoryMaster.builder() EduDormitoryMaster master = EduDormitoryMaster.builder()
.dormitoryId(dorm.getId()) .dormitoryId(dorm.getId())
@ -147,8 +145,7 @@ public class EduDormitoryServiceImpl extends ServiceImpl
EduDormitory eduDormitory = getById(id); EduDormitory eduDormitory = getById(id);
Optional.ofNullable(eduDormitory).ifPresent(dormitory -> { Optional.ofNullable(eduDormitory).ifPresent(dormitory -> {
// 查询宿管信息 // 查询宿管信息
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
.eq(EduDormitoryMaster::getDormitoryId, dormitory.getId()).select(EduDormitoryMaster::getMasterId)); .eq(EduDormitoryMaster::getDormitoryId, dormitory.getId()).select(EduDormitoryMaster::getMasterId));
if (CollUtil.isNotEmpty(masterList)) { if (CollUtil.isNotEmpty(masterList)) {
dormitory.setEduStaffList( dormitory.setEduStaffList(

View File

@ -94,7 +94,7 @@ public class EduHealthStudentPhysicalExaminationGroupServiceImpl extends Service
public void sendHealthNotice(Long groupId,Long schoolId) { public void sendHealthNotice(Long groupId,Long schoolId) {
List<Long> studentId = baseMapper.findStudentId(groupId); List<Long> studentId = baseMapper.findStudentId(groupId);
EduHealthStudentPhysicalExaminationGroup group = getById(groupId); EduHealthStudentPhysicalExaminationGroup group = getById(groupId);
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null, EduApp app = commonService.getAppByCodeAndSchool(AppConstant.PRODUCT_PARENT, null,
schoolId); schoolId);
String accessToken = wxUtil.getAccessToken(app.getWxCorpId(), app.getWxSecret()); 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.EduSchoolHomeNews;
import com.yida.data.common.core.entity.school.EduSchoolManuscript; import com.yida.data.common.core.entity.school.EduSchoolManuscript;
import com.yida.data.common.core.utils.FebsUtil; 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.EduHomeFunctionService;
import com.yida.data.school.index.service.EduSchoolHomeAnnouncementService; import com.yida.data.school.index.service.EduSchoolHomeAnnouncementService;
import com.yida.data.school.index.service.EduSchoolHomeAppService; import com.yida.data.school.index.service.EduSchoolHomeAppService;
@ -64,15 +63,14 @@ public class EduSchoolHomeController {
private final EduSchoolHomeMicroIndexService eduSchoolHomeMicroIndexService; private final EduSchoolHomeMicroIndexService eduSchoolHomeMicroIndexService;
private final EduSchoolHomeMicroPicService eduSchoolHomeMicroPicService; private final EduSchoolHomeMicroPicService eduSchoolHomeMicroPicService;
private final EduSchoolManuscriptService eduSchoolManuscriptService; private final EduSchoolManuscriptService eduSchoolManuscriptService;
private final EduDeptHomeAppService eduDeptHomeAppService;
@ApiOperation("主页信息查询") @ApiOperation("主页信息查询")
@GetMapping("/getHomeInfo") @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) { if (schoolId == null) {
schoolId = FebsUtil.getTopDeptId(); schoolId = FebsUtil.getTopDeptId();
} }
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId, userType)); return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId));
} }
@ApiOperation("更新轮播图(新增、编辑、删除)") @ApiOperation("更新轮播图(新增、编辑、删除)")
@ -204,15 +202,4 @@ public class EduSchoolHomeController {
eduHomeFunctionService.updateFunction(functionData); eduHomeFunctionService.updateFunction(functionData);
return ResultBean.buildSuccess(); 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.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yida.data.common.core.common.ResultBean; 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.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.EduSchoolHomeCoverService;
import com.yida.data.school.index.service.EduSchoolHomeMicroIndexService; import com.yida.data.school.index.service.EduSchoolHomeMicroIndexService;
import com.yida.data.school.index.service.EduSchoolHomeMicroPicService; import com.yida.data.school.index.service.EduSchoolHomeMicroPicService;
@ -28,11 +26,9 @@ import lombok.RequiredArgsConstructor;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
public class InEduSchoolHomeController { public class InEduSchoolHomeController {
private final EduSchoolHomeMicroIndexService eduSchoolHomeMicroIndexService; private final EduSchoolHomeMicroIndexService eduSchoolHomeMicroIndexService;
private final EduSchoolHomeMicroPicService eduSchoolHomeMicroPicService; private final EduSchoolHomeMicroPicService eduSchoolHomeMicroPicService;
private final EduSchoolHomeCoverService eduSchoolHomeCoverService; private final EduSchoolHomeCoverService eduSchoolHomeCoverService;
private final EduDeptHomeAppService eduDeptHomeAppService;
@ApiOperation("查询校园概况") @ApiOperation("查询校园概况")
@ -54,14 +50,7 @@ public class InEduSchoolHomeController {
@ApiOperation("主页信息查询") @ApiOperation("主页信息查询")
@GetMapping("/getHomeInfo") @GetMapping("/getHomeInfo")
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId, @RequestParam(required = false) Integer userType) { public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId) {
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId, userType)); return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId));
}
@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)));
} }
} }

View File

@ -3,9 +3,7 @@ package com.yida.data.school.index.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.school.EduSchoolHomeApp; import com.yida.data.common.core.entity.school.EduSchoolHomeApp;
import io.swagger.annotations.ApiParam;
import java.util.List; import java.util.List;
import org.springframework.web.bind.annotation.RequestParam;
/** /**
* Service接口 * 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.common.core.entity.school.EduSchoolHomeCover;
import com.yida.data.school.vo.index.HomeInfoVO; import com.yida.data.school.vo.index.HomeInfoVO;
import io.swagger.models.auth.In;
import java.util.List; import java.util.List;
/** /**
@ -15,7 +14,7 @@ import java.util.List;
*/ */
public interface EduSchoolHomeCoverService extends IService<EduSchoolHomeCover> { 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; 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.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.EduSchoolHomeApp;
import com.yida.data.common.core.entity.school.EduSchoolHomeAppShow; import com.yida.data.common.core.entity.school.EduSchoolHomeAppShow;
import com.yida.data.common.core.entity.user.EduStaffDept; import com.yida.data.common.core.entity.user.EduStaffDept;
@ -41,7 +39,6 @@ public class EduSchoolHomeAppServiceImpl extends ServiceImpl
private final RemoteDeptService remoteDeptService; private final RemoteDeptService remoteDeptService;
private final RemoteUserDeptService remoteUserDeptService; private final RemoteUserDeptService remoteUserDeptService;
private final EduSchoolMatterService eduSchoolMatterService; private final EduSchoolMatterService eduSchoolMatterService;
private final RedisService redisService;
@Override @Override
@Transactional @Transactional

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