Browse Source

Merge branch 'release' of gitadmin/tuoheng_freeway into master

master
wanjing 8 months ago
parent
commit
f6a5cb7e23
63 changed files with 1909 additions and 184 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. +4
    -8
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/flightdata/query/QueryFlightDataTrackService.java
  11. +14
    -15
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/inspection/query/QueryInspectionPageListService.java
  12. +22
    -1
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/dsp/DspCallbackServiceImpl.java
  13. +53
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/dsp/NoticeWeChatMiniProgramService.java
  14. +80
    -52
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/oidc/AddOidcTenantService.java
  15. +2
    -2
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/third/oidc/EditOidcUserPasswordService.java
  16. +8
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/IUserService.java
  17. +17
    -4
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/UserServiceImpl.java
  18. +88
    -0
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/update/ResetUserPasswordService.java
  19. +76
    -26
      tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/user/update/UpdateUserPasswordService.java
  20. +7
    -0
      tuoheng-service/tuoheng-admin/src/main/resources/application-dev.yml
  21. +9
    -3
      tuoheng-service/tuoheng-admin/src/main/resources/application-local.yml
  22. +7
    -0
      tuoheng-service/tuoheng-admin/src/main/resources/application-prod.yml
  23. +7
    -0
      tuoheng-service/tuoheng-admin/src/main/resources/application-test.yml
  24. +16
    -1
      tuoheng-service/tuoheng-admin/src/test/java/com/tuoheng/admin/service/DspCallbackServiceTest.java
  25. +9
    -1
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/InspectionController.java
  26. +0
    -5
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/UserController.java
  27. +40
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/controller/WxController.java
  28. +12
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/dao/LiveChannelMapper.java
  29. +11
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/dao/UserAuthorizeMapper.java
  30. +74
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/LiveChannel.java
  31. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/User.java
  32. +40
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/UserAuthorize.java
  33. +20
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/dto/TemplateMinDto.java
  34. +2
    -6
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/query/InspectionQuery.java
  35. +46
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/wx/WxMessageRequest.java
  36. +23
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/AuthorizeStatusEnum.java
  37. +32
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/InspectionStatusEnum.java
  38. +23
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/SubscribeTimesEnum.java
  39. +39
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/UserAuthorizeEnum.java
  40. +3
    -1
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/UserCodeEnum.java
  41. +51
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/WeiXinRequestEnum.java
  42. +48
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/code/inspection/QueryVideoServiceEnum.java
  43. +39
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/param/WxSendMessageParam.java
  44. +8
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/IInspectionService.java
  45. +35
    -23
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/InspectionServiceImpl.java
  46. +81
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/impl/QueryVideoService.java
  47. +33
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/IWxService.java
  48. +76
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/WxServiceImpl.java
  49. +113
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/bind/WeiXinBindService.java
  50. +54
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/check/WeiXinCheckAuthorizeService.java
  51. +200
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/send/WeiXinSendMessageService.java
  52. +49
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/utils/GetOpenIdUtil.java
  53. +21
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/vo/InspectionVideoVo.java
  54. +43
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/vo/LiveChannelVo.java
  55. +24
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/vo/WxAuthorizeVo.java
  56. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-dev.yml
  57. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-local.yml
  58. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-prod.yml
  59. +10
    -14
      tuoheng-service/tuoheng-miniprogram/src/main/resources/application-test.yml
  60. +9
    -17
      tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/InspectionMapper.xml
  61. +7
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/LiveChannelMapper.xml
  62. +10
    -0
      tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/UserAuthorizeMapper.xml
  63. +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 = "/freeway/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;

}

+ 4
- 8
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/flightdata/query/QueryFlightDataTrackService.java View File

