Browse Source

Merge branch 'develop' of gitadmin/tuoheng_freeway into release

pull/393/head
wanjing 8 months ago
parent
commit
ddfd27ac2d
53 changed files with 1630 additions and 113 deletions
  1. +60
    -0
      tuoheng-common/tuoheng-common-core/src/main/java/com/tuoheng/common/core/config/common/CommonConfig.java
  2. +6
    -0
      tuoheng-service/tuoheng-admin/sql/sql_change_v1.3.5.sql
  3. +23
    -0
      tuoheng-service/tuoheng-admin/sql/sql_change_v1.3.6.sql
  4. +10
    -4
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/constant/SystemConstant.java
  5. +14
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/controller/UserController.java
  6. +4
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/entity/Tenant.java
  7. +3
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/entity/User.java
  8. +11
    -1
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/enums/code/user/EditUserPasswordCodeEnum.java
  9. +26
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/request/user/UserEditPwdRequest.java
  10. +22
    -1
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/dsp/DspCallbackServiceImpl.java
  11. +53
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/dsp/NoticeWeChatMiniProgramService.java
  12. +80
    -52
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/oidc/AddOidcTenantService.java
  13. +2
    -2
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/oidc/EditOidcUserPasswordService.java
  14. +8
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/IUserService.java
  15. +17
    -4
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/UserServiceImpl.java
  16. +88
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/update/ResetUserPasswordService.java
  17. +76
    -26
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/update/UpdateUserPasswordService.java
  18. +7
    -0
      tuoheng-service/tuoheng-admin/src/main/resources/application-dev.yml
  19. +9
    -3
      tuoheng-service/tuoheng-admin/src/main/resources/application-local.yml
  20. +7
    -0
      tuoheng-service/tuoheng-admin/src/main/resources/application-prod.yml
  21. +7
    -0
      tuoheng-service/tuoheng-admin/src/main/resources/application-test.yml
  22. +9
    -1
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/InspectionController.java
  23. +0
    -5
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/UserController.java
  24. +35
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/WxController.java
  25. +12
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/dao/LiveChannelMapper.java
  26. +11
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/dao/UserAuthorizeMapper.java
  27. +74
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/LiveChannel.java
  28. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/User.java
  29. +40
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/UserAuthorize.java
  30. +20
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/dto/TemplateMinDto.java
  31. +46
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/wx/WxMessageRequest.java
  32. +23
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/AuthorizeStatusEnum.java
  33. +32
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/InspectionStatusEnum.java
  34. +23
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/SubscribeTimesEnum.java
  35. +39
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/UserAuthorizeEnum.java
  36. +51
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/WeiXinRequestEnum.java
  37. +48
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/code/inspection/QueryVideoServiceEnum.java
  38. +39
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/param/WxSendMessageParam.java
  39. +8
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/IInspectionService.java
  40. +26
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/IWxService.java
  41. +13
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/InspectionServiceImpl.java
  42. +81
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/QueryVideoService.java
  43. +274
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/WxServiceImpl.java
  44. +49
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/utils/GetOpenIdUtil.java
  45. +21
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/vo/InspectionVideoVo.java
  46. +43
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/vo/LiveChannelVo.java
  47. +9
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-dev.yml
  48. +9
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-local.yml
  49. +9
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-prod.yml
  50. +9
    -14
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-test.yml
  51. +7
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/LiveChannelMapper.xml
  52. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/UserAuthorizeMapper.xml
  53. +17
    -0
      tuoheng-service/tuoheng-miniprogram/src/test/java/com/tuoheng/miniprogram/utils/GetOpenIdUtilTest.java

+ 60
- 0
tuoheng-common/tuoheng-common-core/src/main/java/com/tuoheng/common/core/config/common/CommonConfig.java View File

@@ -48,6 +48,26 @@ public class CommonConfig {
*/
public static String airportURL;

/**
* 小程序url
*/
public static String wechatURL;

/**
* 小程序 appId
*/
public static String appId;

/**
* 小程序 appSecret
*/
public static String appSecret;

/**
* 主题id
*/
public static String templateId;

/**
* 图片域名赋值
*
@@ -125,4 +145,44 @@ public class CommonConfig {
airportURL = url;
}

/**
* 小程序url
*
* @param url
*/
@Value("${tuoheng.wechat-url}")
public void wechatURL(String url) {
wechatURL = url;
}

/**
* 小程序 appId赋值
*
* @param id 小程序 appId
*/
@Value("${wx.appId}")
public void setAppId(String id) {
appId = id;
}

/**
* 小程序 appSecret赋值
*
* @param secret 小程序 appSecret
*/
@Value("${wx.appSecret}")
public void setAppSecret(String secret) {
appSecret = secret;
}

/**
* 小程序 templateId赋值
*
* @param tempId
*/
@Value("${wx.templateId}")
public void setTemplateId(String tempId) {
templateId = tempId;
}

}

+ 6
- 0
tuoheng-service/tuoheng-admin/sql/sql_change_v1.3.5.sql View File

@@ -45,3 +45,9 @@ alter table tuoheng_freeway.th_inspection drop column section_name;
alter table tuoheng_freeway.th_inspection drop column airport_name;
alter table tuoheng_freeway.th_inspection drop column inspection_line_name;

--周期任务表
alter table tuoheng_freeway.th_inspection_cycle add airport_line_length double(16, 2) null comment '航线长度(公里)' after airport_line_id;

-- 云盒遥测数据表
alter table tuoheng_freeway.th_flight_data add flytime varchar(150) default '' not null comment '总飞行时间:单位秒' after dist_home;
alter table tuoheng_freeway.th_flight_data add mileage varchar(150) default '' not null comment '总里程' after flytime;

+ 23
- 0
tuoheng-service/tuoheng-admin/sql/sql_change_v1.3.6.sql View File

@@ -0,0 +1,23 @@
-- 2024-12-03 14:30
-- v1.3.6

use tuoheng_freeway;

-- 用户授权表
create table th_user_authorize
(
id varchar(36) not null comment 'ID' primary key,
user_id varchar(36) null comment '用户id',
open_id varchar(150) default '' not null comment '授权openid',
access_token varchar(500) default '' null comment 'accesstoken值',
create_user varchar(36) default '0' null comment '添加人',
union_id varchar(150) null comment '唯一标识',
create_time datetime null comment '创建时间',
update_user varchar(36) default '0' null comment '更新人',
update_time datetime null comment '更新时间',
mark tinyint unsigned default '1' not null comment '有效标识'
) comment '用户授权表';

-- 用户表
alter table tuoheng_freeway.th_user add authorize tinyint(1) default 1 not null comment '授权标识:1未授权 2授权' after status;
alter table tuoheng_freeway.th_user add subscribe_times tinyint(1) default 1 not null comment '订阅次数 1:订阅一次 2非一次订阅' after authorize;

+ 10
- 4
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/constant/SystemConstant.java View File

@@ -15,14 +15,20 @@ public interface SystemConstant {
String PLATFORM_CODE = "gs";

/**
* 机场平台:获取航点文件坐标
* 高德url地址
*/
String API_AIRPORT_LOCATION = "/airportInterface/getLocationById";
String GAO_DE_URL = "https://restapi.amap.com/v3/geocode/regeo";

/**
* 高德url地址
* 推送微信消息
*/
String GAO_DE_URL = "https://restapi.amap.com/v3/geocode/regeo";
String API_WEIXIN_SEND_MESSAGE = "/telecomumale/miniprogram/weiXin/send/message";

/**
* 机场平台:获取航点文件坐标
*/
String API_AIRPORT_LOCATION = "/airportInterface/getLocationById";


/**
* 机场平台:获取机场列表接口

+ 14
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/controller/UserController.java View File

@@ -2,6 +2,7 @@ package com.tuoheng.admin.controller;

import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.request.user.QueryUserPageListRequest;
import com.tuoheng.admin.request.user.UserEditPwdRequest;
import com.tuoheng.admin.request.user.UserInitRequest;
import com.tuoheng.admin.request.user.UserResetPwdRequest;
import com.tuoheng.admin.service.user.IUserService;
@@ -125,4 +126,17 @@ public class UserController {
return userService.init(request);
}


/**
* 修改密码
*
* @param request
* @return
*/
@PutMapping("/editPwd")
public JsonResult editePwd(@RequestBody UserEditPwdRequest request) {
log.info("进入修改用户密码接口,request:{}",request);
return userService.editPassword(request);
}

}

+ 4
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/entity/Tenant.java View File

@@ -1,5 +1,6 @@
package com.tuoheng.admin.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.tuoheng.common.core.common.BaseEntity;
import lombok.Data;
@@ -128,4 +129,7 @@ public class Tenant extends BaseEntity implements Serializable {
*/
private String portraitUrl;

@TableField(exist = false)
private Integer flag;

}

+ 3
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/entity/User.java View File

