Merge remote-tracking branch 'origin/dev_hekousecondhospital' into dev
# Conflicts: # postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java
This commit is contained in:
commit
882d683f53
@ -6,25 +6,22 @@ spring:
|
||||
druid:
|
||||
# 主库数据源
|
||||
master:
|
||||
# url: jdbc:mysql://192.168.16.64:3306/post-discharge?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
|
||||
url: jdbc:mysql://127.0.0.1:3306/post-discharge?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
|
||||
# url: jdbc:mysql://182.92.166.109:8000/post-discharge?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
|
||||
url: jdbc:mysql://127.0.0.1:3306/post-discharge-hkey?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
|
||||
username: root
|
||||
password: 1qaz!@#$
|
||||
# password: Xinyilu@1qaz!@#$1234
|
||||
password: Hk2y!@#$
|
||||
# 从库数据源
|
||||
slave:
|
||||
# 从数据源开关/默认关闭
|
||||
enabled: false
|
||||
url:
|
||||
username:
|
||||
password:
|
||||
enabled: true
|
||||
url: jdbc:mysql://8.131.93.145:54081/aiob_callback?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
|
||||
username: root
|
||||
password: 1qaz!@#$
|
||||
hkhis:
|
||||
# 从数据源开关/默认关闭
|
||||
enabled: true
|
||||
url: jdbc:mysql://127.0.0.1:3306/post-discharge?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
|
||||
url: jdbc:mysql://127.0.0.1:3306/post-discharge-hkey?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
|
||||
username: root
|
||||
password: sa123456
|
||||
password: Hk2y!@#$
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
# 初始连接数
|
||||
initialSize: 5
|
||||
|
||||
@ -292,10 +292,7 @@ aiob:
|
||||
accessKey: 9a61c68abf134ab9823e39f61f2c2f72
|
||||
secretKey: 4287bfa1d5a34c229aacb5e056c94682
|
||||
# 任务执行回调地址--测试
|
||||
callBackUrl: http://8.131.93.145:54086/api/taskCallBack
|
||||
# callBackUrl: http://182.92.166.109:19090/api/taskCallBack
|
||||
# callBackUrl: http://101.200.89.70:19090/api/taskCallBack
|
||||
# callBackUrl: http://8.131.93.145:54011/api/taskCallBack
|
||||
callBackUrl: http://192.168.4.7:19090/api/taskCallBack
|
||||
|
||||
xinyilu-database:
|
||||
# 公共机构ID(新医路,用于宣教库公共库查询)
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
package com.xinelu.common.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 问卷题目选项类型
|
||||
*/
|
||||
@Getter
|
||||
public enum QuestionSubjectTypeEnum {
|
||||
|
||||
/**
|
||||
* 单选题
|
||||
*/
|
||||
MULTIPLE_CHOICE("MULTIPLE_CHOICE"),
|
||||
|
||||
/**
|
||||
* 多选题
|
||||
*/
|
||||
MULTIPLE_CHOICE_QUESTIONS("MULTIPLE_CHOICE_QUESTIONS"),
|
||||
|
||||
/**
|
||||
* 填空题
|
||||
*/
|
||||
FILL_IN_THE_BLANKS("FILL_IN_THE_BLANKS"),
|
||||
|
||||
/**
|
||||
* 反馈填空题
|
||||
*/
|
||||
FEEDBACK_BLANKS_SUBJECT("FEEDBACK_BLANKS_SUBJECT"),
|
||||
;
|
||||
|
||||
final private String info;
|
||||
|
||||
QuestionSubjectTypeEnum(String info) {
|
||||
this.info = info;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
package com.xinelu.manage.domain.aiob;
|
||||
|
||||
import java.util.Date;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @description: 阿里云百度外呼回调对象
|
||||
* @author: haown
|
||||
* @create: 2025-12-22 15:11
|
||||
**/
|
||||
@Data
|
||||
public class AIOBCallbackEntity {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Integer id;
|
||||
|
||||
/**
|
||||
* 回调数据类型, 0-任务呼叫单通电话回调 1-号码组终态回调 2-任务状态变更回调 3-实时呼叫单通电话回调
|
||||
*/
|
||||
private Integer callbackType;
|
||||
|
||||
/**
|
||||
* 回调数据
|
||||
*/
|
||||
private String callbackData;
|
||||
|
||||
/**
|
||||
* 已读状态,0:未读,1:已读
|
||||
*/
|
||||
private Integer readState;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createDate;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private Date updateDate;
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.xinelu.manage.mapper.aiob;
|
||||
|
||||
import com.xinelu.common.annotation.DataSource;
|
||||
import com.xinelu.common.enums.DataSourceType;
|
||||
import com.xinelu.manage.domain.aiob.AIOBCallbackEntity;
|
||||
import java.util.List;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* @description 阿里云服务器百度外呼回调Mapper接口
|
||||
* @Author haown
|
||||
* @Date 2025-12-23 15:45
|
||||
*/
|
||||
@DataSource(DataSourceType.SLAVE)
|
||||
public interface AIOBCallbackMapper {
|
||||
|
||||
List<AIOBCallbackEntity> getList(AIOBCallbackEntity query);
|
||||
|
||||
Integer updateReadState(@Param("readState")Integer readState, @Param("id")Integer id);
|
||||
|
||||
Integer deleteData();
|
||||
}
|
||||
@ -2,6 +2,7 @@ package com.xinelu.manage.mapper.questionsubject;
|
||||
|
||||
import com.xinelu.manage.domain.questionsubject.QuestionSubject;
|
||||
import com.xinelu.manage.vo.questionsubject.QuestionSubjectVO;
|
||||
import com.xinelu.manage.vo.statistics.QuestionnaireTaskStatisticsVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -84,4 +85,12 @@ public interface QuestionSubjectMapper {
|
||||
* @return 结果
|
||||
*/
|
||||
int deleteSubjectByQuestionInfoId(Long questionInfoId);
|
||||
|
||||
/**
|
||||
* 原问卷选项信息
|
||||
*
|
||||
* @param questionnaireId 问卷id
|
||||
* @return QuestionnaireTaskStatisticsVo
|
||||
*/
|
||||
List<QuestionnaireTaskStatisticsVo> selectQuestionnaireByQuestionnaireId(Long questionnaireId);
|
||||
}
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
package com.xinelu.manage.service.aiob;
|
||||
|
||||
import com.xinelu.manage.domain.aiob.AIOBCallbackEntity;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @description: 阿里云服务器百度外呼回调Service接口
|
||||
* @author: haown
|
||||
* @create: 2025-12-23 15:22
|
||||
**/
|
||||
public interface IAIOBCallbackService {
|
||||
|
||||
List<AIOBCallbackEntity> getList(AIOBCallbackEntity query);
|
||||
|
||||
Integer updateReadState(Integer readState, Integer id);
|
||||
|
||||
Integer deleteData();
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package com.xinelu.manage.service.aiob.impl;
|
||||
|
||||
import com.xinelu.manage.domain.aiob.AIOBCallbackEntity;
|
||||
import com.xinelu.manage.mapper.aiob.AIOBCallbackMapper;
|
||||
import com.xinelu.manage.service.aiob.IAIOBCallbackService;
|
||||
import java.util.List;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @description: 阿里云服务器百度外呼回调Service实现
|
||||
* @author: haown
|
||||
* @create: 2025-12-23 15:30
|
||||
**/
|
||||
@Service
|
||||
public class AIOBCallbackServiceImpl implements IAIOBCallbackService {
|
||||
@Resource
|
||||
private AIOBCallbackMapper aiobCallbackMapper;
|
||||
@Override
|
||||
public List<AIOBCallbackEntity> getList(AIOBCallbackEntity query) {
|
||||
return aiobCallbackMapper.getList(query);
|
||||
}
|
||||
|
||||
@Override public Integer updateReadState(Integer readState, Integer id) {
|
||||
return aiobCallbackMapper.updateReadState(readState, id);
|
||||
}
|
||||
|
||||
@Override public Integer deleteData() {
|
||||
return aiobCallbackMapper.deleteData();
|
||||
}
|
||||
}
|
||||
@ -345,10 +345,10 @@ public class PatientInfoServiceImpl implements IPatientInfoService {
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public AjaxResult patientUpload(List<PatientInfoImport> list, Integer isDistinct, String fileName, String importName) {
|
||||
public AjaxResult patientUpload(List<PatientInfoImport> list, Integer isDistinct, String fileName ,String importName) {
|
||||
int number;
|
||||
String importPersonTime = sysConfigService.selectConfigByKey("import_person_time");
|
||||
if (org.apache.commons.lang3.StringUtils.isBlank(importPersonTime)) {
|
||||
if (org.apache.commons.lang3.StringUtils.isBlank(importPersonTime) || importPersonTime.equals("")) {
|
||||
number = 1000;
|
||||
}
|
||||
number = Integer.parseInt(importPersonTime);
|
||||
|
||||
@ -4,6 +4,7 @@ import com.xinelu.common.core.domain.AjaxResult;
|
||||
import com.xinelu.common.core.domain.entity.SysUser;
|
||||
import com.xinelu.common.enums.NodeTypeEnum;
|
||||
import com.xinelu.common.enums.PhoneDialMethodEnum;
|
||||
import com.xinelu.common.enums.QuestionSubjectTypeEnum;
|
||||
import com.xinelu.common.enums.QuestionTypeEnum;
|
||||
import com.xinelu.common.utils.StringUtils;
|
||||
import com.xinelu.manage.domain.agency.Agency;
|
||||
@ -14,6 +15,7 @@ import com.xinelu.manage.dto.statistics.QuestionnaireTaskStatisticsDto;
|
||||
import com.xinelu.manage.mapper.department.DepartmentMapper;
|
||||
import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper;
|
||||
import com.xinelu.manage.mapper.phonedialrecord.PhoneDialRecordMapper;
|
||||
import com.xinelu.manage.mapper.questionsubject.QuestionSubjectMapper;
|
||||
import com.xinelu.manage.mapper.shortmessagesendrecord.ShortMessageSendRecordMapper;
|
||||
import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper;
|
||||
import com.xinelu.manage.mapper.subscribemessagesendrecord.SubscribeMessageSendRecordMapper;
|
||||
@ -70,6 +72,8 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
||||
private DepartmentMapper departmentMapper;
|
||||
@Resource
|
||||
private SysUserMapper sysUserMapper;
|
||||
@Resource
|
||||
private QuestionSubjectMapper questionSubjectMapper;
|
||||
|
||||
/**
|
||||
* @description 随访成功率统计
|
||||
@ -317,23 +321,76 @@ public class StatisticsServiceImpl implements IStatisticsService {
|
||||
*/
|
||||
@Override
|
||||
public AjaxResult questionnaireTaskStatistics(QuestionnaireTaskStatisticsDto questionnaireTaskStatisticsDto) {
|
||||
List<QuestionnaireTaskStatisticsVo> output = new ArrayList<>();
|
||||
//查询原问卷信息
|
||||
List<QuestionnaireTaskStatisticsVo> subjectAndOptionVos = questionSubjectMapper.selectQuestionnaireByQuestionnaireId(questionnaireTaskStatisticsDto.getQuestionInfoId());
|
||||
//空数据组装返回
|
||||
if (CollectionUtils.isEmpty(subjectAndOptionVos)) {
|
||||
return AjaxResult.success();
|
||||
}
|
||||
//查询问卷任务
|
||||
List<QuestionnaireTaskStatisticsVo> questionnaireTaskStatisticsVos = signPatientManageRouteNodeMapper.questionnaireTaskStatistics(questionnaireTaskStatisticsDto);
|
||||
//遍历计算比例
|
||||
if (CollectionUtils.isNotEmpty(questionnaireTaskStatisticsVos)){
|
||||
for (QuestionnaireTaskStatisticsVo questionnaireTaskStatisticsVo : questionnaireTaskStatisticsVos) {
|
||||
//除数不能为空或0
|
||||
if (CollectionUtils.isNotEmpty(questionnaireTaskStatisticsVo.getQuestionnaireTaskOptionStatisticsVos()) && Objects.nonNull(questionnaireTaskStatisticsVo.getTotal()) && questionnaireTaskStatisticsVo.getTotal() != 0){
|
||||
questionnaireTaskStatisticsVo.getQuestionnaireTaskOptionStatisticsVos()
|
||||
.forEach(item -> item.setChoiceProportion(
|
||||
new BigDecimal(item.getChoiceNumber())
|
||||
.divide(new BigDecimal(questionnaireTaskStatisticsVo.getTotal()),2, RoundingMode.HALF_UP).multiply(new BigDecimal("100"))));
|
||||
} else if (CollectionUtils.isNotEmpty(questionnaireTaskStatisticsVo.getQuestionnaireTaskOptionStatisticsVos()) && (Objects.isNull(questionnaireTaskStatisticsVo.getTotal()) || questionnaireTaskStatisticsVo.getTotal() == 0)){
|
||||
questionnaireTaskStatisticsVo.getQuestionnaireTaskOptionStatisticsVos().forEach(item -> item.setChoiceProportion(BigDecimal.ZERO));
|
||||
//空数据返回原问卷信息
|
||||
List<Long> total = null;
|
||||
if (CollectionUtils.isNotEmpty(questionnaireTaskStatisticsVos)) {
|
||||
questionnaireTaskStatisticsVos = questionnaireTaskStatisticsVos.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getQuestionSubjectOptionId())).collect(Collectors.toList());
|
||||
total = questionnaireTaskStatisticsVos.stream().filter(Objects::nonNull).map(QuestionnaireTaskStatisticsVo::getManageRouteNodeId).distinct().collect(Collectors.toList());
|
||||
}
|
||||
//遍历计算
|
||||
List<QuestionnaireTaskOptionStatisticsVo> optionStatisticsVos = new ArrayList<>();
|
||||
if (questionnaireTaskStatisticsVos.size() > 0 && total != null && total.size() > 0) {
|
||||
for (QuestionnaireTaskStatisticsVo subjectAndOptionVo : subjectAndOptionVos) {
|
||||
QuestionnaireTaskOptionStatisticsVo optionStatisticsVo = new QuestionnaireTaskOptionStatisticsVo();
|
||||
//根据 题目序号、选项已选择过滤
|
||||
List<QuestionnaireTaskStatisticsVo> choice = questionnaireTaskStatisticsVos.stream().filter(Objects::nonNull)
|
||||
.filter(item -> Objects.nonNull(item.getQuestionNumber()) && item.getQuestionNumber().equals(subjectAndOptionVo.getQuestionNumber())
|
||||
&& Objects.equals(item.getQuestionSubjectOptionId(), subjectAndOptionVo.getQuestionSubjectOptionId())
|
||||
&& item.getOptionChooseSign() == 0)
|
||||
.collect(Collectors.toList());
|
||||
if (choice.size() > 0) {
|
||||
subjectAndOptionVo.setChoiceProportion(new BigDecimal(choice.size()).divide(new BigDecimal(total.size()), 2, RoundingMode.HALF_UP).multiply(new BigDecimal("100")));
|
||||
optionStatisticsVo.setChoiceNumber((long) choice.size());
|
||||
} else {
|
||||
subjectAndOptionVo.setChoiceProportion(BigDecimal.ZERO);
|
||||
optionStatisticsVo.setChoiceNumber(0L);
|
||||
}
|
||||
optionStatisticsVo.setQuestionSubjectOptionId(subjectAndOptionVo.getQuestionSubjectOptionId());
|
||||
optionStatisticsVo.setQuestionInfoId(questionnaireTaskStatisticsDto.getQuestionInfoId());
|
||||
optionStatisticsVo.setOptionName(subjectAndOptionVo.getOptionName());
|
||||
optionStatisticsVo.setQuestionNumber(subjectAndOptionVo.getQuestionNumber());
|
||||
optionStatisticsVo.setChoiceProportion(subjectAndOptionVo.getChoiceProportion());
|
||||
optionStatisticsVos.add(optionStatisticsVo);
|
||||
}
|
||||
} else {
|
||||
//如果没数据返回问卷模板
|
||||
for (QuestionnaireTaskStatisticsVo subjectAndOptionVo : subjectAndOptionVos) {
|
||||
QuestionnaireTaskOptionStatisticsVo optionStatisticsVo = new QuestionnaireTaskOptionStatisticsVo();
|
||||
optionStatisticsVo.setQuestionInfoId(questionnaireTaskStatisticsDto.getQuestionInfoId());
|
||||
optionStatisticsVo.setQuestionSubjectOptionId(subjectAndOptionVo.getQuestionSubjectOptionId());
|
||||
optionStatisticsVo.setOptionName(subjectAndOptionVo.getOptionName());
|
||||
optionStatisticsVo.setQuestionNumber(subjectAndOptionVo.getQuestionNumber());
|
||||
optionStatisticsVo.setChoiceProportion(BigDecimal.ZERO);
|
||||
optionStatisticsVo.setChoiceNumber(0L);
|
||||
optionStatisticsVos.add(optionStatisticsVo);
|
||||
}
|
||||
}
|
||||
return AjaxResult.success(questionnaireTaskStatisticsVos);
|
||||
//根据题号组装数据类型
|
||||
List<BigDecimal> questionNumberList = subjectAndOptionVos.stream().filter(Objects::nonNull)
|
||||
.filter(item -> item.getQuestionType().equals(QuestionSubjectTypeEnum.MULTIPLE_CHOICE.getInfo()) || item.getQuestionType().equals(QuestionSubjectTypeEnum.MULTIPLE_CHOICE_QUESTIONS.getInfo()))
|
||||
.map(QuestionnaireTaskStatisticsVo::getQuestionNumber).distinct().collect(Collectors.toList());
|
||||
for (BigDecimal questionNumber : questionNumberList) {
|
||||
QuestionnaireTaskStatisticsVo questionnaireTaskStatisticsVo = new QuestionnaireTaskStatisticsVo();
|
||||
List<QuestionnaireTaskOptionStatisticsVo> collect = optionStatisticsVos.stream().filter(Objects::nonNull).filter(item -> questionNumber.equals(item.getQuestionNumber())).collect(Collectors.toList());
|
||||
if (CollectionUtils.isNotEmpty(collect)) {
|
||||
questionnaireTaskStatisticsVo.setQuestionnaireName(collect.get(0).getQuestionnaireName());
|
||||
questionnaireTaskStatisticsVo.setCreateTime(collect.get(0).getCreateTime());
|
||||
questionnaireTaskStatisticsVo.setQuestionName(collect.get(0).getQuestionName());
|
||||
questionnaireTaskStatisticsVo.setQuestionNumber(collect.get(0).getQuestionNumber());
|
||||
questionnaireTaskStatisticsVo.setQuestionnaireTaskOptionStatisticsVos(collect);
|
||||
output.add(questionnaireTaskStatisticsVo);
|
||||
}
|
||||
}
|
||||
return AjaxResult.success(output);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
package com.xinelu.manage.vo.statistics;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @description: 问卷任务统计选项返回值
|
||||
@ -75,4 +77,20 @@ public class QuestionnaireTaskOptionStatisticsVo {
|
||||
* 选择比例
|
||||
*/
|
||||
private BigDecimal choiceProportion;
|
||||
|
||||
/**
|
||||
* 题目序号
|
||||
*/
|
||||
private BigDecimal questionNumber;
|
||||
|
||||
/**
|
||||
* 问卷标题(上层数据使用)
|
||||
*/
|
||||
private String questionnaireName;
|
||||
|
||||
/**
|
||||
* 创建时间(上层数据使用)
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
@ -22,6 +22,12 @@ public class QuestionnaireTaskStatisticsVo {
|
||||
@ApiModelProperty(value = "问卷提交结果信息表id")
|
||||
private Long questionSubmitResultId;
|
||||
|
||||
/**
|
||||
* 问卷选项id
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项id")
|
||||
private Long questionSubmitId;
|
||||
|
||||
/**
|
||||
* 问卷表id
|
||||
*/
|
||||
@ -48,6 +54,36 @@ public class QuestionnaireTaskStatisticsVo {
|
||||
@ApiModelProperty(value = "题目名称")
|
||||
private String questionName;
|
||||
|
||||
/**
|
||||
* 问卷选项提交结果信息表id
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项提交结果信息表id")
|
||||
private Long patientQuestionOptionResult;
|
||||
|
||||
/**
|
||||
* 问卷选项信息表id
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项信息表id")
|
||||
private Long questionSubjectOptionId;
|
||||
|
||||
/**
|
||||
* 问卷选项名称
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项名称")
|
||||
private String optionName;
|
||||
|
||||
/**
|
||||
* 问卷选项排序
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项排序")
|
||||
private Long optionSort;
|
||||
|
||||
/**
|
||||
* 问卷选项是否选择
|
||||
*/
|
||||
@ApiModelProperty(value = "问卷选项是否选择")
|
||||
private Integer optionChooseSign;
|
||||
|
||||
/**
|
||||
* 填写问卷总数
|
||||
*/
|
||||
@ -69,4 +105,14 @@ public class QuestionnaireTaskStatisticsVo {
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
/**
|
||||
* 填写问卷总数
|
||||
*/
|
||||
private Long manageRouteNodeId;
|
||||
|
||||
/**
|
||||
* 选择比例
|
||||
*/
|
||||
private BigDecimal choiceProportion;
|
||||
}
|
||||
@ -0,0 +1,37 @@
|
||||
<?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.xinelu.manage.mapper.aiob.AIOBCallbackMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="com.xinelu.manage.domain.aiob.AIOBCallbackEntity">
|
||||
<id column="id" property="id" />
|
||||
<result column="callback_type" property="callbackType" />
|
||||
<result column="callback_data" property="callbackData" />
|
||||
<result column="read_state" property="readState" />
|
||||
<result column="create_date" property="createDate" />
|
||||
<result column="update_date" property="updateDate" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
id, callback_type, callback_data, read_state, create_date, update_date
|
||||
</sql>
|
||||
|
||||
<select id="getList" parameterType="AIOBCallbackEntity" resultMap="BaseResultMap">
|
||||
select id, callback_type, callback_data, read_state, create_date, update_date from aiob_callback_data
|
||||
<where>
|
||||
<if test="readState != null">
|
||||
and read_state = #{readState}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<update id="updateReadState">
|
||||
update aiob_callback_data set read_state = #{readState}, update_date = sysdate()
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="deleteData">
|
||||
delete from aiob_callback_data where read_state = 1 and DATE(create_date) < DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
|
||||
</delete>
|
||||
</mapper>
|
||||
@ -369,4 +369,20 @@
|
||||
from question_subject
|
||||
where question_info_id = #{questionInfoId}
|
||||
</delete>
|
||||
|
||||
<select id="selectQuestionnaireByQuestionnaireId"
|
||||
resultType="com.xinelu.manage.vo.statistics.QuestionnaireTaskStatisticsVo">
|
||||
select qs.question_info_id,
|
||||
qs.id questionSubjectId,
|
||||
qs.question_number,
|
||||
qs.question_type,
|
||||
qs.question_name,
|
||||
qso.id questionSubjectOptionId,
|
||||
qso.option_name,
|
||||
qso.option_sort
|
||||
from question_subject qs
|
||||
LEFT JOIN question_subject_option qso ON qso.questionnaire_subject_id = qs.id
|
||||
where qs.question_info_id = #{questionnaireId}
|
||||
order by qs.question_number ASC, qso.id ASC
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@ -0,0 +1,57 @@
|
||||
package com.xinelu.quartz.task;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.aliyuncs.exceptions.ClientException;
|
||||
import com.xinelu.manage.domain.aiob.AIOBCallbackEntity;
|
||||
import com.xinelu.manage.dto.aiob.TaskCallbackDataDto;
|
||||
import com.xinelu.manage.service.aiob.IAIOBCallbackService;
|
||||
import com.xinelu.manage.service.aiob.IAIOBService;
|
||||
import java.util.List;
|
||||
import javax.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
/**
|
||||
* @description: 获取百度外呼回调数据
|
||||
* @author: haown
|
||||
* @create: 2025-12-23 15:12
|
||||
**/
|
||||
@Slf4j
|
||||
@Component("GetAiobCallbackDataTask")
|
||||
public class GetAiobCallbackDataTask {
|
||||
@Resource
|
||||
private IAIOBService aiobService;
|
||||
@Resource
|
||||
private IAIOBCallbackService aiobCallbackService;
|
||||
|
||||
public void syncCallbackData() {
|
||||
log.info("开始执行同步百度外呼回调数据定时任务......");
|
||||
AIOBCallbackEntity aiobCallbackEntity = new AIOBCallbackEntity();
|
||||
aiobCallbackEntity.setReadState(0);
|
||||
List<AIOBCallbackEntity> callbackEntityList = aiobCallbackService.getList(aiobCallbackEntity);
|
||||
if (!CollectionUtils.isEmpty(callbackEntityList)) {
|
||||
// 回调数据解析
|
||||
callbackEntityList.forEach(callbackEntity -> {
|
||||
// JSONString 转 TaskCallbackDataDto
|
||||
TaskCallbackDataDto taskCallbackDataDto = JSON.parseObject(callbackEntity.getCallbackData(), TaskCallbackDataDto.class);
|
||||
try {
|
||||
// 执行回调
|
||||
aiobService.taskCallBack(callbackEntity.getCallbackType(), taskCallbackDataDto);
|
||||
// 修改阿里云服务器回调数据已读状态
|
||||
aiobCallbackService.updateReadState(1, callbackEntity.getId());
|
||||
} catch (ClientException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
log.info("完成同步百度外呼回调数据定时任务......");
|
||||
}
|
||||
|
||||
public void clearCallbackData() {
|
||||
log.info("开始执行清除过期的百度外呼回调数据定时任务......");
|
||||
// 清除一个月前的数据
|
||||
int count = aiobCallbackService.deleteData();
|
||||
log.info("完成清除过期的百度外呼回调数据定时任务,共清除" + count +"条......");
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user