@@ -36,27 +36,23 @@ public class QueryFlightDataTrackService {
public JsonResult track(InspectionRequest inspectionRequest) {
Inspection inspection = inspectionMapper.selectById(inspectionRequest.getRequestId());
if (ObjectUtil.isEmpty(inspection)) {
log.info("被硬件调用,存飞行轨迹,巡检任务不存在,inspectionId={}", inspectionRequest.getRequestId());
throw new ServiceException(ServiceExceptionEnum.TASK_DOES_NOT_EXIST);
}
log.info("正在巡检的任务,inspection={}",inspection);

FlightData flightData = new FlightData();
BeanUtils.copyProperties(inspectionRequest, flightData);
flightData.setTenantId(inspection.getTenantId());
flightData.setInspectionId(inspection.getId());
flightData.setAltitude(null);
//机场传过来的高度是相对高度
flightData.setUltrasonic(inspectionRequest.getAltitude());
flightData.setUltrasonic(inspectionRequest.getAltitude()); // 机场传过来的高度是相对高度
flightData.setSpeed(inspectionRequest.getHspeed());
flightData.setYsingal(inspectionRequest.getYsingal());
flightData.setDistHome(inspectionRequest.getDistHome());

log.info("云盒遥测数据,flightData={}",flightData);

//将最新一条数据放入缓存,并设置过期时间
redisUtils.set(String.valueOf(inspection.getId()), flightData, 10);
int result = flightDataMapper.insert(flightData);
if(result<=0){
if (result <= 0) {
log.info("被硬件调用,存飞行轨迹,数据报存失败,inspectionId={}", inspectionRequest.getRequestId());
return JsonResult.error("遥测数据保存失败");
}


+ 14
- 15
tuoheng-service/tuoheng-admin/src/main/java/com/tuoheng/admin/service/inspection/query/QueryInspectionPageListService.java View File

@@ -9,7 +9,6 @@ import com.tuoheng.admin.conver.InspectionConverMapper;
import com.tuoheng.admin.entity.*;
import com.tuoheng.admin.enums.DataPermissionEnum;
import com.tuoheng.admin.enums.MarkEnum;
import com.tuoheng.admin.enums.code.inspection.QueryInspectionPageListCodeEnum;
import com.tuoheng.admin.mapper.*;
import com.tuoheng.admin.request.inspection.QueryInspectionPageListRequest;
import com.tuoheng.admin.service.inspection.query.handle.GenerateInspectionFieldHander;
@@ -125,14 +124,14 @@ public class QueryInspectionPageListService {
return result;
}

if(StringUtils.isEmpty(request.getDeptId())){
List<String> deptIdList = new ArrayList<>();
if (DataPermissionEnum.ALL.getCode() == user.getDataPermission()) {
} else if (DataPermissionEnum.DEPT_AND_SUB_DEPT.getCode() == user.getDataPermission()) {
deptIdList = deptMapper.selectAllChildListById(user.getDeptId());
} else if (DataPermissionEnum.DEPT.getCode() == user.getDataPermission()) {
deptIdList.add(user.getDeptId());
}
if (StringUtils.isEmpty(request.getDeptId())) {
List<String> deptIdList = new ArrayList<>();
if (DataPermissionEnum.ALL.getCode() == user.getDataPermission()) {
} else if (DataPermissionEnum.DEPT_AND_SUB_DEPT.getCode() == user.getDataPermission()) {
deptIdList = deptMapper.selectAllChildListById(user.getDeptId());
} else if (DataPermissionEnum.DEPT.getCode() == user.getDataPermission()) {
deptIdList.add(user.getDeptId());
}
request.setDeptIdList(deptIdList);
}

@@ -200,8 +199,8 @@ public class QueryInspectionPageListService {

/**
* 管理员和普通用户可查本部门及子部门的任务
* 1)、如果前端检索条件,传了部门Id,则根据deptId来查
* 2)、如果前端检索条件,部门Id为空,则表示查本部门及子部门的任务
* 1)、如果前端检索条件,传了部门Id,则根据deptId来查
* 2)、如果前端检索条件,部门Id为空,则表示查本部门及子部门的任务
*
* @param request
* @return
@@ -221,8 +220,8 @@ public class QueryInspectionPageListService {
}

/**
* 1)、查找已确认问题数、发现问题数字段
* 2)、判断是否有操作权限:立即执行、直播、回放、问题详情、问题核实、重新提交
* 1)、查找已确认问题数、发现问题数字段
* 2)、判断是否有操作权限:立即执行、直播、回放、问题详情、问题核实、重新提交
*
* @param user
* @param dept
@@ -288,8 +287,8 @@ public class QueryInspectionPageListService {
}

/**
* 设置任务列表中每一个任务的部门名称
* 查询到的任务列表中的部门Id,作为部门id列表,查询所有的部门,该结果数据量不会太大,放到map中
* 设置任务列表中每一个任务的部门名称
* 查询到的任务列表中的部门Id,作为部门id列表,查询所有的部门,该结果数据量不会太大,放到map中
*
* @param inspectionList
* @return

+ 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

+ 16
- 1
tuoheng-service/tuoheng-admin/src/test/java/com/tuoheng/admin/service/DspCallbackServiceTest.java View File

@@ -9,9 +9,11 @@ import com.tuoheng.admin.mapper.SectionMapper;
import com.tuoheng.admin.request.dept.AddDeptRequest;
import com.tuoheng.admin.request.dept.EditDeptRequest;
import com.tuoheng.admin.request.third.DspCallbackRequest;
import com.tuoheng.admin.request.third.QuestionFile;
import com.tuoheng.admin.service.dept.IDeptService;
import com.tuoheng.admin.service.dept.query.QueryListTreeService;
import com.tuoheng.admin.service.third.dsp.IDspCallbackService;
import com.tuoheng.common.core.utils.DateUtils;
import com.tuoheng.common.core.utils.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@@ -21,6 +23,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -35,10 +38,22 @@ public class DspCallbackServiceTest {

@Test
public void testGetOneById() {
String requestId = "dc96139337854ae78da7f20e144b3a9f";
String requestId = "369567d311de473886c40a5c85305493";
DspCallbackRequest dspCallbackRequest = new DspCallbackRequest();
dspCallbackRequest.setAnalyseStatus(2);
dspCallbackRequest.setType(1);

List<QuestionFile> questionFiles = new ArrayList<>();
QuestionFile questionFile = new QuestionFile();
questionFile.setFileCode("PVR2024010815484594512");
questionFile.setFileName("2024-01-08-15-48-45_frame-52-332_type_20240108154845591880-1-003-1_AI.jpg");
questionFile.setFileOriginalUrl("https://image.t-aaron.com/369567d311de473886c40a5c85305493/2024-01-08-15-48-45_frame-52-332_type_20240108154845581518-1-0-0_OR.jpg");
questionFile.setFileMarkerUrl("https://image.t-aaron.com/369567d311de473886c40a5c85305493/2024-01-08-15-48-45_frame-52-332_type_20240108154845591880-1-003-1_AI.jpg");
questionFile.setAnalyseTime(DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, "2024-01-08 15:48:45"));
questionFile.setQuestionName("车辆");
questionFile.setQuestionCode("003008");
questionFiles.add(questionFile);
dspCallbackRequest.setQuestionFiles(questionFiles);
dspCallbackService.saveCallbackData(requestId, dspCallbackRequest);
}


+ 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);
}






}

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

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

import com.tuoheng.common.core.utils.JsonResult;
import com.tuoheng.miniprogram.entity.wx.WxMessageRequest;
import com.tuoheng.miniprogram.service.wx.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("/checkAuthorize/{code}")
public JsonResult checkAuthorize(@PathVariable("code") String code) {
return iWxService.checkAuthorize(code);
}

//根据code获取openId
@GetMapping("/getOpenId/{code}")
public JsonResult getOpenId(@PathVariable("code") String code) {
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;
}

+ 2
- 6
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/entity/query/InspectionQuery.java View File

@@ -7,6 +7,7 @@ import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.util.List;

/**
* @Author ChengWang
@@ -38,7 +39,7 @@ public class InspectionQuery extends BaseQuery {
/**
* 任务状态 5任务待飞行 7飞行失败 10任务飞行中 15任务飞行完成
*/
private String status;
private List<Integer> statusList;

/**
*巡检方式类型 1 无人机 2机场
@@ -65,11 +66,6 @@ public class InspectionQuery extends BaseQuery {
*/
private String time;

/**
* 结束日期(传入)
*/
// private String endTime;

/**
* 日期,日期类型
*/

+ 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 {

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;
}

}

+ 3
- 1
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/enums/UserCodeEnum.java View File

@@ -14,7 +14,9 @@ public enum UserCodeEnum {
USER_NAME_IS_NULL(1240102, "登录用户名为空"),
OLD_PASSWORD_IS_ERROR(1240103, "密码错误"),
PASSWORD_REVISE_FAIL(1240104, "密码修改失败"),
PASSWORD_REVISE_SUCCESS(1240105, "密码修改成功");
PASSWORD_REVISE_SUCCESS(1240105, "密码修改成功"),
USER_ID_IS_NULL(1240106, "登录用户id为空"),
USER_0PENID_IS_NULL(1240107, "用户openID为空");

/**
* 错误码

+ 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);

}

+ 35
- 23
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;

/**
* 任务列表(分页)
*
@@ -71,36 +74,24 @@ public class InspectionServiceImpl implements IInspectionService {
if (null == query.getLimit() && null == query.getPage()) {
throw new ServiceException(ServiceExceptionEnum.PARAMETER_IS_NULL);
}
//登录用户信息
User user = CurrentUserUtil.getUserInfo();
Integer type = user.getDataPermission();
if (null == type) {
throw new ServiceException(ServiceExceptionEnum.PARAMETER_IS_NULL);
}
String tenantId = user.getTenantId();

query.setTenantId(tenantId);
// query.setType(1);

//初始部门id
String deptIdInt = query.getDeptId();
//开始、结束时间
if (StringUtils.isNotEmpty(query.getTime())) {
Date startTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, query.getTime() + " 00:00:00");
Date endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, query.getTime() + " 23:59:59");
query.setStartTimeDate(startTime);
query.setEndTimeDate(endTime);
}

//获取当前部门对应的巡检任务
//获取分页数据
IPage<Inspection> page = new Page<>(query.getPage(), query.getLimit());
IPage<InspectionInfoVo> pageDataVo = new Page<>(query.getPage(), query.getLimit());
Date startTime = null;
Date endTime = null;
if (StringUtils.isNotEmpty(query.getTime())) {
startTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, query.getTime() + " 00:00:00");
endTime = DateUtils.dateTime(DateUtils.YYYY_MM_DD_HH_MM_SS, query.getTime() + " 23:59:59");
}
query.setStartTimeDate(startTime);
query.setEndTimeDate(endTime);

List<InspectionInfoVo> inspectionInfoVoList = new ArrayList<>();
//用户角色判断 1超级管理员 2部门管理员 3普通用户
if (DataPermissionEnum.ALL.getCode() == type) {
if (DataPermissionEnum.ALL.getCode() == user.getDataPermission()) {
query.setDeptId(""); // 要查所有部门的, 因此不通过deptId过滤
IPage<InspectionInfoVo> IPageData = inspectionMapper.queryPage(page, query);
IPageData.getRecords().stream().forEach(x -> {
@@ -128,10 +119,14 @@ public class InspectionServiceImpl implements IInspectionService {
for (InspectionInfoVo record : records) {
inspectionInfoVoList.add(record);
}

//构建返回结果对象
pageDataVo.setPages(IPageData.getPages());
pageDataVo.setCurrent(IPageData.getCurrent());
pageDataVo.setSize(IPageData.getSize());
pageDataVo.setTotal(IPageData.getTotal());
}
//登录用户角色为部门管理员或普通用户
if (DataPermissionEnum.DEPT_AND_SUB_DEPT.getCode() == type || DataPermissionEnum.DEPT.getCode() == type) {
if (DataPermissionEnum.DEPT_AND_SUB_DEPT.getCode() == user.getDataPermission() || DataPermissionEnum.DEPT.getCode() == user.getDataPermission()) {
// 根据部门id获取此部门id和所有下级部门id封装list集合
List<String> deptLists = deptMapper.selectAllChildListById(query.getDeptId());
if (StringUtils.isEmpty(deptLists)) {
@@ -141,6 +136,7 @@ public class InspectionServiceImpl implements IInspectionService {
String deptId = deptLists.get(i);
query.setDeptId(deptId);
IPage<InspectionInfoVo> pageData = inspectionMapper.queryPage(page, query);

pageData.getRecords().stream().forEach(x -> {
//修改执行人属性
User user2 = userMapper.selectById(x.getCreateUser());
@@ -166,6 +162,12 @@ public class InspectionServiceImpl implements IInspectionService {
for (InspectionInfoVo record : records) {
inspectionInfoVoList.add(record);
}

//构建返回结果对象
pageDataVo.setPages(pageData.getPages());
pageDataVo.setCurrent(pageData.getCurrent());
pageDataVo.setSize(pageData.getSize());
pageDataVo.setTotal(pageData.getTotal());
}
}
Map<Integer, AirportLineVo> airportLineMap = this.getAirportLineMap(inspectionInfoVoList);
@@ -250,4 +252,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);

}
}

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

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

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 checkAuthorize(String code);

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

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

}

+ 76
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/WxServiceImpl.java View File

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

import cn.hutool.core.util.ObjectUtil;
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.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.wx.WxMessageRequest;
import com.tuoheng.miniprogram.enums.MarkEnum;
import com.tuoheng.miniprogram.service.wx.bind.WeiXinBindService;
import com.tuoheng.miniprogram.service.wx.check.WeiXinCheckAuthorizeService;
import com.tuoheng.miniprogram.service.wx.send.WeiXinSendMessageService;
import com.tuoheng.miniprogram.utils.CurrentUserUtil;
import com.tuoheng.miniprogram.utils.GetOpenIdUtil;
import com.tuoheng.miniprogram.vo.WxAuthorizeVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

@Autowired
private UserAuthorizeMapper userAuthorizeMapper;

@Autowired
private UserMapper userMapper;

@Autowired
private WeiXinCheckAuthorizeService weiXinCheckAuthorizeService;

@Autowired
private WeiXinBindService weiXinBindService;

@Autowired
private WeiXinSendMessageService weiXinSendMessageService;

@Override
public JsonResult checkAuthorize(String code) {
return weiXinCheckAuthorizeService.checkAuthorize(code);
}

/**
* 根据code获取openId
*
* @param code
* @return
*/
@Override
public JsonResult openId(String code) {
log.info("进入获取openId接口, code={}", code);
return weiXinBindService.bind(code);
}

/**
* 发送消息
*
* @param wxMessageRequest
* @return
*/
@Override
public JsonResult sendMessage(WxMessageRequest wxMessageRequest) {
return weiXinSendMessageService.sendMessage(wxMessageRequest);
}

}

+ 113
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/bind/WeiXinBindService.java View File

@@ -0,0 +1,113 @@
package com.tuoheng.miniprogram.service.wx.bind;

import cn.hutool.core.util.ObjectUtil;
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.enums.AuthorizeStatusEnum;
import com.tuoheng.miniprogram.enums.MarkEnum;
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.stereotype.Service;

@Slf4j
@Service
public class WeiXinBindService {

@Autowired
private UserAuthorizeMapper userAuthorizeMapper;

@Autowired
private UserMapper userMapper;


public JsonResult bind(String code) {
log.info("进入获取openId接口, code={}", code);
if (StringUtils.isEmpty(code)) {
log.info("code为空");
return JsonResult.error("code为空");
}
User user = CurrentUserUtil.getUserInfo();
String userId = user.getId();
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 userAuthorize = userAuthorizeMapper.selectOne(Wrappers.<UserAuthorize>lambdaQuery()
.eq(UserAuthorize::getUserId, userId)
.eq(UserAuthorize::getOpenId, openid)
.eq(UserAuthorize::getMark, MarkEnum.VALID.getCode()));
if (ObjectUtil.isNotEmpty(userAuthorize)) {
log.info("该用户已做过授权, openid={}", openid);
return JsonResult.error("该用户已做过授权");
}

// 先解绑
this.unBind(user, openid);

UserAuthorize userAuthorizeNew = new UserAuthorize();
userAuthorizeNew.setOpenId(openid);
userAuthorizeNew.setUserId(userId);
userAuthorizeNew.setCreateTime(DateUtils.now());
userAuthorizeNew.setCreateUser(userId);
int result = userAuthorizeMapper.insert(userAuthorizeNew);
if (result <= 0) {
return JsonResult.error("授权数据入库失败");
}

//关联登录用户,已经做过授权 修改授权标识
user.setAuthorize(AuthorizeStatusEnum.AUTHORIZE_ON.getCode());
user.setUpdateTime(DateUtils.now());
user.setUpdateUser(userId);
int count = userMapper.updateById(user);
if (count <= 0) {
log.info("用户授权标识更新失败, userId={}", userId);
return JsonResult.error("用户授权标识更新失败");
}
return JsonResult.success();
}

private void unBind(User user, String openId) {
// 当前用户已经与其他微信做过绑定,先解绑
UserAuthorize userAuthorizeTmp = userAuthorizeMapper.selectOne(Wrappers.<UserAuthorize>lambdaQuery()
.ne(UserAuthorize::getUserId, user.getId())
.eq(UserAuthorize::getOpenId, openId)
.eq(UserAuthorize::getMark, MarkEnum.VALID.getCode()));
if (ObjectUtil.isNotEmpty(userAuthorizeTmp)) {
log.info("该openId已与其他用户绑定,先进行解绑, userId={},openid={}", user.getId(), openId);
userAuthorizeMapper.deleteById(userAuthorizeTmp.getId());
}

userAuthorizeTmp = userAuthorizeMapper.selectOne(Wrappers.<UserAuthorize>lambdaQuery()
.eq(UserAuthorize::getUserId, user.getId())
.ne(UserAuthorize::getOpenId, openId)
.eq(UserAuthorize::getMark, MarkEnum.VALID.getCode()));
if (ObjectUtil.isNotEmpty(userAuthorizeTmp)) {
log.info("该用户已绑定,先进行解绑, userId={},openid={}", user.getId(), openId);
userAuthorizeMapper.deleteById(userAuthorizeTmp.getId());
}

user.setAuthorize(AuthorizeStatusEnum.AUTHORIZE_DOWN.getCode());
user.setUpdateTime(DateUtils.now());
user.setUpdateUser(user.getId());
userMapper.updateById(user);
}
}

+ 54
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/check/WeiXinCheckAuthorizeService.java View File

@@ -0,0 +1,54 @@
package com.tuoheng.miniprogram.service.wx.check;

import cn.hutool.core.util.ObjectUtil;
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.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.enums.MarkEnum;
import com.tuoheng.miniprogram.utils.CurrentUserUtil;
import com.tuoheng.miniprogram.utils.GetOpenIdUtil;
import com.tuoheng.miniprogram.vo.WxAuthorizeVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class WeiXinCheckAuthorizeService {

@Autowired
private UserAuthorizeMapper userAuthorizeMapper;

public JsonResult checkAuthorize(String code) {
log.info("进入判断用户是否授权接口, code={}", code);
User user = CurrentUserUtil.getUserInfo();
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和vx查询授权表是否存在一条授权数据
UserAuthorize beforeUserAuthorize = userAuthorizeMapper.selectOne(Wrappers.<UserAuthorize>lambdaQuery()
.eq(UserAuthorize::getUserId, user.getId())
.eq(UserAuthorize::getOpenId, openid)
.eq(UserAuthorize::getMark, MarkEnum.VALID.getCode()));
WxAuthorizeVo wxAuthorizeVo = new WxAuthorizeVo();
wxAuthorizeVo.setOpenId(openid);
if (ObjectUtil.isNotEmpty(beforeUserAuthorize)) {
wxAuthorizeVo.setIsAuthroize(true);
} else {
wxAuthorizeVo.setIsAuthroize(false);
}
return JsonResult.success(wxAuthorizeVo);
}
}

+ 200
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/service/wx/send/WeiXinSendMessageService.java View File

@@ -0,0 +1,200 @@
package com.tuoheng.miniprogram.service.wx.send;

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.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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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;

@Slf4j
@Service
public class WeiXinSendMessageService {

@Autowired
private UserAuthorizeMapper userAuthorizeMapper;

@Autowired
private UserMapper userMapper;

private static String accessToken;

private static long expiresTime;

@Value("${wx.miniprogramState:}")
private String miniprogramState;

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(miniprogramState);
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;
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("发送消息:userId={}, openId={},返回内容={}", userId, 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);
}

/**
* 获取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;
}
}

+ 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;

}

+ 24
- 0
tuoheng-service/tuoheng-miniprogram/src/main/java/com/tuoheng/miniprogram/vo/WxAuthorizeVo.java View File

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


import lombok.Data;

/**
* 微信授权登录判断类
*
* @Author suqin
* @Date 2023/01/09
*/
@Data
public class WxAuthorizeVo {

/**
* 是否授权 true授权过 false未授权
*/
private Boolean isAuthroize;

/**
* 微信唯一用户标识
*/
private String openId;
}

+ 10
- 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,14 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

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

xxl:
enable: true
job:

+ 10
- 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,14 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

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

xxl:
enable: true
job:

+ 10
- 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,14 @@ tuoheng:
staticAccessPath: /**
#静态资源实际存储路径
uploadFolder: /data/java/tuoheng_freeway/uploads/

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

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

+ 10
- 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,14 @@ 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
miniprogramState: trial

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

+ 9
- 17
tuoheng-service/tuoheng-miniprogram/src/main/resources/mapper/InspectionMapper.xml View File

@@ -59,25 +59,18 @@


<select id="queryPage" resultType="com.tuoheng.miniprogram.vo.InspectionInfoVo">
select
ti.id,
ti.code,
ti.name,
ti.type,
ti.status,
ti.inspection_type as inspectionType,
ti.inspection_line as inspectionLine,
ti.create_user as createUser,
ti.execution_start_time as executionStartTime,
ti.ai_video_url as aiVideoUrl
from
th_inspection ti
select ti.id, ti.code, ti.name, ti.type, ti.status, ti.inspection_type as inspectionType, ti.inspection_line as inspectionLine,
ti.create_user as createUser, ti.execution_start_time as executionStartTime, ti.ai_video_url as aiVideoUrl
from th_inspection ti
where ti.mark=1 and ti.tenant_id = #{request.tenantId}
<if test="request.deptId !=null and request.deptId !=''">
and ti.dept_id = #{request.deptId}
</if>
<if test="request.status !=null">
and ti.status = #{request.status}
<if test="request.statusList != null and request.statusList.size() > 0">
and ti.status in
<foreach item="status" collection="request.statusList" open="(" separator="," close=")">
#{status}
</foreach>
</if>
<if test="request.inspectionType !=null">
and ti.inspection_type = #{request.inspectionType}
@@ -88,7 +81,6 @@
<if test="request.startTimeDate !=null and request.endTimeDate !=null">
and ti.execution_start_time BETWEEN #{request.startTimeDate} AND #{request.endTimeDate}
</if>
ORDER BY
ti.create_time DESC
ORDER BY ti.create_time DESC
</select>
</mapper>

+ 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