@@ -231,4 +231,7 @@ public class User implements Serializable {
* 数据权限:1:查看所有部门数据;2:查看本部门及子部门;3:查看本部门数据;
*/
private Integer dataPermission;

@TableField(exist = false)
private Integer flag;
}

+ 11
- 1
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/enums/code/user/EditUserPasswordCodeEnum.java View File

@@ -14,7 +14,17 @@ public enum EditUserPasswordCodeEnum {
EDIT_IS_FAILED(1100400, "重置密码失败"),
USER_ID_IS_NULL(1100401, "用户ID为空"),
USER_IS_NOT_EXIST(1100402, "用户不存在"),
NON_TENANT_USER(1100403, "当前用户非本租户用户");
NON_TENANT_USER(1100403, "当前用户非本租户用户"),
OLD_PASSWORD_IS_NULL(1100404, "旧密码为空"),
NEW_PASSWORD_IS_NULL(1100405, "新密码为空"),
TWO_PASSWORDS_NOT_MATCH(1100406, "两次密码不一致"),
OLD_PASSWORD_INCORRECT(1100407, "旧密码错误"),
NEW_PASSWORD_INVALID_VALUE(1100408, "密码必须是字母和数字的组合"),
NEW_PASSWORD_INVALID_SIZE(1100408, "密码不能为空且长度为8-20位");






/**

+ 26
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/request/user/UserEditPwdRequest.java View File

@@ -0,0 +1,26 @@
package com.tuoheng.admin.request.user;

import lombok.Data;

/**
* 修改密码
*/
@Data
public class UserEditPwdRequest {

/**
* 老密码
*/
private String oldPassword;

/**
* 新密码第一次
*/
private String newPasswordFirst;

/**
* 新密码第二次
*/
private String newPasswordSecond;

}

+ 22
- 1
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/dsp/DspCallbackServiceImpl.java View File

@@ -1,5 +1,6 @@
package com.tuoheng.admin.service.third.dsp;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSON;
@@ -62,6 +63,9 @@ public class DspCallbackServiceImpl implements IDspCallbackService {
@Autowired
private IAccidentService accidentService;

@Autowired
private NoticeWeChatMiniProgramService noticeWeChatMiniProgramService;

/**
* 保存DSP回调数据
*
@@ -282,10 +286,27 @@ public class DspCallbackServiceImpl implements IDspCallbackService {
return inspectionFile;
}).collect(Collectors.toList());

// 先判断是否第一次生成问题,通过问题表中是否有数据来判断
Integer count = inspectionFileMapper.selectCount(new LambdaQueryWrapper<InspectionFile>()
.eq(InspectionFile::getInspectionId, inspection.getId())
.eq(InspectionFile::getMark, MarkEnum.VALID.getCode()));

Map<String, QuestionType> questionTypeMap = getStringQuestionTypeMap();

// 通知小程序
if (count <= 0) {
log.info("该任务第一次产生问题,通知小程序, inspectionId={}", inspection.getId());
// 该任务第一次产生问题,通知小程序
if (CollectionUtil.isNotEmpty(thirstyQuestionFiles) && thirstyQuestionFiles.size() > 0) {
InspectionFile inspectionFile = thirstyQuestionFiles.get(0);
QuestionType questionType = questionTypeMap.get(inspectionFile.getQuestionCode());
noticeWeChatMiniProgramService.notice(inspection, questionType);
}
}

log.info("批量插入问题图片数据");
CommonUtils.batchOperate((x) -> inspectionFileMapper.addBatch(x), thirstyQuestionFiles, 1000);


log.info("调用saveAccidentData方法保存应急记录数据...");

Boolean flag = this.saveAccidentData(thirstyQuestionFiles);

+ 53
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/dsp/NoticeWeChatMiniProgramService.java View File

@@ -0,0 +1,53 @@
package com.tuoheng.admin.service.third.dsp;

import com.alibaba.fastjson.JSONObject;
import com.tuoheng.admin.constant.SystemConstant;
import com.tuoheng.admin.entity.Inspection;
import com.tuoheng.admin.entity.QuestionType;
import com.tuoheng.common.core.config.common.CommonConfig;
import com.tuoheng.common.core.exception.ServiceException;
import com.tuoheng.common.core.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Slf4j
@Service
public class NoticeWeChatMiniProgramService {

/**
* 通知微信小程序
*
* @param inspection
* @param questionType
* @return
*/
@Transactional
public void notice(Inspection inspection, QuestionType questionType) {
log.info("任务发现第一个问题,推送给微信小程序:inspection:{}, questionType:{}", inspection.getId(), questionType);

String url = CommonConfig.wechatURL + SystemConstant.API_WEIXIN_SEND_MESSAGE;
JSONObject jsonObject = new JSONObject();
jsonObject.put("tenantId", inspection.getTenantId());
jsonObject.put("deptId", inspection.getDeptId());
jsonObject.put("inspectionId", inspection.getId());
jsonObject.put("questionName", inspection.getName());
jsonObject.put("questionDesc", questionType.getContent());
jsonObject.put("createTime", DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss"));

log.info("任务发现第一个问题,推送给微信小程序:url:{}", url);
log.info("任务发现第一个问题,推送给微信小程序:jsonObject:{}", jsonObject);

String airPortStr = HttpUtils.doSend(url, jsonObject, null, "POST");
if (StringUtils.isEmpty(airPortStr)) {
log.info("任务发现第一个问题,推送给微信小程序:返回数据为空");
throw new com.aliyun.oss.ServiceException("微信小程序返回数据为空");
}
JsonResult jsonResult = JacksonUtil.json2pojo(airPortStr, JsonResult.class);
if (0 != jsonResult.getCode()) {
log.info("任务发现第一个问题,推送给微信小程序:返回失败,jsonResult:{}", jsonResult.getMsg());
throw new ServiceException("推送给微信小程序,返回失败");
}
log.info("任务发现第一个问题,推送给微信小程序:成功,inspection:{}, questionType:{}", inspection.getId(), questionType);
}
}

+ 80
- 52
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/oidc/AddOidcTenantService.java View File

@@ -8,8 +8,8 @@ import com.tuoheng.admin.entity.Role;
import com.tuoheng.admin.entity.Tenant;
import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.enums.ClientEnum;
import com.tuoheng.admin.enums.MarkEnum;
import com.tuoheng.admin.enums.DataPermissionEnum;
import com.tuoheng.admin.enums.MarkEnum;
import com.tuoheng.admin.mapper.RoleMapper;
import com.tuoheng.admin.mapper.TenantMapper;
import com.tuoheng.admin.mapper.UserMapper;
@@ -58,14 +58,14 @@ public class AddOidcTenantService {
// return result;
//}

result = this.addTenant(tenant);
result = this.editTenant(tenant);
if (0 != result.getCode()) {
log.info("创建租户业务:添加租户失败:{}", result.getMsg());
return result;
}

user.setTenantId(tenant.getId());
result = this.addUser(user);
result = this.editUser(user);
if (0 != result.getCode()) {
log.info("创建租户业务:添加用户失败:{}", result.getMsg());
return result;
@@ -115,28 +115,50 @@ public class AddOidcTenantService {
}

private Tenant buildTenant(CreateOidcTenantRequest request) {
// 创建租户数据
Tenant tenant = new Tenant();
tenant.setCode(request.getTenantCode());
tenant.setUsername(request.getUsername());
tenant.setName(request.getTenantName());
Tenant tenant = tenantMapper.selectOne(Wrappers.<Tenant>lambdaQuery().eq(Tenant::getUsername, request.getUsername()));
if (ObjectUtil.isEmpty(tenant)) {
// 创建租户数据
tenant = new Tenant();
tenant.setCode(request.getTenantCode());
tenant.setUsername(request.getUsername());
tenant.setName(request.getTenantName());
tenant.setProvinceCode(request.getProvinceCode());
tenant.setProvinceName(request.getProvinceName());
tenant.setDistrictCode(request.getDistrictCode());
tenant.setDistrictName(request.getDistrictName());
tenant.setCityCode(request.getCityCode());
tenant.setCityName(request.getCityName());
tenant.setFlag(1);
return tenant;
}
tenant.setProvinceCode(request.getProvinceCode());
tenant.setProvinceName(request.getProvinceName());
tenant.setDistrictCode(request.getDistrictCode());
tenant.setDistrictName(request.getDistrictName());
tenant.setCityCode(request.getCityCode());
tenant.setCityName(request.getCityName());
tenant.setFlag(0);
return tenant;
}

/**
* 添加租户
*/
private JsonResult addTenant(Tenant tenant) {
Integer count = tenantMapper.insert(tenant);
if (count <= 0) {
log.info("创建租户失败");
JsonResult.error("创建租户失败");
private JsonResult editTenant(Tenant tenant) {

if (1 == tenant.getFlag()) {
Integer count = tenantMapper.insert(tenant);
if (count <= 0) {
log.info("创建租户失败");
JsonResult.error("创建租户失败");
}
} else if (0 == tenant.getFlag()) {
tenant.setMark(1);
Integer count = tenantMapper.updateById(tenant);
if (count <= 0) {
log.info("更新租户失败");
JsonResult.error("更新租户失败");
}
}
return JsonResult.success(tenant);
}
@@ -145,28 +167,41 @@ public class AddOidcTenantService {
* 构建实体字段数据
*/
private User buildUser(CreateOidcTenantRequest request) {
// 创建用户数据
User user = new User();
user.setCode(request.getTenantCode());
user.setUsername(request.getUsername());
user.setRealname(request.getTenantName());
user.setNickname(request.getTenantName());
user.setPassword(CommonUtils.password(request.getPassword()));
user.setProvinceCode(request.getProvinceCode());
user.setCityCode(request.getCityCode());
user.setCityName(request.getCityName());
user.setDistrictCode(request.getDistrictCode());
user.setAvatar("imagedir/n1o1j9ndau_1670488066287.png");
User user = userMapper.selectOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, request.getUsername()));
if (ObjectUtil.isEmpty(user)) {
// 创建用户数据
user = new User();
user.setCode(request.getTenantCode());
user.setUsername(request.getUsername());
user.setRealname(request.getTenantName());
user.setNickname(request.getTenantName());
user.setPassword(CommonUtils.password(request.getPassword()));
user.setProvinceCode(request.getProvinceCode());
user.setCityCode(request.getCityCode());
user.setCityName(request.getCityName());
user.setDistrictCode(request.getDistrictCode());
user.setAvatar("imagedir/n1o1j9ndau_1670488066287.png");
for (ClientRoleDto clientRoleDto : request.getClientRoleDtoList()) {
log.info("请求参数:{}", clientRoleDto);
if (clientRoleDto.getClientId().contains("waterway")) {
user.setRoleId(clientRoleDto.getRoleId());
user.setClientId("1,2");
}
}
user.setDeptId("");
user.setStatus(1);
user.setCreateTime(DateUtils.now());
user.setFlag(1);
return user;
}
for (ClientRoleDto clientRoleDto : request.getClientRoleDtoList()) {
log.info("请求参数:{}", clientRoleDto);
if (clientRoleDto.getClientId().contains("freeway")) {
if (clientRoleDto.getClientId().contains("waterway")) {
user.setRoleId(clientRoleDto.getRoleId());
user.setClientId("1,2");
user.setClientId(clientRoleDto.getClientId());
}
}
user.setDeptId("");
user.setStatus(1);
user.setCreateTime(DateUtils.now());
user.setFlag(0);
return user;
}

@@ -192,28 +227,21 @@ public class AddOidcTenantService {
/**
* 添加用户
*/
private JsonResult addUser(User user) {
User userTmp = userMapper.selectOne(Wrappers.<User>lambdaQuery()
.eq(User::getMark, 1)
.eq(User::getStatus, 1)
.eq(User::getUsername, user.getUsername()));
if (ObjectUtil.isNotNull(userTmp)) {
log.info("创建租户用户,用户已存在,username:{}", user.getUsername());
return JsonResult.error("创建租户用户,用户已存在");
}

// 如果顶级部门存在,将该超级管理员与顶级部门关联
// Dept dept = deptMapper.selectOne(Wrappers.<Dept>lambdaQuery()
// .eq(Dept::getMark, 1)
// .eq(Dept::getTenantId, user.getTenantId())
// .eq(Dept::getPid, SystemConstant.ROOT_DEPT_PID));
// if (ObjectUtil.isNotNull(dept)) {
// user.setDeptId(dept.getId());
// }
Integer rowCount = userMapper.insert(user);
if (rowCount <= 0) {
log.info("创建租户用户失败,username:{}", user.getUsername());
return JsonResult.error("创建租户用户失败");
private JsonResult editUser(User user) {
if (1 == user.getFlag()) {
Integer rowCount = userMapper.insert(user);
if (rowCount <= 0) {
log.info("创建租户用户失败,username:{}", user.getUsername());
return JsonResult.error("创建租户用户失败");
}
} else if (0 == user.getFlag()) {
user.setMark(1);
Integer rowCount = userMapper.updateById(user);
if (rowCount <= 0) {
log.info("更新用户失败,username:{}", user.getUsername());
return JsonResult.error("更新用户失败");
}

}
return JsonResult.success();
}

+ 2
- 2
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/oidc/EditOidcUserPasswordService.java View File

@@ -34,7 +34,7 @@ public class EditOidcUserPasswordService {
//设置请求头
org.springframework.http.HttpHeaders resultRequestHeader = new HttpHeaders();
resultRequestHeader.add("Authorization", "Bearer " + SecurityUserUtils.token());
HttpEntity httpEntity = new HttpEntity(oidcUpdateUserPasswordRequest, resultRequestHeader);
//设置地址,飞手小程序 经过网关
String url = CommonConfig.oidcUrl + OidcUrlConstant.USER_UPDATEPASS;
@@ -53,7 +53,7 @@ public class EditOidcUserPasswordService {
log.error("oidc修改用户密码失败" + response.getBody());
return JsonResult.error(response.getBody().getMsg());
}
return JsonResult.success();
return JsonResult.success(null,"用户密码修改成功");
}

}

+ 8
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/IUserService.java View File

@@ -3,6 +3,7 @@ package com.tuoheng.admin.service.user;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.request.user.QueryUserPageListRequest;
import com.tuoheng.admin.request.user.UserEditPwdRequest;
import com.tuoheng.admin.request.user.UserInitRequest;
import com.tuoheng.admin.request.user.UserResetPwdRequest;
import com.tuoheng.common.core.utils.JsonResult;
@@ -88,4 +89,11 @@ public interface IUserService {
*/
JsonResult init(UserInitRequest request);

/**
* 修改密码
* @param request 参数
* @return
*/
JsonResult editPassword(UserEditPwdRequest request);

}

+ 17
- 4
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/UserServiceImpl.java View File

@@ -2,14 +2,15 @@ package com.tuoheng.admin.service.user;

import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.request.user.QueryUserPageListRequest;
import com.tuoheng.admin.request.user.UserEditPwdRequest;
import com.tuoheng.admin.request.user.UserInitRequest;
import com.tuoheng.admin.request.user.UserResetPwdRequest;
import com.tuoheng.admin.service.user.add.AddUserService;
import com.tuoheng.admin.service.user.delete.DeleteUserService;
import com.tuoheng.admin.service.user.init.SystemUserInitService;
import com.tuoheng.admin.service.user.query.QueryUserInfoByIdService;
import com.tuoheng.admin.service.user.query.QueryUserListByDeptIdService;
import com.tuoheng.admin.service.user.query.QueryUserPageListService;
import com.tuoheng.admin.service.user.update.ResetUserPasswordService;
import com.tuoheng.admin.service.user.update.UpdateUserPasswordService;
import com.tuoheng.admin.service.user.update.UpdateUserService;
import com.tuoheng.admin.service.user.update.UpdateUserStatusService;
@@ -17,8 +18,6 @@ import com.tuoheng.common.core.utils.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

@@ -53,6 +52,9 @@ public class UserServiceImpl implements IUserService {
@Autowired
private UpdateUserStatusService updateUserStatusService;

@Autowired
private ResetUserPasswordService resetUserPasswordService;

@Autowired
private UpdateUserPasswordService updateUserPasswordService;

@@ -137,7 +139,7 @@ public class UserServiceImpl implements IUserService {
*/
@Override
public JsonResult resetPassword(String id) {
return updateUserPasswordService.resetPassword(id);
return resetUserPasswordService.resetPassword(id);
}


@@ -157,4 +159,15 @@ public class UserServiceImpl implements IUserService {
return systemUserInitService.init(request);
}

/**
* 修改密码
*
* @param request 参数
* @return
*/
@Override
public JsonResult editPassword(UserEditPwdRequest request) {
return updateUserPasswordService.editPassword(request);
}

}

+ 88
- 0
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/update/ResetUserPasswordService.java View File

@@ -0,0 +1,88 @@
package com.tuoheng.admin.service.user.update;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.tuoheng.admin.constant.SystemConstant;
import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.enums.MarkEnum;
import com.tuoheng.admin.enums.code.user.EditUserPasswordCodeEnum;
import com.tuoheng.admin.mapper.UserMapper;
import com.tuoheng.admin.request.user.UserEditPwdRequest;
import com.tuoheng.admin.service.third.oidc.OidcService;
import com.tuoheng.admin.utils.CurrentUserUtil;
import com.tuoheng.common.core.utils.CommonUtils;
import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.common.core.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
* 修改用户密码业务层处理
*
* @author wanjing
* @team tuoheng
* @date 2022-12-16
*/
@Slf4j
@Service
public class ResetUserPasswordService {

@Autowired
private UserMapper userMapper;

@Autowired
private OidcService oidcService;

/**
* 修改用户密码数据
*
* @return
*/
public JsonResult resetPassword(String id) {
log.info("进入重置密码业务接口: id={}, status={}", id);
JsonResult result = this.check(id);
if (0 != result.getCode()) {
log.info("重置密码业务接口:校验失败:{}", result.getMsg());
return result;
}
User user = (User) result.getData();

// 修改oidc用户密码
result = oidcService.editUserPassword(user, SystemConstant.INIT_PASSWORD);
if (0 != result.getCode()) {
log.info("重置密码业务接口:修改oidc用户密码失败:{}", result.getMsg());
return result;
}

user.setPassword(CommonUtils.password(SystemConstant.INIT_PASSWORD));
Integer rowCount = userMapper.updateById(user);
if (rowCount <= 0) {
return JsonResult.error(EditUserPasswordCodeEnum.EDIT_IS_FAILED.getCode(), EditUserPasswordCodeEnum.EDIT_IS_FAILED.getMsg());
}
return JsonResult.success();
}

/**
* 检查参数
*
* @param id
* @return
*/
private JsonResult check(String id) {
if (StringUtils.isEmpty(id)) {
return JsonResult.error(EditUserPasswordCodeEnum.USER_ID_IS_NULL.getCode(), EditUserPasswordCodeEnum.USER_ID_IS_NULL.getMsg());
}
User user = userMapper.selectOne(new LambdaQueryWrapper<User>()
.eq(User::getId, id)
.eq(User::getMark, 1));

if (ObjectUtil.isNull(user)) {
return JsonResult.error(EditUserPasswordCodeEnum.USER_IS_NOT_EXIST.getCode(), EditUserPasswordCodeEnum.USER_IS_NOT_EXIST.getMsg());
}
if (!user.getTenantId().equals(CurrentUserUtil.getTenantId())) {
return JsonResult.error(EditUserPasswordCodeEnum.NON_TENANT_USER.getCode(), EditUserPasswordCodeEnum.NON_TENANT_USER.getMsg());
}
return JsonResult.success(user);
}
}

+ 76
- 26
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/update/UpdateUserPasswordService.java View File

@@ -2,10 +2,11 @@ package com.tuoheng.admin.service.user.update;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.tuoheng.admin.constant.SystemConstant;
import com.tuoheng.admin.entity.User;
import com.tuoheng.admin.enums.MarkEnum;
import com.tuoheng.admin.enums.code.user.EditUserPasswordCodeEnum;
import com.tuoheng.admin.mapper.UserMapper;
import com.tuoheng.admin.request.user.UserEditPwdRequest;
import com.tuoheng.admin.service.third.oidc.OidcService;
import com.tuoheng.admin.utils.CurrentUserUtil;
import com.tuoheng.common.core.utils.CommonUtils;
@@ -15,12 +16,15 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 修改用户密码业务层处理
*
* @author wanjing
* @author suqin
* @team tuoheng
* @date 2022-12-16
* @date 2024-01-04
*/
@Slf4j
@Service
@@ -37,51 +41,97 @@ public class UpdateUserPasswordService {
*
* @return
*/
public JsonResult resetPassword(String id) {
log.info("进入重置密码业务接口: id={}, status={}", id);
JsonResult result = this.check(id);
public JsonResult editPassword(UserEditPwdRequest request) {
log.info("进入修改用户密码业务接口");
User user = CurrentUserUtil.getUserInfo();
JsonResult result = this.check(request, user.getId());
if (0 != result.getCode()) {
log.info("重置密码业务接口:校验失败:{}", result.getMsg());
log.info("修改用户密码业务接口:校验失败:{}", result.getMsg());
return result;
}
User user = (User) result.getData();

// 修改oidc用户密码
result = oidcService.editUserPassword(user, SystemConstant.INIT_PASSWORD);
if (0 != result.getCode()) {
log.info("重置密码业务接口:修改oidc用户密码失败:{}", result.getMsg());
return result;
}

user.setPassword(CommonUtils.password(SystemConstant.INIT_PASSWORD));
user.setPassword(CommonUtils.password(request.getNewPasswordFirst()));
Integer rowCount = userMapper.updateById(user);
if (rowCount <= 0) {
return JsonResult.error(EditUserPasswordCodeEnum.EDIT_IS_FAILED.getCode(), EditUserPasswordCodeEnum.EDIT_IS_FAILED.getMsg());
}
// 修改oidc用户密码
result = oidcService.editUserPassword(user, request.getNewPasswordFirst());
if (0 != result.getCode()) {
log.info("修改用户密码业务接口:修改oidc用户密码失败:{}", result.getMsg());
return result;
}
return JsonResult.success();
}

/**
* 检查参数
*
* @param id
* @param request
* @param userId
* @return
*/
private JsonResult check(String id) {
if (StringUtils.isEmpty(id)) {
return JsonResult.error(EditUserPasswordCodeEnum.USER_ID_IS_NULL.getCode(), EditUserPasswordCodeEnum.USER_ID_IS_NULL.getMsg());
private JsonResult check(UserEditPwdRequest request, String userId) {
log.info("修改用户密码,进入参数校验");
if (StringUtils.isEmpty(request.getOldPassword())) {
return JsonResult.error(EditUserPasswordCodeEnum.OLD_PASSWORD_IS_NULL.getCode(), EditUserPasswordCodeEnum.OLD_PASSWORD_IS_NULL.getMsg());
}

//密码不为空且长度 >= 8
if (StringUtils.isEmpty(request.getNewPasswordFirst()) || request.getNewPasswordFirst().length() <8 || request.getNewPasswordFirst().length() >20) {
return JsonResult.error(EditUserPasswordCodeEnum.NEW_PASSWORD_INVALID_SIZE.getCode(), EditUserPasswordCodeEnum.NEW_PASSWORD_INVALID_SIZE.getMsg());
}

if (StringUtils.isEmpty(request.getNewPasswordSecond())) {
return JsonResult.error(EditUserPasswordCodeEnum.NEW_PASSWORD_IS_NULL.getCode(), EditUserPasswordCodeEnum.NEW_PASSWORD_IS_NULL.getMsg());
}

if (!request.getNewPasswordFirst().equals(request.getNewPasswordSecond())) {
return JsonResult.error(EditUserPasswordCodeEnum.TWO_PASSWORDS_NOT_MATCH.getCode(), EditUserPasswordCodeEnum.TWO_PASSWORDS_NOT_MATCH.getMsg());
}

//新密码是否为字母和数字组合
boolean flag = this.isLetterDigit(request.getNewPasswordFirst());
if(!flag){
return JsonResult.error(EditUserPasswordCodeEnum.NEW_PASSWORD_INVALID_VALUE.getCode(), EditUserPasswordCodeEnum.NEW_PASSWORD_INVALID_VALUE.getMsg());
}

User user = userMapper.selectOne(new LambdaQueryWrapper<User>()
.eq(User::getId, id)
.eq(User::getMark, 1));
.eq(User::getId, userId)
.eq(User::getMark, MarkEnum.VALID.getCode()));

if (ObjectUtil.isNull(user)) {
return JsonResult.error(EditUserPasswordCodeEnum.USER_IS_NOT_EXIST.getCode(), EditUserPasswordCodeEnum.USER_IS_NOT_EXIST.getMsg());
}
if (!user.getTenantId().equals(CurrentUserUtil.getTenantId())) {
return JsonResult.error(EditUserPasswordCodeEnum.NON_TENANT_USER.getCode(), EditUserPasswordCodeEnum.NON_TENANT_USER.getMsg());

if (!user.getPassword().equals(CommonUtils.password(request.getOldPassword()))) {
return JsonResult.error(EditUserPasswordCodeEnum.OLD_PASSWORD_INCORRECT.getCode(), EditUserPasswordCodeEnum.OLD_PASSWORD_INCORRECT.getMsg());
}
return JsonResult.success();
}


//密码是否为字母和数字组合
public boolean isLetterDigit(String str) {
boolean isDigit = false;//定义一个boolean值,用来表示是否包含数字
boolean isLetter = false;//定义一个boolean值,用来表示是否包含字母
boolean isSpecial = false;//定义一个boolean值,用来表示是否包含特殊字符

for (int i = 0; i < str.length(); i++) {
//判断是否含有特殊字符
Pattern p = Pattern.compile("[~`#$%^&*!@.,()\\\\{}|:;?<>]");
Matcher m = p.matcher(str);
if (Character.isDigit(str.charAt(i))) { //用char包装类中的判断数字的方法判断每一个字符
isDigit = true;
} else if (Character.isLetter(str.charAt(i))) { //用char包装类中的判断字母的方法判断每一个字符
isLetter = true;
}else if (m.find()) {//判断是否包含特殊字符
isSpecial = true; //m.find() 结果为 true 代表包含特殊字符 false 不包含
}
}
return JsonResult.success(user);

isSpecial = !isSpecial; //返回结果与m.find()结果正相反 用户输入的新密码不能包含特殊字符
boolean isRight = isDigit && isLetter && isSpecial ;
return isRight;
}

}

+ 7
- 0
tuoheng-service/tuoheng-admin/src/main/resources/application-dev.yml View File

@@ -146,6 +146,8 @@ tuoheng:
#airport配置地址
#airport-url: http://192.168.11.22:9060
airport-url: http://192.168.11.11:7011/airport/admin
#小程序配置地址
wechat-url: http://192.168.11.11:9119
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -155,6 +157,11 @@ tuoheng:
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

wx:
appId: wx8e25cc4a7eec55c6
appSecret: ff104538eb568d0d99405638e35af8ad
templateId: _7WZK-DEsBk4goXP2jThDk0u606Nz0YQBXWkej6BJfg

#阿里云
aliyuncsVod:
accessKeyId: LTAI5tE7KWN9fsuGU7DyfYF4

+ 9
- 3
tuoheng-service/tuoheng-admin/src/main/resources/application-local.yml View File

@@ -152,9 +152,9 @@ tuoheng:
#飞手平台地址
pilot-url: http://192.168.11.241:7011/pilot/web/
#airport配置地址
# airport-url: http://192.168.11.11:7011/airport/admin
# airport测试环境地址
airport-url: https://airport-test.t-aaron.com/airport/admin
airport-url: http://192.168.11.11:7011/airport/admin
#小程序配置地址
wechat-url: http://192.168.11.11:9119
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -164,6 +164,12 @@ tuoheng:
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

wx:
appId: wx8e25cc4a7eec55c6
appSecret: ff104538eb568d0d99405638e35af8ad
templateId: _7WZK-DEsBk4goXP2jThDk0u606Nz0YQBXWkej6BJfg


#阿里云
aliyuncsVod:
accessKeyId: LTAI5tE7KWN9fsuGU7DyfYF4

+ 7
- 0
tuoheng-service/tuoheng-admin/src/main/resources/application-prod.yml View File

@@ -146,6 +146,8 @@ tuoheng:
pilot-url: https://pilot.t-aaron.com/pilot/web/
#airport配置地址
airport-url: https://airport.t-aaron.com/airport/admin
#小程序配置地址
wechat-url: https://freeway-miniprogram.t-aaron.com
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -155,6 +157,11 @@ tuoheng:
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

wx:
appId: wx8e25cc4a7eec55c6
appSecret: ff104538eb568d0d99405638e35af8ad
templateId: _7WZK-DEsBk4goXP2jThDk0u606Nz0YQBXWkej6BJfg

#阿里云
aliyuncsVod:
accessKeyId: LTAI5tE7KWN9fsuGU7DyfYF4

+ 7
- 0
tuoheng-service/tuoheng-admin/src/main/resources/application-test.yml View File

@@ -146,6 +146,8 @@ tuoheng:
pilot-url: http://172.15.1.11:7011/pilot/web/
#airport配置地址
airport-url: https://airport-test.t-aaron.com/airport/admin
#小程序配置地址
wechat-url: https://freeway-miniprogram-test.t-aaron.com
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -155,6 +157,11 @@ tuoheng:
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

wx:
appId: wx8e25cc4a7eec55c6
appSecret: ff104538eb568d0d99405638e35af8ad
templateId: _7WZK-DEsBk4goXP2jThDk0u606Nz0YQBXWkej6BJfg

#阿里云
aliyuncsVod:
accessKeyId: LTAI5tE7KWN9fsuGU7DyfYF4

+ 9
- 1
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/InspectionController.java View File

@@ -57,5 +57,13 @@ public class InspectionController {
return iInspectionService.deleteById(id);
}


/**
* 根据任务id获取正在巡任务的直播
* @param id
* @return
*/
@GetMapping("/videoById/{id}")
public JsonResult getVideoById(@PathVariable("id") String id){
return iInspectionService.getVideoById(id);
}
}

+ 0
- 5
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/UserController.java View File

@@ -39,9 +39,4 @@ public class UserController {
return iUserService.resetPwd(dto);
}






}

+ 35
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/WxController.java View File

@@ -0,0 +1,35 @@
package com.tuoheng.miniprogram.controller;

import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.miniprogram.entity.wx.WxMessageRequest;
import com.tuoheng.miniprogram.service.IWxService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
@RestController
@Slf4j
@RequestMapping("/weiXin")
public class WxController {

@Autowired
private IWxService iWxService;

//根据code获取openId
@GetMapping("/getOpenId/{code}")
public JsonResult getOpenId(@PathVariable("code") String code) {
log.info("进入获取openId接口");
return iWxService.openid(code);
}

@PostMapping("/send/message")
public JsonResult sendMessage(@RequestBody WxMessageRequest wxMessageRequest) {
log.info("进入发送消息接口,WxMessageRequest={}", wxMessageRequest);
return iWxService.sendMessage(wxMessageRequest);
}

}

+ 12
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/dao/LiveChannelMapper.java View File

@@ -0,0 +1,12 @@
package com.tuoheng.miniprogram.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tuoheng.miniprogram.entity.LiveChannel;

/**
* @Author suqin
* @Date 2023/01/04
*/

public interface LiveChannelMapper extends BaseMapper<LiveChannel> {
}

+ 11
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/dao/UserAuthorizeMapper.java View File

@@ -0,0 +1,11 @@
package com.tuoheng.miniprogram.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tuoheng.miniprogram.entity.UserAuthorize;

/**
* @Author ChengWang
* @Date 2023/6/26
*/
public interface UserAuthorizeMapper extends BaseMapper<UserAuthorize> {
}

+ 74
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/LiveChannel.java View File

@@ -0,0 +1,74 @@
package com.tuoheng.miniprogram.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.tuoheng.common.core.common.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
* @Author ChengWang
* @Date 2022/12/1
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("th_live_channel")
public class LiveChannel extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 租户ID
*/
private String tenantId;

/**
* 部门id
*/
private String deptId;

/**
* 巡检任务ID
*/
private String inspectionId;

/**
*通道编号
*/
private String channelCode;

/**
* 直播通道名称
*/
private String name;

/**
*无人机推流地址
*/
private String pushUrl;

/**
* 无人机拉流地址
*/
private String pullUrl;

/**
* AI推流地址
*/
private String aipushUrl;

/**
* AI拉流地址
*/
private String aipullUrl;

/**
* 备注
*/
private String note;

/**
*状态:1正常 2停用
*/
private Integer status;

}

+ 10
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/User.java View File

@@ -233,4 +233,14 @@ public class User implements Serializable {
* 数据权限:1:查看所有部门数据;2:查看本部门及子部门;3:查看本部门数据;
*/
private Integer dataPermission;

/**
* 微信授权标识 1:未授权 2授权
*/
private Integer authorize;

/**
* 订阅次数 1:订阅一次 2非一次订阅
*/
private Integer subscribeTimes;
}

+ 40
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/UserAuthorize.java View File

@@ -0,0 +1,40 @@
package com.tuoheng.miniprogram.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.tuoheng.common.core.common.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
* @Author ChengWang
* @Date 2022/11/16
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("th_user_authorize")
public class UserAuthorize extends BaseEntity {
private static final long serialVersionUID = 1L;

/**
* 用户id
*/
private String userId;

/**
* 用户的openId
*/
private String openId;

/**
* 唯一标识
*/
private String unionId;

/**
* accessToken值(先不存)
*/
private String accessToken;

}

+ 20
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/dto/TemplateMinDto.java View File

@@ -0,0 +1,20 @@
package com.tuoheng.miniprogram.entity.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TemplateMinDto {

/**
* 填充信息
*/
private String value;
}

+ 46
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/wx/WxMessageRequest.java View File

@@ -0,0 +1,46 @@
package com.tuoheng.miniprogram.entity.wx;

import lombok.Data;

/**
* @Author ChengWang
* @Date 2023/6/26
*/
@Data
public class WxMessageRequest {

/**
* 任务id
*/
private String inspectionId;

/**
* 部门id
*/
private String deptId;

/**
* 问题id
*/
private String questionId;

/**
* 租户id
*/
private String tenantId;

/**
* 上报时间
*/
private String createTime;

/**
*问题标题
*/
private String questionName;

/**
* 问题描述
*/
private String questionDesc;
}

+ 23
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/AuthorizeStatusEnum.java View File

@@ -0,0 +1,23 @@
package com.tuoheng.miniprogram.enums;

import lombok.Getter;

/**
* 任务状态枚举
*/
public enum AuthorizeStatusEnum {
//1未授权 2授权
AUTHORIZE_DOWN(1,"未授权"),
AUTHORIZE_ON(2,"授权");

AuthorizeStatusEnum(int code, String description){
this.code = code;
this.description = description;
}

@Getter
private int code;

@Getter
private String description;
}

+ 32
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/InspectionStatusEnum.java View File

@@ -0,0 +1,32 @@
package com.tuoheng.miniprogram.enums;

import lombok.Getter;

/**
* 巡检任务状态:5任务待飞行 7飞行失败 10任务飞行中 15任务飞行完成'
*
* @author wanjing
* @team tuoheng
* @date 2022-11-23
*/
public enum InspectionStatusEnum {

WAIT_FLIGHT(5,"待执行"),
PREPARING(6,"准备中"),
FLIGHT_FAILED(7,"飞行失败"),
IN_FLIGHT(10,"飞行中"),
FLIGHT_COMPLETED(15,"飞行完成"),
FLIGHT_CANCELED(16,"已取消");

InspectionStatusEnum(int code, String description){
this.code = code;
this.description = description;
}

@Getter
private int code;

@Getter
private String description;

}

+ 23
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/SubscribeTimesEnum.java View File

@@ -0,0 +1,23 @@
package com.tuoheng.miniprogram.enums;

import lombok.Getter;

/**
* 任务状态枚举
*/
public enum SubscribeTimesEnum {
//1未授权 2授权
SUBSCRIBE_TIMES_ONE(1,"订阅一次"),
SUBSCRIBE_TIMES_NO_ONE(2,"非一次订阅");

SubscribeTimesEnum(int code, String description){
this.code = code;
this.description = description;
}

@Getter
private int code;

@Getter
private String description;
}

+ 39
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/UserAuthorizeEnum.java View File

@@ -0,0 +1,39 @@
package com.tuoheng.miniprogram.enums;

public enum UserAuthorizeEnum {

UNAUTHORIZED(10001, "用户未授权"),
OPEN_ID_IS_NULL(10002, "openId为空");

/**
* 标识码
*/
private Integer code;

/**
* 描述
*/
private String msg;

UserAuthorizeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}

public Integer getCode() {
return code;
}

public void setCode(Integer code) {
this.code = code;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

}

+ 51
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/WeiXinRequestEnum.java View File

@@ -0,0 +1,51 @@
package com.tuoheng.miniprogram.enums;

/**
* 获取子部门列表返回码
* 模块代码:20(部门管理)
* 接口代码:06 (获取子部门列表)
*
* @author wanjing
* @team tuoheng
* @date 2022-11-22
*/
public enum WeiXinRequestEnum {

INSPECTION_ID_IS_NULL(120010, "任务id为空"),
DEPT_ID_IS_NULL(120011, "问题id为空"),
TENANT_ID_NOT_EXIST(120012, "租户id为空"),
CREATE_TIME_IS_NULL(120013, "上报时间为空"),
INSPECTION_NAME_NOT_EXIST(120014, "问题标题不存在"),
QUESTION_DESC_NOT_EXIST(120015, "问题标题不存在");
/**
* 错误码
*/
private int code;

/**
* 错误信息
*/
private String msg;

WeiXinRequestEnum(int code, String msg){
this.code = code;
this.msg = msg;
}

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

}

+ 48
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/code/inspection/QueryVideoServiceEnum.java View File

@@ -0,0 +1,48 @@
package com.tuoheng.miniprogram.enums.code.inspection;

/**
* @Author ChengWang
* @Date 2022/12/1
*/
public enum QueryVideoServiceEnum {

QUERY_IS_FAILED(1230700, "获取数据失败"),
INSPECTION_ID_IS_NULL(1230701, "任务id为空"),
LIVE_CHANNEL_IS_NOT_EXIST(1230702, "直播通道为空"),
AIPULL_URL_IS_NOT_NULL(1230703, "直播地址为空"),
AIVIDEO_URL_IS_NOT_NULL(1230704, "回放地址为空"),
INSPECTION_IS_NOT_EXIST(1230705,"没有正在直播的任务"),
AIRPORT_ID_IS_NULL(1230706, "机场id为空");

/**
* 错误码
*/
private int code;

/**
* 错误信息
*/
private String msg;

QueryVideoServiceEnum(int code, String msg){
this.code = code;
this.msg = msg;
}

public int getCode() {
return code;
}

public void setCode(int code) {
this.code = code;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}

}

+ 39
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/param/WxSendMessageParam.java View File

@@ -0,0 +1,39 @@
package com.tuoheng.miniprogram.param;

import com.tuoheng.miniprogram.entity.dto.TemplateMinDto;
import lombok.Data;

import java.util.Map;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
@Data
public class WxSendMessageParam {

/**
* 接收者openId
*/
private String touser;

/**
* 订阅模板id
*/
private String template_id;

/**
* 点击模板卡片跳转页面
*/
private String page;

/**
* 跳转小程序类型 developer为开发版;trial为体验版;formal为正式版;默认为正式版
*/
//private String miniprogram_state;

/**
* 填充信息
*/
private Map<String, TemplateMinDto> data;
}

+ 8
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/IInspectionService.java View File

@@ -19,4 +19,12 @@ public interface IInspectionService {


JsonResult deleteById(String id);

/**
* 根据机场id获取正在巡任务的直播
* @param id
* @return
*/
JsonResult getVideoById(String id);

}

+ 26
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/IWxService.java View File

@@ -0,0 +1,26 @@
package com.tuoheng.miniprogram.service;

import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.miniprogram.entity.wx.WxMessageRequest;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
public interface IWxService {

/**
* 根据code获取openId
* @param code
* @return
*/
JsonResult openid(String code);

/**
* 发送消息
* @param wxMessageRequest
* @return
*/
JsonResult sendMessage(WxMessageRequest wxMessageRequest);

}

+ 13
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/InspectionServiceImpl.java View File

@@ -60,6 +60,9 @@ public class InspectionServiceImpl implements IInspectionService {
@Autowired
private GetAirLineListService getAirLineListService;

@Autowired
private QueryVideoService queryVideoService;

/**
* 任务列表(分页)
*
@@ -250,4 +253,14 @@ public class InspectionServiceImpl implements IInspectionService {
Map<Integer, AirportLineVo> airportLineMap = airportLineVoList.stream().collect(Collectors.toMap(AirportLineVo::getId, Function.identity()));
return airportLineMap;
}

/**
* 根据机场id获取正在巡任务的直播
* @param id
* @return
*/
@Override
public JsonResult getVideoById(String id) {
return queryVideoService.getVideoById(id);
}
}

+ 81
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/QueryVideoService.java View File

@@ -0,0 +1,81 @@
package com.tuoheng.miniprogram.service.impl;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tuoheng.common.core.config.common.CommonConfig;
import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.common.core.utils.StringUtils;
import com.tuoheng.miniprogram.dao.InspectionMapper;
import com.tuoheng.miniprogram.dao.LiveChannelMapper;
import com.tuoheng.miniprogram.entity.Inspection;
import com.tuoheng.miniprogram.entity.LiveChannel;
import com.tuoheng.miniprogram.enums.InspectionStatusEnum;
import com.tuoheng.miniprogram.enums.MarkEnum;
import com.tuoheng.miniprogram.enums.code.inspection.QueryVideoServiceEnum;
import com.tuoheng.miniprogram.utils.CurrentUserUtil;
import com.tuoheng.miniprogram.vo.InspectionVideoVo;
import com.tuoheng.miniprogram.vo.LiveChannelVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* 根据任务id查询视频直播和回放
*
* @Author ChengWang
* @Date 2022/11/29
*/
@Service
@Slf4j
public class QueryVideoService {

@Autowired
private InspectionMapper inspectionMapper;

@Autowired
private LiveChannelMapper liveChannelMapper;

public JsonResult getVideoById(String id) {
if (StringUtils.isEmpty(id)) {
return JsonResult.error(QueryVideoServiceEnum.INSPECTION_ID_IS_NULL.getCode(), QueryVideoServiceEnum.INSPECTION_ID_IS_NULL.getMsg());
}

//获取租户id
String tenantId = CurrentUserUtil.getTenantId();
if (StringUtils.isEmpty(tenantId)) {
return JsonResult.error("租户id为空");
}

//根据id查询对应的任务
Inspection inspection = inspectionMapper.selectById(id);
if (ObjectUtil.isNull(inspection)) {
return JsonResult.error(QueryVideoServiceEnum.INSPECTION_IS_NOT_EXIST.getCode(), QueryVideoServiceEnum.INSPECTION_IS_NOT_EXIST.getMsg());

}
LiveChannelVo liveChannelVo = new LiveChannelVo();
BeanUtils.copyProperties(inspection, liveChannelVo);
//任务状态为任务飞行中10视频直播
if (10 == inspection.getStatus()) {
LiveChannel liveChannel = liveChannelMapper.selectOne(new LambdaQueryWrapper<LiveChannel>()
.eq(LiveChannel::getMark, 1)
.eq(LiveChannel::getInspectionId, inspection.getId())
.eq(LiveChannel::getStatus, 1));
if (ObjectUtil.isNull(liveChannel)) {
return JsonResult.error(QueryVideoServiceEnum.LIVE_CHANNEL_IS_NOT_EXIST.getCode(), QueryVideoServiceEnum.LIVE_CHANNEL_IS_NOT_EXIST.getMsg());
}
if (StringUtils.isEmpty(liveChannel.getAipullUrl())) {
return JsonResult.error(QueryVideoServiceEnum.AIPULL_URL_IS_NOT_NULL.getCode(), QueryVideoServiceEnum.AIPULL_URL_IS_NOT_NULL.getMsg());
}
liveChannelVo.setAipullUrl(liveChannel.getAipullUrl());

}

return JsonResult.success(liveChannelVo);

}
}

+ 274
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/WxServiceImpl.java View File

@@ -0,0 +1,274 @@
package com.tuoheng.miniprogram.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.tuoheng.common.core.config.common.CommonConfig;
import com.tuoheng.common.core.utils.DateUtils;
import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.common.core.utils.StringUtils;
import com.tuoheng.miniprogram.dao.UserAuthorizeMapper;
import com.tuoheng.miniprogram.dao.UserMapper;
import com.tuoheng.miniprogram.entity.User;
import com.tuoheng.miniprogram.entity.UserAuthorize;
import com.tuoheng.miniprogram.entity.dto.TemplateMinDto;
import com.tuoheng.miniprogram.entity.wx.WxMessageRequest;
import com.tuoheng.miniprogram.enums.*;
import com.tuoheng.miniprogram.param.WxSendMessageParam;
import com.tuoheng.miniprogram.service.IWxService;
import com.tuoheng.miniprogram.utils.CurrentUserUtil;
import com.tuoheng.miniprogram.utils.GetOpenIdUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
* @Author ChengWang
* @Date 2023/6/23
*/
@Service
@Slf4j
public class WxServiceImpl implements IWxService {

@Autowired
private UserAuthorizeMapper userAuthorizeMapper;

@Autowired
private UserMapper userMapper;

private static String accessToken;

private static long expiresTime;


/**
* 根据code获取openId
*
* @param code
* @return
*/
@Override
public JsonResult openid(String code) {
String userId = CurrentUserUtil.getUserId();
String openidResult = GetOpenIdUtil.getopenid(code, CommonConfig.appId, CommonConfig.appSecret);
if (null != JSONObject.parseObject(openidResult).getInteger("errcode") ||
StringUtils.isNotEmpty(JSONObject.parseObject(openidResult).getString("errmsg"))) {
return JsonResult.error(JSONObject.parseObject(openidResult).getInteger("errcode").intValue(),
JSONObject.parseObject(openidResult).getString("errmsg"));
}
String openid = JSONObject.parseObject(openidResult).getString("openid");
if (StringUtils.isEmpty(openid)) {
log.error("获取openid失败:", openidResult);
return JsonResult.error("获取openid失败");
}
//根据当前登录用户id查询授权表是否存在一条授权数据
UserAuthorize beforeUserAuthorize = userAuthorizeMapper.selectOne(Wrappers.<UserAuthorize>lambdaQuery()
.eq(UserAuthorize::getUserId, userId)
.eq(UserAuthorize::getMark, MarkEnum.VALID.getCode()));
if (ObjectUtil.isNull(beforeUserAuthorize)) {
UserAuthorize userAuthorize = new UserAuthorize();
if (StringUtils.isNotEmpty(openid)) {
//查询出来openId数据入库
userAuthorize.setOpenId(openid);
}
userAuthorize.setUserId(userId);
userAuthorize.setCreateTime(DateUtils.now());
if (StringUtils.isNotEmpty(userId)) {
userAuthorize.setCreateUser(userId);
}
int result = userAuthorizeMapper.insert(userAuthorize);

if (result <= 0) {
return JsonResult.error("授权数据入库失败");
}
}
//关联登录用户,已经做过授权 修改授权标识
User user = CurrentUserUtil.getUserInfo();
if (ObjectUtil.isEmpty(user)) {
return JsonResult.error(UserCodeEnum.USER_IS_NULL.getCode(), UserCodeEnum.USER_IS_NULL.getMsg());
}
user.setAuthorize(AuthorizeStatusEnum.AUTHORIZE_ON.getCode());
user.setUpdateTime(DateUtils.now());
user.setUpdateUser(userId);
int count = userMapper.updateById(user);
if (count <= 0) {
return JsonResult.error("用户授权标识更新失败");
}
return JsonResult.success();
}

/**
* 获取access_code值
*
* @return
*/
public String getAccessToken() {
//判断accessToken是否已经过期,如果国企需要重新获取
if (accessToken == null || expiresTime < System.currentTimeMillis()) {
RestTemplate restTemplate = new RestTemplate();
Map<String, String> params = new HashMap<>(2);
params.put("APPID", CommonConfig.appId);
params.put("APPSECRET", CommonConfig.appSecret);
ResponseEntity<String> responseEntity = restTemplate.getForEntity("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params);
String body = responseEntity.getBody();
JSONObject object = JSON.parseObject(body);
Integer errcode = object.getInteger("errcode");
if (errcode != null && errcode != 0) {
String errmsg = object.getString("errmsg");
log.info("请求accessToken失败,返回码:" + errcode + "错误信息:" + errmsg);
throw new RuntimeException("请求获取accessToken失败");
}
//缓存accessToken
accessToken = object.getString("access_token");
log.info("获取的accessToken的值:" + accessToken);
//设置accessToken的失效时间
Long expires_in = object.getLong("expires_in");
//失效时间 = 当前时间+有效期(提前一分钟,也可以不提前)
expiresTime = System.currentTimeMillis() + (expires_in - 60) * 1000;
}

return accessToken;
}

/**
* 发送消息
*
* @param wxMessageRequest
* @return
*/
@Override
public JsonResult sendMessage(WxMessageRequest wxMessageRequest) {
wxMessageRequest.setQuestionDesc("发现疑似问题待处理,请及时查看。");
JsonResult result = this.check(wxMessageRequest);
if (result.getCode() != 0) {
//正常返回,信息提示
return JsonResult.success(result.getCode(), result.getMsg());
}
List<User> userList = (List<User>) result.getData();
boolean isSend = false;
//对用户进行遍历推送消息
for (User user : userList) {
String userId = user.getId();
if (user.getAuthorize() == AuthorizeStatusEnum.AUTHORIZE_DOWN.getCode()) {
//本次结束,进入下次循环
continue;
}
if (user.getAuthorize() == AuthorizeStatusEnum.AUTHORIZE_ON.getCode()
&& user.getSubscribeTimes() == SubscribeTimesEnum.SUBSCRIBE_TIMES_NO_ONE.getCode()) {
continue;
}
//获取当前登录openId
UserAuthorize userAuthorize = userAuthorizeMapper.selectOne(Wrappers.<UserAuthorize>lambdaQuery()
.eq(UserAuthorize::getUserId, userId)
.eq(UserAuthorize::getMark, MarkEnum.VALID.getCode()));
//授权数据校验
JsonResult jsonResult = this.getUserAuthorize(userAuthorize);
if (jsonResult.getCode() != 0) {
continue;
}
String openId = userAuthorize.getOpenId();
RestTemplate restTemplate = new RestTemplate();
//发送消息订阅
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + getAccessToken();
WxSendMessageParam param = new WxSendMessageParam();
param.setPage("/package_question/pages/taskList/taskList");
//param.setMiniprogram_state("formal");
param.setTouser(openId);
param.setTemplate_id(CommonConfig.templateId);
Map<String, TemplateMinDto> data = new HashMap<>(3);
//消息模板{{time12.DATA}} {{thing4.DATA}} {{thing13.DATA}} 时间格式一定是这样的2022-01-13 02:31:36
ResponseEntity<String> responseEntity = null;
try {
data.put("time12", new TemplateMinDto(wxMessageRequest.getCreateTime()));
data.put("thing4", new TemplateMinDto(wxMessageRequest.getQuestionName()));
data.put("thing13", new TemplateMinDto(wxMessageRequest.getQuestionDesc()));
param.setData(data);

responseEntity = restTemplate.postForEntity(url, param, String.class);
String messageBody = responseEntity.getBody();
Integer errcode = JSONObject.parseObject(messageBody).getInteger("errcode").intValue();
if (errcode != null && errcode == 0) {
//修改用户订阅次数
user.setSubscribeTimes(SubscribeTimesEnum.SUBSCRIBE_TIMES_NO_ONE.getCode());
int count = userMapper.updateById(user);
if (count <= 0) {
throw new RuntimeException("更新用户订阅次数失败");
}
} else if (errcode != null && errcode != 0) {
String errmsg = JSONObject.parseObject(messageBody).getString("errmsg");
log.info("请求accessToken失败,返回码:" + errcode.intValue() + "错误信息:" + errmsg);
//return JsonResult.error(errcode.intValue(),errmsg);
}
JSONObject jsonObject = JSON.parseObject(messageBody);
if (Objects.nonNull(jsonObject)) {
log.info("openId:" + openId + "发送消息返回内容:" + jsonObject.toJSONString());
}
isSend = true;
} catch (RestClientException e) {
log.info("openId:" + openId + "发送消息异常报错:" + e);
e.printStackTrace();
}

}

return JsonResult.success(isSend);

}

/**
* 校验权限数据
*
* @param userAuthorize
* @return
*/
private JsonResult getUserAuthorize(UserAuthorize userAuthorize) {
if (ObjectUtil.isNull(userAuthorize)) {
return JsonResult.error(UserAuthorizeEnum.UNAUTHORIZED.getCode(), UserAuthorizeEnum.UNAUTHORIZED.getMsg());
}
if (StringUtils.isEmpty(userAuthorize.getOpenId())) {
return JsonResult.error(UserAuthorizeEnum.OPEN_ID_IS_NULL.getCode(), UserAuthorizeEnum.OPEN_ID_IS_NULL.getMsg());
}
return JsonResult.success();
}

private JsonResult check(WxMessageRequest wxMessageRequest) {
//传参校验
if (StringUtils.isEmpty(wxMessageRequest.getTenantId())) {
return JsonResult.error(WeiXinRequestEnum.TENANT_ID_NOT_EXIST.getCode(), WeiXinRequestEnum.TENANT_ID_NOT_EXIST.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getInspectionId())) {
return JsonResult.error(WeiXinRequestEnum.INSPECTION_ID_IS_NULL.getCode(), WeiXinRequestEnum.INSPECTION_ID_IS_NULL.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getDeptId())) {
return JsonResult.error(WeiXinRequestEnum.DEPT_ID_IS_NULL.getCode(), WeiXinRequestEnum.DEPT_ID_IS_NULL.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getCreateTime())) {
return JsonResult.error(WeiXinRequestEnum.CREATE_TIME_IS_NULL.getCode(), WeiXinRequestEnum.CREATE_TIME_IS_NULL.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getQuestionName())) {
return JsonResult.error(WeiXinRequestEnum.INSPECTION_NAME_NOT_EXIST.getCode(), WeiXinRequestEnum.INSPECTION_NAME_NOT_EXIST.getMsg());
}
if (StringUtils.isEmpty(wxMessageRequest.getQuestionDesc())) {
return JsonResult.error(WeiXinRequestEnum.QUESTION_DESC_NOT_EXIST.getCode(), WeiXinRequestEnum.QUESTION_DESC_NOT_EXIST.getMsg());
}
//根据租户id查询用户列表
List<User> users = userMapper.selectList(Wrappers.<User>lambdaQuery()
.eq(User::getMark, MarkEnum.VALID.getCode())
.eq(User::getDeptId, wxMessageRequest.getDeptId())
.eq(User::getStatus, 1));
if (CollectionUtil.isEmpty(users) || users.size() == 0) {
return JsonResult.error("此部门下没有用户");
}
return JsonResult.success(users);
}
}

+ 49
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/utils/GetOpenIdUtil.java View File

@@ -0,0 +1,49 @@
package com.tuoheng.miniprogram.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;

/**
* 微信登陆工具类
*/
public class GetOpenIdUtil {

public static String getopenid(String code, String appid, String secret) {
BufferedReader in = null;
//appid和secret是开发者分别是小程序ID和小程序密钥,开发者通过微信公众平台-》设置-》开发设置就可以直接获取,
String url = "https://api.weixin.qq.com/sns/jscode2session?appid="
+ appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
try {
URL weChatUrl = new URL(url);
// 打开和URL之间的连接
URLConnection connection = weChatUrl.openConnection();
// 设置通用的请求属性
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
// 建立实际的连接
connection.connect();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}

+ 21
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/vo/InspectionVideoVo.java View File

@@ -0,0 +1,21 @@
package com.tuoheng.miniprogram.vo;

import lombok.Data;

/**
* @Author ChengWang
* @Date 2023/3/20
*/
@Data
public class InspectionVideoVo {

/**
* 直播地址
*/
private String aipullUrl;

/**
* 直播任务id
*/
private String inspectionId;
}

+ 43
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/vo/LiveChannelVo.java View File

@@ -0,0 +1,43 @@
package com.tuoheng.miniprogram.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

/**
* @Author suqin
* @Date 2024/01/04
*/
@Data
public class LiveChannelVo {

/**
* 任务执行时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date executionStartTime;

/**
* 任务名称
*/
private String name;

/**
* 任务编号
*/
private String code;

/**
* 巡检任务类型 0周期任务 1 单次任务|周期子任务
*/
private Integer type;

/**
* 直播地址
*/
private String aipullUrl;

}

+ 9
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/application-dev.yml View File

@@ -81,6 +81,8 @@ tuoheng:
pilot-url: http://192.168.11.11:7011/pilot/web/
#airport配置地址
airport-url: http://192.168.11.22:9060
#小程序配置地址
wechat-url: http://192.168.11.11:9119
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -89,6 +91,13 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

#小程序
wx:
appId: wxfa4ec86caec22034
appSecret: dd8411aaa8fcfb251518d5021adb059d
templateId: tOewJK9MXIbfXovwCb72KLpCdBp1spL6pQ2F3LTQkSI

xxl:
enable: true
job:

+ 9
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/application-local.yml View File

@@ -81,6 +81,8 @@ tuoheng:
pilot-url: http://192.168.11.11:7011/pilot/web/
#airport配置地址
airport-url: http://192.168.11.22:9060
#小程序配置地址
wechat-url: http://192.168.11.11:9119
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -89,6 +91,13 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

#小程序
wx:
appId: wxfa4ec86caec22034
appSecret: dd8411aaa8fcfb251518d5021adb059d
templateId: tOewJK9MXIbfXovwCb72KLpCdBp1spL6pQ2F3LTQkSI

xxl:
enable: true
job:

+ 9
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/application-prod.yml View File

@@ -81,6 +81,8 @@ tuoheng:
pilot-url: http://192.168.11.11:7011/pilot/web/
#airport配置地址
airport-url: https://airport.t-aaron.com/airport/admin
#小程序配置地址
wechat-url: https://freeway-miniprogram.t-aaron.com
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -89,6 +91,13 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

#小程序
wx:
appId: wxfa4ec86caec22034
appSecret: dd8411aaa8fcfb251518d5021adb059d
templateId: tOewJK9MXIbfXovwCb72KLpCdBp1spL6pQ2F3LTQkSI

## 配置feign熔断
#feign:
# circuitbreaker:

+ 9
- 14
tuoheng-service/tuoheng-miniprogram/src/main/resources/application-test.yml View File

@@ -81,6 +81,8 @@ tuoheng:
pilot-url: http://192.168.11.11:7011/pilot/web/
#airport配置地址
airport-url: https://airport-test.t-aaron.com/airport/admin
#小程序配置地址
wechat-url: https://freeway-miniprogram-test.t-aaron.com
# 文件配置
uploads:
#上传的服务器上的映射文件夹
@@ -89,20 +91,13 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/
xxl:
enable: true
job:
admin:
addresses: http://172.15.1.11:8110/xxl-job-admin
accessToken: tuoheng
executor:
appname: xxl-job-executor-freeway-miniprogram
address:
ip:
# 多个后台,端口号不能相同
port: 9991
logpath: /data/java/logs/xxl-job/jobhandler
logretentiondays: 15

#小程序
wx:
appId: wxfa4ec86caec22034
appSecret: dd8411aaa8fcfb251518d5021adb059d
templateId: tOewJK9MXIbfXovwCb72KLpCdBp1spL6pQ2F3LTQkSI

## 配置feign熔断
#feign:
# circuitbreaker:

+ 7
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/LiveChannelMapper.xml View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tuoheng.miniprogram.dao.LiveChannelMapper">

</mapper>

+ 10
- 0
tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/UserAuthorizeMapper.xml View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tuoheng.miniprogram.dao.UserAuthorizeMapper">




</mapper>

+ 17
- 0
tuoheng-service/tuoheng-miniprogram/src/test/java/com/tuoheng/miniprogram/utils/GetOpenIdUtilTest.java View File

@@ -0,0 +1,17 @@
package com.tuoheng.miniprogram.utils;

import com.alibaba.fastjson.JSONObject;

public class GetOpenIdUtilTest {

public static void main(String[] args) {
System.out.println("start");
String openidJson = GetOpenIdUtil.getopenid("061pTj0w3j6DaZ23141w3X12aP0pTj04", "wxd0f247d7272ca1b7", "541002e33cd4b011d4c13954ed34efdb");
System.out.println("openid:" + openidJson);
JSONObject jsonObject = JSONObject.parseObject(openidJson);
String openid = jsonObject.getString("openid");
System.out.println("openid:" + openid);
System.out.println("end");
}

}

Loading…
Cancel
Save