feat: 东区缴费分支初始化
This commit is contained in:
parent
39f3acc15f
commit
bafd4aa3ab
@ -3,14 +3,12 @@ package com.yida.data.auth.controller;
|
||||
import com.yida.data.auth.entity.BindUser;
|
||||
import com.yida.data.auth.service.SocialLoginService;
|
||||
import com.yida.data.common.core.common.ModuleName;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.FebsResponse;
|
||||
import com.yida.data.common.core.entity.constant.StringConstant;
|
||||
import com.yida.data.common.core.entity.system.UserConnection;
|
||||
import com.yida.data.common.core.exception.FebsException;
|
||||
import com.yida.data.common.core.utils.FebsUtil;
|
||||
import com.yida.data.log.annotation.OperationLog;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -31,7 +29,6 @@ import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author MrBird
|
||||
@ -206,20 +203,4 @@ public class SocialLoginController {
|
||||
@ApiParam("0-教师,1-家长") Integer type) {
|
||||
return new FebsResponse().data(socialLoginService.h5Login(schoolId, mobile, type));
|
||||
}
|
||||
|
||||
@ResponseBody
|
||||
@ApiOperation("检查openId状态")
|
||||
@GetMapping("smart/checkOpenId")
|
||||
public ResultBean<Map<String, Object>> checkOpenId(@RequestParam @ApiParam(value = "微信公众号授权code", required = true) String code,
|
||||
@RequestParam @ApiParam(value = "学校id(链接上附带)", required = true) Long deptId) {
|
||||
return ResultBean.buildSuccess(socialLoginService.checkOpenId(code, deptId));
|
||||
}
|
||||
|
||||
@ResponseBody
|
||||
@ApiOperation("智慧迎新学生端登录接口")
|
||||
@GetMapping("wxPublic/welcome/login")
|
||||
public FebsResponse wxPublicLogin(@RequestParam @ApiParam(value = "微信openId", required = true) String openId,
|
||||
@RequestParam @ApiParam(value = "学校id(链接上附带)", required = true) Long deptId) {
|
||||
return new FebsResponse().data(socialLoginService.wxPublicLogin(openId, deptId));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package com.yida.data.auth.manager;
|
||||
|
||||
import cc.mrbird.febs.common.redis.service.RedisService;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.yida.data.auth.mapper.EduUserLogoMapper;
|
||||
@ -18,7 +17,6 @@ import com.yida.data.common.core.entity.system.EduUserLogo;
|
||||
import com.yida.data.common.core.entity.system.Menu;
|
||||
import com.yida.data.common.core.entity.system.Role;
|
||||
import com.yida.data.common.core.entity.system.SystemUser;
|
||||
import com.yida.data.common.core.entity.system.SystemUserMenu;
|
||||
import com.yida.data.common.core.entity.system.UserRole;
|
||||
import com.yida.data.common.service.CommonService;
|
||||
import com.yida.data.user.feign.RemoteTeacherService;
|
||||
@ -81,24 +79,11 @@ public class UserManager {
|
||||
* @param username 用户名
|
||||
* @return 权限
|
||||
*/
|
||||
public List<String> findUserPermissions(String username) {
|
||||
// 获取角色权限
|
||||
List<String> menus = menuMapper.findUserPermissions(username);
|
||||
// 获取用户权限
|
||||
List<SystemUserMenu> userPermissions = userMenuMapper.findUserPermissions(username);
|
||||
// 过滤
|
||||
if (CollUtil.isNotEmpty(userPermissions)) {
|
||||
menus.addAll(
|
||||
userPermissions.stream().filter(x -> x.getType() == 0).map(SystemUserMenu::getPerms).filter(StrUtil::isNotBlank)
|
||||
.collect(Collectors.toList()));
|
||||
List<String> excludePerms = userPermissions.stream().filter(x -> x.getType() == 1).map(SystemUserMenu::getPerms)
|
||||
.filter(StrUtil::isNotBlank).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(excludePerms)) {
|
||||
menus = menus.stream().filter(x -> !excludePerms.contains(x)).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
// 只返回串
|
||||
return menus;
|
||||
public String findUserPermissions(String username) {
|
||||
// List<Menu> userPermissions = menuMapper.findUserPermissions(username);
|
||||
// 从用户对应权限表查询权限数据
|
||||
List<Menu> userPermissions = userMenuMapper.findUserPermissions(username);
|
||||
return userPermissions.stream().map(Menu::getPerms).collect(Collectors.joining(StringConstant.COMMA));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -169,6 +154,6 @@ public class UserManager {
|
||||
public String findMainRole(Long mainDeptId) {
|
||||
// 查询主角色code
|
||||
List<String> rolePerms = userMapper.findMainRole(mainDeptId);
|
||||
return rolePerms.stream().filter(StringUtils::isNotBlank).distinct().collect(Collectors.joining(StringConstant.COMMA));
|
||||
return rolePerms.stream().filter(StringUtils::isNotBlank).collect(Collectors.joining());
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,5 +16,5 @@ public interface MenuMapper extends BaseMapper<Menu> {
|
||||
* @param username 用户名
|
||||
* @return 权限集合
|
||||
*/
|
||||
List<String> findUserPermissions(String username);
|
||||
List<Menu> findUserPermissions(String username);
|
||||
}
|
||||
@ -22,5 +22,5 @@ public interface UserMenuMapper extends BaseMapper<SystemUserMenu> {
|
||||
* @author ZYJ
|
||||
* @date 2021/11/8 15:54
|
||||
*/
|
||||
List<SystemUserMenu> findUserPermissions(String username);
|
||||
List<Menu> findUserPermissions(String username);
|
||||
}
|
||||
|
||||
@ -105,26 +105,4 @@ public interface SocialLoginService {
|
||||
Map<String, Object> wxpublicLogin(String code, String appId, Integer type, Long schoolId, String mobile);
|
||||
|
||||
Map<String, Object> h5Login(Long schoolId, String mobile, Integer type);
|
||||
|
||||
/**
|
||||
* 检查openId状态
|
||||
*
|
||||
* @param code 微信公众号授权code
|
||||
* @param deptId 学校id
|
||||
* @return java.util.Map<java.lang.String, java.lang.Object>
|
||||
* @author ZYJ
|
||||
* @date 2023/6/2 10:31
|
||||
*/
|
||||
Map<String, Object> checkOpenId(String code, Long deptId);
|
||||
|
||||
/**
|
||||
* 迎新功能微信公众号登录
|
||||
*
|
||||
* @param openId 微信openId
|
||||
* @param deptId 学校id
|
||||
* @return java.util.Map<java.lang.String, java.lang.Object>
|
||||
* @author ZYJ
|
||||
* @date 2023/5/18 11:09
|
||||
*/
|
||||
Map<String, Object> wxPublicLogin(String openId, Long deptId);
|
||||
}
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
package com.yida.data.auth.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.yida.data.auth.manager.UserManager;
|
||||
import cc.mrbird.febs.common.redis.service.RedisService;
|
||||
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||
@ -45,7 +44,7 @@ public class FebsUserDetailServiceImpl implements UserDetailsService {
|
||||
HttpServletRequest httpServletRequest = FebsUtil.getHttpServletRequest();
|
||||
SystemUser systemUser = userManager.findByName(username);
|
||||
if (systemUser != null) {
|
||||
List<String> permissions = userManager.findUserPermissions(systemUser.getUsername());
|
||||
String permissions = userManager.findUserPermissions(systemUser.getUsername());
|
||||
boolean notLocked = false;
|
||||
if (StringUtils.equals(SystemUser.STATUS_VALID, systemUser.getStatus())) {
|
||||
notLocked = true;
|
||||
@ -60,31 +59,31 @@ public class FebsUserDetailServiceImpl implements UserDetailsService {
|
||||
// 设置角色权限
|
||||
if (StringUtils.isNotBlank(systemUser.getRolePerms())) {
|
||||
List<String> collect = Arrays.stream(systemUser.getRolePerms().split(StringConstant.COMMA))
|
||||
.map(s -> FebsConstant.SECURITY_ROLE_PREFIX + s)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
.map(s -> FebsConstant.SECURITY_ROLE_PREFIX + s)
|
||||
.collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(collect)) {
|
||||
grantedAuthorities = AuthorityUtils
|
||||
.commaSeparatedStringToAuthorityList(String.join(StringConstant.COMMA, collect));
|
||||
grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(String.join(StringConstant.COMMA, collect));
|
||||
}
|
||||
}
|
||||
// 设置菜单权限
|
||||
if (CollUtil.isNotEmpty(permissions)) {
|
||||
grantedAuthorities.addAll(AuthorityUtils.createAuthorityList(permissions.toArray(new String[0])));
|
||||
if (StringUtils.isNotBlank(permissions)) {
|
||||
if (CollectionUtils.isNotEmpty(grantedAuthorities)) {
|
||||
grantedAuthorities.addAll(AuthorityUtils.commaSeparatedStringToAuthorityList(permissions));
|
||||
} else {
|
||||
grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(permissions);
|
||||
}
|
||||
}
|
||||
// 查询主角色信息
|
||||
if (Objects.nonNull(systemUser.getMainDeptId())) {
|
||||
String role = this.userManager.findMainRole(systemUser.getMainDeptId());
|
||||
systemUser.setMainRolePerms(role);
|
||||
}
|
||||
|
||||
//查询登录所属部门:学校对应的
|
||||
log.info("登陆用户信息sysUser: {}", systemUser);
|
||||
log.info("登陆权限数据permission: {}", grantedAuthorities);
|
||||
log.info("登陆主角色数据mainRole: {}", systemUser.getMainRolePerms());
|
||||
|
||||
FebsAuthUser authUser = new FebsAuthUser(systemUser.getUsername(), password, true, true, true, notLocked,
|
||||
grantedAuthorities);
|
||||
grantedAuthorities);
|
||||
|
||||
BeanUtils.copyProperties(systemUser, authUser);
|
||||
return authUser;
|
||||
|
||||
@ -13,8 +13,6 @@ import com.yida.data.auth.service.SocialLoginService;
|
||||
import com.yida.data.auth.service.UserConnectionService;
|
||||
import com.yida.data.common.core.entity.FebsResponse;
|
||||
import com.yida.data.common.core.entity.constant.*;
|
||||
import com.yida.data.common.core.entity.smart.EduSmartWelcomeGuideRosterRelation;
|
||||
import com.yida.data.common.core.entity.smart.EduSmartWelcomeGuideStep;
|
||||
import com.yida.data.common.core.entity.system.*;
|
||||
import com.yida.data.common.core.entity.user.EduStaff;
|
||||
import com.yida.data.common.core.enums.RoleName;
|
||||
@ -24,12 +22,11 @@ import com.yida.data.common.core.utils.FebsUtil;
|
||||
import com.yida.data.common.core.utils.WxPublicUtil;
|
||||
import com.yida.data.common.core.utils.WxUtil;
|
||||
import com.yida.data.common.service.CommonService;
|
||||
import com.yida.data.school.feign.smart.RemoteSmartWelcomeService;
|
||||
import com.yida.data.school.feign.transaction.RemoteStudentApplyService;
|
||||
import com.yida.data.system.feign.RemoteDeptService;
|
||||
import com.yida.data.system.feign.RemoteRoleService;
|
||||
import com.yida.data.system.feign.RemoteUserService;
|
||||
import com.yida.data.user.feign.RemoteStaffService;
|
||||
import com.yida.data.user.feign.RemoteStudentApplyService;
|
||||
import com.yida.data.user.feign.RemoteStudentService;
|
||||
import com.yida.data.user.feign.RemoteTeacherService;
|
||||
import com.yida.data.user.vo.ParentInfoVO;
|
||||
@ -64,6 +61,7 @@ public class SocialLoginServiceImpl implements SocialLoginService {
|
||||
|
||||
private static final String USERNAME = "username";
|
||||
private static final String PASSWORD = "password";
|
||||
|
||||
private static final String NOT_BIND = "not_bind";
|
||||
private static final String SOCIAL_LOGIN_SUCCESS = "social_login_success";
|
||||
|
||||
@ -75,16 +73,17 @@ public class SocialLoginServiceImpl implements SocialLoginService {
|
||||
private final UserConnectionService userConnectionService;
|
||||
private final ResourceOwnerPasswordTokenGranter granter;
|
||||
private final RedisClientDetailsService redisClientDetailsService;
|
||||
|
||||
private final RemoteStaffService remoteStaffService;
|
||||
private final RemoteStudentService remoteStudentService;
|
||||
private final RemoteTeacherService remoteTeacherService;
|
||||
private final RemoteSmartWelcomeService remoteSmartWelcomeService;
|
||||
|
||||
private final WxUtil wxUtil;
|
||||
private final WxPublicUtil wxPublicUtil;
|
||||
private final RedisService redisService;
|
||||
private final RemoteStudentService remoteStudentService;
|
||||
private final RemoteTeacherService remoteTeacherService;
|
||||
private final RemoteStaffService remoteStaffService;
|
||||
private final RemoteDeptService remoteDeptService;
|
||||
private final CommonService commonService;
|
||||
private final RemoteRoleService remoteRoleService;
|
||||
private final RemoteUserService remoteUserService;
|
||||
private final RemoteStudentApplyService remoteStudentApplyService;
|
||||
private final RedisService redisService;
|
||||
|
||||
@Override
|
||||
public AuthRequest renderAuth(String oauthType) throws FebsException {
|
||||
@ -580,43 +579,4 @@ public class SocialLoginServiceImpl implements SocialLoginService {
|
||||
res.put("identity", type == 0 ? teacher : parent);
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> checkOpenId(String code, Long deptId) {
|
||||
Dept school = commonService.getDept(deptId);
|
||||
if (Objects.isNull(school)) {
|
||||
throw new FebsException("学校信息错误");
|
||||
}
|
||||
// 查询用户信息
|
||||
String openId = wxPublicUtil.getOpenId(school.getWxPublicAppId(), school.getWxPublicSecret(), code);
|
||||
// 查询openId是否绑定了对应的信息
|
||||
EduSmartWelcomeGuideRosterRelation relation = remoteSmartWelcomeService.getOpenIdRelation(openId, deptId).getData();
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
// true代表已经绑定,false代表未绑定
|
||||
map.put("status", Objects.nonNull(relation));
|
||||
// 微信openId
|
||||
map.put("openId", openId);
|
||||
return map;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> wxPublicLogin(String openId, Long deptId) {
|
||||
// 查询关联关系
|
||||
EduSmartWelcomeGuideRosterRelation relation = remoteSmartWelcomeService.getOpenIdRelation(openId, deptId).getData();
|
||||
if (Objects.isNull(relation) || Objects.isNull(relation.getGuideRoster())) {
|
||||
throw new FebsException("信息错误");
|
||||
}
|
||||
// 用户信息
|
||||
SystemUser systemUser = userManager.findByName(relation.getGuideRoster().getMobile());
|
||||
// 登录返回token和用户信息
|
||||
Map<String, Object> res = new HashMap<>();
|
||||
res.put("token", getOauth2AccessToken(systemUser));
|
||||
systemUser.setPassword(null);
|
||||
res.put("user", systemUser);
|
||||
// // 查询人员步骤信息
|
||||
// List<EduSmartWelcomeGuideStep> stepList = remoteSmartWelcomeService.listStepInfo(relation.getId(), relation.getGuideId()).getData();
|
||||
// relation.setStepList(stepList);
|
||||
res.put("info", relation);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,15 +2,15 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yida.data.auth.mapper.MenuMapper">
|
||||
|
||||
<select id="findUserPermissions" resultType="java.lang.String">
|
||||
select distinct m.perms
|
||||
from t_role r
|
||||
left join t_user_role ur on (r.role_id = ur.role_id)
|
||||
left join t_user u on (u.user_id = ur.user_id)
|
||||
left join t_role_menu rm on (rm.role_id = r.role_id)
|
||||
left join t_menu m on (m.menu_id = rm.menu_id)
|
||||
where u.username = #{userName}
|
||||
and m.perms is not null
|
||||
and m.perms <> ''
|
||||
</select>
|
||||
<select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.Menu">
|
||||
select distinct m.perms
|
||||
from t_role r
|
||||
left join t_user_role ur on (r.role_id = ur.role_id)
|
||||
left join t_user u on (u.user_id = ur.user_id)
|
||||
left join t_role_menu rm on (rm.role_id = r.role_id)
|
||||
left join t_menu m on (m.menu_id = rm.menu_id)
|
||||
where u.username = #{userName}
|
||||
and m.perms is not null
|
||||
and m.perms <> ''
|
||||
</select>
|
||||
</mapper>
|
||||
@ -18,7 +18,6 @@
|
||||
u.description,
|
||||
u.avatar,
|
||||
d.dept_type deptType,
|
||||
d.school_nature schoolNature,
|
||||
d.dept_name deptName,
|
||||
u.agent_id agentId,
|
||||
GROUP_CONCAT(r.role_id) roleId,
|
||||
@ -60,7 +59,6 @@
|
||||
<select id="findMainRole"
|
||||
resultType="java.lang.String">
|
||||
SELECT
|
||||
distinct
|
||||
r.ROLE_PERMS
|
||||
FROM
|
||||
t_user u
|
||||
|
||||
@ -2,13 +2,13 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.yida.data.auth.mapper.UserMenuMapper">
|
||||
|
||||
<select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.SystemUserMenu">
|
||||
select um.*, m.perms
|
||||
from t_user_menu um
|
||||
left join t_user u on (u.user_id = um.user_id)
|
||||
left join t_menu m on (m.menu_id = um.menu_id)
|
||||
where u.username = #{userName}
|
||||
and m.perms is not null
|
||||
and m.perms <![CDATA[!=]]> ''
|
||||
<select id="findUserPermissions" resultType="com.yida.data.common.core.entity.system.Menu">
|
||||
select distinct m.perms
|
||||
from t_user_menu um
|
||||
left join t_user u on (u.user_id = um.user_id)
|
||||
left join t_menu m on (m.menu_id = um.menu_id)
|
||||
where u.username = #{userName}
|
||||
and m.perms is not null
|
||||
and m.perms <> ''
|
||||
</select>
|
||||
</mapper>
|
||||
@ -148,30 +148,18 @@
|
||||
<version>${wxpay.apiv3.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>com.github.wechatpay-apiv3</groupId>-->
|
||||
<!-- <artifactId>wechatpay-apache-httpclient</artifactId>-->
|
||||
<!-- <version>${wxpay.apiv3.version}</version>-->
|
||||
<!-- <scope>compile</scope>-->
|
||||
<!-- </dependency>-->
|
||||
<dependency>
|
||||
<groupId>com.github.wechatpay-apiv3</groupId>
|
||||
<artifactId>wechatpay-apache-httpclient</artifactId>
|
||||
<version>${wxpay.apiv3.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<!-- 二维码依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.google.zxing</groupId>
|
||||
<artifactId>javase</artifactId>
|
||||
<version>${qr.code.version}</version>
|
||||
</dependency>
|
||||
<!-- 百度api -->
|
||||
<dependency>
|
||||
<groupId>com.baidu.aip</groupId>
|
||||
<artifactId>java-sdk</artifactId>
|
||||
<version>${baidu.api.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-simple</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</project>
|
||||
|
||||
@ -8,24 +8,15 @@ public enum ModuleName {
|
||||
AUTH("认证中心"),
|
||||
APPLY_PARODUCT("应用商品"),
|
||||
ATTENDANCE("考勤"),
|
||||
DEVICE("设备"),
|
||||
LETTER_BOX("校长信箱"),
|
||||
NOTICE("通知"),
|
||||
SCHOOL("校园主页"),
|
||||
STUDENT_EXAM("考试管理"),
|
||||
USER("用户管理"),
|
||||
STUDENT("学生管理"),
|
||||
STAFF("职工管理"),
|
||||
JOB("任务调度"),
|
||||
SYSTEM("系统管理"),
|
||||
DEPT("系统部门"),
|
||||
USER_DEPT("家校部门"),
|
||||
INSTRUCTION("系统指南"),
|
||||
ELECTRONIC_STUDENT_CARD("电子学生证"),
|
||||
TELEPHONE("亲情电话"),
|
||||
COURSE("课程表"),
|
||||
PRODUCT("商品管理"),
|
||||
TRANSATION("交易管理"),
|
||||
HEALTH("健康管理");
|
||||
@Getter
|
||||
String name;
|
||||
|
||||
@ -21,29 +21,22 @@ public enum ResultMsgType {
|
||||
IMPORT_EXCEL_FAIL("导入失败!", 500),
|
||||
FILE_TYPE_ERROR("导入文件类型错误", 500),
|
||||
ID_CARD_EXIST("身份证号码已存在!", 500),
|
||||
STUDENT_CARD_NUMBER_EXIST("校园学号已存在!", 500),
|
||||
STUDENT_NUMBER_EXIST("学号已存在!", 500),
|
||||
STUDENT_NUMBER_NOT_EXIST("学号不存在!", 500),
|
||||
CAMPUS_NAME_ERROR("学区名称错误", 500),
|
||||
SECTION_NAME_ERROR("学段名称错误", 500),
|
||||
GRADE_NAME_ERROR("年级名称错误", 500),
|
||||
CLASS_NAME_ERROR("班级名称错误", 500),
|
||||
START_DATE_ERROR("入学时间错误", 500),
|
||||
|
||||
SERVER_ERROR("服务器繁忙!请稍后再试", 500),
|
||||
|
||||
LOGIN_INFO_ERROR("用户登陆信息异常", 500),
|
||||
PAY_TYPE_ERROR("暂不支持此支付方式", 500),
|
||||
ORDER_FAIL("创建订单失败!请稍后再试", 500),
|
||||
ORDER_NOT_FOUND("未找到订单信息", 500),
|
||||
ORDER_INVALID("该订单已失效!无法执行该操作", 500),
|
||||
ORDER_QUERY_FAIL("订单查询失败", 500),
|
||||
ORDER_CLOSE_FAIL("关闭订单失败", 500),
|
||||
ORDER_REFUND_FAIL("订单退款失败", 500),
|
||||
REFUND_QUERY_FAIL("退款查询失败", 500),
|
||||
ORDER_MONEY_ERROR("订单金额异常", 500),
|
||||
|
||||
CARD_STATUS_ERROR("卡状态异常", 500),
|
||||
;
|
||||
|
||||
private final String value;
|
||||
|
||||
@ -91,12 +91,6 @@ public class CurrentUser implements Serializable {
|
||||
*/
|
||||
private String mainRolePerms;
|
||||
|
||||
|
||||
/**
|
||||
* 学校性质:0幼儿园,1小学,2中学,3九年一贯,4十二年一贯,5:高校
|
||||
*/
|
||||
private Integer schoolNature;
|
||||
|
||||
@JsonIgnore
|
||||
private EduUserLogo userLogo;
|
||||
}
|
||||
|
||||
@ -55,8 +55,6 @@ public class FebsAuthUser extends User {
|
||||
|
||||
private String status;
|
||||
|
||||
private Integer schoolNature;
|
||||
|
||||
private String deptIds;
|
||||
|
||||
private Long identityId;
|
||||
|
||||
@ -35,9 +35,6 @@ public class EduAttendanceRecord {
|
||||
|
||||
private String className;
|
||||
|
||||
@ApiModelProperty("0上学,1宿舍")
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty("宿舍id")
|
||||
private Long dormId;
|
||||
|
||||
@ -86,8 +83,5 @@ public class EduAttendanceRecord {
|
||||
@ApiModelProperty("该条记录使用的考勤时间段")
|
||||
private Long ruleTimeId;
|
||||
|
||||
@ApiModelProperty("考勤时间段类型:0开始时间,1结束时间")
|
||||
private Integer ruleTimeType;
|
||||
|
||||
private transient String deviceName;
|
||||
}
|
||||
|
||||
@ -109,15 +109,9 @@ public class EduAttendanceResult {
|
||||
/**
|
||||
* 考勤结果,100-正常, 201-迟到,202-早退,203-迟到早退,204-旷课,205-请假, 211-晚归,212-异常晚归,213-旷宿,214-已被核查但学生还未归寝
|
||||
*/
|
||||
@ApiModelProperty(value = "考勤结果,100-正常,201-迟到,202-早退,203-迟到早退,204-旷课,205-请假,206-上班未打卡|下班正常,207-上班未打卡|下班早退,208-上班未打卡|下班未在有效打卡时间段内,209-上班未在有效打卡时间段内|下班早退,210-上班迟到|下班未打卡,211-晚归,212-异常晚归,213-旷宿,214-已被核查但学生还未归寝")
|
||||
@ApiModelProperty(value = "考勤结果,100-正常,201-迟到,202-早退,203-迟到早退,204-旷课,205-请假,211-晚归,212-异常晚归,213-旷宿,214-已被核查但学生还未归寝")
|
||||
@TableField("status")
|
||||
private Integer status;
|
||||
@ApiModelProperty(value = "开始时间考勤结果1正常,0异常,空未打卡")
|
||||
@TableField("begin_status")
|
||||
private Integer beginStatus;
|
||||
@ApiModelProperty(value = "结束时间考勤结果1正常,0异常,空未打卡")
|
||||
@TableField("end_status")
|
||||
private Integer endStatus;
|
||||
|
||||
/**
|
||||
* 核查时间
|
||||
@ -171,7 +165,4 @@ public class EduAttendanceResult {
|
||||
|
||||
@ApiModelProperty("学号")
|
||||
private transient String stuNo;
|
||||
|
||||
@ApiModelProperty("类型:1宿舍考勤,0上学考勤")
|
||||
private transient Integer type;
|
||||
}
|
||||
|
||||
@ -11,7 +11,6 @@ import java.time.LocalDateTime;
|
||||
@Data
|
||||
@ApiModel("规则设备")
|
||||
public class EduAttendanceRuleDevice {
|
||||
|
||||
@TableId(type = IdType.AUTO)
|
||||
private Long id;
|
||||
|
||||
@ -24,12 +23,9 @@ public class EduAttendanceRuleDevice {
|
||||
@ApiModelProperty("设备编号")
|
||||
private String deviceSn;
|
||||
|
||||
@ApiModelProperty("设备名称")
|
||||
private String deviceName;
|
||||
|
||||
@ApiModelProperty("创建时间")
|
||||
private LocalDateTime createDate;
|
||||
|
||||
|
||||
@ApiModelProperty("创建人ID")
|
||||
private Long createId;
|
||||
|
||||
|
||||
@ -1,13 +1,11 @@
|
||||
package com.yida.data.common.core.entity.attendance;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.time.LocalDateTime;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
@ -62,21 +60,10 @@ public class EduAttendanceStaffResult {
|
||||
/**
|
||||
* 考勤结果,0-正常,1-迟到,2-早退,3-旷工,4-迟到早退,5-上班未在打卡时间段,6-下班未在打卡时间段
|
||||
*/
|
||||
@ApiModelProperty(value = "考勤结果,0-正常,1-迟到,2-早退,3-旷工,4-迟到早退,5-上班未在打卡时间段,6-下班未在打卡时间段,7-上班未在打卡时间段|早退,8-上班迟到|下班未打卡")
|
||||
@ApiModelProperty(value = "考勤结果,0-正常,1-迟到,2-早退,3-旷工,4-迟到早退,5-上班未在打卡时间段,6-下班未在打卡时间段")
|
||||
@TableField("status")
|
||||
private Integer status;
|
||||
|
||||
/**
|
||||
* 上班考勤状态 0 正常 1 异常
|
||||
*/
|
||||
@TableField("start_status")
|
||||
private Integer startStatus;
|
||||
/**
|
||||
* 下班考勤状态 0 正常 1 异常
|
||||
*/
|
||||
@TableField("end_status")
|
||||
private Integer endStatus;
|
||||
|
||||
/**
|
||||
* 考勤日期
|
||||
*/
|
||||
@ -105,14 +92,4 @@ public class EduAttendanceStaffResult {
|
||||
@DateTimeFormat(pattern = "HH:mm:ss")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "HH:mm:ss")
|
||||
private LocalTime endRealTime;
|
||||
|
||||
@TableField(value = "CREATE_TIME", fill = FieldFill.INSERT)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
@TableField(value = "UPDATE_TIME", fill = FieldFill.UPDATE)
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime updateTime;
|
||||
}
|
||||
|
||||
@ -3,18 +3,9 @@ package com.yida.data.common.core.entity.constant;
|
||||
public interface AppConstant {
|
||||
|
||||
/**
|
||||
* 通讯录(用于操作) https://developer.work.weixin.qq.com/document/path/96078
|
||||
* 通讯录
|
||||
*/
|
||||
String CONTACT = "通讯录";
|
||||
|
||||
/**
|
||||
* 通讯录(用于查询) 职工端智慧迎新
|
||||
*/
|
||||
String CONTACT_SELECT = "contact_resources";
|
||||
|
||||
/**
|
||||
* 家校沟通
|
||||
*/
|
||||
String CONTACT_SCHOOL = "家校沟通";
|
||||
|
||||
/**
|
||||
@ -89,28 +80,8 @@ public interface AppConstant {
|
||||
*/
|
||||
String TEACHER_LEAVE_REQUEST = "teacher_leave_request";
|
||||
|
||||
/**
|
||||
* 请假家长端
|
||||
*/
|
||||
String STUDENT_LEAVE_REQUEST = "student_leave_request";
|
||||
|
||||
/**
|
||||
* 访客教师端
|
||||
*/
|
||||
String VISITOR_STAFF = "visitor_staff";
|
||||
|
||||
/**
|
||||
* 微官网 家长端智慧迎新
|
||||
*/
|
||||
String INDEX_PARENT = "index_parent";
|
||||
|
||||
/**
|
||||
* 查寝
|
||||
*/
|
||||
String DORM_ATTENDANCE_STAFF = "dorm_attendance_staff";
|
||||
|
||||
/**
|
||||
* 智慧迎新职工端
|
||||
*/
|
||||
String SMART_WELCOME_STAFF = "smart_welcome_staff";
|
||||
}
|
||||
|
||||
@ -2,31 +2,11 @@ package com.yida.data.common.core.entity.constant;
|
||||
|
||||
public interface CachePrefixConstant {
|
||||
|
||||
/**
|
||||
* 企业微信服务商缓存前缀
|
||||
*/
|
||||
String SYS_SERVICE_PROVIDER = "sys:service:provider.";
|
||||
|
||||
/**
|
||||
* 企业微信应用缓存前缀
|
||||
*/
|
||||
String SYS_APP = "sys:app.";
|
||||
|
||||
/**
|
||||
* 系统白名单信息
|
||||
*/
|
||||
String SYS_WHITE_LIST = "sys:white:list.";
|
||||
|
||||
/**
|
||||
* 部门对应的第三方系统功能
|
||||
*/
|
||||
String SYS_DEPT_FUNCTION = "sys:dept:function.";
|
||||
|
||||
/**
|
||||
* 企业微信应用模板缓存前缀
|
||||
*/
|
||||
String SYS_APP_TEMPLATE = "sys:app.template.";
|
||||
|
||||
/**
|
||||
* 部门公众号
|
||||
*/
|
||||
@ -81,18 +61,6 @@ public interface CachePrefixConstant {
|
||||
String IMPORT_STUDENT_KEY = "import.student.";
|
||||
String IMPORT_STUDENT_FILE = "import.student.file.";
|
||||
|
||||
String IMPORT_STUDENT_CARD_NUMBER_KEY = "import.student.cardNo";
|
||||
|
||||
/**
|
||||
* 学生导出信息
|
||||
*/
|
||||
String EXPORT_STUDENT_DATA = "student:data:export.";
|
||||
|
||||
/**
|
||||
* 学生宿舍导出信息
|
||||
*/
|
||||
String EXPORT_STUDENT_DORM_DATA = "student:dorm:data:export.";
|
||||
|
||||
/**
|
||||
* 登录用户将要登录的部门id
|
||||
*/
|
||||
@ -139,31 +107,6 @@ public interface CachePrefixConstant {
|
||||
*/
|
||||
String UNION_PAY_CONFIG = "sys:union.pay.config";
|
||||
|
||||
/**
|
||||
* 建行支付配置信息
|
||||
*/
|
||||
String CONSTRUCTION_PAY_CONFIG = "sys:construction.pay.config";
|
||||
|
||||
/**
|
||||
* 收钱吧支付配置信息
|
||||
*/
|
||||
String U_PAY_CONFIG = "sys:u.pay.config";
|
||||
|
||||
/**
|
||||
* 百度api配置信息
|
||||
*/
|
||||
String BAI_DU_API_CONFIG = "baidu:api.config";
|
||||
|
||||
/**
|
||||
* 学校收钱吧终端信息
|
||||
*/
|
||||
String DEPT_CONSUME_TERMINAL = "dept:consume:terminal.";
|
||||
|
||||
/**
|
||||
* 学校消费机服务器信息
|
||||
*/
|
||||
String CONSUME_CONFIG = "sys:consume.config";
|
||||
|
||||
//------------------学校-------------------
|
||||
/**
|
||||
* 导入寝室 进度信息
|
||||
@ -183,20 +126,11 @@ public interface CachePrefixConstant {
|
||||
//------------------用户-------------------
|
||||
String STUDENT_DATA = "user:student.data";
|
||||
|
||||
//------------------用户-------------------
|
||||
String STUDENT_BASE_DATA = "user:student.base.data";
|
||||
|
||||
|
||||
/**
|
||||
* 导入住宿学生 进度信息
|
||||
*/
|
||||
String IMPORT_STUDENT_DORM = "user:studentDorm.import";
|
||||
|
||||
/**
|
||||
* 导入学生类型 进度信息
|
||||
*/
|
||||
String IMPORT_STUDENT_TYPE = "user:studentType.import";
|
||||
|
||||
/**
|
||||
* 学生在校离校,在寝不在寝状态
|
||||
*/
|
||||
@ -229,11 +163,6 @@ public interface CachePrefixConstant {
|
||||
*/
|
||||
String ISSUE_FACE_ERROR_MSG = "user:face:issue.error.msg.";
|
||||
|
||||
/**
|
||||
* 设备组人脸下发成功数量
|
||||
*/
|
||||
String ISSUE_GROUP_USER_FACE_SUCCESS = "group.user.face.success.";
|
||||
|
||||
/**
|
||||
* 大华code与人员id对应
|
||||
*/
|
||||
@ -256,11 +185,6 @@ public interface CachePrefixConstant {
|
||||
*/
|
||||
String DEVICE_DATA = "attendance:device:data";
|
||||
|
||||
/**
|
||||
* 设备数据
|
||||
*/
|
||||
String DEVICE_DATA_BY_ID = "attendance:device:id:data";
|
||||
|
||||
/**
|
||||
* 最新考勤记录时间
|
||||
*/
|
||||
@ -276,31 +200,11 @@ public interface CachePrefixConstant {
|
||||
*/
|
||||
String ISSUE_FACE_GROUP_DEVICE = "attendance:device:face-group.";
|
||||
|
||||
/**
|
||||
* 设备下发的人脸组鼠标数量
|
||||
*/
|
||||
String ISSUE_FACE_GROUP_DEVICE_NUMBER = "attendance:device:face-group.number.";
|
||||
|
||||
/**
|
||||
* 海清设备批量编辑列表
|
||||
*/
|
||||
String HQ_EDIT_BATCH = "hq.edit.batch.";
|
||||
|
||||
/**
|
||||
* 海清人脸新增信息
|
||||
*/
|
||||
String HQ_BATCH_ADD = "hq.batch.add.";
|
||||
|
||||
/**
|
||||
* 海清人脸新编辑信息
|
||||
*/
|
||||
String HQ_BATCH_EDIT = "hq.batch.edit.";
|
||||
|
||||
/**
|
||||
* 接收的认证消息缓存
|
||||
*/
|
||||
String HQ_RECEIVE_INFO = "hq.receive.info.";
|
||||
|
||||
//--------------商品订单------------------
|
||||
|
||||
/**
|
||||
@ -436,13 +340,6 @@ public interface CachePrefixConstant {
|
||||
* 宿舍信息
|
||||
*/
|
||||
String FACILITY_DORM_ROOM = "facility:dorm:room";
|
||||
|
||||
// --------------------宿舍数据-----------------
|
||||
/**
|
||||
* 宿舍信息
|
||||
*/
|
||||
String FACILITY_DORM_MASTER = "facility:dorm:master.";
|
||||
|
||||
// --------------------第二课堂----------------
|
||||
/**
|
||||
* 菜单配置
|
||||
@ -469,7 +366,7 @@ public interface CachePrefixConstant {
|
||||
String BILL_ORDER = "bill.order.";
|
||||
|
||||
/**
|
||||
* 账单订单调起支付所需参数,微信jsapi为prepay_id,微信h5为支付地址,银联支付为支付地址
|
||||
* 账单订单调起支付所需参数,微信jsapi为prepay_id,微信h5为回调地址,银联支付为支付地址
|
||||
*/
|
||||
String BILL_ORDER_FLAG = "bill.order.flag.";
|
||||
|
||||
@ -508,27 +405,6 @@ public interface CachePrefixConstant {
|
||||
*/
|
||||
String BILL_PAY_DETAIL_EXPORT_URL = "bill:pay:detail:export:url:";
|
||||
|
||||
// --------------------消费充值----------------
|
||||
/**
|
||||
* 学生消费订单缓存
|
||||
*/
|
||||
String CONSUME_ORDER_STUDENT = "consume.order.student.";
|
||||
|
||||
/**
|
||||
* 消费订单信息
|
||||
*/
|
||||
String CONSUME_ORDER = "consume.order.";
|
||||
|
||||
/**
|
||||
* 消费订单调起支付所需参数,微信jsapi为prepay_id,微信h5为支付地址,银联支付为支付地址,收钱吧为支付地址
|
||||
*/
|
||||
String CONSUME_ORDER_FLAG = "consume.order.flag.";
|
||||
|
||||
/**
|
||||
* 商品描述
|
||||
*/
|
||||
String CONSUME_ORDER_DESC = "充值缴费";
|
||||
|
||||
// -----------摄像头-------------------------
|
||||
/**
|
||||
* 摄像头
|
||||
@ -542,41 +418,6 @@ public interface CachePrefixConstant {
|
||||
*/
|
||||
String USER_PIC_DOWNLOAD = "user:pic:downLoad.";
|
||||
|
||||
|
||||
/**
|
||||
* 职工通行记录下载
|
||||
*/
|
||||
String STAFF_ATTENDANCE_RECORD_DOWNLOAD = "staff:attendance:record:downLoad.";
|
||||
|
||||
/**
|
||||
* 职工考勤记录下载
|
||||
*/
|
||||
String STAFF_ATTENDANCE_RESULT_DOWNLOAD = "staff:attendance:result:downLoad.";
|
||||
|
||||
|
||||
/**
|
||||
* 学生宿舍考勤下载
|
||||
*/
|
||||
String STUDENT_DORM_ATTENDANCE_RESULT_DOWNLOAD = "student:dorm:attendance:result:downLoad.";
|
||||
|
||||
|
||||
/**
|
||||
* 通行记录下载
|
||||
*/
|
||||
String ATTENDANCE_RECORD_DOWNLOAD = "attendance:record:download.";
|
||||
|
||||
|
||||
/**
|
||||
* 考勤日报下载
|
||||
*/
|
||||
String ATTENDANCE_DAY_REPORT_DOWNLOAD = "attendance:day:report:download.";
|
||||
|
||||
|
||||
/**
|
||||
* 商品购买情况下载
|
||||
*/
|
||||
String PRODUCT_BUY_DATA_DOWNLOAD = "product:buy:data:downLoad.";
|
||||
|
||||
/**
|
||||
* 下载学生照片
|
||||
*/
|
||||
@ -590,7 +431,7 @@ public interface CachePrefixConstant {
|
||||
/**
|
||||
* 学校对应关键功能点配置
|
||||
*/
|
||||
String SCHOOL_FUNCATION_CODE = "school:funcation:code:";
|
||||
String SCHOOL_FUNCATION_CODE = "school:funcation:code.";
|
||||
|
||||
String ATTENDANCE_DORMITORY_CLASS = "attendance:Dormitory:class.";
|
||||
|
||||
@ -599,9 +440,6 @@ public interface CachePrefixConstant {
|
||||
String STAFF_MANGE_DEPT = "staff:mange:dept.";
|
||||
|
||||
|
||||
String STAFF_MANGE_CLASS = "staff:mange:class.";
|
||||
|
||||
|
||||
/**
|
||||
* 对应设备策略id(人脸组id)缓存
|
||||
*/
|
||||
@ -641,165 +479,6 @@ public interface CachePrefixConstant {
|
||||
String ADD_MANUSCRIPT_PROGRESS = "add:manuscript:progress";
|
||||
|
||||
// --------------------智慧迎新-----------------
|
||||
/**
|
||||
* 花名册下载缓存
|
||||
*/
|
||||
String GUIDE_ROSTER_DATA_DOWNLOAD = "guide:roster:data:download.";
|
||||
|
||||
/**
|
||||
* 花名册身份证、通知书下载图片缓存
|
||||
*/
|
||||
String GUIDE_ROSTER_PIC_DATA_DOWNLOAD = "guide:roster:pic:data:download.";
|
||||
|
||||
// --------------------智慧迎新-----------------
|
||||
/**
|
||||
* 新生迎新步骤信息
|
||||
*/
|
||||
String GUIDE_ROSTER_STEP_DATA = "guide:roster:step:data.";
|
||||
|
||||
/**
|
||||
* 花名册人员迎新订单缓存
|
||||
*/
|
||||
String GUIDE_STEP_ORDER_ROSTER = "guide.step.order.roster.";
|
||||
|
||||
/**
|
||||
* 迎新步骤订单缓存
|
||||
*/
|
||||
String GUIDE_STEP_ORDER = "guide.step.order.";
|
||||
|
||||
/**
|
||||
* 迎新订单调起支付所需参数,微信jsapi为prepay_id,微信h5为支付地址,银联支付为支付地址,建行为支付地址
|
||||
*/
|
||||
String GUIDE_STEP_ORDER_FLAG = "guide.step.order.flag.";
|
||||
|
||||
|
||||
/**
|
||||
* 智慧迎新导入学生人脸
|
||||
*/
|
||||
String IMPORT_GUIDE_AVATAR_KEY = "guide:avatar:import.key.";
|
||||
|
||||
|
||||
/**
|
||||
* 智慧迎新导入花名册
|
||||
*/
|
||||
String IMPORT_GUIDE_ROSTER_KEY = "guide:roster:import.key.";
|
||||
|
||||
/**
|
||||
* 智慧迎新系部专业数据
|
||||
*/
|
||||
String WELCOME_DEPARTMENT_DATA = "welcome:department:data.";
|
||||
|
||||
/**
|
||||
* 智慧迎新预分班级数据
|
||||
*/
|
||||
String WELCOME_CLASS_DATA = "welcome:class:data.";
|
||||
|
||||
/**
|
||||
* 智慧迎新班级对应人员数量
|
||||
*/
|
||||
String WELCOME_CLASS_STUDENT_NUMBER = "welcome:class:student:number:";
|
||||
|
||||
/**
|
||||
* 智慧迎新预分宿舍数据
|
||||
*/
|
||||
String WELCOME_DORM_DATA = "welcome:dorm:data.";
|
||||
|
||||
|
||||
/**
|
||||
* 智慧迎新宿舍对应人员数量
|
||||
*/
|
||||
String WELCOME_DROM_STUDENT_NUMBER = "welcome:dorm:student:number:";
|
||||
|
||||
|
||||
/**
|
||||
* 智慧迎新宿舍对应人员数量
|
||||
*/
|
||||
String WELCOME_DROM_STUDENT_NUMBER_BUDING = "welcome:dorm:student:number:buding";
|
||||
|
||||
|
||||
/**
|
||||
* 智慧迎新预分班级导入进度
|
||||
*/
|
||||
String WELCOME_CLASS_IMPOST_PROGRESS = "welcome:class:import:progress:";
|
||||
|
||||
/**
|
||||
* 智慧迎新预分宿舍导入进度
|
||||
*/
|
||||
String WELCOME_DORM_IMPOST_PROGRESS = "welcome:dorm:import:progress:";
|
||||
|
||||
/**
|
||||
* 智慧迎新花名册信息
|
||||
*/
|
||||
String WELCOME_ROSTER = "welcome:roster";
|
||||
|
||||
|
||||
/**
|
||||
* 学生考勤结果 每月记录
|
||||
*/
|
||||
String ATTENDANCE_DATE_STATUS = "attendance:date:status.";
|
||||
|
||||
|
||||
/**
|
||||
* 管理员查看 每月记录
|
||||
*/
|
||||
String ATTENDANCE_MANAGE_DATE_STATUS = "attendance:manage:date:status.";
|
||||
|
||||
|
||||
/**
|
||||
* 学生考勤结果 每日记录
|
||||
*/
|
||||
String ATTENDANCE_STATUS_DAY_STUDENT = "attendance:status:day:student:";
|
||||
|
||||
|
||||
/**
|
||||
* 教职工考勤结果 每日记录
|
||||
*/
|
||||
String ATTENDANCE_STATUS_DAY_STAFF = "attendance:status:day:staff:";
|
||||
|
||||
/**
|
||||
* 考勤管理管理部门树
|
||||
*/
|
||||
String ATTENDANCE_USER_MANAGE_TREE = "attendance:user:manage:tree:";
|
||||
|
||||
/**
|
||||
* 考勤管理管理部门树
|
||||
*/
|
||||
String ATTENDANCE_STAFF_IDENTITY = "attendance:staff:identity:";
|
||||
|
||||
/**
|
||||
* 职工管理规则
|
||||
*/
|
||||
String ATTENDANCE_STAFF_MANAGE_RULE = "attendance:staff:manage:rule";
|
||||
|
||||
/**
|
||||
* 用户打卡记录
|
||||
*/
|
||||
String ATTENDANCE_USER_RECORD = "attendance:user:record";
|
||||
|
||||
/**
|
||||
* 学生匹配的考勤规则
|
||||
*/
|
||||
String ATTENDANCE_STUDENT_RULE = "attendance:student:rule";
|
||||
|
||||
/**
|
||||
* 校园主页信息
|
||||
*/
|
||||
String SCHOOL_HOME_INFO = "school:home:info";
|
||||
|
||||
/**
|
||||
* 学校小程序信息
|
||||
*/
|
||||
String DEPT_HOME_APP_INFO = "dept:home:app:info";
|
||||
|
||||
|
||||
/**
|
||||
* 用户对应微信小程序
|
||||
*/
|
||||
String USER_GENERATE_URL_LINK = "user:generate:url:link:";
|
||||
|
||||
|
||||
/**
|
||||
* 考勤规则
|
||||
*/
|
||||
String ATTENDANCE_RULE_DATA = "attendance:rule";
|
||||
}
|
||||
|
||||
@ -79,20 +79,10 @@ public interface FebsConstant {
|
||||
String TP_TOKEN = "tupu.token.";
|
||||
|
||||
/**
|
||||
* 微信公众号 token key前缀 7200s
|
||||
* 微信公众号 token key前缀
|
||||
*/
|
||||
String WX_PUBLIC_ACCESS_TOKEN = "wx.public:access.token.";
|
||||
|
||||
/**
|
||||
* 微信 JS-SDK jsapi_ticket key前缀 7200s
|
||||
*/
|
||||
String WX_PUBLIC_JS_API_TICKET = "wx.public:jsapi.ticket.";
|
||||
|
||||
/**
|
||||
* 企业微信 JS-SDK jsapi_ticket key前缀 7200s
|
||||
*/
|
||||
String QYWX_WX_JS_API_TICKET = "qywx.wx:jsapi.ticket.";
|
||||
|
||||
/**
|
||||
* 几米 access_token key前缀
|
||||
*/
|
||||
|
||||
@ -43,12 +43,7 @@ public interface LockPrefixConstant {
|
||||
String CARD_CMD_LOCK = "device:card:cmd-lock";
|
||||
|
||||
/**
|
||||
* 设备下发处理返回数据锁
|
||||
* 学生账单订单锁
|
||||
*/
|
||||
String ISSUE_FACE_DEVICE_LOCK = "user:face:issue.device.lock.";
|
||||
|
||||
/**
|
||||
* 设备组下发处理人脸数据锁
|
||||
*/
|
||||
String ISSUE_FACE_GROUP_LOCK = "user:face:group.lock.";
|
||||
String STUDENT_BILL_ORDER_LOCK = "student.bill.order.lock.";
|
||||
}
|
||||
|
||||
@ -38,21 +38,11 @@ public interface QywxConstant {
|
||||
*/
|
||||
String USER_DETAIL_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/get";
|
||||
|
||||
/**
|
||||
* 获取访问用户敏感信息 post https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=ACCESS_TOKEN
|
||||
*/
|
||||
String USER_SENSITIVE_INFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail?access_token=";
|
||||
|
||||
/**
|
||||
* 查询部门成员详情 get https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=ACCESS_TOKEN&department_id=DEPARTMENT_ID&fetch_child=FETCH_CHILD
|
||||
*/
|
||||
String USER_DETAIL_LIST_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/list";
|
||||
|
||||
/**
|
||||
* 获取成员ID列表 POST https://qyapi.weixin.qq.com/cgi-bin/user/list_id?access_token=ACCESS_TOKEN
|
||||
*/
|
||||
String USER_ID_LIST_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/list_id?access_token=";
|
||||
|
||||
/**
|
||||
* 创建部门 POST https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token=ACCESS_TOKEN
|
||||
*/
|
||||
@ -73,16 +63,6 @@ public interface QywxConstant {
|
||||
*/
|
||||
String DEPT_LIST_URL = "https://qyapi.weixin.qq.com/cgi-bin/department/list";
|
||||
|
||||
/**
|
||||
* 获取子部门ID列表 GET https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token=ACCESS_TOKEN&id=ID
|
||||
*/
|
||||
String SIMPLE_DEPT_LIST_URL = "https://qyapi.weixin.qq.com/cgi-bin/department/simplelist";
|
||||
|
||||
/**
|
||||
* 获取单个部门详情 GET https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=ACCESS_TOKEN&id=ID
|
||||
*/
|
||||
String DEPT_INFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/department/get";
|
||||
|
||||
/**
|
||||
* 创建部门(家校沟通) POST https://qyapi.weixin.qq.com/cgi-bin/school/department/create?access_token=ACCESS_TOKEN
|
||||
*/
|
||||
@ -225,39 +205,16 @@ public interface QywxConstant {
|
||||
*/
|
||||
String CONTACT_EVENT = "change_contact";
|
||||
|
||||
/**
|
||||
* 创建部门
|
||||
*/
|
||||
String DEPT_CREATE_TYPE = "create_party";
|
||||
|
||||
/**
|
||||
* 更新部门
|
||||
*/
|
||||
String DEPT_UPDATE_TYPE = "update_party";
|
||||
|
||||
/**
|
||||
* 删除部门
|
||||
*/
|
||||
String DEPT_DELETE_TYPE = "delete_party";
|
||||
|
||||
/**
|
||||
* 创建成员
|
||||
*/
|
||||
String USER_CREATE_TYPE = "create_user";
|
||||
|
||||
/**
|
||||
* 更新成员
|
||||
*/
|
||||
String USER_UPDATE_TYPE = "update_user";
|
||||
|
||||
/**
|
||||
* 删除成员
|
||||
*/
|
||||
String USER_DELETE_TYPE = "delete_user";
|
||||
|
||||
/**
|
||||
* 获取企业微信的jsapi_ticket
|
||||
* https://developer.work.weixin.qq.com/document/path/96909
|
||||
*/
|
||||
String GET_JS_API_TICKET_URL = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket";
|
||||
}
|
||||
|
||||
@ -61,10 +61,4 @@ public interface WxPublicConstant {
|
||||
* 获取微信小程序 URL Link
|
||||
*/
|
||||
String GENERATE_URL_LINK = "https://api.weixin.qq.com/wxa/generate_urllink";
|
||||
|
||||
/**
|
||||
* 获取JS-SDK jsapi_ticket
|
||||
* https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62
|
||||
*/
|
||||
String GET_JS_API_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
|
||||
}
|
||||
|
||||
@ -15,6 +15,11 @@ public class AppNotice {
|
||||
*/
|
||||
private List<String> userIds;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private List<String> userIdList;
|
||||
|
||||
/**
|
||||
* 订阅号 消息内容
|
||||
*/
|
||||
|
||||
@ -63,4 +63,5 @@ public class PushMessage {
|
||||
public static final String AUDIO = "audio";
|
||||
public static final String NORMAL = "NORMAL";
|
||||
public static final String ACCOUNT = "MSG_ACCOUNT_MSG";
|
||||
public static final String H5_SUB_MSG_TYPE = "NEWSEDUCATION";
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ import java.math.BigDecimal;
|
||||
@AllArgsConstructor
|
||||
public class UnionPayOrder implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -1580486861180880702L;
|
||||
private static final long serialVersionUID = -1548806861180880702L;
|
||||
|
||||
@ApiModelProperty("银联云闪付支付类型")
|
||||
private Integer unionPayType;
|
||||
|
||||
@ -89,7 +89,7 @@ public class EduSchoolManuscript {
|
||||
@TableField("author_id")
|
||||
private Long authorId;
|
||||
|
||||
@ApiModelProperty("发布位置,0-城市书房, 1-第二课堂(精彩推荐),2-微信公众号,多个用逗号分割")
|
||||
@ApiModelProperty("发布位置,0-城市书房, 1-第二课堂(精彩推荐),2-微信公众号,多个用逗号分割,3-首页")
|
||||
@TableField("publish_path")
|
||||
private String publishPath;
|
||||
|
||||
@ -132,7 +132,7 @@ public class EduSchoolManuscript {
|
||||
private transient String authorName;
|
||||
|
||||
// 新闻区
|
||||
public static final String NEWS_PATH = "0";
|
||||
public static final String NEWS_PATH = "3";
|
||||
// 第二课堂
|
||||
public static final String SECOND_CLASS_PATH = "1";
|
||||
// 公众号
|
||||
|
||||
@ -54,7 +54,8 @@ public class Dept implements Serializable {
|
||||
@ApiModelProperty("部门简称")
|
||||
private String deptAbbreviation;
|
||||
/**
|
||||
* 部门类型,0表示学校,5公司,6部门, 7教育局, 8代理商 {@link DeptTypeEnum}
|
||||
* 部门类型,0表示学校,5公司,6部门, 7教育局, 8代理商
|
||||
* {@link DeptTypeEnum}
|
||||
*/
|
||||
@ApiModelProperty("部门类型,0表示学校,5公司,6部门, 7教育局, 8代理商")
|
||||
private Integer deptType;
|
||||
@ -70,11 +71,6 @@ public class Dept implements Serializable {
|
||||
private String wxAesKey;
|
||||
@ApiModelProperty("学校关联类型类型,0-企业微信,1-易达app,2-大华平台 多类型使用','连接")
|
||||
private String schoolType;
|
||||
|
||||
@ApiModelProperty("学校性质:0小学,1中学,2九年一贯,3十二年一贯,4:高校")
|
||||
@TableField(value = "school_nature")
|
||||
private Integer schoolNature;
|
||||
|
||||
private Long wxId;
|
||||
private Long parentWxId;
|
||||
/**
|
||||
|
||||
@ -45,12 +45,4 @@ public class EduApp {
|
||||
@ApiModelProperty("应用地址")
|
||||
private String appSrc;
|
||||
|
||||
@ApiModelProperty("应用类型。0-自建应用, 1-服务商代开发应用")
|
||||
private Integer appType;
|
||||
|
||||
@ApiModelProperty("应用模板id")
|
||||
private String templateId;
|
||||
|
||||
@ApiModelProperty("服务商企业微信corpId")
|
||||
private String serviceCorpId;
|
||||
}
|
||||
|
||||
@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@ -106,7 +105,5 @@ public class Menu implements Serializable {
|
||||
|
||||
private transient String createTimeFrom;
|
||||
private transient String createTimeTo;
|
||||
|
||||
@ApiModelProperty("菜单类型(0-合并, 1-剔除)")
|
||||
private transient Integer userMenuType;
|
||||
|
||||
}
|
||||
@ -244,9 +244,4 @@ public class SystemUser implements Serializable {
|
||||
private String mainRolePerms;
|
||||
|
||||
private transient EduUserLogo userLogo;
|
||||
|
||||
/**
|
||||
* 学校性质:0幼儿园,1小学,2中学,3九年一贯,4十二年一贯,5:高校
|
||||
*/
|
||||
private transient Integer schoolNature;
|
||||
}
|
||||
|
||||
@ -25,13 +25,4 @@ public class SystemUserMenu {
|
||||
@ApiModelProperty("菜单id")
|
||||
@TableField("menu_id")
|
||||
private Long menuId;
|
||||
|
||||
|
||||
@ApiModelProperty("菜单类型(0-合并, 1-剔除)")
|
||||
private Integer type;
|
||||
|
||||
/**
|
||||
* 权限串
|
||||
*/
|
||||
private transient String perms;
|
||||
}
|
||||
|
||||
@ -27,9 +27,7 @@ public enum RoleEnum {
|
||||
|
||||
ROLE_CLASS_PRINCIPAL("role:class:principal", "班主任", 9, 5),
|
||||
|
||||
ROLE_EDUCATION_PRINCIPAL("role:education:principal", "教育局负责人", 8, 2),
|
||||
|
||||
ROLE_TEACHER("role:teacher", "教师基础角色", 10, 8);
|
||||
ROLE_EDUCATION_PRINCIPAL("role:education:principal", "教育局负责人", 8, 2);
|
||||
|
||||
/**
|
||||
* 角色标识值
|
||||
|
||||
@ -49,9 +49,6 @@ public class EduStaffDept {
|
||||
@ApiModelProperty(value = "")
|
||||
private String staffName;
|
||||
|
||||
@ApiModelProperty(value = "z职工用户头像")
|
||||
private String avatar;
|
||||
|
||||
/**
|
||||
* 部门id
|
||||
*/
|
||||
|
||||
@ -51,42 +51,6 @@ public class EduStudent implements Serializable {
|
||||
@ApiModelProperty("学生姓名")
|
||||
private String stuName;
|
||||
|
||||
@ApiModelProperty("曾用名")
|
||||
private String formerName;
|
||||
|
||||
@ApiModelProperty("考生号")
|
||||
private String stuExamNumber;
|
||||
|
||||
@ApiModelProperty("银行卡号")
|
||||
private String creditCardNumbers;
|
||||
|
||||
@ApiModelProperty("民族")
|
||||
private String nation;
|
||||
|
||||
@ApiModelProperty("QQ号")
|
||||
private String qqCode;
|
||||
|
||||
@ApiModelProperty("微信号")
|
||||
private String wxCode;
|
||||
|
||||
@ApiModelProperty("邮箱")
|
||||
private String email;
|
||||
|
||||
@ApiModelProperty("入学年级")
|
||||
private String startGrade;
|
||||
|
||||
@ApiModelProperty("政治面貌")
|
||||
private String politicsStatus;
|
||||
|
||||
@ApiModelProperty("邮政编码")
|
||||
private String postalCode;
|
||||
|
||||
@ApiModelProperty("籍贯")
|
||||
private String nativePlace;
|
||||
|
||||
@ApiModelProperty("现住址")
|
||||
private String presentAddress;
|
||||
|
||||
@ApiModelProperty("学生头像url")
|
||||
private String avatar;
|
||||
|
||||
@ -136,9 +100,6 @@ public class EduStudent implements Serializable {
|
||||
@ApiModelProperty("学生当前状态,0=在校/在寝,1=离校/离寝")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty("学籍状态:关联字典表")
|
||||
private String studentStatus;
|
||||
|
||||
@ApiModelProperty("学生在寝状态,0-在寝,1-离寝")
|
||||
private Integer dormStatus;
|
||||
|
||||
|
||||
@ -9,11 +9,13 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
|
||||
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
|
||||
import lombok.Data;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 用户人脸图像 Entity
|
||||
*
|
||||
@ -82,30 +84,7 @@ public class EduUserFace {
|
||||
private String picPath;
|
||||
|
||||
/**
|
||||
* 人脸组id
|
||||
* 人脸与人脸组的关联id
|
||||
*/
|
||||
private transient Long faceGroupUserId;
|
||||
|
||||
/**
|
||||
* 学生对应卡号
|
||||
*/
|
||||
private transient String rfidCard;
|
||||
|
||||
/**
|
||||
* 是否为会员 1=是,0=否(针对学生,教师全是会员)
|
||||
*/
|
||||
private transient Integer notes;
|
||||
/**
|
||||
* 会员开始时间
|
||||
*/
|
||||
private transient String cardValidBegin;
|
||||
/**
|
||||
* 会员结束时间
|
||||
*/
|
||||
private transient String cardValidEnd;
|
||||
|
||||
/**
|
||||
* 下发的设备名称
|
||||
*/
|
||||
private transient String deviceName;
|
||||
}
|
||||
@ -14,11 +14,6 @@ public enum AttendanceResult {
|
||||
*/
|
||||
NORMAL(100, "正常"),
|
||||
|
||||
/**
|
||||
* 异常状态
|
||||
*/
|
||||
ABNORMAL(999, "异常"),
|
||||
|
||||
/**
|
||||
* 上学未在打卡有效时间段
|
||||
*/
|
||||
@ -45,33 +40,10 @@ public enum AttendanceResult {
|
||||
* 走读-旷课
|
||||
*/
|
||||
STU_NOTARRIVE(204, "旷课"),
|
||||
|
||||
/**
|
||||
* 走读-请假
|
||||
*/
|
||||
STU_REQUEST(205, "请假"),
|
||||
/**
|
||||
* 上班未打卡|下班正常
|
||||
*/
|
||||
STU_NOSTART_AND_END_NORMAL(206, "上班未打卡|下班正常"),
|
||||
|
||||
/**
|
||||
* 上班未打卡|下班正常
|
||||
*/
|
||||
STU_NOSTART_AND_END_LATE(207, "上班未打卡|下班早退"),
|
||||
/**
|
||||
* 上班未打卡|下班正常
|
||||
*/
|
||||
STU_NOSTART_AND_END_NOTIN(208, "上班未打卡|下班未在有效打卡时间段内"),
|
||||
/**
|
||||
* 上班未在有效打卡时间段内|下班早退
|
||||
*/
|
||||
STU_NOSTARTIN_AND_END_LEAVE(209, "上班未在有效打卡时间段内|下班早退"),
|
||||
|
||||
/**
|
||||
* 上班迟到|下班未打卡
|
||||
*/
|
||||
STU_NOSTARTIN_AND_END_NO(210, "上班迟到|下班未打卡"),
|
||||
/**
|
||||
* 住宿-晚归
|
||||
*/
|
||||
|
||||
@ -6,10 +6,8 @@ import lombok.Getter;
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum MsgChannel {
|
||||
|
||||
MQTT("mqtt","mqtt(人脸设备)"),
|
||||
ACTIVE("activeMq","active(人脸设备)"),
|
||||
WIFI("WIFI", "WIFI打卡");
|
||||
ACTIVE("activeMq","active(人脸设备)");
|
||||
|
||||
private String value;
|
||||
private String name;
|
||||
|
||||
@ -16,11 +16,9 @@ public enum PayWay {
|
||||
/**
|
||||
* 支付方式枚举
|
||||
*/
|
||||
WEI_XIN("1", "微信"),
|
||||
WEIXIN("1", "微信"),
|
||||
ALIPAY("2", "支付宝"),
|
||||
UNION("3", "银联"),
|
||||
U_PAY("4", "收钱吧"),
|
||||
CONSTRUCTION_PAY("5", "建行");
|
||||
UNION("3", "银联");
|
||||
|
||||
/**
|
||||
* 类型
|
||||
|
||||
@ -17,7 +17,7 @@ public enum UnionPayTypeEnum {
|
||||
/**
|
||||
* 银联云闪付支付类型枚举
|
||||
*/
|
||||
WX_H5_TYPE(0, "微信H5", UnionPayConstant.UNION_H5_PAY),
|
||||
WX_H5_TYPE(0, "微信H5", UnionPayConstant.WX_H5_PAY),
|
||||
WX_TO_MINI_H5_TYPE(1, "微信H5转小程序", UnionPayConstant.WX_TO_MINI_H5_PAY),
|
||||
ALI_H5_TYPE(2, "支付宝H5", UnionPayConstant.ALI_H5_PAY),
|
||||
UNION_H5_TYPE(3, "银联H5", UnionPayConstant.UNION_H5_PAY);
|
||||
|
||||
@ -5,8 +5,7 @@ import com.yida.data.common.core.entity.constant.StringConstant;
|
||||
import com.yida.data.common.core.exception.FebsException;
|
||||
import com.yida.data.common.core.exception.FileDownloadException;
|
||||
import com.yida.data.common.core.utils.FebsUtil;
|
||||
import feign.FeignException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
@ -19,11 +18,15 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import javax.validation.Path;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import feign.FeignException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @author MrBird
|
||||
@ -135,7 +138,7 @@ public class BaseExceptionHandler {
|
||||
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
|
||||
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
|
||||
public FebsResponse handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
|
||||
log.error("error: ", e);
|
||||
log.error("error:{},{}", e.getMessage(), e.getStackTrace());
|
||||
String message = "该方法不支持" + StringUtils.substringBetween(e.getMessage(), "'", "'") + "请求方法";
|
||||
log.error(message);
|
||||
return new FebsResponse().message(message);
|
||||
|
||||
@ -178,25 +178,55 @@ public class AppUtil {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 推送app消息
|
||||
*
|
||||
* @param appNotice 消息配置类
|
||||
* @param app app信息
|
||||
* @author ZYJ
|
||||
* @date 2023/7/14 16:04
|
||||
*/
|
||||
public static void sendPushMsg(AppNotice appNotice, EduYidaApp app) {
|
||||
StringBuilder url = new StringBuilder();
|
||||
AppNotice appNotice1 = new AppNotice();
|
||||
BeanUtils.copyProperties(appNotice, appNotice1);
|
||||
appNotice1.setMsgList(null);
|
||||
url.append(app.getAppUrl()).append(YidaAppConstant.JIGUANG_SEND_MSG);
|
||||
// url.append("http://10.143.132.192:8082/push/sendMulti").append(YidaAppConstant.JIGUANG_SEND_MSG);
|
||||
String body = JSONUtil.toJsonStr(appNotice1);
|
||||
// 1s后超时 不保证收到推送
|
||||
try {
|
||||
String res = HttpUtil.post(url.toString(), body, 1000);
|
||||
log.info("app消息推送,res:[{}],params:[{}]", res, body);
|
||||
} catch (Exception e) {
|
||||
log.error("app消息推送超时,url:[{}],params:[{}]", url, body);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送稿件
|
||||
*/
|
||||
public static String publishManuscript(EduSchoolManuscript manuscript, EduYidaApp yidaApp, String columnId,
|
||||
String yidaUserId) {
|
||||
JSONObject body = new JSONObject() {{
|
||||
set("title", manuscript.getTitle());
|
||||
set("fileType", manuscript.getCoverType());
|
||||
set("type", 1);
|
||||
set("isPush", 1);
|
||||
set("isSub", 1);
|
||||
set("isPublish", 1);
|
||||
set("from", 2);
|
||||
set("isTop", 0);
|
||||
set("titleFilePath", manuscript.getCoverUrl());
|
||||
set("areaId", yidaApp.getAppAreaId());
|
||||
set("createById", yidaUserId);
|
||||
}};
|
||||
JSONObject body = JSONUtil.createObj()
|
||||
.set("title", manuscript.getTitle())
|
||||
.set("fileType", manuscript.getCoverType())
|
||||
.set("type", 1)
|
||||
.set("isPush", 1)
|
||||
.set("isSub", 1)
|
||||
.set("isPublish", 1)
|
||||
.set("from", 2)
|
||||
.set("isTop", 0)
|
||||
.set("titleFilePath", manuscript.getCoverUrl())
|
||||
.set("areaId", yidaApp.getAppAreaId())
|
||||
.set("createById", yidaUserId);
|
||||
// 判断稿件id
|
||||
if (StrUtil.isNotBlank(manuscript.getYidaAppMunascriptId())) {
|
||||
body.set("id", manuscript.getYidaAppMunascriptId());
|
||||
body.set("isNewRecord", false);
|
||||
} else {
|
||||
body.set("isNewRecord", true);
|
||||
}
|
||||
// 是否发布到栏目
|
||||
if (StrUtil.isNotBlank(columnId)) {
|
||||
body.set("columnId", columnId);
|
||||
@ -207,9 +237,9 @@ public class AppUtil {
|
||||
if (StrUtil.isNotBlank(manuscript.getContentUrl())) {
|
||||
body.set("contenUrl", manuscript.getContentUrl());
|
||||
}
|
||||
if (StrUtil.isNotBlank(manuscript.getYidaAppMunascriptId())) {
|
||||
body.set("id", manuscript.getYidaAppMunascriptId());
|
||||
}
|
||||
// if (StrUtil.isNotBlank(manuscript.getYidaAppMunascriptId())) {
|
||||
// body.set("id", manuscript.getYidaAppMunascriptId());
|
||||
// }
|
||||
String res = HttpUtil.post(yidaApp.getAppUrl() + YidaAppConstant.MANUSCRIPT_SAVE, body);
|
||||
JSONObject resJson = JSONUtil.parseObj(res);
|
||||
log.info("易达发送稿件,res:[{}],params:[{}]", res, body);
|
||||
@ -258,10 +288,16 @@ public class AppUtil {
|
||||
/**
|
||||
* 删除稿件
|
||||
*/
|
||||
public static void manuscriptDel(List<String> ids, EduYidaApp yidaApp) {
|
||||
public static void manuscriptDel(List<String> ids, EduYidaApp yidaApp, String userId) {
|
||||
if (CollUtil.isEmpty(ids)) {
|
||||
log.info("易达删除稿件IDS为空");
|
||||
return;
|
||||
}
|
||||
JSONObject body = new JSONObject() {{
|
||||
set("ids", CollUtil.join(ids, ","));
|
||||
set("operateUserId", userId);
|
||||
}};
|
||||
log.info("易达删除稿件:params:{}", body);
|
||||
HttpUtil.post(yidaApp.getAppUrl() + YidaAppConstant.MANUSCRIPT_DEL, body);
|
||||
}
|
||||
|
||||
|
||||
@ -1,19 +1,14 @@
|
||||
package com.yida.data.common.core.utils;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 时间工具类
|
||||
@ -99,115 +94,4 @@ public abstract class DateUtil {
|
||||
LocalTime now = LocalTime.now();
|
||||
return now.isAfter(from) && now.isBefore(to);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 计算两个时间点相差的天数
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
public static Long daysBetween(Date beginDate, Date endDate) {
|
||||
return cn.hutool.core.date.DateUtil.between(beginDate, endDate, DateUnit.DAY);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取指定年指定月的开始天数和结束天数
|
||||
*
|
||||
* @param yearMonth
|
||||
* @return
|
||||
*/
|
||||
public static Map<String, Date> getFirstDayAndLastDayOfTheSpecifiedMonth(String yearMonth) {
|
||||
|
||||
int year = Integer.parseInt(yearMonth.split("-")[0]);
|
||||
int month = Integer.parseInt(yearMonth.split("-")[1]);
|
||||
// 获取当前分区的日历信息(这里可以使用参数指定时区)
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
// 设置年
|
||||
calendar.set(Calendar.YEAR, year);
|
||||
// 设置月,月份从0开始
|
||||
calendar.set(Calendar.MONTH, month - 1);
|
||||
// 设置为指定月的第一天
|
||||
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
||||
// 获取指定月第一天的时间
|
||||
Date start = calendar.getTime();
|
||||
// 设置日历天数为当前月实际天数的最大值,即指定月份的最后一天
|
||||
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
|
||||
// 获取最后一天的时间
|
||||
Date end = calendar.getTime();
|
||||
// 设置返回信息,返回样式根据需求自行格式化
|
||||
Map<String, Date> dateMap = new HashMap<>();
|
||||
dateMap.put("start", start);
|
||||
dateMap.put("end", end);
|
||||
return dateMap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询日期间有几天一周中的某一天 日期格式 yyyy-MM-dd yyyy-MM-dd 1-7(表示周一到周日)
|
||||
*
|
||||
* @param startDate 准备查询的起始日期
|
||||
* @param endDate 准备查询的结束日期
|
||||
* @param dayOfWeek 准备查的一周中的某一天(准备查周几?)
|
||||
* @return 包含所查周几的天数
|
||||
* @throws ParseException 不支持跨年查询、不支持结束日期早于起始日期、周几输入错误等
|
||||
*/
|
||||
public static Integer getMondayNumber(LocalDate startDate, LocalDate endDate, int dayOfWeek) throws ParseException {
|
||||
try {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
int differenceDay = 0;
|
||||
//实例化起始和结束Calendar对象
|
||||
Calendar startCalendar = Calendar.getInstance();
|
||||
Calendar endCalendar = Calendar.getInstance();
|
||||
//分别设置Calendar对象的时间
|
||||
ZoneId zone = ZoneId.systemDefault();
|
||||
Instant instantStartDate = startDate.atStartOfDay().atZone(zone).toInstant();
|
||||
Instant instantEndDate = endDate.atStartOfDay().atZone(zone).toInstant();
|
||||
startCalendar.setTime(Date.from(instantStartDate));
|
||||
endCalendar.setTime(Date.from(instantEndDate));
|
||||
|
||||
//定义起始日期和结束日期分别属于第几周
|
||||
int startWeek = startCalendar.get(Calendar.WEEK_OF_YEAR);
|
||||
int endWeek = endCalendar.get(Calendar.WEEK_OF_YEAR);
|
||||
|
||||
//拿到起始日期是星期几
|
||||
int startDayOfWeek = startCalendar.get(Calendar.DAY_OF_WEEK);
|
||||
if (startDayOfWeek == 1) {
|
||||
startDayOfWeek = 7;
|
||||
startWeek--;
|
||||
} else {
|
||||
startDayOfWeek--;
|
||||
}
|
||||
|
||||
//拿到结束日期是星期几
|
||||
int endDayOfWeek = endCalendar.get(Calendar.DAY_OF_WEEK);
|
||||
if (endDayOfWeek == 1) {
|
||||
endDayOfWeek = 7;
|
||||
endWeek--;
|
||||
} else {
|
||||
endDayOfWeek--;
|
||||
}
|
||||
|
||||
//计算相差的周数
|
||||
int differenceWeek = endWeek - startWeek;
|
||||
|
||||
//开始计算
|
||||
if (startDayOfWeek <= dayOfWeek) {
|
||||
if (endDayOfWeek >= dayOfWeek) {
|
||||
differenceDay = differenceWeek + 1;
|
||||
}
|
||||
} else if (startDayOfWeek > dayOfWeek) {
|
||||
if (endDayOfWeek < dayOfWeek) {
|
||||
differenceDay = differenceWeek - 1;
|
||||
}
|
||||
} else {
|
||||
differenceDay = differenceWeek;
|
||||
}
|
||||
return differenceDay;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,10 +9,8 @@ import com.yida.data.common.core.entity.constant.PageConstant;
|
||||
import com.yida.data.common.core.entity.constant.RegexpConstant;
|
||||
import com.yida.data.common.core.entity.constant.StringConstant;
|
||||
import com.yida.data.common.core.exception.FebsException;
|
||||
import java.time.LocalDate;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.omg.CORBA.UNKNOWN;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.io.buffer.DataBuffer;
|
||||
import org.springframework.core.io.buffer.DataBufferUtils;
|
||||
@ -49,7 +47,6 @@ import java.util.stream.IntStream;
|
||||
public abstract class FebsUtil {
|
||||
|
||||
private static final String UNKNOW = "unknown";
|
||||
private static final String UNKNOWN = "unknown";
|
||||
|
||||
/**
|
||||
* 驼峰转下划线
|
||||
@ -216,18 +213,13 @@ public abstract class FebsUtil {
|
||||
public static String getHttpServletRequestIpAddress() {
|
||||
HttpServletRequest request = getHttpServletRequest();
|
||||
String ip = request.getHeader("x-forwarded-for");
|
||||
if (ip != null && ip.length() != 0 && !UNKNOWN.equalsIgnoreCase(ip)) {
|
||||
if (ip.contains(StringConstant.COMMA)) {
|
||||
ip = ip.split(StringConstant.COMMA)[0];
|
||||
}
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
|
||||
if (ip == null || ip.length() == 0 || UNKNOW.equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("Proxy-Client-IP");
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
|
||||
if (ip == null || ip.length() == 0 || UNKNOW.equalsIgnoreCase(ip)) {
|
||||
ip = request.getHeader("WL-Proxy-Client-IP");
|
||||
}
|
||||
if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
|
||||
if (ip == null || ip.length() == 0 || UNKNOW.equalsIgnoreCase(ip)) {
|
||||
ip = request.getRemoteAddr();
|
||||
}
|
||||
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
|
||||
@ -409,91 +401,11 @@ public abstract class FebsUtil {
|
||||
res = "星期六";
|
||||
break;
|
||||
case 7:
|
||||
res = "星期日";
|
||||
res = "星期天";
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public static boolean isWeek(String weekStr, Integer week) {
|
||||
boolean flag = false;
|
||||
switch (week) {
|
||||
case 1:
|
||||
if (weekStr.contains("星期一")) {
|
||||
flag = true;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (weekStr.contains("星期二")) {
|
||||
flag = true;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (weekStr.contains("星期三")) {
|
||||
flag = true;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (weekStr.contains("星期四")) {
|
||||
flag = true;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (weekStr.contains("星期五")) {
|
||||
flag = true;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (weekStr.contains("星期六")) {
|
||||
flag = true;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (weekStr.contains("星期日")) {
|
||||
flag = true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 通过身份证号码获取性别(sex)
|
||||
*
|
||||
* @param idCardNo 身份证号码
|
||||
* @return 性别格式:1:女,0:男
|
||||
*/
|
||||
public static Integer getSexByIdCardNo(String idCardNo) {
|
||||
Integer sexCode = null;
|
||||
char[] number = idCardNo.toCharArray();
|
||||
boolean flag = true;
|
||||
if (number.length == 15) {
|
||||
for (int x = 0; x < number.length; x++) {
|
||||
if (!flag) {
|
||||
return null;
|
||||
}
|
||||
flag = Character.isDigit(number[x]);
|
||||
}
|
||||
} else if (number.length == 18) {
|
||||
for (int x = 0; x < number.length - 1; x++) {
|
||||
if (!flag) {
|
||||
return null;
|
||||
}
|
||||
flag = Character.isDigit(number[x]);
|
||||
}
|
||||
}
|
||||
if (flag && idCardNo.length() == 15) {
|
||||
sexCode = Integer.parseInt(idCardNo.substring(idCardNo.length() - 3, idCardNo.length())) % 2 == 0 ? 1 : 0;
|
||||
} else if (flag && idCardNo.length() == 18) {
|
||||
sexCode = Integer.parseInt(idCardNo.substring(idCardNo.length() - 4, idCardNo.length() - 1)) % 2 == 0 ? 1 : 0;
|
||||
}
|
||||
|
||||
return sexCode;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ public abstract class FileUtil {
|
||||
put("source", 50);
|
||||
}
|
||||
});
|
||||
// log.info("上传响应,[{}]", resp);
|
||||
log.info("上传响应,[{}]", resp);
|
||||
JSONObject respJson = JSONUtil.parseObj(resp);
|
||||
if (!"200".equals(respJson.get("status").toString())) {
|
||||
throw new FebsException(respJson.getStr("message"));
|
||||
@ -261,14 +261,6 @@ public abstract class FileUtil {
|
||||
public static String downloadToLocal(String url) {
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
String path = TEMP_DIR + now.getYear() + "/" + now.getMonthValue() + "/" + now.getDayOfMonth() + "/";
|
||||
// String filename = cn.hutool.core.io.FileUtil.getName(url);
|
||||
// if (filename.contains(".jpg") || filename.contains(".png")) {
|
||||
// if (filename.contains("?")) {
|
||||
// filename = filename.split("\\?")[0];
|
||||
// }
|
||||
// } else {
|
||||
// filename = UUID.randomUUID() + ".jpg";
|
||||
// }
|
||||
String filename = UUID.randomUUID() + ".jpg";
|
||||
try {
|
||||
HttpUtil.downloadFile(url, path + filename);
|
||||
|
||||
@ -106,7 +106,7 @@ public class WxPublicUtil {
|
||||
|
||||
public String getAccessToken(String appId, String secret) {
|
||||
String accessToken =
|
||||
String.valueOf(redisService.get(FebsConstant.WX_PUBLIC_ACCESS_TOKEN + appId + "." + secret));
|
||||
String.valueOf(redisService.get(FebsConstant.WX_PUBLIC_ACCESS_TOKEN + appId + "." + secret));
|
||||
if ("null".equals(accessToken)) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("grant_type", "client_credential");
|
||||
@ -117,7 +117,7 @@ public class WxPublicUtil {
|
||||
JSONObject token = JSONUtil.parseObj(response);
|
||||
if (token.containsKey("errcode") && !"0".equals(token.get("errcode").toString())) {
|
||||
log.error("请求微信公众号access token失败,code:{},msg:{}", token.get("errcode").toString(),
|
||||
token.get("errmsg").toString());
|
||||
token.get("errmsg").toString());
|
||||
throw new FebsException("验证失败");
|
||||
}
|
||||
accessToken = token.get("access_token").toString();
|
||||
@ -138,7 +138,7 @@ public class WxPublicUtil {
|
||||
JSONObject token = JSONUtil.parseObj(response);
|
||||
if (token.containsKey("errcode") && !"0".equals(token.get("errcode"))) {
|
||||
log.error("请微信求access token失败,code:{},msg:{}", token.get("errcode"),
|
||||
token.get("errmsg"));
|
||||
token.get("errmsg"));
|
||||
throw new FebsException("验证失败");
|
||||
}
|
||||
return token.getStr("openid");
|
||||
@ -151,10 +151,10 @@ public class WxPublicUtil {
|
||||
Map<String, Object> body = new HashMap<>();
|
||||
body.put("media", img);
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.UPLOAD_NEWS_IMG + "?access_token=" + token, body));
|
||||
post(WxPublicConstant.UPLOAD_NEWS_IMG + "?access_token=" + token, body));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("上传图片失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("上传图片失败");
|
||||
}
|
||||
return response.getStr("url");
|
||||
@ -166,10 +166,10 @@ public class WxPublicUtil {
|
||||
public String uploadNews(News news, String token) {
|
||||
String body = JSONUtil.toJsonPrettyStr(news);
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.UPLOAD_NEWS + "?access_token=" + token, body));
|
||||
post(WxPublicConstant.UPLOAD_NEWS + "?access_token=" + token, body));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("上传图文素材失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("上传图文素材失败");
|
||||
}
|
||||
return response.getStr("media_id");
|
||||
@ -190,10 +190,10 @@ public class WxPublicUtil {
|
||||
put("send_ignore_reprint", 1);
|
||||
}};
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, JSONUtil.toJsonStr(body)));
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, JSONUtil.toJsonStr(body)));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("群发图文消息失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("群发图文消息失败");
|
||||
}
|
||||
return response.getStr("msg_data_id");
|
||||
@ -213,10 +213,10 @@ public class WxPublicUtil {
|
||||
set("msgtype", "text");
|
||||
}};
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("群发文本消息失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("群发文本消息失败");
|
||||
}
|
||||
return response.getStr("msg_data_id");
|
||||
@ -236,10 +236,10 @@ public class WxPublicUtil {
|
||||
set("msgtype", "voice");
|
||||
}};
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("群发音频消息失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("群发音频消息失败");
|
||||
}
|
||||
return response.getStr("msg_data_id");
|
||||
@ -259,10 +259,10 @@ public class WxPublicUtil {
|
||||
set("msgtype", "image");
|
||||
}};
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("群发音频消息失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("群发音频消息失败");
|
||||
}
|
||||
return response.getStr("msg_data_id");
|
||||
@ -282,10 +282,10 @@ public class WxPublicUtil {
|
||||
set("msgtype", "mpvideo");
|
||||
}};
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
|
||||
post(WxPublicConstant.SEND_MSG + "?access_token=" + token, body));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("群发音频消息失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("群发音频消息失败");
|
||||
}
|
||||
return response.getStr("msg_data_id");
|
||||
@ -305,10 +305,10 @@ public class WxPublicUtil {
|
||||
}}));
|
||||
}
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.UPLOAD_MATERIAL + "?access_token=" + token + "&type=" + type, body));
|
||||
post(WxPublicConstant.UPLOAD_MATERIAL + "?access_token=" + token + "&type=" + type, body));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("上传永久素材失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("上传永久素材失败");
|
||||
}
|
||||
return response.getStr("media_id");
|
||||
@ -322,10 +322,10 @@ public class WxPublicUtil {
|
||||
put("media_id", mediaId);
|
||||
}};
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(WxPublicConstant.DELETE_MATERIAL + "?access_token=" + token, JSONUtil.toJsonStr(body)));
|
||||
post(WxPublicConstant.DELETE_MATERIAL + "?access_token=" + token, JSONUtil.toJsonStr(body)));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("删除永久素材失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("删除永久素材失败");
|
||||
}
|
||||
}
|
||||
@ -334,15 +334,15 @@ public class WxPublicUtil {
|
||||
* 上传临时素材 图片(image)、语音(voice)、视频(video)和缩略图(thumb)
|
||||
*/
|
||||
public String uploadTempMaterial(String type, File file,
|
||||
String token) {
|
||||
String token) {
|
||||
Map<String, Object> body = new HashMap<String, Object>() {{
|
||||
put("media", file);
|
||||
}};
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
HttpUtil.post(WxPublicConstant.UPLOAD_TEMP_MATERIAL + "?access_token=" + token + "&type=" + type, body));
|
||||
HttpUtil.post(WxPublicConstant.UPLOAD_TEMP_MATERIAL + "?access_token=" + token + "&type=" + type, body));
|
||||
if (response.containsKey("errcode") && !"0".equals(response.get("errcode").toString())) {
|
||||
log.error("上传临时素材失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("上传临时素材失败");
|
||||
}
|
||||
if ("thumb".equals(type)) {
|
||||
@ -364,7 +364,7 @@ public class WxPublicUtil {
|
||||
return null;
|
||||
}
|
||||
String url = new StringBuilder(WxPublicConstant.QR_CODE).append("?access_token=").append(accessToken)
|
||||
.toString();
|
||||
.toString();
|
||||
JSONObject body = new JSONObject() {{
|
||||
if (expire != null) {
|
||||
set("expire_seconds", expire);
|
||||
@ -408,13 +408,13 @@ public class WxPublicUtil {
|
||||
}});
|
||||
}};
|
||||
String post = HttpUtil.post(
|
||||
new StringBuilder(WxPublicConstant.PUSH_CUSTOM_MSG).append("?access_token=").append(accessToken).toString(),
|
||||
body.toString());
|
||||
new StringBuilder(WxPublicConstant.PUSH_CUSTOM_MSG).append("?access_token=").append(accessToken).toString(),
|
||||
body.toString());
|
||||
log.info("发送客户消息,res:[{}],body:[{}]", post, body);
|
||||
}
|
||||
|
||||
public void publishTemplateMsg(String accessToken, String openUserId, String templateId, String url,
|
||||
JSONObject data) {
|
||||
JSONObject data) {
|
||||
JSONObject body = new JSONObject() {{
|
||||
set("touser", openUserId);
|
||||
if (StrUtil.isNotBlank(url)) {
|
||||
@ -424,12 +424,13 @@ public class WxPublicUtil {
|
||||
set("data", data);
|
||||
}};
|
||||
String post = HttpUtil.post(new StringBuilder(WxPublicConstant.PUSH_TEMPLATE_MSG).append(
|
||||
"?access_token=").append(accessToken).toString(), body.toString());
|
||||
"?access_token=").append(accessToken).toString(), body.toString());
|
||||
log.info("发送模板消息,res:[{}],body:[{}]", post, body);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取小程序URL Link https + post
|
||||
* 获取小程序URL Link
|
||||
* https + post
|
||||
*
|
||||
* @param accessToken token值
|
||||
* @param generateUrlLink 获取小程序URL Link请求类
|
||||
@ -440,62 +441,30 @@ public class WxPublicUtil {
|
||||
public String generateUrlLink(String accessToken, GenerateUrlLink generateUrlLink) {
|
||||
// 封装参数
|
||||
JSONObject body = JSONUtil.createObj()
|
||||
.set("path", generateUrlLink.getPath())
|
||||
.set("query", generateUrlLink.getQuery())
|
||||
.set("env_version", generateUrlLink.getEnvVersion())
|
||||
.set("expire_type", generateUrlLink.getExpireType())
|
||||
.set("expire_interval", 30);
|
||||
.set("path", generateUrlLink.getPath())
|
||||
.set("query", generateUrlLink.getQuery())
|
||||
.set("env_version", generateUrlLink.getEnvVersion())
|
||||
.set("expire_type", generateUrlLink.getExpireType())
|
||||
.set("expire_interval", 30);
|
||||
if (Objects.nonNull(generateUrlLink.getCloudBase())) {
|
||||
GenerateUrlLink.CloudBase cloudBase = generateUrlLink.getCloudBase();
|
||||
body.set("cloud_base", JSONUtil.createObj()
|
||||
.set("env", cloudBase.getEnv())
|
||||
.set("domain", cloudBase.getDomain())
|
||||
.set("path", cloudBase.getPath())
|
||||
.set("query", cloudBase.getQuery())
|
||||
.set("resource_appid", cloudBase.getResourceAppId())
|
||||
.set("env", cloudBase.getEnv())
|
||||
.set("domain", cloudBase.getDomain())
|
||||
.set("path", cloudBase.getPath())
|
||||
.set("query", cloudBase.getQuery())
|
||||
.set("resource_appid", cloudBase.getResourceAppId())
|
||||
);
|
||||
}
|
||||
// 请求接口
|
||||
String result = HttpUtil.post(WxPublicConstant.GENERATE_URL_LINK + "?access_token=" + accessToken, body.toString());
|
||||
// log.info("获取小程序URL Link接口, result: [{}], body: [{}]", result, body);
|
||||
log.info("获取小程序URL Link接口, result: [{}], body: [{}]", result, body);
|
||||
JSONObject response = JSONUtil.parseObj(result);
|
||||
if (response.containsKey("errcode") && !"0".equals(response.getStr("errcode"))) {
|
||||
log.error("获取小程序URL Link接口失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("获取小程序URL Link接口失败");
|
||||
}
|
||||
return response.getStr("url_link");
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信获取JS-SDK jsapi_ticket
|
||||
*
|
||||
* @param appId 微信appId
|
||||
* @param secret 微信secret
|
||||
* @return java.lang.String
|
||||
* @author ZYJ
|
||||
* @date 2023/6/5 14:50
|
||||
*/
|
||||
public String getJsApiTicket(String appId, String secret) {
|
||||
String jsApiTicket =
|
||||
String.valueOf(redisService.get(FebsConstant.WX_PUBLIC_JS_API_TICKET + appId + "." + secret));
|
||||
if ("null".equals(jsApiTicket)) {
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("access_token", getAccessToken(appId, secret));
|
||||
params.put("type", "jsapi");
|
||||
// 获取JS-SDK jsapi_ticket
|
||||
String response = get(WxPublicConstant.GET_JS_API_TICKET_URL, params);
|
||||
JSONObject token = JSONUtil.parseObj(response);
|
||||
if (token.containsKey("errcode") && !"0".equals(token.get("errcode").toString())) {
|
||||
log.error("获取JS-SDK jsapi_ticket失败,code:{},msg:{}", token.get("errcode").toString(),
|
||||
token.get("errmsg").toString());
|
||||
throw new FebsException("验证失败");
|
||||
}
|
||||
jsApiTicket = token.get("ticket").toString();
|
||||
// 缓存accessToken两小时
|
||||
redisService.set(FebsConstant.WX_PUBLIC_JS_API_TICKET + appId + "." + secret, jsApiTicket, 7200L);
|
||||
}
|
||||
return jsApiTicket;
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,20 +9,28 @@ import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.yida.data.common.core.entity.constant.FebsConstant;
|
||||
import com.yida.data.common.core.entity.constant.QywxConstant;
|
||||
import com.yida.data.common.core.entity.constant.WxPublicConstant;
|
||||
import com.yida.data.common.core.entity.notice.qywx.BaseSchoolNotice;
|
||||
import com.yida.data.common.core.entity.notice.qywx.BaseStaffNotice;
|
||||
import com.yida.data.common.core.entity.system.Dept;
|
||||
import com.yida.data.common.core.entity.user.*;
|
||||
import com.yida.data.common.core.entity.user.EduParent;
|
||||
import com.yida.data.common.core.entity.user.EduStaff;
|
||||
import com.yida.data.common.core.entity.user.EduStaffDept;
|
||||
import com.yida.data.common.core.entity.user.EduStudent;
|
||||
import com.yida.data.common.core.entity.user.EduTeacherDept;
|
||||
import com.yida.data.common.core.entity.user.EduUserDept;
|
||||
import com.yida.data.common.core.exception.FebsException;
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class WxUtil {
|
||||
@ -168,7 +176,7 @@ public class WxUtil {
|
||||
public Boolean pushSchoolNotice(String token, BaseSchoolNotice notice) {
|
||||
JSONObject resp = JSONUtil.parseObj(post(QywxConstant.PUSH_SCHOOL_NOTICE_URL + token,
|
||||
JSONUtil.toJsonStr(notice).replace("\\n", "\n")));
|
||||
// log.info("打印学校消息推送信息: {}", JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
|
||||
log.info("打印学校消息推送信息: {}", JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
|
||||
if (!"0".equals(resp.containsKey("errcode") ? resp.get("errcode").toString() : null)) {
|
||||
log.error("微信通知发送失败,msg:{},notice:{}", resp, notice);
|
||||
return false;
|
||||
@ -176,14 +184,12 @@ public class WxUtil {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public Boolean pushStaffNotice(String token, BaseStaffNotice notice) {
|
||||
// log.info("打印学校消息推送信息: {}", JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
|
||||
JSONObject resp = JSONUtil.parseObj(post(QywxConstant.PUSH_STAFF_NOTICE_URL + token,
|
||||
JSONUtil.toJsonStr(notice).replace("\\n", "\n")));
|
||||
// log.info("打印学校消息推送信息返回信息: {}", resp);
|
||||
log.info("打印学校消息推送信息: {}", JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
|
||||
if (!"0".equals(resp.containsKey("errcode") ? resp.get("errcode").toString() : null)) {
|
||||
log.error("微信通知发送失败,msg:{},notice:{}", resp.get("errmsg"), JSONUtil.toJsonStr(notice).replace("\\n", "\n"));
|
||||
log.error("微信通知发送失败,msg:{},notice:{}", resp.get("errmsg"), notice);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@ -220,41 +226,6 @@ public class WxUtil {
|
||||
return user.getJSONArray("userlist");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取成员ID列表
|
||||
*
|
||||
* @param accessToken 调用接口凭证
|
||||
* @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用不填
|
||||
* @param limit 分页,预期请求的数据量,取值范围 1 ~ 10000
|
||||
* @return cn.hutool.json.JSONArray
|
||||
* @author ZYJ
|
||||
* @date 2022/12/6 17:35
|
||||
*/
|
||||
public JSONArray getUserIdList(String accessToken, String cursor, String limit, JSONArray jsonArray) {
|
||||
// 封装请求参数
|
||||
JSONObject params = JSONUtil.createObj()
|
||||
.set("limit", limit);
|
||||
if (StrUtil.isNotBlank(cursor)) {
|
||||
params.set("cursor", cursor);
|
||||
}
|
||||
String response = post(QywxConstant.USER_ID_LIST_URL + accessToken, params.toString());
|
||||
JSONObject jsonObject = JSONUtil.parseObj(response);
|
||||
log.info("企业微信获取成员ID列表请求参数: {}, 返回值: {}", params, jsonObject);
|
||||
if (!SUCCESS_CODE.equals(jsonObject.containsKey(ERR_CODE) ? jsonObject.get(ERR_CODE).toString() : null)) {
|
||||
log.error("企业微信获取获取成员ID列表失败,code:{},msg:{}", jsonObject.get(ERR_CODE), jsonObject.get(ERR_MESSAGE));
|
||||
throw new FebsException("企业微信获取获取成员ID列表失败");
|
||||
}
|
||||
// 获取成员列表id数据
|
||||
JSONArray deptUser = jsonObject.getJSONArray("dept_user");
|
||||
jsonArray.addAll(deptUser);
|
||||
// 获取分页游标
|
||||
String nextCursor = jsonObject.getStr("next_cursor");
|
||||
if (StrUtil.isNotBlank(nextCursor)) {
|
||||
getUserIdList(accessToken, nextCursor, limit, jsonArray);
|
||||
}
|
||||
return jsonArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用授权登陆code,获取成员信息,通讯录成员返回UserId,家长返回parent_userid
|
||||
*/
|
||||
@ -265,17 +236,14 @@ public class WxUtil {
|
||||
params.put("code", code);
|
||||
String response = get(QywxConstant.USER_INFO_URL, params);
|
||||
JSONObject user = JSONUtil.parseObj(response);
|
||||
if (!SUCCESS_CODE.equals(user.containsKey(ERR_CODE) ? user.get(ERR_CODE).toString() : null)) {
|
||||
log.error("请求微信用户信息失败,code:{},msg:{}", user.get(ERR_CODE),
|
||||
user.get(ERR_MESSAGE));
|
||||
if (!"0".equals(user.containsKey("errcode") ? user.get("errcode").toString() : null)) {
|
||||
log.error("请求微信用户信息失败,code:{},msg:{}", user.get("errcode"),
|
||||
user.get("errmsg"));
|
||||
throw new FebsException("获取用户信息失败");
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户详细信息
|
||||
*/
|
||||
public JSONObject getUserDetail(String accessToken, String userId) {
|
||||
// 查询用户微信userid
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
@ -283,34 +251,10 @@ public class WxUtil {
|
||||
params.put("userid", userId);
|
||||
String userDetailResponse = get(QywxConstant.USER_DETAIL_URL, params);
|
||||
JSONObject userDetail = JSONUtil.parseObj(userDetailResponse);
|
||||
log.info("请求企业微信用户详细信息请求参数: {}, 返回值: {}", params, userDetail);
|
||||
if (!SUCCESS_CODE.equals(userDetail.containsKey(ERR_CODE) ? userDetail.get(ERR_CODE).toString() : null)) {
|
||||
log.error("请求企业微信用户详细信息失败,code:{},msg:{}", userDetail.get(ERR_CODE),
|
||||
userDetail.get(ERR_MESSAGE));
|
||||
throw new FebsException("请求企业微信用户详细信息失败");
|
||||
}
|
||||
return userDetail;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户敏感信息
|
||||
*
|
||||
* @param accessToken 调用接口凭证
|
||||
* @param userTicket 成员票据
|
||||
* @return cn.hutool.json.JSONObject
|
||||
* @author ZYJ
|
||||
* @date 2022/11/28 15:35
|
||||
*/
|
||||
public JSONObject getUserSensitiveInfo(String accessToken, String userTicket) {
|
||||
JSONObject params = JSONUtil.createObj()
|
||||
.set("user_ticket", userTicket);
|
||||
String userDetailResponse = post(QywxConstant.USER_SENSITIVE_INFO_URL + accessToken, params.toString());
|
||||
JSONObject userDetail = JSONUtil.parseObj(userDetailResponse);
|
||||
log.info("查询用户敏感信息请求参数: {}, 返回值: {}", params, userDetail);
|
||||
if (!SUCCESS_CODE.equals(userDetail.containsKey(ERR_CODE) ? userDetail.get(ERR_CODE).toString() : null)) {
|
||||
log.error("查询用户敏感信息失败,code:{}, msg:{}", userDetail.get(ERR_CODE),
|
||||
userDetail.get(ERR_MESSAGE));
|
||||
throw new FebsException("查询用户敏感信息失败");
|
||||
if (!"0".equals(userDetail.containsKey("errcode") ? userDetail.get("errcode").toString() : null)) {
|
||||
log.error("请求微信用户详细信息失败,code:{},msg:{}", userDetail.get("errcode"),
|
||||
userDetail.get("errmsg"));
|
||||
throw new FebsException("获取用户信息失败");
|
||||
}
|
||||
return userDetail;
|
||||
}
|
||||
@ -384,9 +328,9 @@ public class WxUtil {
|
||||
if (deptId != null) {
|
||||
params.put("id", deptId);
|
||||
}
|
||||
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
get(QywxConstant.DEPT_LIST_URL, params));
|
||||
log.info("获取企业微信部门列表请求参数: {}, 返回值: {}", params, response);
|
||||
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
|
||||
log.error("获取企业微信部门列表失败,code:{},msg:{},params:{}", response.get("errcode"),
|
||||
response.get("errmsg"), params);
|
||||
@ -396,50 +340,6 @@ public class WxUtil {
|
||||
return response.getJSONArray("department").toList(Map.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取子部门ID列表
|
||||
*
|
||||
* @param accessToken 调用接口凭证
|
||||
* @param deptId 部门id。获取指定部门及其下的子部门(以及子部门的子部门等等,递归)。 如果不填,默认获取全量组织架构
|
||||
* @return java.util.List<java.util.Map>
|
||||
* @author ZYJ
|
||||
* @date 2023/4/24 10:46
|
||||
*/
|
||||
public List<Map> listSimpleDept(String accessToken, Long deptId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("access_token", accessToken);
|
||||
if (deptId != null) {
|
||||
params.put("id", deptId);
|
||||
}
|
||||
JSONObject response = JSONUtil.parseObj(get(QywxConstant.SIMPLE_DEPT_LIST_URL, params));
|
||||
log.info("获取企业微信子部门ID列表请求参数: {}, 返回值: {}", params, response);
|
||||
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
|
||||
log.error("获取企业微信子部门ID列表失败,code:{},msg:{},params:{}", response.get(ERR_CODE),
|
||||
response.get(ERR_MESSAGE), params);
|
||||
throw new FebsException("获取企业微信子部门ID列表失败");
|
||||
}
|
||||
return response.getJSONArray("department_id").toList(Map.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取单个部门详情
|
||||
*/
|
||||
public JSONObject getDeptInfo(String accessToken, String deptId) {
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("access_token", accessToken);
|
||||
if (deptId != null) {
|
||||
params.put("id", deptId);
|
||||
}
|
||||
JSONObject response = JSONUtil.parseObj(get(QywxConstant.DEPT_INFO_URL, params));
|
||||
log.info("获取企业单个部门详情请求参数: {}, 返回值: {}", params, response);
|
||||
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
|
||||
log.error("获取企业单个部门详情失败,code:{},msg:{},params:{}", response.get(ERR_CODE),
|
||||
response.get(ERR_MESSAGE), params);
|
||||
throw new FebsException("获取企业单个部门详情失败");
|
||||
}
|
||||
return response.getJSONObject("department");
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建企业微信部门(家校沟通)
|
||||
*/
|
||||
@ -507,10 +407,10 @@ public class WxUtil {
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(QywxConstant.SCHOOL_DEPT_UPDATE_URL + "?access_token=" + accessToken,
|
||||
JSONUtil.toJsonStr(body)));
|
||||
log.info("删除部门管理员接口,params:[{}],res:[{}]", body, response);
|
||||
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
|
||||
log.error("企业微信删除部门(家校)管理员失败,code:{},msg:{}", response.get(ERR_CODE),
|
||||
response.get(ERR_MESSAGE));
|
||||
log.info("删除部门,params:[{}],res:[{}]", body, response);
|
||||
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
|
||||
log.error("企业微信删除部门(家校)管理员失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("删除部门(家校)管理员失败");
|
||||
}
|
||||
}
|
||||
@ -544,10 +444,9 @@ public class WxUtil {
|
||||
}
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
get(QywxConstant.SCHOOL_DEPT_LIST_URL, params));
|
||||
log.info("获取家校沟通部门列表请求参数: {}, 返回值: {}", params, response);
|
||||
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
|
||||
log.error("获取企业微信部门(家校)列表失败,code:{},msg:{},params:{}", response.get(ERR_CODE),
|
||||
response.get(ERR_MESSAGE), params);
|
||||
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
|
||||
log.error("获取企业微信部门(家校)列表失败,code:{},msg:{},params:{}", response.get("errcode"),
|
||||
response.get("errmsg"), params);
|
||||
throw new FebsException("获取企业微信部门(家校)列表失败");
|
||||
}
|
||||
|
||||
@ -590,9 +489,6 @@ public class WxUtil {
|
||||
if (StrUtil.isNotBlank(staff.getLandLine())) {
|
||||
body.put("telephone", staff.getLandLine());
|
||||
}
|
||||
if (StrUtil.isNotBlank(staff.getAddress())) {
|
||||
body.put("address", staff.getAddress());
|
||||
}
|
||||
log.info(JSONUtil.toJsonStr(body));
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(QywxConstant.USER_CREATE_URL + "?access_token=" + accessToken,
|
||||
@ -668,15 +564,12 @@ public class WxUtil {
|
||||
if (StrUtil.isNotBlank(staff.getLandLine())) {
|
||||
body.put("telephone", staff.getLandLine());
|
||||
}
|
||||
if (StrUtil.isNotBlank(staff.getAddress())) {
|
||||
body.put("address", staff.getAddress());
|
||||
}
|
||||
log.info(JSONUtil.toJsonStr(body));
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(QywxConstant.USER_UPDATE_URL + "?access_token=" + accessToken,
|
||||
JSONUtil.toJsonStr(body)));
|
||||
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
|
||||
log.error("企业微信修改用户失败,code:{},msg:{}", response.get("errcode"),
|
||||
log.error("企业微信新增用户失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
throw new FebsException("更新职工失败");
|
||||
}
|
||||
@ -691,7 +584,6 @@ public class WxUtil {
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(QywxConstant.USER_DELETE_URL + "?access_token=" + accessToken,
|
||||
JSONUtil.toJsonStr(body)));
|
||||
log.info("企业微信删除用户请求参数: {}, 返回值: {}", body, response);
|
||||
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
|
||||
log.error("企业微信删除用户失败,code:{},msg:{}", response.get("errcode"),
|
||||
response.get("errmsg"));
|
||||
@ -827,7 +719,6 @@ public class WxUtil {
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
post(QywxConstant.PARENT_CREATE_URL + "?access_token=" + accessToken,
|
||||
JSONUtil.toJsonStr(body)));
|
||||
log.info("企业微信新增家长,res:[{}],params:[{}]", response, body);
|
||||
if (!"0".equals(response.containsKey("errcode") ? response.get("errcode").toString() : null)) {
|
||||
log.error("企业微信新增家长失败,code:{},msg:{},result_list:{}", response.get("errcode"),
|
||||
response.get("errmsg"), response.get("result_list"));
|
||||
@ -983,43 +874,10 @@ public class WxUtil {
|
||||
|
||||
JSONObject response = JSONUtil.parseObj(
|
||||
get(QywxConstant.SCHOOL_DEPT_DELETE_URL, params));
|
||||
String code = response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null;
|
||||
// 60003代表企业微信部门不存在
|
||||
if (!SUCCESS_CODE.equals(code) && !"60003".equals(code)) {
|
||||
if (!SUCCESS_CODE.equals(response.containsKey(ERR_CODE) ? response.get(ERR_CODE).toString() : null)) {
|
||||
log.error("企业微信删除家校部门失败,code:{},msg:{},params:{}", response.get(ERR_CODE),
|
||||
response.get(ERR_MESSAGE), params);
|
||||
throw new FebsException("删除家校部门失败,请检查是否包含成员或子部门");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取企业微信JS-SDK jsapi_ticket
|
||||
*
|
||||
* @param accessToken 应用token
|
||||
* @param deptId 部门id
|
||||
* @return java.lang.String
|
||||
* @author ZYJ
|
||||
* @date 2023/6/5 14:50
|
||||
*/
|
||||
public String getJsApiTicket(String accessToken, Long deptId) {
|
||||
String jsApiTicket =
|
||||
String.valueOf(redisService.get(FebsConstant.QYWX_WX_JS_API_TICKET + deptId));
|
||||
if ("null".equals(jsApiTicket)) {
|
||||
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("access_token", accessToken);
|
||||
// 获取JS-SDK jsapi_ticket
|
||||
String response = get(QywxConstant.GET_JS_API_TICKET_URL, params);
|
||||
JSONObject token = JSONUtil.parseObj(response);
|
||||
if (token.containsKey("errcode") && !"0".equals(token.get("errcode").toString())) {
|
||||
log.error("获取JS-SDK jsapi_ticket失败,code:{},msg:{}", token.get("errcode").toString(),
|
||||
token.get("errmsg").toString());
|
||||
throw new FebsException("验证失败");
|
||||
}
|
||||
jsApiTicket = token.get("ticket").toString();
|
||||
// 缓存accessToken两小时
|
||||
redisService.set(FebsConstant.QYWX_WX_JS_API_TICKET + deptId, jsApiTicket, 7200L);
|
||||
}
|
||||
return jsApiTicket;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5,5 +5,4 @@ com.yida.data.common.core.utils.WxUtil,\
|
||||
com.yida.data.common.core.utils.WxPublicUtil,\
|
||||
com.yida.data.common.core.utils.UnionPayPublicUtil,\
|
||||
com.yida.data.common.core.configure.AsyncPollConfigure,\
|
||||
com.yida.data.common.core.handler.BaseExceptionHandler,\
|
||||
com.yida.data.common.core.utils.WxServiceProviderUtil
|
||||
com.yida.data.common.core.handler.BaseExceptionHandler
|
||||
@ -3,7 +3,6 @@ package com.yida.data.log.aspect;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.yida.data.common.core.entity.CurrentUser;
|
||||
import com.yida.data.common.core.exception.FebsException;
|
||||
import com.yida.data.common.core.utils.FebsUtil;
|
||||
import com.yida.data.log.service.LogService;
|
||||
@ -61,24 +60,13 @@ public class OperationLogAspect {
|
||||
public Object insertOperationLog(ProceedingJoinPoint joinPoint) throws Throwable {
|
||||
//返回结果
|
||||
Object result;
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects
|
||||
.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
//请求参数
|
||||
String params = getRequestParams(joinPoint, request);
|
||||
//执行接口
|
||||
result = joinPoint.proceed();
|
||||
//异步保存日志
|
||||
Long createId = null;
|
||||
String createName = null;
|
||||
if (FebsUtil.isLogin()) {
|
||||
CurrentUser currentUser = FebsUtil.getCurrentUser();
|
||||
if (currentUser != null) {
|
||||
createId = currentUser.getUserId();
|
||||
createName = currentUser.getUsername();
|
||||
}
|
||||
}
|
||||
logService.saveOperationLog(joinPoint, FebsUtil.getHttpServletRequestIpAddress(), params, result, createId,
|
||||
createName);
|
||||
logService.saveOperationLog(joinPoint, FebsUtil.getHttpServletRequestIpAddress(), params, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -15,7 +15,6 @@ import com.yida.data.log.annotation.OperationLog;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.aspectj.lang.JoinPoint;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
@ -50,23 +49,21 @@ public class LogService {
|
||||
* @author ZYJ
|
||||
* @date 2021/1/8 16:30
|
||||
*/
|
||||
@Async
|
||||
public void saveOperationLog(JoinPoint joinPoint, String ip, String params, Object result, Long createId, String createName) {
|
||||
//@Async
|
||||
public void saveOperationLog(JoinPoint joinPoint, String ip, String params, Object result) {
|
||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = signature.getMethod();
|
||||
OperationLog opLog = method.getAnnotation(OperationLog.class);
|
||||
//ip地址
|
||||
Log systemLogInfo = new Log();
|
||||
systemLogInfo.setCreateId(createId);
|
||||
systemLogInfo.setCreateName(createName);
|
||||
// 创建人
|
||||
// if (FebsUtil.isLogin()) {
|
||||
// CurrentUser currentUser = FebsUtil.getCurrentUser();
|
||||
// if (currentUser != null) {
|
||||
// systemLogInfo.setCreateId(currentUser.getUserId());
|
||||
// systemLogInfo.setCreateName(currentUser.getUsername());
|
||||
// }
|
||||
// }
|
||||
if (FebsUtil.isLogin()) {
|
||||
CurrentUser currentUser = FebsUtil.getCurrentUser();
|
||||
if (currentUser != null) {
|
||||
systemLogInfo.setCreateId(currentUser.getUserId());
|
||||
systemLogInfo.setCreateName(currentUser.getUsername());
|
||||
}
|
||||
}
|
||||
systemLogInfo.setIp(ip);
|
||||
//设置开始时间
|
||||
systemLogInfo.setStartTime(LocalDateTime.now());
|
||||
@ -87,8 +84,8 @@ public class LogService {
|
||||
systemLogInfo.setResult(JSON.toJSONString(result));
|
||||
//将返回值转换为对象
|
||||
ResultBean<Object> logResult = JSON.parseObject(JSON.toJSONString(result),
|
||||
new TypeReference<ResultBean<Object>>() {
|
||||
});
|
||||
new TypeReference<ResultBean<Object>>() {
|
||||
});
|
||||
int successStatus = 200;
|
||||
if (logResult != null) {
|
||||
if (logResult.getStatus() == successStatus) {
|
||||
@ -112,7 +109,7 @@ public class LogService {
|
||||
systemLogInfo.setEndTime(LocalDateTime.now());
|
||||
//操作时长
|
||||
systemLogInfo.setOperationTime(LocalDateTimeUtil.between(systemLogInfo.getStartTime(),
|
||||
systemLogInfo.getEndTime(), ChronoUnit.MILLIS));
|
||||
systemLogInfo.getEndTime(), ChronoUnit.MILLIS));
|
||||
//保存数据到redis list数据
|
||||
redisService.lSet(CachePrefixConstant.OPERATION_LOG_LIST, systemLogInfo);
|
||||
}
|
||||
|
||||
@ -104,19 +104,4 @@ public interface RabbitConstant {
|
||||
* websocket推送队列与交换机绑定key
|
||||
*/
|
||||
String MSG_WEBSOCKET_KEY = "msg_websocket_key";
|
||||
|
||||
/**
|
||||
* 企业微信处理交换机
|
||||
*/
|
||||
String QYWX_HANDLE_EXCHANGE = "qywx_handle_exchange";
|
||||
|
||||
/**
|
||||
* 企业微信处理队列
|
||||
*/
|
||||
String QYWX_HANDLE_QUEUE = "qywx_handle_queue";
|
||||
|
||||
/**
|
||||
* 企业微信处理绑定key值
|
||||
*/
|
||||
String QYWX_HANDLE_KEY = "qywx_handle_key";
|
||||
}
|
||||
|
||||
@ -1,132 +1,43 @@
|
||||
package com.yida.data.common.service;
|
||||
|
||||
import static com.yida.data.common.core.entity.constant.CachePrefixConstant.STAFF_DATA;
|
||||
|
||||
import cc.mrbird.febs.common.redis.service.RedisService;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.net.URLEncoder;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yida.data.common.core.entity.CurrentUser;
|
||||
import com.yida.data.common.core.entity.Dict;
|
||||
import com.yida.data.common.core.entity.constant.AppConstant;
|
||||
import com.yida.data.common.core.entity.constant.CachePrefixConstant;
|
||||
import com.yida.data.common.core.entity.constant.QywxServiceProviderConstant;
|
||||
import com.yida.data.common.core.entity.constant.UPayConstant;
|
||||
import com.yida.data.common.core.entity.consume.DeptConsumeTerminalCache;
|
||||
import com.yida.data.common.core.entity.consume.EduConsumeConfig;
|
||||
import com.yida.data.common.core.entity.school.EduDeptHomeApp;
|
||||
import com.yida.data.common.core.entity.school.EduYidaAppAccount;
|
||||
import com.yida.data.common.core.entity.system.BaiduApiConfig;
|
||||
import com.yida.data.common.core.entity.system.ConstructionPayConfig;
|
||||
import com.yida.data.common.core.entity.system.Dept;
|
||||
import com.yida.data.common.core.entity.system.EduApp;
|
||||
import com.yida.data.common.core.entity.system.EduAppTemplate;
|
||||
import com.yida.data.common.core.entity.system.EduArea;
|
||||
import com.yida.data.common.core.entity.system.EduDeptFunction;
|
||||
import com.yida.data.common.core.entity.system.EduDeptPayType;
|
||||
import com.yida.data.common.core.entity.system.EduDeptWxPublic;
|
||||
import com.yida.data.common.core.entity.system.EduHoliday;
|
||||
import com.yida.data.common.core.entity.system.EduPayWxConfig;
|
||||
import com.yida.data.common.core.entity.system.EduQywxServiceProvider;
|
||||
import com.yida.data.common.core.entity.system.EduQywxServiceProviderSchool;
|
||||
import com.yida.data.common.core.entity.system.EduYidaApp;
|
||||
import com.yida.data.common.core.entity.system.UPayConfig;
|
||||
import com.yida.data.common.core.entity.system.UnionPayConfig;
|
||||
import com.yida.data.common.core.entity.system.WhiteList;
|
||||
import com.yida.data.common.core.entity.system.enums.RoleEnum;
|
||||
import com.yida.data.common.core.entity.system.enums.SysFunctionEnum;
|
||||
import com.yida.data.common.core.entity.user.EduStaff;
|
||||
import com.yida.data.common.core.entity.user.EduStudent;
|
||||
import com.yida.data.common.core.entity.system.*;
|
||||
import com.yida.data.common.core.entity.user.EduUserDept;
|
||||
import com.yida.data.common.core.entity.user.enums.UserDeptTypeEnum;
|
||||
import com.yida.data.common.core.enums.BaiDuModuleEnum;
|
||||
import com.yida.data.common.core.enums.school.DeptAppTypeEnum;
|
||||
import com.yida.data.common.core.utils.FebsUtil;
|
||||
import com.yida.data.common.core.utils.NumberUtil;
|
||||
import com.yida.data.common.core.utils.RedisUtil;
|
||||
import com.yida.data.common.core.utils.UPayUtil;
|
||||
import com.yida.data.common.core.utils.WxServiceProviderUtil;
|
||||
import com.yida.data.common.core.utils.WxUtil;
|
||||
import com.yida.data.school.feign.index.RemoteDeptHomeIndexService;
|
||||
import com.yida.data.system.feign.RemoteAppService;
|
||||
import com.yida.data.system.feign.RemoteBaiDuApiConfigService;
|
||||
import com.yida.data.system.feign.RemoteCommonService;
|
||||
import com.yida.data.system.feign.RemoteConstructionPayConfigService;
|
||||
import com.yida.data.system.feign.RemoteConsumeConfigService;
|
||||
import com.yida.data.system.feign.RemoteDeptFunctionService;
|
||||
import com.yida.data.system.feign.RemoteDeptService;
|
||||
import com.yida.data.system.feign.RemoteDictService;
|
||||
import com.yida.data.system.feign.RemoteHolidayService;
|
||||
import com.yida.data.system.feign.RemotePayTypeService;
|
||||
import com.yida.data.system.feign.RemotePayWxConfigService;
|
||||
import com.yida.data.system.feign.RemoteQywxService;
|
||||
import com.yida.data.system.feign.RemoteUPayConfigService;
|
||||
import com.yida.data.system.feign.RemoteUnionPayConfigService;
|
||||
import com.yida.data.system.feign.RemoteWhiteListService;
|
||||
import com.yida.data.system.feign.RemoteYidaAppAccountService;
|
||||
import com.yida.data.system.feign.RemoteYidaAppService;
|
||||
import com.yida.data.user.feign.RemoteStaffService;
|
||||
import com.yida.data.user.feign.RemoteStudentService;
|
||||
import com.yida.data.system.feign.*;
|
||||
import com.yida.data.user.feign.RemoteUserDeptService;
|
||||
import com.yida.data.user.vo.TeacherDeptVO;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class CommonService {
|
||||
|
||||
private final RemoteAppService remoteAppService;
|
||||
private final RemoteQywxService remoteQywxService;
|
||||
private final RemoteDeptService remoteDeptService;
|
||||
private final RemoteDictService remoteDictService;
|
||||
private final RemoteCommonService remoteCommonService;
|
||||
private final RemoteAppService remoteAppService;
|
||||
private final RemoteYidaAppService remoteYidaAppService;
|
||||
private final RemoteHolidayService remoteHolidayService;
|
||||
private final RemotePayTypeService remotePayTypeService;
|
||||
private final RemoteUserDeptService remoteUserDeptService;
|
||||
private final RemoteWhiteListService remoteWhiteListService;
|
||||
private final RemoteUPayConfigService remoteUPayConfigService;
|
||||
private final RemotePayWxConfigService remotePayWxConfigService;
|
||||
private final RemoteDeptFunctionService remoteDeptFunctionService;
|
||||
private final RemoteConsumeConfigService remoteConsumeConfigService;
|
||||
private final RemoteUnionPayConfigService remoteUnionPayConfigService;
|
||||
private final RemoteYidaAppAccountService remoteYidaAppAccountService;
|
||||
private final RemoteBaiDuApiConfigService remoteBaiDuApiConfigService;
|
||||
private final RemoteConstructionPayConfigService remoteConstructionPayConfigService;
|
||||
private final RemoteStaffService remoteStaffService;
|
||||
private final RemoteStudentService remoteStudentService;
|
||||
private final RemoteDeptHomeIndexService remoteDeptHomeIndexService;
|
||||
|
||||
|
||||
private final WxUtil wxUtil;
|
||||
private final WxServiceProviderUtil wxServiceProviderUtil;
|
||||
private final RemotePayWxConfigService remotePayWxConfigService;
|
||||
private final RemoteHolidayService remoteHolidayService;
|
||||
private final RemoteCommonService remoteCommonService;
|
||||
private final RemoteUserDeptService remoteUserDeptService;
|
||||
private final RemotePayTypeService remotePayTypeService;
|
||||
private final RemoteUnionPayConfigService remoteUnionPayConfigService;
|
||||
|
||||
private final RedisService redisService;
|
||||
|
||||
public List<Dict> selectDict(String type) {
|
||||
if (ObjectUtil.isNull(type)) {
|
||||
return null;
|
||||
}
|
||||
return remoteDictService.selectDict(type).getData();
|
||||
}
|
||||
|
||||
public Dict getDictByTypeAndValueOrLabel(String type, String value, String label) {
|
||||
if (ObjectUtil.isNull(type)) {
|
||||
return null;
|
||||
}
|
||||
return remoteDictService.getDictByTypeAndValueOrLabel(type, value, label).getData();
|
||||
}
|
||||
|
||||
public Dept getDept(Long deptId) {
|
||||
if (deptId == null) {
|
||||
return null;
|
||||
@ -300,7 +211,7 @@ public class CommonService {
|
||||
redisService.llSet(CachePrefixConstant.HOLIDAY, data);
|
||||
for (EduHoliday holiday : data) {
|
||||
// 节假日
|
||||
if (target.equals(holiday.getDate())) {
|
||||
if (target.equals(holiday)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -309,7 +220,7 @@ public class CommonService {
|
||||
for (Object o : objects) {
|
||||
// 节假日
|
||||
EduHoliday holiday = (EduHoliday) o;
|
||||
if (target.equals(holiday.getDate())) {
|
||||
if (target.equals(holiday)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -317,38 +228,6 @@ public class CommonService {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 时间段内 节假日集合
|
||||
*/
|
||||
public List<LocalDate> inHolidayDateList(LocalDate startDate, LocalDate endDate) {
|
||||
List<LocalDate> inHolidayList = new ArrayList<>();
|
||||
List<Object> objects = redisService.lGet(CachePrefixConstant.HOLIDAY, 0L, -1L);
|
||||
if (CollUtil.isEmpty(objects)) {
|
||||
List<EduHoliday> data = remoteHolidayService.listAllHoliday().getData();
|
||||
if (CollUtil.isNotEmpty(data)) {
|
||||
redisService.llSet(CachePrefixConstant.HOLIDAY, data);
|
||||
for (EduHoliday holiday : data) {
|
||||
// 节假日
|
||||
LocalDate date = holiday.getDate();
|
||||
if ((date.isAfter(startDate) && date.isBefore(endDate)) || date.equals(startDate) || date.equals(endDate)) {
|
||||
inHolidayList.add(date);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (Object o : objects) {
|
||||
// 节假日
|
||||
EduHoliday holiday = (EduHoliday) o;
|
||||
LocalDate date = holiday.getDate();
|
||||
if ((date.isAfter(startDate) && date.isBefore(endDate)) || date.equals(startDate) || date.equals(endDate)) {
|
||||
inHolidayList.add(date);
|
||||
}
|
||||
}
|
||||
}
|
||||
return inHolidayList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询当天的上一个工作日
|
||||
*/
|
||||
@ -427,83 +306,6 @@ public class CommonService {
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据部门查询建行支付配置
|
||||
*
|
||||
* @param deptId 部门id
|
||||
* @return com.yida.data.common.core.entity.system.ConstructionPayConfig
|
||||
* @author ZYJ
|
||||
* @date 2023/6/19 16:50
|
||||
*/
|
||||
public ConstructionPayConfig getConstructionPayConfigByDept(Long deptId) {
|
||||
ConstructionPayConfig config = redisService.hasKey(CachePrefixConstant.CONSTRUCTION_PAY_CONFIG)
|
||||
? (ConstructionPayConfig) redisService.hget(CachePrefixConstant.CONSTRUCTION_PAY_CONFIG, deptId.toString())
|
||||
: null;
|
||||
if (config == null) {
|
||||
config = remoteConstructionPayConfigService.getConstructionPayConfigByDept(deptId).getData();
|
||||
redisService.hset(CachePrefixConstant.CONSTRUCTION_PAY_CONFIG, deptId.toString(), config);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据部门查询收钱吧支付配置
|
||||
*
|
||||
* @param deptId 部门id
|
||||
* @return com.yida.data.common.core.entity.system.UPayConfig
|
||||
* @author ZYJ
|
||||
* @date 2023/3/21 10:42
|
||||
*/
|
||||
public UPayConfig getUPayConfigByDept(Long deptId) {
|
||||
UPayConfig config = redisService.hasKey(CachePrefixConstant.U_PAY_CONFIG)
|
||||
? (UPayConfig) redisService.hget(CachePrefixConstant.U_PAY_CONFIG, deptId.toString())
|
||||
: null;
|
||||
if (config == null) {
|
||||
config = remoteUPayConfigService.getUPayConfigByDept(deptId).getData();
|
||||
redisService.hset(CachePrefixConstant.U_PAY_CONFIG, deptId.toString(), config);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取学校消费机服务器信息
|
||||
*
|
||||
* @param deptId 部门id
|
||||
* @return com.yida.data.common.core.entity.consume.EduConsumeConfig
|
||||
* @author ZYJ
|
||||
* @date 2023/4/6 17:46
|
||||
*/
|
||||
public EduConsumeConfig getConsumeConfigByDept(Long deptId) {
|
||||
EduConsumeConfig config = redisService.hasKey(CachePrefixConstant.CONSUME_CONFIG)
|
||||
? (EduConsumeConfig) redisService.hget(CachePrefixConstant.CONSUME_CONFIG, deptId.toString())
|
||||
: null;
|
||||
if (config == null) {
|
||||
config = remoteConsumeConfigService.getConsumeConfigByDept(deptId).getData();
|
||||
redisService.hset(CachePrefixConstant.CONSUME_CONFIG, deptId.toString(), config);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取学校收钱吧终端信息
|
||||
*
|
||||
* @param deptId 学校id
|
||||
* @return com.yida.data.common.core.entity.consume.DeptConsumeTerminalCache
|
||||
* @author ZYJ
|
||||
* @date 2023/4/3 14:47
|
||||
*/
|
||||
public DeptConsumeTerminalCache getDeptConsumeTerminal(Long deptId) {
|
||||
DeptConsumeTerminalCache cache = redisService.hasKey(CachePrefixConstant.DEPT_CONSUME_TERMINAL + deptId.toString())
|
||||
? (DeptConsumeTerminalCache) redisService.get(CachePrefixConstant.DEPT_CONSUME_TERMINAL + deptId.toString())
|
||||
: null;
|
||||
if (cache == null) {
|
||||
cache = UPayUtil.active(getUPayConfigByDept(deptId), UPayConstant.ACTIVE_DEVICE_NAME);
|
||||
cache.setDeptId(deptId);
|
||||
redisService.set(CachePrefixConstant.DEPT_CONSUME_TERMINAL + deptId.toString(), cache);
|
||||
}
|
||||
return cache;
|
||||
}
|
||||
|
||||
/**
|
||||
* 向下查询指定家校部门类型的家校部门id(可查询非直接子家校部门) 未毕业家校部门
|
||||
*
|
||||
@ -529,360 +331,14 @@ public class CommonService {
|
||||
return remoteUserDeptService.findChildIdByParentAndTypeNoPermission(deptId, type).getData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取服务商信息
|
||||
*
|
||||
* @param serviceCorpId 服务商企业微信corpId
|
||||
* @return com.yida.data.common.core.entity.system.EduQywxServiceProvider
|
||||
* @author ZYJ
|
||||
* @date 2022/12/1 10:46
|
||||
*/
|
||||
public EduQywxServiceProvider getServiceProvider(String serviceCorpId) {
|
||||
EduQywxServiceProvider serviceProvider = redisService.hasKey(CachePrefixConstant.SYS_SERVICE_PROVIDER)
|
||||
? (EduQywxServiceProvider) redisService.hget(CachePrefixConstant.SYS_SERVICE_PROVIDER, serviceCorpId)
|
||||
: null;
|
||||
if (Objects.isNull(serviceProvider)) {
|
||||
serviceProvider = remoteAppService.getServiceProviderByServiceCorpId(serviceCorpId).getData();
|
||||
if (Objects.nonNull(serviceProvider)) {
|
||||
redisService.hset(CachePrefixConstant.SYS_SERVICE_PROVIDER, serviceCorpId, serviceProvider);
|
||||
}
|
||||
}
|
||||
return serviceProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取对应服务商模板信息
|
||||
* 工具学校名称查找机构信息
|
||||
*
|
||||
* @param templateId 模板id
|
||||
* @param serviceCorpId 服务商corpId
|
||||
* @return com.yida.data.common.core.entity.system.EduAppTemplate
|
||||
* @author ZYJ
|
||||
* @date 2022/12/1 9:27
|
||||
*/
|
||||
public EduAppTemplate getAppTemplateByTemplateId(String templateId, String serviceCorpId) {
|
||||
EduAppTemplate eduAppTemplate = redisService.hasKey(CachePrefixConstant.SYS_APP_TEMPLATE)
|
||||
? (EduAppTemplate) redisService.hget(CachePrefixConstant.SYS_APP_TEMPLATE, serviceCorpId + "." + templateId)
|
||||
: null;
|
||||
if (Objects.isNull(eduAppTemplate)) {
|
||||
eduAppTemplate = remoteAppService.getAppTemplateByTemplateId(templateId, serviceCorpId).getData();
|
||||
if (Objects.nonNull(eduAppTemplate)) {
|
||||
redisService.hset(CachePrefixConstant.SYS_APP_TEMPLATE, serviceCorpId + "." + templateId, eduAppTemplate);
|
||||
}
|
||||
}
|
||||
return eduAppTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据学校对应的通讯录应用类型获取不同的access_token 创建、编辑、删除、获取部门ID列表、获取成员ID列表时使用
|
||||
*
|
||||
* @param schoolId 学校id
|
||||
* @return java.lang.String
|
||||
* @author ZYJ
|
||||
* @date 2022/12/1 9:46
|
||||
*/
|
||||
public String getAddressListToken(Long schoolId) {
|
||||
String accessToken;
|
||||
// 获取学校通讯录应用
|
||||
EduApp app = getAppByCodeAndSchool(AppConstant.CONTACT, null, schoolId);
|
||||
|
||||
if (Objects.isNull(app.getTemplateId())) {
|
||||
// 自建应用
|
||||
accessToken = wxUtil.getAccessToken(app.getWxCorpId(), app.getWxSecret());
|
||||
} else {
|
||||
// 服务商代开发应用
|
||||
// 获取对应模板信息
|
||||
EduAppTemplate appTemplate = getAppTemplateByTemplateId(app.getTemplateId(), app.getServiceCorpId());
|
||||
// 获取第三方应用凭证
|
||||
String suiteAccessToken = wxServiceProviderUtil.getSuiteAccessToken(appTemplate.getTemplateId(),
|
||||
appTemplate.getTemplateSecret(),
|
||||
String.valueOf(redisService.get(QywxServiceProviderConstant.SERVICE_SUITE_TICKET + appTemplate.getTemplateId())));
|
||||
// 获取企业微信信息缓存
|
||||
// EduQywxServiceProviderSchool providerSchool = (EduQywxServiceProviderSchool) redisService
|
||||
// .hget(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA,
|
||||
// app.getServiceCorpId() + "." + app.getWxCorpId());
|
||||
EduQywxServiceProviderSchool providerSchool = getCorpByOriginalData(app.getServiceCorpId(), app.getWxCorpId());
|
||||
accessToken = wxServiceProviderUtil
|
||||
.getCorpToken(providerSchool.getDeptEncryptionCorpId(), app.getWxSecret(), suiteAccessToken);
|
||||
}
|
||||
return accessToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务商对应学校加密corpId数据(原始值为key)
|
||||
*
|
||||
* @param providerCorpId 服务商corpId
|
||||
* @param deptOriginalCorpId 部门原始corpId
|
||||
* @return com.yida.data.common.core.common.ResultBean<com.yida.data.common.core.entity.system.EduQywxServiceProviderSchool>
|
||||
* @author ZYJ
|
||||
* @date 2023/9/25 17:48
|
||||
*/
|
||||
public EduQywxServiceProviderSchool getCorpByOriginalData(String providerCorpId, String deptOriginalCorpId) {
|
||||
EduQywxServiceProviderSchool providerSchool =
|
||||
redisService.hasKey(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA)
|
||||
? (EduQywxServiceProviderSchool) redisService.hget(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA,
|
||||
providerCorpId + "." + deptOriginalCorpId)
|
||||
: null;
|
||||
if (providerSchool == null) {
|
||||
providerSchool = remoteQywxService.getCorpByOriginalData(providerCorpId, deptOriginalCorpId).getData();
|
||||
redisService
|
||||
.hset(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA, providerCorpId + "." + deptOriginalCorpId,
|
||||
providerSchool);
|
||||
}
|
||||
return providerSchool;
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务商对应学校加密corpId数据(加密值为key)
|
||||
*
|
||||
* @param providerCorpId 服务商corpId
|
||||
* @param deptEncryptionCorpId 部门加密corpId
|
||||
* @return com.yida.data.common.core.common.ResultBean<com.yida.data.common.core.entity.system.EduQywxServiceProviderSchool>
|
||||
* @author ZYJ
|
||||
* @date 2023/9/25 17:48
|
||||
*/
|
||||
public EduQywxServiceProviderSchool getCorpByEncryptionData(String providerCorpId, String deptEncryptionCorpId) {
|
||||
EduQywxServiceProviderSchool providerSchool = redisService.hasKey(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_DATA)
|
||||
? (EduQywxServiceProviderSchool) redisService.hget(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_DATA,
|
||||
providerCorpId + "." + deptEncryptionCorpId)
|
||||
: null;
|
||||
if (providerSchool == null) {
|
||||
providerSchool = remoteQywxService.getCorpByEncryptionData(providerCorpId, deptEncryptionCorpId).getData();
|
||||
redisService.hset(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_DATA, providerCorpId + "." + deptEncryptionCorpId,
|
||||
providerSchool);
|
||||
}
|
||||
return providerSchool;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取企业凭证
|
||||
*
|
||||
* @param app 通讯录应用信息
|
||||
* @return java.lang.String
|
||||
* @author ZYJ
|
||||
* @date 2022/12/1 11:24
|
||||
*/
|
||||
public String getCorpToken(EduApp app) {
|
||||
// 获取对应模板信息
|
||||
EduAppTemplate appTemplate = getAppTemplateByTemplateId(app.getTemplateId(), app.getServiceCorpId());
|
||||
// 获取第三方应用凭证
|
||||
String suiteAccessToken = wxServiceProviderUtil.getSuiteAccessToken(appTemplate.getTemplateId(),
|
||||
appTemplate.getTemplateSecret(),
|
||||
String.valueOf(redisService.get(QywxServiceProviderConstant.SERVICE_SUITE_TICKET + appTemplate.getTemplateId())));
|
||||
// 获取企业微信信息缓存
|
||||
// EduQywxServiceProviderSchool providerSchool = (EduQywxServiceProviderSchool) redisService
|
||||
// .hget(QywxServiceProviderConstant.PROVIDER_SCHOOL_CORP_ORIGINAL_DATA,
|
||||
// app.getServiceCorpId() + "." + app.getWxCorpId());
|
||||
EduQywxServiceProviderSchool providerSchool = getCorpByOriginalData(app.getServiceCorpId(), app.getWxCorpId());
|
||||
return wxServiceProviderUtil.getCorpToken(providerSchool.getDeptEncryptionCorpId(), app.getWxSecret(), suiteAccessToken);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置职工授权url
|
||||
*
|
||||
* @param corpId 企业的CorpID
|
||||
* @param redirectUrl 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
|
||||
* @param agentId 应用agentid,snsapi_privateinfo时必填
|
||||
* @return java.lang.String
|
||||
* @author ZYJ
|
||||
* @date 2022/11/25 15:11
|
||||
*/
|
||||
public String setAuthUrl(String corpId, String redirectUrl, String agentId) {
|
||||
return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + corpId
|
||||
+ "&redirect_uri=" + URLEncoder.createDefault().encode(redirectUrl, CharsetUtil.CHARSET_UTF_8)
|
||||
+ "&response_type=code&scope=snsapi_privateinfo&state=STATE"
|
||||
+ "&agentid=" + agentId + "#wechat_redirect";
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据通讯录应用情况获取对应用户明文id 如果不是通讯录模板授权则返回本身userId
|
||||
*
|
||||
* @param userId 企业微信userId
|
||||
* @param schoolId 学校id
|
||||
* @param eduApp 通讯录app
|
||||
* @return java.lang.String
|
||||
* @author ZYJ
|
||||
* @date 2023/2/2 10:41
|
||||
*/
|
||||
public String getPlainUserId(String userId, Long schoolId, EduApp eduApp) {
|
||||
// 获取学校通讯录应用
|
||||
EduApp app = getAppByCodeAndSchool(AppConstant.CONTACT, null, schoolId);
|
||||
|
||||
// 本身就是明文id
|
||||
if (Objects.isNull(app.getTemplateId())) {
|
||||
return userId;
|
||||
} else {
|
||||
// 企业自建应用或基础应用的调用接口凭证
|
||||
EduApp appContactSchool = getAppByCodeAndSchool(AppConstant.CONTACT_SCHOOL, null, schoolId);
|
||||
String accessToken = wxUtil.getAccessToken(appContactSchool.getWxCorpId(), appContactSchool.getWxSecret());
|
||||
// 密文转换成明文id
|
||||
return wxServiceProviderUtil.convertUserIdToPlain(accessToken, userId, eduApp.getWxAgentId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据通讯录应用情况获取对应用户密文id 如果不是通讯录模板授权则返回本身userId
|
||||
*
|
||||
* @param userId 企业微信userId
|
||||
* @param schoolId 学校id
|
||||
* @return java.lang.String
|
||||
* @author ZYJ
|
||||
* @date 2023/2/2 14:45
|
||||
*/
|
||||
public String getSecretUserId(String userId, Long schoolId) {
|
||||
// 获取学校通讯录应用
|
||||
EduApp app = getAppByCodeAndSchool(AppConstant.CONTACT, null, schoolId);
|
||||
|
||||
// 本身就是明文id
|
||||
if (Objects.isNull(app.getTemplateId())) {
|
||||
return userId;
|
||||
} else {
|
||||
EduApp eduApp = getAppByCodeAndSchool(AppConstant.CONTACT_SELECT, null, schoolId);
|
||||
// 明文转换成密文id
|
||||
return wxServiceProviderUtil.convertUserIdToSecret(
|
||||
wxUtil.getAccessToken(eduApp.getWxCorpId(), eduApp.getWxSecret()), userId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询学校用于查询的通讯录应用
|
||||
*
|
||||
* @param schoolId 学校id
|
||||
* @return com.yida.data.common.core.entity.system.EduApp
|
||||
* @author ZYJ
|
||||
* @date 2023/4/23 20:25
|
||||
*/
|
||||
public EduApp getAppContactUsedBySelect(Long schoolId) {
|
||||
// 获取学校通讯录应用
|
||||
EduApp app = getAppByCodeAndSchool(AppConstant.CONTACT, null, schoolId);
|
||||
// 本身就是明文id
|
||||
if (Objects.isNull(app.getTemplateId())) {
|
||||
return app;
|
||||
} else {
|
||||
return getAppByCodeAndSchool(AppConstant.CONTACT_SELECT, null, schoolId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据学校名称查找机构信息
|
||||
*
|
||||
* @param schoolName 学校名称
|
||||
* @return com.yida.data.common.core.entity.system.Dept
|
||||
* @author ZYJ
|
||||
* @date 2023/2/2 11:03
|
||||
* @param schoolName
|
||||
* @return
|
||||
*/
|
||||
public Dept getSchoolByName(String schoolName) {
|
||||
return remoteDeptService.getSchoolByName(schoolName).getData();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统白名单信息
|
||||
*
|
||||
* @param functionName 功能名称 {@link SysFunctionEnum}
|
||||
* @return com.yida.data.common.core.entity.system.WhiteList
|
||||
* @author ZYJ
|
||||
* @date 2023/2/20 18:00
|
||||
*/
|
||||
public WhiteList getWhiteList(String functionName) {
|
||||
WhiteList whiteList = redisService.hasKey(CachePrefixConstant.SYS_WHITE_LIST)
|
||||
? (WhiteList) redisService.hget(CachePrefixConstant.SYS_WHITE_LIST, functionName)
|
||||
: null;
|
||||
if (whiteList == null) {
|
||||
whiteList = remoteWhiteListService.getWhiteList(functionName).getData();
|
||||
redisService.hset(CachePrefixConstant.SYS_WHITE_LIST, functionName, whiteList);
|
||||
}
|
||||
return whiteList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取部门是否开通当前功能
|
||||
*
|
||||
* @param functionName 功能名称
|
||||
* @param schoolId 部门id
|
||||
* @return com.yida.data.common.core.entity.system.EduDeptFunction
|
||||
* @author ZYJ
|
||||
* @date 2023/2/21 16:08
|
||||
*/
|
||||
public EduDeptFunction getDeptFunction(String functionName, Long schoolId) {
|
||||
EduDeptFunction eduDeptFunction = redisService.hasKey(CachePrefixConstant.SYS_DEPT_FUNCTION + schoolId)
|
||||
? (EduDeptFunction) redisService.hget(CachePrefixConstant.SYS_DEPT_FUNCTION + schoolId, functionName)
|
||||
: null;
|
||||
if (eduDeptFunction == null) {
|
||||
eduDeptFunction = remoteDeptFunctionService.getDeptFunction(functionName, schoolId).getData();
|
||||
redisService.hset(CachePrefixConstant.SYS_DEPT_FUNCTION + schoolId, functionName, eduDeptFunction);
|
||||
}
|
||||
return eduDeptFunction;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据学校id查询百度api配置
|
||||
*
|
||||
* @param deptId 学校id
|
||||
* @param moduleName 百度模块名称 {@link BaiDuModuleEnum}
|
||||
* @return com.yida.data.common.core.entity.system.BaiduApiConfig
|
||||
* @author ZYJ
|
||||
* @date 2023/6/20 20:57
|
||||
*/
|
||||
public BaiduApiConfig getBaiDuApiConfigByDept(Long deptId, String moduleName) {
|
||||
BaiduApiConfig config = redisService.hasKey(CachePrefixConstant.BAI_DU_API_CONFIG + deptId)
|
||||
? (BaiduApiConfig) redisService.hget(CachePrefixConstant.BAI_DU_API_CONFIG + deptId, moduleName)
|
||||
: null;
|
||||
if (config == null) {
|
||||
config = remoteBaiDuApiConfigService.getBaiDuApiConfigByDept(deptId, moduleName).getData();
|
||||
redisService.hset(CachePrefixConstant.BAI_DU_API_CONFIG + deptId.toString(), moduleName, config);
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
public EduStaff getStaffById(Long staffId) {
|
||||
EduStaff staff = (EduStaff) redisService.hget(STAFF_DATA, staffId.toString());
|
||||
if (ObjectUtil.isNull(staff)) {
|
||||
staff = remoteStaffService.getStaff(staffId).getData();
|
||||
if (ObjectUtil.isNotNull(staff)) {
|
||||
redisService.hset(STAFF_DATA, staffId.toString(), staff);
|
||||
}
|
||||
}
|
||||
return staff;
|
||||
}
|
||||
|
||||
public EduStudent getStudentById(Long id) {
|
||||
EduStudent student = (EduStudent) redisService
|
||||
.hget(CachePrefixConstant.STUDENT_DATA, id.toString());
|
||||
if (ObjectUtil.isNull(student)) {
|
||||
student = remoteStudentService.getStudentNoPermission(id).getData();
|
||||
if (student == null) {
|
||||
log.error("学生不存在,id:[{}]", id);
|
||||
return null;
|
||||
} else {
|
||||
redisService.hset(CachePrefixConstant.STUDENT_DATA, id.toString(), student);
|
||||
}
|
||||
}
|
||||
return student;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 清除 人员匹配考勤规则
|
||||
*/
|
||||
public void clearAttendanceRuleData() {
|
||||
redisService.del(CachePrefixConstant.ATTENDANCE_STUDENT_RULE);
|
||||
}
|
||||
|
||||
|
||||
public void delUserGenerateUrlLinkCache(Long schoolId, Long userId, Integer userType) {
|
||||
//查询所有的微信小程序app
|
||||
List<EduDeptHomeApp> eduDeptHomeAppList = remoteDeptHomeIndexService.getDeptAppList(schoolId).getData();
|
||||
List<EduDeptHomeApp> wxAppList = eduDeptHomeAppList.stream()
|
||||
.filter(e -> DeptAppTypeEnum.WX.getType().equals(e.getAppType()))
|
||||
.collect(Collectors.toList());
|
||||
for (EduDeptHomeApp homeApp : wxAppList) {
|
||||
redisService.del(CachePrefixConstant.USER_GENERATE_URL_LINK + userId + "" + userType + "" + homeApp.getId());
|
||||
}
|
||||
}
|
||||
|
||||
public List<Long> findStaffMangerClassIdList() {
|
||||
List<Long> ClassIdList = new ArrayList<>();
|
||||
CurrentUser currentUser = FebsUtil.getCurrentUser();
|
||||
String rolePerms = FebsUtil.getCurrentUser().getRolePerms();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>edu-custom-form-biz</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
# Auto Configure
|
||||
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||
com.yida.data.device.fallback.RemoteStudentCardServiceFallback,\
|
||||
com.yida.data.device.fallback.RemoteTelephoneServiceFallback,\
|
||||
com.yida.data.device.fallback.RemoteConsumeCardServiceFallback
|
||||
com.yida.data.device.fallback.RemoteTelephoneServiceFallback
|
||||
|
||||
@ -119,7 +119,7 @@ public class CardRabbitReceiver {
|
||||
redisService.hset(CachePrefixConstant.STUDENT_DATA, card.getStudentId().toString(), student);
|
||||
}
|
||||
EduApp app = commonService
|
||||
.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null, card.getSchoolId());
|
||||
.getAppByCodeAndSchool(AppConstant.ELECTRONIC_PARENT, null, card.getSchoolId());
|
||||
String accessToken = wxUtil.getAccessToken(app.getWxCorpId(), app.getWxSecret());
|
||||
TextSchoolNotice notice = new TextSchoolNotice();
|
||||
notice.setAgentid(app.getWxAgentId());
|
||||
|
||||
@ -2,6 +2,7 @@ package com.yida.data.device.studentCard.controller;
|
||||
|
||||
import cc.mrbird.febs.common.redis.service.RedisService;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.yida.data.common.core.annotation.ControllerLog;
|
||||
import com.yida.data.common.core.common.ModuleName;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.CurrentUser;
|
||||
@ -20,12 +21,12 @@ import com.yida.data.device.dto.studentCard.CardWithAddressDTO;
|
||||
import com.yida.data.device.dto.studentCard.DisturbStatusDTO;
|
||||
import com.yida.data.device.studentCard.service.EduStudentCardDisturbTimeService;
|
||||
import com.yida.data.device.studentCard.service.EduStudentCardService;
|
||||
import com.yida.data.device.vo.OnlineCountVO;
|
||||
import com.yida.data.device.vo.studentCard.CardInfoVO;
|
||||
import com.yida.data.device.vo.studentCard.CardPageVO;
|
||||
import com.yida.data.device.vo.studentCard.CardWithAddressVO;
|
||||
import com.yida.data.device.vo.studentCard.ListStudentCardVO;
|
||||
import com.yida.data.device.vo.studentCard.LocationVO;
|
||||
import com.yida.data.device.vo.OnlineCountVO;
|
||||
import com.yida.data.device.vo.studentCard.TrackVO;
|
||||
import com.yida.data.log.annotation.OperationLog;
|
||||
import com.yida.data.system.feign.RemoteDeptService;
|
||||
@ -82,7 +83,6 @@ public class EduStudentCardController {
|
||||
|
||||
@ApiOperation("更新学生证")
|
||||
@PostMapping("/updateCard")
|
||||
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "更新学生证", type = OperationLogTypeEnum.UPDATE)
|
||||
public ResultBean updateCard(@RequestBody EduStudentCard card) {
|
||||
eduStudentCardService.updateCard(card);
|
||||
return ResultBean.buildSuccess();
|
||||
@ -154,7 +154,9 @@ public class EduStudentCardController {
|
||||
|
||||
@ApiOperation("家长对应学生列表")
|
||||
@GetMapping("/listStudentCard")
|
||||
@ControllerLog(operation = "家长对应学生列表")
|
||||
public ResultBean<List<ListStudentCardVO>> listStudentCard(@ApiParam("家长id") @RequestParam Long parentId) {
|
||||
|
||||
return ResultBean.buildSuccess(eduStudentCardService.listStudentCard(parentId));
|
||||
}
|
||||
|
||||
@ -180,7 +182,7 @@ public class EduStudentCardController {
|
||||
|
||||
@ApiOperation("批量免打扰")
|
||||
@PostMapping("/setDisturbStatus")
|
||||
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "批量免打扰", type = OperationLogTypeEnum.UPDATE)
|
||||
@ControllerLog(operation = "批量免打扰")
|
||||
public ResultBean setDisturbStatus(@RequestBody DisturbStatusDTO disturbStatusDTO) {
|
||||
eduStudentCardService.setDisturbStatus(disturbStatusDTO);
|
||||
return ResultBean.buildSuccess();
|
||||
@ -211,7 +213,6 @@ public class EduStudentCardController {
|
||||
|
||||
@ApiOperation("下发监听指令")
|
||||
@GetMapping("/issueMonitor")
|
||||
@OperationLog(module = ModuleName.ELECTRONIC_STUDENT_CARD, methods = "下发监听指令", type = OperationLogTypeEnum.SELECT)
|
||||
public ResultBean issueMonitor(@ApiParam("接收监听手机号") String mobile,
|
||||
@ApiParam("学生证imei号") String imei) {
|
||||
eduStudentCardService.issueMonitor(mobile, imei);
|
||||
|
||||
@ -2,12 +2,9 @@ package com.yida.data.device.studentCard.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.yida.data.common.core.annotation.ControllerLog;
|
||||
import com.yida.data.common.core.common.ModuleName;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.card.EduStudentCardPhone;
|
||||
import com.yida.data.common.core.entity.system.enums.OperationLogTypeEnum;
|
||||
import com.yida.data.device.studentCard.service.EduStudentCardPhoneService;
|
||||
import com.yida.data.log.annotation.OperationLog;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
@ -42,6 +39,7 @@ public class EduStudentCardPhoneController {
|
||||
|
||||
@ApiOperation("查询学生证电话")
|
||||
@GetMapping("/getFamilyPhone")
|
||||
@ControllerLog(operation = "查询亲情电话")
|
||||
public ResultBean getFamilyPhone(@ApiParam("iMei号") @RequestParam String imei,
|
||||
@ApiParam("1是亲情电话,2是sos电话,3是通话白名单") @RequestParam Integer type) {
|
||||
List<EduStudentCardPhone> list = eduStudentCardPhoneService.list(Wrappers.lambdaQuery(new EduStudentCardPhone())
|
||||
@ -52,7 +50,7 @@ public class EduStudentCardPhoneController {
|
||||
|
||||
@ApiOperation("保存电话")
|
||||
@PostMapping("/savePhone")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "保存电话", type = OperationLogTypeEnum.SAVE)
|
||||
@ControllerLog(operation = "保存电话")
|
||||
public ResultBean savePhone(@RequestBody EduStudentCardPhone phone) {
|
||||
eduStudentCardPhoneService.savePhone(phone);
|
||||
return ResultBean.buildSuccess();
|
||||
@ -61,7 +59,7 @@ public class EduStudentCardPhoneController {
|
||||
|
||||
@ApiOperation("通用删除电话")
|
||||
@GetMapping("/delPhone")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "通用删除电话", type = OperationLogTypeEnum.DELETE)
|
||||
@ControllerLog(operation = "通用删除电话")
|
||||
public ResultBean delPhone(@RequestParam Long id) {
|
||||
eduStudentCardPhoneService.delPhone(id);
|
||||
return ResultBean.buildSuccess();
|
||||
@ -69,7 +67,7 @@ public class EduStudentCardPhoneController {
|
||||
|
||||
@ApiOperation("批量修改电话")
|
||||
@PostMapping("/updateFamilyPhoneBatch")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量修改电话", type = OperationLogTypeEnum.UPDATE)
|
||||
@ControllerLog(operation = "修改电话")
|
||||
public ResultBean updateFamilyPhoneBatch(@RequestBody List<EduStudentCardPhone> phones,
|
||||
@ApiParam("1-亲情电话,2-sos,3-白名单") Integer type, String imei) {
|
||||
eduStudentCardPhoneService.updatePhoneBatch(phones, type, imei);
|
||||
|
||||
@ -158,7 +158,7 @@ public class EduStudentCardAlarmServiceImpl extends ServiceImpl
|
||||
}
|
||||
|
||||
private void pushSchoolNotice(EduStudent student, EduStudentCardAlarm alarm, Dept school) {
|
||||
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null, school.getDeptId());
|
||||
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.ELECTRONIC_PARENT, null, school.getDeptId());
|
||||
TextSchoolNotice notice = new TextSchoolNotice();
|
||||
notice.setAgentid(app.getWxAgentId());
|
||||
notice.setTo_student_userid(Collections.singletonList(student.getWxId()));
|
||||
|
||||
@ -2,11 +2,9 @@ package com.yida.data.device.telephone.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.yida.data.common.core.annotation.ControllerLog;
|
||||
import com.yida.data.common.core.common.ModuleName;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.CurrentUser;
|
||||
import com.yida.data.common.core.entity.system.Dept;
|
||||
import com.yida.data.common.core.entity.system.enums.OperationLogTypeEnum;
|
||||
import com.yida.data.common.core.entity.telephone.EduTelephone;
|
||||
import com.yida.data.common.core.entity.telephone.EduTelephoneBlack;
|
||||
import com.yida.data.common.core.entity.telephone.EduTelephoneCard;
|
||||
@ -21,7 +19,6 @@ import com.yida.data.device.telephone.service.EduTelephoneService;
|
||||
import com.yida.data.device.vo.OnlineCountVO;
|
||||
import com.yida.data.device.vo.telephone.DeviceNumberVO;
|
||||
import com.yida.data.device.vo.telephone.TelephoneVO;
|
||||
import com.yida.data.log.annotation.OperationLog;
|
||||
import com.yida.data.system.feign.RemoteDeptService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -87,13 +84,13 @@ public class EduTelephoneController {
|
||||
*/
|
||||
@ApiOperation("话机设备数量统计")
|
||||
@GetMapping("/findDeviceNumber")
|
||||
@ControllerLog(operation = "话机设备数量统计")
|
||||
public ResultBean<DeviceNumberVO> findDeviceNumber() throws NoSuchMethodException {
|
||||
return eduTelephoneService.findDeviceNumber();
|
||||
}
|
||||
|
||||
@ApiOperation("修改或新增")
|
||||
@PostMapping("/insertTelephone")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "修改或新增亲情电话", type = OperationLogTypeEnum.SAVE)
|
||||
public ResultBean insertTelephone(@RequestBody EduTelephone eduTelephone) {
|
||||
eduTelephoneService.saveOrUpdate(eduTelephone);
|
||||
return ResultBean.buildSuccess();
|
||||
@ -101,7 +98,6 @@ public class EduTelephoneController {
|
||||
|
||||
@ApiOperation("批量设置")
|
||||
@PostMapping("/updateTelephone")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量设置亲情电话", type = OperationLogTypeEnum.UPDATE)
|
||||
public ResultBean updateTelephone(@RequestBody TelephoneDTO telephoneDTO) {
|
||||
eduTelephoneService.updateTelephone(telephoneDTO);
|
||||
return ResultBean.buildSuccess();
|
||||
@ -116,7 +112,6 @@ public class EduTelephoneController {
|
||||
|
||||
@ApiOperation("重置本月通话时间")
|
||||
@GetMapping("/delTelephoneTime")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "重置本月通话时间", type = OperationLogTypeEnum.UPDATE)
|
||||
public ResultBean delTelephoneTime(@ApiParam("话机Id") @RequestParam Long id) {
|
||||
EduTelephone eduTelephone = new EduTelephone();
|
||||
eduTelephone.setId(id);
|
||||
@ -127,7 +122,6 @@ public class EduTelephoneController {
|
||||
|
||||
@ApiOperation("停运")
|
||||
@GetMapping("/stopTelephone")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "停运亲情电话", type = OperationLogTypeEnum.UPDATE)
|
||||
public ResultBean stopTelephone(@ApiParam("话机Id") @RequestParam Long id,
|
||||
@ApiParam("1停运,0正常") @RequestParam Integer status) {
|
||||
|
||||
@ -139,7 +133,6 @@ public class EduTelephoneController {
|
||||
|
||||
@ApiOperation("删除和批量删除")
|
||||
@PostMapping("/delTelephone")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "删除和批量删除亲情电话", type = OperationLogTypeEnum.DELETE)
|
||||
public ResultBean delTelephone(@ApiParam("ids") @RequestBody List<Long> ids) {
|
||||
eduTelephoneService.removeByIds(ids);
|
||||
for (Long id : ids) {
|
||||
@ -153,7 +146,6 @@ public class EduTelephoneController {
|
||||
|
||||
@ApiOperation("批量停运")
|
||||
@PostMapping("/listStopTelephone")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "批量停运亲情电话", type = OperationLogTypeEnum.UPDATE)
|
||||
public ResultBean listStopTelephone(@ApiParam("话机Id") @RequestBody PhoneStatusDTO phoneStatusDTO) {
|
||||
|
||||
List<Long> ids = phoneStatusDTO.getIds();
|
||||
|
||||
@ -4,17 +4,14 @@ import cc.mrbird.febs.common.redis.service.RedisService;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.yida.data.common.core.annotation.ControllerLog;
|
||||
import com.yida.data.common.core.common.ModuleName;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.constant.CachePrefixConstant;
|
||||
import com.yida.data.common.core.entity.system.enums.OperationLogTypeEnum;
|
||||
import com.yida.data.common.core.entity.telephone.EduTelephoneOrder;
|
||||
import com.yida.data.common.core.utils.FebsUtil;
|
||||
import com.yida.data.device.dto.telephone.OrderPageDTO;
|
||||
import com.yida.data.device.telephone.service.EduTelephoneOrderService;
|
||||
import com.yida.data.device.vo.telephone.OrderInfoVO;
|
||||
import com.yida.data.device.vo.telephone.OrderPageVO;
|
||||
import com.yida.data.log.annotation.OperationLog;
|
||||
import com.yida.data.school.vo.transcation.PayInfoVO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
@ -68,17 +65,17 @@ public class EduTelephoneOrderController {
|
||||
@GetMapping("/listOrder")
|
||||
public ResultBean<List<EduTelephoneOrder>> listOrder(@ApiParam("卡id") @RequestParam Long cardId) {
|
||||
return ResultBean.buildSuccess(eduTelephoneOrderService.list(Wrappers.lambdaQuery(new EduTelephoneOrder())
|
||||
.eq(EduTelephoneOrder::getCardId, cardId).orderByDesc(EduTelephoneOrder::getCreateDate)));
|
||||
.eq(EduTelephoneOrder::getCardId, cardId).orderByDesc(EduTelephoneOrder::getCreateDate)));
|
||||
}
|
||||
|
||||
@ApiOperation("生成订单")
|
||||
@GetMapping("/createOrder")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "生成订单", type = OperationLogTypeEnum.INSERT)
|
||||
@ControllerLog(operation = "生成订单")
|
||||
public ResultBean<PayInfoVO> insertEduProductOrder(@ApiParam("充值金额") Double money,
|
||||
@ApiParam("ic卡id") Long icCardId,
|
||||
@ApiParam("支付方式,0-微信jsapi,1-微信h5") Integer payType) {
|
||||
@ApiParam("ic卡id") Long icCardId,
|
||||
@ApiParam("支付方式,0-微信jsapi,1-微信h5") Integer payType) {
|
||||
return ResultBean.buildSuccess(eduTelephoneOrderService.createOrder(money, icCardId, payType, FebsUtil.getCurrentUser(),
|
||||
FebsUtil.getHttpServletRequestIpAddress()));
|
||||
FebsUtil.getHttpServletRequestIpAddress()));
|
||||
}
|
||||
|
||||
@ApiOperation("订单完成(前台支付完成后调用)")
|
||||
@ -90,7 +87,6 @@ public class EduTelephoneOrderController {
|
||||
|
||||
@ApiOperation("发起支付")
|
||||
@GetMapping("/payOrder")
|
||||
@OperationLog(module = ModuleName.TELEPHONE, methods = "发起支付", type = OperationLogTypeEnum.INSERT)
|
||||
public ResultBean<PayInfoVO> payOrder(String orderCode) {
|
||||
Object prepay = redisService.get(CachePrefixConstant.ORDER_FLAG + orderCode);
|
||||
PayInfoVO infoVO = eduTelephoneOrderService.getWxJsSign(orderCode, prepay.toString());
|
||||
|
||||
@ -42,6 +42,6 @@ public class BillOrderStudentCacheVO implements Serializable {
|
||||
@ApiModelProperty("家长手机号码")
|
||||
private String mobile;
|
||||
|
||||
@ApiModelProperty("订单号")
|
||||
@ApiModelProperty("'订单号'")
|
||||
private String orderNo;
|
||||
}
|
||||
@ -123,6 +123,15 @@ public class EduBillController {
|
||||
return ResultBean.buildSuccess(eduBillStudentService.exportBillPayData(billStudentSelectPageDTO, response));
|
||||
}
|
||||
|
||||
@GetMapping(value = "sendBillNotice")
|
||||
@ApiOperation(value = "账单催缴")
|
||||
public ResultBean<String> sendBillNotice(
|
||||
@ApiParam(value = "账单id", required = true) @RequestParam Long billId,
|
||||
@ApiParam(value = "推送标题", required = true) @RequestParam String noticeTitle) {
|
||||
eduBillStudentService.sendBillNotice(billId, noticeTitle);
|
||||
return ResultBean.buildSuccess();
|
||||
}
|
||||
|
||||
@PostMapping(value = "listBillOrderPage")
|
||||
@ApiOperation(value = "查询账单订单列表数据")
|
||||
public ResultBean<IPage<BillOrderSelectPageVO>> listBillOrderPage(BillOrderSelectPageDTO dto) {
|
||||
|
||||
@ -53,4 +53,19 @@ public interface EduBillOrderItemMapper extends BaseMapper<EduBillOrderItem> {
|
||||
*/
|
||||
List<BillPayVO> listItemPayInfo(@Param("billId") Long billId,
|
||||
@Param("studentId") Long studentId);
|
||||
|
||||
|
||||
/**
|
||||
* 查询学生是否有对应账单项目的缴费信息
|
||||
*
|
||||
* @param billId 账单id
|
||||
* @param studentId 学生id
|
||||
* @param itemId 项目id
|
||||
* @return int
|
||||
* @author ZYJ
|
||||
* @date 2023/9/19 14:58
|
||||
*/
|
||||
int countItemPayInfo(@Param("billId") Long billId,
|
||||
@Param("studentId") Long studentId,
|
||||
@Param("itemId") Long itemId);
|
||||
}
|
||||
|
||||
@ -62,12 +62,14 @@ public interface EduBillOrderMapper extends BaseMapper<EduBillOrder> {
|
||||
* 查询账单缴费人数
|
||||
* 缴费金额大于0
|
||||
*
|
||||
* @param billId 账单id
|
||||
* @param billId 账单id
|
||||
* @param studentIds 学生id集合
|
||||
* @return java.lang.Long
|
||||
* @author ZYJ
|
||||
* @date 2022/4/18 16:30
|
||||
*/
|
||||
Long sumPayStudentNumber(@Param("billId") Long billId);
|
||||
Long sumPayStudentNumber(@Param("billId") Long billId,
|
||||
@Param("studentIds") List<Long> studentIds);
|
||||
|
||||
/**
|
||||
* 查询所有已经超时订单
|
||||
|
||||
@ -48,4 +48,16 @@ public interface EduBillOrderItemService extends IService<EduBillOrderItem> {
|
||||
* @date 2022/4/19 17:04
|
||||
*/
|
||||
List<BillPayVO> listItemPayInfo(Long billId, Long studentId);
|
||||
|
||||
/**
|
||||
* 查询学生是否有对应账单项目的缴费信息
|
||||
*
|
||||
* @param billId 账单id
|
||||
* @param studentId 学生id
|
||||
* @param itemId 项目id
|
||||
* @return int
|
||||
* @author ZYJ
|
||||
* @date 2023/9/19 14:57
|
||||
*/
|
||||
int countItemPayInfo(Long billId, Long studentId, Long itemId);
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.yida.data.common.core.entity.mall.EduBillOrder;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -45,12 +46,13 @@ public interface EduBillOrderService extends IService<EduBillOrder> {
|
||||
/**
|
||||
* 查询账单缴费人数
|
||||
*
|
||||
* @param billId 账单id
|
||||
* @param billId 账单id
|
||||
* @param studentIds 学生id集合
|
||||
* @return java.lang.Long
|
||||
* @author ZYJ
|
||||
* @date 2022/4/18 16:29
|
||||
*/
|
||||
Long sumPayStudentNumber(Long billId);
|
||||
Long sumPayStudentNumber(Long billId, List<Long> studentIds);
|
||||
|
||||
/**
|
||||
* 银联支付通知结果回调
|
||||
|
||||
@ -2,10 +2,12 @@ package com.yida.data.mall.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.yida.data.common.core.entity.constant.FebsConstant;
|
||||
import com.yida.data.common.core.entity.mall.EduBillStudent;
|
||||
import com.yida.data.mall.dto.BillStudentSelectPageDTO;
|
||||
import com.yida.data.mall.dto.BillUserSaveDTO;
|
||||
import com.yida.data.mall.vo.BillStudentInfoVO;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
@ -79,4 +81,15 @@ public interface EduBillStudentService extends IService<EduBillStudent> {
|
||||
* @date 2022/10/11 17:29
|
||||
*/
|
||||
String exportBillPayData(BillStudentSelectPageDTO billStudentSelectPageDTO, HttpServletResponse response);
|
||||
|
||||
/**
|
||||
* 账单催缴
|
||||
*
|
||||
* @param billId 账单id
|
||||
* @param noticeTitle 推送标题
|
||||
* @author ZYJ
|
||||
* @date 2023/7/14 14:30
|
||||
*/
|
||||
@Async(FebsConstant.ASYNC_POOL)
|
||||
void sendBillNotice(Long billId, String noticeTitle);
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ public interface H5EduBillService {
|
||||
H5BillOrderInfoVO getH5BillOrderInfo(Long billOrderId, String orderCode);
|
||||
|
||||
/**
|
||||
* 继续支付
|
||||
* continuePayOrder
|
||||
*
|
||||
* @param orderCode 订单号
|
||||
* @param deptId 学校id
|
||||
|
||||
@ -38,4 +38,9 @@ public class EduBillOrderItemServiceImpl extends ServiceImpl
|
||||
public List<BillPayVO> listItemPayInfo(Long billId, Long studentId) {
|
||||
return baseMapper.listItemPayInfo(billId, studentId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countItemPayInfo(Long billId, Long studentId, Long itemId) {
|
||||
return baseMapper.countItemPayInfo(billId, studentId, itemId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,8 +65,8 @@ public class EduBillOrderServiceImpl extends ServiceImpl
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long sumPayStudentNumber(Long billId) {
|
||||
return baseMapper.sumPayStudentNumber(billId);
|
||||
public Long sumPayStudentNumber(Long billId, List<Long> studentIds) {
|
||||
return baseMapper.sumPayStudentNumber(billId, studentIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -76,7 +76,7 @@ public class EduBillOrderServiceImpl extends ServiceImpl
|
||||
if (CollUtil.isNotEmpty(list)) {
|
||||
for (EduBillOrder order : list) {
|
||||
// 微信订单
|
||||
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) {
|
||||
if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
|
||||
updateWxBillOrderStatus(order);
|
||||
} else if (PayWay.UNION.getValue().equals(order.getPayWay())) {
|
||||
updateUnionBillOrderStatus(order);
|
||||
@ -210,7 +210,7 @@ public class EduBillOrderServiceImpl extends ServiceImpl
|
||||
if (CollUtil.isNotEmpty(refundOrderList)) {
|
||||
refundOrderList.forEach(billRefundOrderVO -> {
|
||||
// 微信
|
||||
if (PayWay.WEI_XIN.getValue().equals(billRefundOrderVO.getPayWay())) {
|
||||
if (PayWay.WEIXIN.getValue().equals(billRefundOrderVO.getPayWay())) {
|
||||
updateWxRefundStatus(billRefundOrderVO);
|
||||
} else if (PayWay.UNION.getValue().equals(billRefundOrderVO.getPayWay())) {
|
||||
updateUnionRefundStatus(billRefundOrderVO);
|
||||
|
||||
@ -89,7 +89,7 @@ public class EduBillServiceImpl extends ServiceImpl
|
||||
billSelectPageVO.setTotalNumber(totalNumber);
|
||||
// 缴费人数 缴费金额大于0
|
||||
if (totalNumber > 0) {
|
||||
billSelectPageVO.setPayNumber(eduBillOrderService.sumPayStudentNumber(billSelectPageVO.getId()));
|
||||
billSelectPageVO.setPayNumber(eduBillOrderService.sumPayStudentNumber(billSelectPageVO.getId(), studentIds));
|
||||
}
|
||||
});
|
||||
return page;
|
||||
@ -199,10 +199,8 @@ public class EduBillServiceImpl extends ServiceImpl
|
||||
new LambdaQueryWrapper<>(new EduBillStudent()).eq(EduBillStudent::getBillId, billSaveDTO.getId()));
|
||||
}
|
||||
saveOrUpdate(eduBill);
|
||||
boolean flag = Objects.isNull(billSaveDTO.getId()) ||
|
||||
(Objects.nonNull(billSaveDTO.getId()) &&
|
||||
(Objects.isNull(billSaveDTO.getOldBillStartDate())
|
||||
|| billSaveDTO.getOldBillStartDate().isAfter(LocalDateTime.now())));
|
||||
boolean flag = Objects.isNull(billSaveDTO.getId()) || Objects.isNull(billSaveDTO.getOldBillStartDate())
|
||||
|| billSaveDTO.getOldBillStartDate().isAfter(LocalDateTime.now());
|
||||
List<EduBillItem> saveItemList = new ArrayList<>();
|
||||
if (flag) {
|
||||
// 保存对应的缴费项目数据
|
||||
@ -282,8 +280,7 @@ public class EduBillServiceImpl extends ServiceImpl
|
||||
if (BillStatusEnum.ENABLE_STATUS.getStatus().equals(bill.getEnableStatus())) {
|
||||
throw new FebsException("当前账单已启用, 无法删除!");
|
||||
}
|
||||
if (Objects.isNull(bill.getBillStartDate()) ||
|
||||
Objects.nonNull(bill.getBillStartDate()) && bill.getBillStartDate().isAfter(LocalDateTime.now())) {
|
||||
if (Objects.isNull(bill.getBillStartDate()) || bill.getBillStartDate().isAfter(LocalDateTime.now())) {
|
||||
// 删除项目子选项
|
||||
eduBillItemSubService.remove(
|
||||
new LambdaQueryWrapper<>(new EduBillItemSub()).eq(EduBillItemSub::getBillId, billId));
|
||||
|
||||
@ -123,8 +123,6 @@ public class EduBillStatisticsServiceImpl implements EduBillStatisticsService {
|
||||
// 查询指定账单数据
|
||||
billList.add(eduBillService.getById(billId));
|
||||
}
|
||||
// 查询已开始的账单
|
||||
// List<EduBill> billList = eduBillMapper.selectStartBill();
|
||||
|
||||
if (CollUtil.isNotEmpty(billList)) {
|
||||
for (EduBill eduBill : billList) {
|
||||
|
||||
@ -2,6 +2,7 @@ package com.yida.data.mall.service.impl;
|
||||
|
||||
import cc.mrbird.febs.common.redis.service.RedisService;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
@ -15,10 +16,16 @@ import com.yida.data.common.core.entity.constant.StringConstant;
|
||||
import com.yida.data.common.core.entity.mall.EduBill;
|
||||
import com.yida.data.common.core.entity.mall.EduBillOrder;
|
||||
import com.yida.data.common.core.entity.mall.EduBillStudent;
|
||||
import com.yida.data.common.core.entity.notice.app.AppNotice;
|
||||
import com.yida.data.common.core.entity.notice.app.inside.PushMessage;
|
||||
import com.yida.data.common.core.entity.system.EduYidaApp;
|
||||
import com.yida.data.common.core.entity.user.EduParent;
|
||||
import com.yida.data.common.core.entity.user.EduStudent;
|
||||
import com.yida.data.common.core.enums.OrderStatusEnum;
|
||||
import com.yida.data.common.core.exception.FebsException;
|
||||
import com.yida.data.common.core.utils.AppUtil;
|
||||
import com.yida.data.common.core.utils.FebsUtil;
|
||||
import com.yida.data.common.service.CommonService;
|
||||
import com.yida.data.mall.dto.BillStudentSelectPageDTO;
|
||||
import com.yida.data.mall.dto.BillUserSaveDTO;
|
||||
import com.yida.data.mall.mapper.EduBillMapper;
|
||||
@ -31,11 +38,13 @@ import com.yida.data.mall.vo.BillItemInfoVO;
|
||||
import com.yida.data.mall.vo.BillStudentInfoVO;
|
||||
import com.yida.data.mall.vo.h5.H5BillItemVO;
|
||||
import com.yida.data.system.feign.RemoteCommonService;
|
||||
import com.yida.data.user.dto.ListStudentDTO;
|
||||
import com.yida.data.user.feign.RemoteStudentService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -44,10 +53,7 @@ import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -63,8 +69,8 @@ import java.util.stream.Collectors;
|
||||
public class EduBillStudentServiceImpl extends ServiceImpl
|
||||
<EduBillStudentMapper, EduBillStudent> implements EduBillStudentService {
|
||||
|
||||
private final CommonService commonService;
|
||||
private final RemoteStudentService remoteStudentService;
|
||||
private final RemoteCommonService remoteCommonService;
|
||||
|
||||
private final EduBillOrderService eduBillOrderService;
|
||||
private final EduBillOrderItemService eduBillOrderItemService;
|
||||
@ -77,6 +83,12 @@ public class EduBillStudentServiceImpl extends ServiceImpl
|
||||
|
||||
private final RedisService redisService;
|
||||
|
||||
@Value("${febs.pushUrl}")
|
||||
private String pushUrl;
|
||||
|
||||
@Value("${febs.billUrl}")
|
||||
private String billUrl;
|
||||
|
||||
@Override
|
||||
public IPage<BillStudentInfoVO> listBillUserPage(BillStudentSelectPageDTO dto) {
|
||||
// 查询学生信息
|
||||
@ -363,4 +375,79 @@ public class EduBillStudentServiceImpl extends ServiceImpl
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendBillNotice(Long billId, String noticeTitle) {
|
||||
EduBill bill = eduBillService.getById(billId);
|
||||
if (Objects.isNull(bill) || bill.getBillEndDate().isAfter(LocalDateTime.now())) {
|
||||
log.error("当前账单无法进行催缴功能!");
|
||||
}
|
||||
// 查询学生信息
|
||||
ListStudentDTO studentDTO = ListStudentDTO.builder().schoolId(FebsUtil.getDeptId())
|
||||
.isQueryUserDept(false).isQuerySchoolName(false)
|
||||
.build();
|
||||
List<EduStudent> studentList = remoteStudentService.listStudent(studentDTO).getData();
|
||||
|
||||
// 学生分组
|
||||
Map<Long, List<EduStudent>> studentMap = studentList.stream().collect(
|
||||
Collectors.groupingBy(EduStudent::getId));
|
||||
if (CollUtil.isNotEmpty(studentList)) {
|
||||
// 需要推送的家长集合
|
||||
List<EduParent> parentList = new ArrayList<>();
|
||||
// 查询账单人员列表
|
||||
List<BillStudentInfoVO> list = baseMapper.listBillUserPage(null,
|
||||
BillStudentSelectPageDTO.builder()
|
||||
.billId(billId)
|
||||
.build(),
|
||||
studentList);
|
||||
list.forEach(billStudentInfoVO -> {
|
||||
// 匹配学生信息
|
||||
EduStudent student = studentMap.get(billStudentInfoVO.getStudentId()).get(0);
|
||||
BigDecimal payOrderPrice = eduBillOrderService.sumPayOrderPrice(billId, student.getId());
|
||||
if (Objects.isNull(payOrderPrice) && CollUtil.isNotEmpty(student.getParents())) {
|
||||
// 添加需要推送的家长信息
|
||||
parentList.addAll(student.getParents());
|
||||
}
|
||||
});
|
||||
|
||||
// 推送消息
|
||||
List<String> appUserIds = parentList.stream().map(EduParent::getYidaAppUserId)
|
||||
.filter(StringUtils::isNotBlank).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(appUserIds)) {
|
||||
EduYidaApp yidaApp = new EduYidaApp();
|
||||
yidaApp.setAppUrl(pushUrl);
|
||||
// 创建发送对象
|
||||
AppNotice notice = new AppNotice();
|
||||
// 消息主体
|
||||
PushMessage message = new PushMessage();
|
||||
message.setTitle(noticeTitle);
|
||||
message.setContent(String.format("您有一条待缴费信息:%s,截止日期:%s,点击查询详情。", bill.getBillTitle(),
|
||||
LocalDateTimeUtil.format(bill.getBillEndDate(), "yyyy年MM月dd日HH时mm分秒")));
|
||||
message.setUrl(billUrl);
|
||||
message.setMsgType(PushMessage.NORMAL);
|
||||
message.setMsgSubType(PushMessage.H5_SUB_MSG_TYPE);
|
||||
notice.setPushMessage(message);
|
||||
notice.setUserIdList(appUserIds);
|
||||
AppUtil.sendPushMsg(notice, yidaApp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
EduYidaApp yidaApp = new EduYidaApp();
|
||||
yidaApp.setAppUrl("https://push.pzhdqrmtzx.com");
|
||||
// 创建发送对象
|
||||
AppNotice notice = new AppNotice();
|
||||
// 消息主体
|
||||
PushMessage message = new PushMessage();
|
||||
message.setTitle("测试");
|
||||
message.setContent(String.format("您有一条待缴费信息:%s,截止日期:%s,点击查询详情。", "sdad",
|
||||
LocalDateTimeUtil.format(LocalDateTime.now(), "yyyy年MM月dd日HH时mm分秒")));
|
||||
message.setUrl("https://jyjf.pzhdqrmtzx.com/view/billApp/#/index?deptId=10548&loginType=2");
|
||||
message.setMsgType(PushMessage.NORMAL);
|
||||
message.setMsgSubType(PushMessage.H5_SUB_MSG_TYPE);
|
||||
notice.setPushMessage(message);
|
||||
notice.setUserIdList(CollUtil.toList("f15f25a55fad4b61a527c67abbf1dcd1"));
|
||||
AppUtil.sendPushMsg(notice, yidaApp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import cn.hutool.core.date.DatePattern;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||
import cn.hutool.core.lang.Snowflake;
|
||||
import cn.hutool.core.thread.ThreadUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.crypto.SecureUtil;
|
||||
@ -20,6 +21,7 @@ import com.yida.data.common.core.common.ResultMsgType;
|
||||
import com.yida.data.common.core.entity.CurrentUser;
|
||||
import com.yida.data.common.core.entity.apply.EduApplyProductOrder;
|
||||
import com.yida.data.common.core.entity.constant.CachePrefixConstant;
|
||||
import com.yida.data.common.core.entity.constant.LockPrefixConstant;
|
||||
import com.yida.data.common.core.entity.constant.StringConstant;
|
||||
import com.yida.data.common.core.entity.constant.UnionPayConstant;
|
||||
import com.yida.data.common.core.entity.mall.*;
|
||||
@ -80,12 +82,12 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
|
||||
private final EduBillService eduBillService;
|
||||
private final EduBillItemService eduBillItemService;
|
||||
private final EduBillItemSubService eduBillItemSubService;
|
||||
private final EduBillOrderService eduBillOrderService;
|
||||
private final EduBillItemSubService eduBillItemSubService;
|
||||
private final EduBillOrderItemService eduBillOrderItemService;
|
||||
private final EduBillOrderRefundService eduBillOrderRefundService;
|
||||
private final EduBillOrderItemSubService eduBillOrderItemSubService;
|
||||
private final EduBillOrderStudentService eduBillOrderStudentService;
|
||||
private final EduBillOrderRefundService eduBillOrderRefundService;
|
||||
|
||||
private final EduBillMapper eduBillMapper;
|
||||
private final EduBillOrderMapper eduBillOrderMapper;
|
||||
@ -183,16 +185,26 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
public BillPayInfoVO createBillOrder(CreateBillOrderDTO createBillOrderDTO) {
|
||||
|
||||
CurrentUser currentUser = FebsUtil.getCurrentUser();
|
||||
// 判断学生账单订单锁
|
||||
String lockKey = LockPrefixConstant.STUDENT_BILL_ORDER_LOCK + createBillOrderDTO.getStudentId() + StringConstant.DOT + createBillOrderDTO.getBillId();
|
||||
Asserts.isFalse(redisService.hasKey(lockKey), "该学生正在缴费中,请稍后再试!");
|
||||
// 加锁
|
||||
redisService.lock(lockKey);
|
||||
|
||||
// 判断是否有下单缓存信息
|
||||
BillOrderStudentCacheVO existBillOrderStudent = (BillOrderStudentCacheVO) redisService.get(
|
||||
CachePrefixConstant.BILL_ORDER_STUDENT + createBillOrderDTO.getStudentId().toString()
|
||||
+ StringConstant.DOT + createBillOrderDTO.getBillId().toString());
|
||||
if (Objects.nonNull(existBillOrderStudent)) {
|
||||
// 解锁
|
||||
redisService.unlock(lockKey);
|
||||
throw new FebsException(String.format("%s%s正在支付中, 请耐心等待",
|
||||
existBillOrderStudent.getStudentName(), existBillOrderStudent.getParentType()));
|
||||
}
|
||||
if (StringUtils.isEmpty(createBillOrderDTO.getPayWay()) ||
|
||||
PayWay.ALIPAY.getValue().equals(createBillOrderDTO.getPayWay())) {
|
||||
// 解锁
|
||||
redisService.unlock(lockKey);
|
||||
throw new FebsException(ResultMsgType.PAY_TYPE_ERROR.getValue());
|
||||
}
|
||||
// 查询账单信息
|
||||
@ -200,11 +212,15 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
if (Objects.isNull(bill)
|
||||
|| BillStatusEnum.DISABLE_STATUS.getStatus().equals(bill.getEnableStatus())
|
||||
|| bill.getBillEndDate().isBefore(LocalDateTime.now())) {
|
||||
// 解锁
|
||||
redisService.unlock(lockKey);
|
||||
throw new FebsException("当前账单暂时无法缴费");
|
||||
}
|
||||
// 查询学生信息
|
||||
EduStudent student = remoteStudentService.getStudentNoPermission(createBillOrderDTO.getStudentId()).getData();
|
||||
if (Objects.isNull(student)) {
|
||||
// 解锁
|
||||
redisService.unlock(lockKey);
|
||||
throw new FebsException("学生信息错误");
|
||||
}
|
||||
// 家长信息
|
||||
@ -212,6 +228,8 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
EduParent orderParent = parents.stream().filter(
|
||||
x -> currentUser.getMobile().equals(x.getMobile())).collect(Collectors.toList()).get(0);
|
||||
if (Objects.isNull(orderParent)) {
|
||||
// 解锁
|
||||
redisService.unlock(lockKey);
|
||||
throw new FebsException("家长信息错误");
|
||||
}
|
||||
|
||||
@ -219,7 +237,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
try {
|
||||
// 订单号 需要根据支付方式生成不同的订单号
|
||||
String orderNo = "";
|
||||
if (PayWay.WEI_XIN.getValue().equals(createBillOrderDTO.getPayWay())) {
|
||||
if (PayWay.WEIXIN.getValue().equals(createBillOrderDTO.getPayWay())) {
|
||||
// 微信
|
||||
orderNo = String.valueOf(ORDER_CODE_GENERATOR.nextId());
|
||||
} else if (PayWay.UNION.getValue().equals(createBillOrderDTO.getPayWay())) {
|
||||
@ -258,6 +276,9 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
redisService.del(CachePrefixConstant.BILL_ORDER_FLAG + orderCode);
|
||||
}
|
||||
throw new FebsException(e.getMessage());
|
||||
} finally {
|
||||
// 解锁
|
||||
redisService.unlock(lockKey);
|
||||
}
|
||||
}
|
||||
|
||||
@ -290,6 +311,11 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
for (CreateBillOrderDTO.CreateBillOrderItemDTO itemDTO : createBillOrderDTO.getItemList()) {
|
||||
// 根据项目id查询具体信息
|
||||
EduBillItem billItem = eduBillItemService.getById(itemDTO.getItemId());
|
||||
// TODO: 2023/9/19 判断当前费项是否缴费(排除多项选择多项,此处直接查询主费项)
|
||||
int itemPayCount = eduBillOrderItemService.countItemPayInfo(bill.getId(), student.getId(), itemDTO.getItemId());
|
||||
if (itemPayCount > 0) {
|
||||
throw new FebsException(String.format("【%s】已支付,请刷新页面后重新操作", billItem.getItemName()));
|
||||
}
|
||||
String itemFamilyType = billItem.getFamilyType();
|
||||
// 判断当前学生能否减免
|
||||
boolean reductionFlag = false;
|
||||
@ -495,7 +521,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
// 下单返回信息
|
||||
String result = "";
|
||||
try {
|
||||
if (PayWay.WEI_XIN.getValue().equals(eduBillOrder.getPayWay())) {
|
||||
if (PayWay.WEIXIN.getValue().equals(eduBillOrder.getPayWay())) {
|
||||
// 微信支付
|
||||
EduPayWxConfig config = commonService.getPayWxConfigBySchool(student.getSchoolId());
|
||||
EduApplyProductOrder order = new EduApplyProductOrder();
|
||||
@ -553,7 +579,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
public BillPayInfoVO getPayInfo(String orderCode, String billOrderFlag, Long deptId,
|
||||
boolean needToPay, String payWay, Integer payType) {
|
||||
BillPayInfoVO billPayInfoVO = null;
|
||||
if (PayWay.WEI_XIN.getValue().equals(payWay)) {
|
||||
if (PayWay.WEIXIN.getValue().equals(payWay)) {
|
||||
// 微信
|
||||
billPayInfoVO = getWxJsSign(orderCode, billOrderFlag, deptId, needToPay, payType);
|
||||
} else if (PayWay.UNION.getValue().equals(payWay)) {
|
||||
@ -587,7 +613,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
BillPayInfoVO infoVO = new BillPayInfoVO();
|
||||
infoVO.setOrderCode(orderCode);
|
||||
infoVO.setNeedToPay(needToPay);
|
||||
infoVO.setPayWay(PayWay.WEI_XIN.getValue());
|
||||
infoVO.setPayWay(PayWay.WEIXIN.getValue());
|
||||
infoVO.setPayType(wxPayType);
|
||||
|
||||
// js api类型
|
||||
@ -621,7 +647,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
|
||||
if (Objects.nonNull(order)
|
||||
&& (OrderStatusEnum.NOT_PAY.getStatus().equals(order.getOrderStatus()) || OrderStatusEnum.USER_PAYING.getStatus().equals(order.getOrderStatus()))) {
|
||||
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) {
|
||||
if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
|
||||
// 微信
|
||||
wxBillOrderSuccess(order);
|
||||
} else if (PayWay.UNION.getValue().equals(order.getPayWay())) {
|
||||
@ -675,7 +701,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
if (flag) {
|
||||
break;
|
||||
}
|
||||
Thread.sleep(1000L);
|
||||
ThreadUtil.sleep(1000L);
|
||||
} catch (Exception e) {
|
||||
log.error("账单订单(微信支付方式)完成失败, orderNo: {}", orderCode, e);
|
||||
}
|
||||
@ -734,9 +760,9 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
if (flag) {
|
||||
break;
|
||||
}
|
||||
Thread.sleep(1000L);
|
||||
ThreadUtil.sleep(1000L);
|
||||
} catch (Exception e) {
|
||||
log.error("账单订单(云闪付支付方式)完成失败, orderNo: {}", orderCode, e);
|
||||
log.error("账单订单(微信支付方式)完成失败, orderNo: {}", orderCode, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -814,7 +840,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
eduBillOrderService.updateById(order);
|
||||
try {
|
||||
// 判断支付方式
|
||||
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) {
|
||||
if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
|
||||
// 关闭微信订单
|
||||
WxPayUtil.closeOrder(commonService.getPayWxConfigBySchool(order.getDeptId()), order.getOrderCode());
|
||||
} else if (PayWay.UNION.getValue().equals(order.getPayWay())
|
||||
@ -851,7 +877,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
eduBillOrderRefund.setOrderCode(orderCode);
|
||||
// 生成退款订单号
|
||||
String refundOrderCode = "";
|
||||
if (PayWay.WEI_XIN.getValue().equals(order.getPayWay())) {
|
||||
if (PayWay.WEIXIN.getValue().equals(order.getPayWay())) {
|
||||
// 微信
|
||||
refundOrderCode = "R" + orderCode;
|
||||
} else if (PayWay.UNION.getValue().equals(order.getPayWay())) {
|
||||
@ -873,7 +899,7 @@ public class H5EduBillServiceImpl implements H5EduBillService {
|
||||
PayWay.class.getMethod("getValue"));
|
||||
switch (Objects.requireNonNull(payWay)) {
|
||||
// 微信
|
||||
case WEI_XIN:
|
||||
case WEIXIN:
|
||||
// 查询学校微信支付配置
|
||||
EduPayWxConfig config = commonService.getPayWxConfigBySchool(order.getDeptId());
|
||||
WxPayUtil.refund(config, eduBillOrderRefund.getOrderCode(),
|
||||
|
||||
@ -125,5 +125,19 @@
|
||||
</otherwise>
|
||||
</choose>
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 查询学生是否有对应账单项目的缴费信息 -->
|
||||
<select id="countItemPayInfo" resultType="int">
|
||||
SELECT
|
||||
count(DISTINCT o.order_id)
|
||||
FROM
|
||||
edu_bill_order_item i
|
||||
LEFT JOIN edu_bill_order o ON i.order_id = o.order_id
|
||||
WHERE
|
||||
o.pay_status = '1'
|
||||
AND o.bill_id = #{billId}
|
||||
AND o.student_id = #{studentId}
|
||||
AND i.item_id = #{itemId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@ -25,6 +25,10 @@
|
||||
AND s.del_flag = 0
|
||||
AND o.pay_status = '1'
|
||||
AND o.bill_id = #{billId}
|
||||
AND s.student_id IN
|
||||
<foreach collection="studentIds" open="(" close=")" item="item" separator=",">
|
||||
#{item}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<!-- 前端查询账单订单列表数据 -->
|
||||
|
||||
@ -3,7 +3,6 @@ package com.yida.data.school.fallback.facility;
|
||||
import com.yida.data.common.core.annotation.Fallback;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.school.EduDormitory;
|
||||
import com.yida.data.common.core.entity.school.EduDormitoryMaster;
|
||||
import com.yida.data.common.core.entity.school.EduDormitoryRoom;
|
||||
import com.yida.data.school.dto.index.EditPersonNumDTO;
|
||||
import com.yida.data.school.dto.index.ListDormRoomDTO;
|
||||
@ -106,11 +105,6 @@ public class RemoteDormitoryServiceFallback implements FallbackFactory<RemoteDor
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultBean editPersonNumNoPermission(List<EditPersonNumDTO> dtos) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取宿舍
|
||||
*
|
||||
@ -134,16 +128,6 @@ public class RemoteDormitoryServiceFallback implements FallbackFactory<RemoteDor
|
||||
public ResultBean<EduDormitory> getDormNoPermission(Long id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultBean<List<EduDormitory>> getDormBySchoolId(Long schoolId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultBean<List<EduDormitoryRoom>> listDormRoomNoAuth(ListDormRoomDTO dto) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,11 +3,8 @@ package com.yida.data.school.fallback.leave;
|
||||
import com.yida.data.common.core.annotation.Fallback;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.school.dto.leave.ListStudentRequestDetailDTO;
|
||||
import com.yida.data.school.dto.userLeave.ListUserRequestDTO;
|
||||
import com.yida.data.school.feign.leave.RemoteLeaveRequestService;
|
||||
import com.yida.data.school.vo.userLeave.EduLeaveRequestUserVO;
|
||||
import feign.hystrix.FallbackFactory;
|
||||
import java.util.List;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
@ -25,16 +22,16 @@ public class RemoteLeaveRequestServiceFallback implements FallbackFactory<Remote
|
||||
log.error("RemoteLeaveRequestService fallback reason:{}", throwable.getMessage());
|
||||
|
||||
return new RemoteLeaveRequestService() {
|
||||
|
||||
/**
|
||||
* 是否存在通过的请假条
|
||||
*
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ResultBean<Boolean> existRequest(ListStudentRequestDetailDTO dto) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResultBean<List<EduLeaveRequestUserVO>> findList(ListUserRequestDTO dto) {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,7 +3,6 @@ package com.yida.data.school.feign.facility;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.constant.FebsServerConstant;
|
||||
import com.yida.data.common.core.entity.school.EduDormitory;
|
||||
import com.yida.data.common.core.entity.school.EduDormitoryMaster;
|
||||
import com.yida.data.common.core.entity.school.EduDormitoryRoom;
|
||||
import com.yida.data.school.dto.index.EditPersonNumDTO;
|
||||
import com.yida.data.school.dto.index.ListDormRoomDTO;
|
||||
@ -18,7 +17,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
||||
import java.util.List;
|
||||
|
||||
@FeignClient(value = FebsServerConstant.EDU_SCHOOL, contextId = "dormitoryServiceClient",
|
||||
fallbackFactory = RemoteDormitoryServiceFallback.class)
|
||||
fallbackFactory = RemoteDormitoryServiceFallback.class)
|
||||
public interface RemoteDormitoryService {
|
||||
|
||||
/**
|
||||
@ -37,9 +36,6 @@ public interface RemoteDormitoryService {
|
||||
@PostMapping("/facility/dormRoom/listDormRoom")
|
||||
ResultBean<List<EduDormitoryRoom>> listDormRoom(@RequestBody ListDormRoomDTO dto);
|
||||
|
||||
@PostMapping("/in/facility/dormRoom/listDormRoom")
|
||||
ResultBean<List<EduDormitoryRoom>> listDormRoomNoAuth(@RequestBody ListDormRoomDTO dto);
|
||||
|
||||
/**
|
||||
* 查询寝室
|
||||
*
|
||||
@ -66,7 +62,7 @@ public interface RemoteDormitoryService {
|
||||
*/
|
||||
@GetMapping("/facility/dormRoom/getDormRoomByNameAndDorm")
|
||||
ResultBean<EduDormitoryRoom> getDormRoomByNameAndDorm(@RequestParam("name") String name,
|
||||
@RequestParam("dormId") Long dormId);
|
||||
@RequestParam("dormId") Long dormId);
|
||||
|
||||
/**
|
||||
* 根据名称查询宿舍
|
||||
@ -76,7 +72,7 @@ public interface RemoteDormitoryService {
|
||||
*/
|
||||
@GetMapping("/facility/dorm/getDormByName")
|
||||
ResultBean<EduDormitory> getDormByName(@RequestParam("name") String name,
|
||||
@RequestParam("schoolId") Long schoolId);
|
||||
@RequestParam("schoolId") Long schoolId);
|
||||
|
||||
/**
|
||||
* 修改寝室入住的人数
|
||||
@ -86,14 +82,6 @@ public interface RemoteDormitoryService {
|
||||
@PostMapping("/facility/dormRoom/editPersonNum")
|
||||
ResultBean editPersonNum(@RequestBody List<EditPersonNumDTO> dtos);
|
||||
|
||||
/**
|
||||
* 修改寝室入住的人数
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("in/facility/dormRoom/editPersonNum")
|
||||
ResultBean editPersonNumNoPermission(@RequestBody List<EditPersonNumDTO> dtos);
|
||||
|
||||
/**
|
||||
* 获取宿舍
|
||||
*
|
||||
@ -113,8 +101,4 @@ public interface RemoteDormitoryService {
|
||||
*/
|
||||
@GetMapping("/in/facility/dorm/getDorm")
|
||||
ResultBean<EduDormitory> getDormNoPermission(@RequestParam("id") Long id);
|
||||
|
||||
@GetMapping("/in/facility/dorm/getDormListBySchoolId")
|
||||
ResultBean<List<EduDormitory>> getDormBySchoolId(@RequestParam("schoolId") Long schoolId);
|
||||
|
||||
}
|
||||
|
||||
@ -3,10 +3,7 @@ package com.yida.data.school.feign.leave;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.constant.FebsServerConstant;
|
||||
import com.yida.data.school.dto.leave.ListStudentRequestDetailDTO;
|
||||
import com.yida.data.school.dto.userLeave.ListUserRequestDTO;
|
||||
import com.yida.data.school.fallback.leave.RemoteLeaveRequestServiceFallback;
|
||||
import com.yida.data.school.vo.userLeave.EduLeaveRequestUserVO;
|
||||
import java.util.List;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
|
||||
@ -14,7 +11,7 @@ import org.springframework.web.bind.annotation.PostMapping;
|
||||
* @author ccl
|
||||
*/
|
||||
@FeignClient(value = FebsServerConstant.EDU_SCHOOL, contextId = "leaveRequestServiceClient",
|
||||
fallbackFactory = RemoteLeaveRequestServiceFallback.class)
|
||||
fallbackFactory = RemoteLeaveRequestServiceFallback.class)
|
||||
public interface RemoteLeaveRequestService {
|
||||
|
||||
/**
|
||||
@ -25,12 +22,4 @@ public interface RemoteLeaveRequestService {
|
||||
*/
|
||||
@PostMapping("/in/request/leaveRequest/existRequest")
|
||||
ResultBean<Boolean> existRequest(ListStudentRequestDetailDTO dto);
|
||||
|
||||
/**
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/in/eduLeaveRequestUser/findList")
|
||||
ResultBean<List<EduLeaveRequestUserVO>> findList(ListUserRequestDTO dto);
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package com.yida.data.school.vo.index;
|
||||
|
||||
import com.yida.data.common.core.entity.home.EduHomeFunction;
|
||||
import com.yida.data.common.core.entity.school.EduDeptHomeApp;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeAnnouncement;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeApp;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeCover;
|
||||
@ -40,6 +39,4 @@ public class HomeInfoVO {
|
||||
private EduSchoolHomeNews news;
|
||||
|
||||
private Integer deptType;
|
||||
@ApiModelProperty("关联小程序List:新版")
|
||||
private List<EduDeptHomeApp> eduDeptHomeAppList;
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@ import lombok.Data;
|
||||
@ApiModel("稿件分页信息")
|
||||
@Data
|
||||
public class ManuscriptPageInfoVO {
|
||||
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("标题")
|
||||
@ -41,4 +42,7 @@ public class ManuscriptPageInfoVO {
|
||||
|
||||
@ApiModelProperty("标签:以逗号分隔")
|
||||
private String labels;
|
||||
|
||||
@ApiModelProperty("状态")
|
||||
private Integer status;
|
||||
}
|
||||
|
||||
@ -13,7 +13,6 @@ import lombok.Data;
|
||||
@Data
|
||||
@ApiModel("分页查询数据")
|
||||
public class SchoolNoticePageVO {
|
||||
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("发送时间")
|
||||
@ -24,9 +23,6 @@ public class SchoolNoticePageVO {
|
||||
@ApiModelProperty("标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty("作者")
|
||||
private String author;
|
||||
|
||||
@ApiModelProperty("描述")
|
||||
private String description;
|
||||
|
||||
|
||||
@ -9,5 +9,5 @@ com.yida.data.school.fallback.news.RemoteNoticeSystemUserServiceFallback,\
|
||||
com.yida.data.school.fallback.news.RemoteNoticeUpdateServiceFallback,\
|
||||
com.yida.data.school.fallback.transaction.RemoteProductOrderServiceFallback,\
|
||||
com.yida.data.school.fallback.transaction.RemoteProductServiceFallback,\
|
||||
com.yida.data.school.fallback.visitor.RemoteVisitorServiceFallback,\
|
||||
com.yida.data.school.fallback.smart.RemoteSmartWelcomeServiceFallback
|
||||
com.yida.data.school.fallback.transaction.RemoteStudentApplyServiceFallback,\
|
||||
com.yida.data.school.fallback.visitor.RemoteVisitorServiceFallback
|
||||
|
||||
@ -1,84 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>edu-school</artifactId>
|
||||
<groupId>com.yida.data.school</groupId>
|
||||
<version>2.2-RELEASE</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>edu-school</artifactId>
|
||||
<groupId>com.yida.data.school</groupId>
|
||||
<version>2.2-RELEASE</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>edu-school-biz</artifactId>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.school</groupId>
|
||||
<artifactId>edu-school-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.job</groupId>
|
||||
<artifactId>febs-server-job-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.device</groupId>
|
||||
<artifactId>edu-device-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.system</groupId>
|
||||
<artifactId>febs-server-system-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.user</groupId>
|
||||
<artifactId>edu-user-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.common</groupId>
|
||||
<artifactId>edu-common</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.vdurmont</groupId>
|
||||
<artifactId>emoji-java</artifactId>
|
||||
<version>${emoji.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.websocket</groupId>
|
||||
<artifactId>edu-websocket-api</artifactId>
|
||||
<version>2.2-RELEASE</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.attendance</groupId>
|
||||
<artifactId>attendance-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<artifactId>edu-school-biz</artifactId>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.school</groupId>
|
||||
<artifactId>edu-school-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.job</groupId>
|
||||
<artifactId>febs-server-job-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.device</groupId>
|
||||
<artifactId>edu-device-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.system</groupId>
|
||||
<artifactId>febs-server-system-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.user</groupId>
|
||||
<artifactId>edu-user-api</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.common</groupId>
|
||||
<artifactId>edu-common</artifactId>
|
||||
<version>${febs-cloud.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.vdurmont</groupId>
|
||||
<artifactId>emoji-java</artifactId>
|
||||
<version>${emoji.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.yida.data.websocket</groupId>
|
||||
<artifactId>edu-websocket-api</artifactId>
|
||||
<version>2.2-RELEASE</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<outputDirectory>../../../febs-jar</outputDirectory>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<outputDirectory>../../../febs-jar</outputDirectory>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@ -13,9 +13,11 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
|
||||
import cc.mrbird.febs.common.security.starter.annotation.EnableFebsCloudResourceServer;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
@SpringBootConfiguration
|
||||
@EnableAsync
|
||||
@EnableTransactionManagement
|
||||
@EnableFeignClients(basePackages = "com.yida.data")
|
||||
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
|
||||
@EnableFebsCloudResourceServer
|
||||
|
||||
@ -225,7 +225,7 @@ public class CoreExaminationPublishServiceImpl extends
|
||||
|
||||
private void pushScoreNotice(CoreExamination coreExamination, List<CoreExaminationStudent> studentList) {
|
||||
Dept school = commonService.getDept(coreExamination.getSchoolId());
|
||||
EduApp eduApp = commonService.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null, school.getDeptId());
|
||||
EduApp eduApp = commonService.getAppByCodeAndSchool(AppConstant.SCORE_PARENT, null, school.getDeptId());
|
||||
List<Long> studentId = studentList.stream().map(x -> x.getCoreStudentId()).collect(Collectors.toList());
|
||||
String accessToken = null;
|
||||
EduYidaApp yidaApp = null;
|
||||
|
||||
@ -1,20 +1,10 @@
|
||||
package com.yida.data.school.facility.controller;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.school.EduDormitory;
|
||||
import com.yida.data.common.core.entity.school.EduDormitoryMaster;
|
||||
import com.yida.data.common.core.entity.school.EduDormitoryRoom;
|
||||
import com.yida.data.school.dto.index.ListDormRoomDTO;
|
||||
import com.yida.data.school.facility.mapper.EduDormitoryRoomMapper;
|
||||
import com.yida.data.school.facility.service.EduDormitoryMasterService;
|
||||
import com.yida.data.school.facility.service.EduDormitoryService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -39,35 +29,9 @@ public class InEduDormitoryController {
|
||||
|
||||
private final EduDormitoryService eduDormitoryService;
|
||||
|
||||
private final EduDormitoryRoomMapper eduDormitoryRoomMapper;
|
||||
|
||||
private final EduDormitoryMasterService eduDormitoryMasterService;
|
||||
|
||||
@ApiOperation("获取宿舍楼")
|
||||
@GetMapping("/getDorm")
|
||||
ResultBean<EduDormitory> getDorm(@RequestParam("id") Long id) {
|
||||
return ResultBean.buildSuccess(eduDormitoryService.getDorm(id));
|
||||
}
|
||||
|
||||
@ApiOperation("根据学校ID获取宿舍楼List")
|
||||
@GetMapping("/getDormListBySchoolId")
|
||||
ResultBean<List<EduDormitory>> getDormListBySchoolId(@RequestParam("schoolId") Long schoolId) {
|
||||
List<EduDormitory> list = eduDormitoryService
|
||||
.list(Wrappers.lambdaQuery(new EduDormitory()).eq(EduDormitory::getSchoolId, schoolId));
|
||||
|
||||
list.forEach(eduDormitory -> {
|
||||
ListDormRoomDTO dto = new ListDormRoomDTO();
|
||||
dto.setDormIds(Collections.singletonList(eduDormitory.getId()));
|
||||
List<EduDormitoryRoom> eduDormitoryRooms = eduDormitoryRoomMapper.listDormRoom(dto);
|
||||
eduDormitory.setDormRoomList(eduDormitoryRooms);
|
||||
//宿管
|
||||
List<EduDormitoryMaster> masterList = eduDormitoryMasterService
|
||||
.list(Wrappers.lambdaQuery(new EduDormitoryMaster()).eq(EduDormitoryMaster::getSchoolId, schoolId)
|
||||
.eq(EduDormitoryMaster::getDormitoryId, eduDormitory.getId()));
|
||||
if (CollUtil.isNotEmpty(masterList)) {
|
||||
eduDormitory.setMasterIds(masterList.stream().map(EduDormitoryMaster::getMasterId).collect(Collectors.toList()));
|
||||
}
|
||||
});
|
||||
return ResultBean.buildSuccess(list);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,15 +2,9 @@ package com.yida.data.school.facility.controller;
|
||||
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.school.EduDormitoryRoom;
|
||||
import com.yida.data.school.dto.index.EditPersonNumDTO;
|
||||
import com.yida.data.school.dto.index.ListDormRoomDTO;
|
||||
import com.yida.data.school.facility.service.EduDormitoryRoomService;
|
||||
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import java.util.List;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
@ -34,17 +28,4 @@ public class InEduDormitoryRoomController {
|
||||
ResultBean<EduDormitoryRoom> getDormRoomNoPermission(@RequestParam("id") Long id) {
|
||||
return ResultBean.buildSuccess(eduDormitoryRoomService.getDormRoom(id));
|
||||
}
|
||||
|
||||
@ApiOperation("寝室入住")
|
||||
@PostMapping("/editPersonNum")
|
||||
public ResultBean editPersonNumNoPermission(@RequestBody List<EditPersonNumDTO> dtos) {
|
||||
eduDormitoryRoomService.editPersonNum(dtos);
|
||||
return ResultBean.buildSuccess();
|
||||
}
|
||||
|
||||
@ApiOperation("查询寝室列表")
|
||||
@PostMapping("/listDormRoom")
|
||||
public ResultBean<List<EduDormitoryRoom>> listDormRoom(@RequestBody ListDormRoomDTO dto) {
|
||||
return ResultBean.buildSuccess(eduDormitoryRoomService.listDormRoom(dto));
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,5 +11,7 @@ import com.yida.data.common.core.entity.school.EduDormitoryMaster;
|
||||
* @date 2022/8/22
|
||||
*/
|
||||
public interface EduDormitoryMasterService extends IService<EduDormitoryMaster> {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -54,6 +54,4 @@ public interface EduDormitoryService extends IService<EduDormitory> {
|
||||
* @date 2022/7/15 14:31
|
||||
*/
|
||||
EduDormitory getDorm(Long id);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ import java.util.stream.Collectors;
|
||||
@RequiredArgsConstructor
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class EduDormitoryServiceImpl extends ServiceImpl
|
||||
<EduDormitoryMapper, EduDormitory> implements EduDormitoryService {
|
||||
<EduDormitoryMapper, EduDormitory> implements EduDormitoryService {
|
||||
|
||||
private final EduDormitoryRoomMapper eduDormitoryRoomMapper;
|
||||
private final EduDormitoryMasterMapper eduDormitoryMasterMapper;
|
||||
@ -62,15 +62,14 @@ public class EduDormitoryServiceImpl extends ServiceImpl
|
||||
public IPage<DormInfoVO> listDormPage(PageDormDTO dto) {
|
||||
|
||||
if (Objects.nonNull(dto.getMasterId())) {
|
||||
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper
|
||||
.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
|
||||
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
|
||||
.eq(EduDormitoryMaster::getMasterId, dto.getMasterId()).select(EduDormitoryMaster::getDormitoryId));
|
||||
if (CollUtil.isEmpty(masterList)) {
|
||||
return new Page<>();
|
||||
}
|
||||
dto.setDormIds(masterList.stream().map(EduDormitoryMaster::getDormitoryId)
|
||||
.distinct()
|
||||
.collect(Collectors.toList()));
|
||||
.distinct()
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
IPage<DormInfoVO> dormPage = baseMapper.listDormPage(dto.toPage(), dto);
|
||||
// 查询宿管名称
|
||||
@ -78,18 +77,18 @@ public class EduDormitoryServiceImpl extends ServiceImpl
|
||||
// 查询宿管id集合
|
||||
for (DormInfoVO dormInfoVO : dormPage.getRecords()) {
|
||||
List<Long> masterIds = eduDormitoryMasterMapper.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
|
||||
.eq(EduDormitoryMaster::getDormitoryId, dormInfoVO.getDormId())
|
||||
.select(EduDormitoryMaster::getMasterId)
|
||||
.eq(EduDormitoryMaster::getDormitoryId, dormInfoVO.getDormId())
|
||||
.select(EduDormitoryMaster::getMasterId)
|
||||
).stream().map(EduDormitoryMaster::getMasterId).collect(Collectors.toList());
|
||||
dormInfoVO.setMasterIds(masterIds);
|
||||
|
||||
List<EduStaff> staffList = CollUtil.isNotEmpty(masterIds)
|
||||
? remoteStaffService.listStaff(ListStaffDTO.builder().ids(masterIds).build()).getData()
|
||||
: Collections.emptyList();
|
||||
? remoteStaffService.listStaff(ListStaffDTO.builder().ids(masterIds).build()).getData()
|
||||
: Collections.emptyList();
|
||||
// 匹配宿管
|
||||
if (CollUtil.isNotEmpty(staffList)) {
|
||||
dormInfoVO.setMasterName(staffList.stream().map(EduStaff::getName)
|
||||
.collect(Collectors.joining(StringConstant.COMMA)));
|
||||
.collect(Collectors.joining(StringConstant.COMMA)));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -107,8 +106,8 @@ public class EduDormitoryServiceImpl extends ServiceImpl
|
||||
}
|
||||
}
|
||||
LambdaQueryWrapper<EduDormitory> condition = Wrappers.<EduDormitory>lambdaQuery()
|
||||
.eq(EduDormitory::getSchoolId, dorm.getSchoolId())
|
||||
.eq(EduDormitory::getName, dorm.getName());
|
||||
.eq(EduDormitory::getSchoolId, dorm.getSchoolId())
|
||||
.eq(EduDormitory::getName, dorm.getName());
|
||||
if (dorm.getId() != null) {
|
||||
condition.ne(EduDormitory::getId, dorm.getId());
|
||||
}
|
||||
@ -116,14 +115,13 @@ public class EduDormitoryServiceImpl extends ServiceImpl
|
||||
saveOrUpdate(dorm);
|
||||
|
||||
// 删除旧宿管数据
|
||||
eduDormitoryMasterMapper
|
||||
.delete(Wrappers.<EduDormitoryMaster>lambdaQuery().in(EduDormitoryMaster::getDormitoryId, dorm.getId()));
|
||||
eduDormitoryMasterMapper.delete(Wrappers.<EduDormitoryMaster>lambdaQuery().in(EduDormitoryMaster::getDormitoryId, dorm.getId()));
|
||||
dorm.getMasterIds().forEach(masterId -> {
|
||||
EduDormitoryMaster master = EduDormitoryMaster.builder()
|
||||
.dormitoryId(dorm.getId())
|
||||
.masterId(masterId)
|
||||
.schoolId(dorm.getSchoolId())
|
||||
.build();
|
||||
.dormitoryId(dorm.getId())
|
||||
.masterId(masterId)
|
||||
.schoolId(dorm.getSchoolId())
|
||||
.build();
|
||||
eduDormitoryMasterMapper.insert(master);
|
||||
});
|
||||
}
|
||||
@ -131,7 +129,7 @@ public class EduDormitoryServiceImpl extends ServiceImpl
|
||||
@Override
|
||||
public void delDormBatch(List<Long> ids) {
|
||||
List<EduDormitoryRoom> rooms = eduDormitoryRoomMapper.selectList(
|
||||
Wrappers.<EduDormitoryRoom>lambdaQuery().in(EduDormitoryRoom::getDormId, ids).select(EduDormitoryRoom::getId));
|
||||
Wrappers.<EduDormitoryRoom>lambdaQuery().in(EduDormitoryRoom::getDormId, ids).select(EduDormitoryRoom::getId));
|
||||
//删除寝室
|
||||
eduDormitoryRoomMapper.delete(Wrappers.<EduDormitoryRoom>lambdaQuery().in(EduDormitoryRoom::getDormId, ids));
|
||||
// 删除宿舍楼
|
||||
@ -147,15 +145,14 @@ public class EduDormitoryServiceImpl extends ServiceImpl
|
||||
EduDormitory eduDormitory = getById(id);
|
||||
Optional.ofNullable(eduDormitory).ifPresent(dormitory -> {
|
||||
// 查询宿管信息
|
||||
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper
|
||||
.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
|
||||
List<EduDormitoryMaster> masterList = eduDormitoryMasterMapper.selectList(Wrappers.lambdaQuery(new EduDormitoryMaster())
|
||||
.eq(EduDormitoryMaster::getDormitoryId, dormitory.getId()).select(EduDormitoryMaster::getMasterId));
|
||||
if (CollUtil.isNotEmpty(masterList)) {
|
||||
dormitory.setEduStaffList(
|
||||
remoteStaffService.listStaff(
|
||||
ListStaffDTO.builder().ids(masterList.stream().map(EduDormitoryMaster::getMasterId)
|
||||
.collect(Collectors.toList())).build())
|
||||
.getData());
|
||||
remoteStaffService.listStaff(
|
||||
ListStaffDTO.builder().ids(masterList.stream().map(EduDormitoryMaster::getMasterId)
|
||||
.collect(Collectors.toList())).build())
|
||||
.getData());
|
||||
}
|
||||
});
|
||||
return eduDormitory;
|
||||
|
||||
@ -94,7 +94,7 @@ public class EduHealthStudentPhysicalExaminationGroupServiceImpl extends Service
|
||||
public void sendHealthNotice(Long groupId,Long schoolId) {
|
||||
List<Long> studentId = baseMapper.findStudentId(groupId);
|
||||
EduHealthStudentPhysicalExaminationGroup group = getById(groupId);
|
||||
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.INDEX_PARENT, null,
|
||||
EduApp app = commonService.getAppByCodeAndSchool(AppConstant.PRODUCT_PARENT, null,
|
||||
schoolId);
|
||||
String accessToken = wxUtil.getAccessToken(app.getWxCorpId(), app.getWxSecret());
|
||||
|
||||
|
||||
@ -13,7 +13,6 @@ import com.yida.data.common.core.entity.school.EduSchoolHomeMicroPic;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeNews;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolManuscript;
|
||||
import com.yida.data.common.core.utils.FebsUtil;
|
||||
import com.yida.data.school.index.service.EduDeptHomeAppService;
|
||||
import com.yida.data.school.index.service.EduHomeFunctionService;
|
||||
import com.yida.data.school.index.service.EduSchoolHomeAnnouncementService;
|
||||
import com.yida.data.school.index.service.EduSchoolHomeAppService;
|
||||
@ -64,15 +63,14 @@ public class EduSchoolHomeController {
|
||||
private final EduSchoolHomeMicroIndexService eduSchoolHomeMicroIndexService;
|
||||
private final EduSchoolHomeMicroPicService eduSchoolHomeMicroPicService;
|
||||
private final EduSchoolManuscriptService eduSchoolManuscriptService;
|
||||
private final EduDeptHomeAppService eduDeptHomeAppService;
|
||||
|
||||
@ApiOperation("主页信息查询")
|
||||
@GetMapping("/getHomeInfo")
|
||||
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId, @RequestParam(required = false) Integer userType) {
|
||||
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId) {
|
||||
if (schoolId == null) {
|
||||
schoolId = FebsUtil.getTopDeptId();
|
||||
}
|
||||
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId, userType));
|
||||
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId));
|
||||
}
|
||||
|
||||
@ApiOperation("更新轮播图(新增、编辑、删除)")
|
||||
@ -204,15 +202,4 @@ public class EduSchoolHomeController {
|
||||
eduHomeFunctionService.updateFunction(functionData);
|
||||
return ResultBean.buildSuccess();
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/getWxPublicURLLink")
|
||||
@ApiOperation("获取微信小程序短链接")
|
||||
ResultBean<String> getWxPublicURLLink(
|
||||
@RequestParam @ApiParam(value = "学校ID", required = true) String schoolId,
|
||||
@RequestParam @ApiParam(value = "用户ID", required = true) Long userId,
|
||||
@RequestParam @ApiParam(value = "用户类型", required = true) Integer userType,
|
||||
@RequestParam @ApiParam(value = "系统内部小程序ID", required = true) Long localAppId) {
|
||||
return ResultBean.buildSuccess(eduDeptHomeAppService.getWxPublicURLLink(schoolId, userId, userType, localAppId));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,9 +2,7 @@ package com.yida.data.school.index.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.yida.data.common.core.common.ResultBean;
|
||||
import com.yida.data.common.core.entity.school.EduDeptHomeApp;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeMicroPic;
|
||||
import com.yida.data.school.index.service.EduDeptHomeAppService;
|
||||
import com.yida.data.school.index.service.EduSchoolHomeCoverService;
|
||||
import com.yida.data.school.index.service.EduSchoolHomeMicroIndexService;
|
||||
import com.yida.data.school.index.service.EduSchoolHomeMicroPicService;
|
||||
@ -28,11 +26,9 @@ import lombok.RequiredArgsConstructor;
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class InEduSchoolHomeController {
|
||||
|
||||
private final EduSchoolHomeMicroIndexService eduSchoolHomeMicroIndexService;
|
||||
private final EduSchoolHomeMicroPicService eduSchoolHomeMicroPicService;
|
||||
private final EduSchoolHomeCoverService eduSchoolHomeCoverService;
|
||||
private final EduDeptHomeAppService eduDeptHomeAppService;
|
||||
|
||||
|
||||
@ApiOperation("查询校园概况")
|
||||
@ -48,20 +44,13 @@ public class InEduSchoolHomeController {
|
||||
@GetMapping("/listPicByCol")
|
||||
public ResultBean<List<EduSchoolHomeMicroPic>> listPicByCol(@ApiParam("栏目id") Long colId) {
|
||||
return ResultBean.buildSuccess(eduSchoolHomeMicroPicService.list(Wrappers.lambdaQuery(new EduSchoolHomeMicroPic())
|
||||
.eq(EduSchoolHomeMicroPic::getColId, colId)
|
||||
.orderByAsc(EduSchoolHomeMicroPic::getSort)));
|
||||
.eq(EduSchoolHomeMicroPic::getColId, colId)
|
||||
.orderByAsc(EduSchoolHomeMicroPic::getSort)));
|
||||
}
|
||||
|
||||
@ApiOperation("主页信息查询")
|
||||
@GetMapping("/getHomeInfo")
|
||||
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId, @RequestParam(required = false) Integer userType) {
|
||||
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId, userType));
|
||||
}
|
||||
|
||||
@ApiOperation("主页信息查询")
|
||||
@GetMapping("/getDeptAppList")
|
||||
public ResultBean<List<EduDeptHomeApp>> getDeptAppList(@RequestParam("schoolId") Long schoolId) {
|
||||
return ResultBean.buildSuccess(eduDeptHomeAppService.list(Wrappers.lambdaQuery(new EduDeptHomeApp())
|
||||
.eq(EduDeptHomeApp::getDeptId, schoolId)));
|
||||
public ResultBean<HomeInfoVO> getHomeInfo(@ApiParam("学校id") Long schoolId) {
|
||||
return ResultBean.buildSuccess(eduSchoolHomeCoverService.getHomeInfo(schoolId));
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,9 +3,7 @@ package com.yida.data.school.index.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeApp;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import java.util.List;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
/**
|
||||
* Service接口
|
||||
|
||||
@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeCover;
|
||||
import com.yida.data.school.vo.index.HomeInfoVO;
|
||||
|
||||
import io.swagger.models.auth.In;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -15,7 +14,7 @@ import java.util.List;
|
||||
*/
|
||||
public interface EduSchoolHomeCoverService extends IService<EduSchoolHomeCover> {
|
||||
|
||||
HomeInfoVO getHomeInfo(Long schoolId, Integer userType);
|
||||
HomeInfoVO getHomeInfo(Long schoolId);
|
||||
|
||||
/**
|
||||
* 更新轮播图
|
||||
|
||||
@ -1,11 +1,9 @@
|
||||
package com.yida.data.school.index.service.impl;
|
||||
|
||||
import cc.mrbird.febs.common.redis.service.RedisService;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.yida.data.common.core.entity.constant.CachePrefixConstant;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeApp;
|
||||
import com.yida.data.common.core.entity.school.EduSchoolHomeAppShow;
|
||||
import com.yida.data.common.core.entity.user.EduStaffDept;
|
||||
@ -41,7 +39,6 @@ public class EduSchoolHomeAppServiceImpl extends ServiceImpl
|
||||
private final RemoteDeptService remoteDeptService;
|
||||
private final RemoteUserDeptService remoteUserDeptService;
|
||||
private final EduSchoolMatterService eduSchoolMatterService;
|
||||
private final RedisService redisService;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user