diff --git a/postdischarge-admin/src/main/resources/application-dev.yml b/postdischarge-admin/src/main/resources/application-dev.yml index 8475c7c8..4e4465ca 100644 --- a/postdischarge-admin/src/main/resources/application-dev.yml +++ b/postdischarge-admin/src/main/resources/application-dev.yml @@ -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 diff --git a/postdischarge-admin/src/main/resources/application.yml b/postdischarge-admin/src/main/resources/application.yml index 3b491c02..977b5413 100644 --- a/postdischarge-admin/src/main/resources/application.yml +++ b/postdischarge-admin/src/main/resources/application.yml @@ -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(新医路,用于宣教库公共库查询) diff --git a/postdischarge-common/src/main/java/com/xinelu/common/enums/QuestionSubjectTypeEnum.java b/postdischarge-common/src/main/java/com/xinelu/common/enums/QuestionSubjectTypeEnum.java new file mode 100644 index 00000000..c94c491c --- /dev/null +++ b/postdischarge-common/src/main/java/com/xinelu/common/enums/QuestionSubjectTypeEnum.java @@ -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; + } +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/aiob/AIOBCallbackEntity.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/aiob/AIOBCallbackEntity.java new file mode 100644 index 00000000..1b2e682e --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/aiob/AIOBCallbackEntity.java @@ -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; +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/aiob/AIOBCallbackMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/aiob/AIOBCallbackMapper.java new file mode 100644 index 00000000..1ae97fcb --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/aiob/AIOBCallbackMapper.java @@ -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 getList(AIOBCallbackEntity query); + + Integer updateReadState(@Param("readState")Integer readState, @Param("id")Integer id); + + Integer deleteData(); +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubject/QuestionSubjectMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubject/QuestionSubjectMapper.java index aec4ec82..37e99eae 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubject/QuestionSubjectMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/questionsubject/QuestionSubjectMapper.java @@ -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 selectQuestionnaireByQuestionnaireId(Long questionnaireId); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/IAIOBCallbackService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/IAIOBCallbackService.java new file mode 100644 index 00000000..b4020959 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/IAIOBCallbackService.java @@ -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 getList(AIOBCallbackEntity query); + + Integer updateReadState(Integer readState, Integer id); + + Integer deleteData(); +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/impl/AIOBCallbackServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/impl/AIOBCallbackServiceImpl.java new file mode 100644 index 00000000..8d9d7afe --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/aiob/impl/AIOBCallbackServiceImpl.java @@ -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 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(); + } +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java index 738b7d18..a6e7a4de 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientinfo/impl/PatientInfoServiceImpl.java @@ -345,10 +345,10 @@ public class PatientInfoServiceImpl implements IPatientInfoService { */ @Transactional(rollbackFor = Exception.class) @Override - public AjaxResult patientUpload(List list, Integer isDistinct, String fileName, String importName) { + public AjaxResult patientUpload(List 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); diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/impl/StatisticsServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/impl/StatisticsServiceImpl.java index 20c53d30..367685a9 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/impl/StatisticsServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/statistics/impl/StatisticsServiceImpl.java @@ -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 output = new ArrayList<>(); + //查询原问卷信息 + List subjectAndOptionVos = questionSubjectMapper.selectQuestionnaireByQuestionnaireId(questionnaireTaskStatisticsDto.getQuestionInfoId()); + //空数据组装返回 + if (CollectionUtils.isEmpty(subjectAndOptionVos)) { + return AjaxResult.success(); + } //查询问卷任务 List 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 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 optionStatisticsVos = new ArrayList<>(); + if (questionnaireTaskStatisticsVos.size() > 0 && total != null && total.size() > 0) { + for (QuestionnaireTaskStatisticsVo subjectAndOptionVo : subjectAndOptionVos) { + QuestionnaireTaskOptionStatisticsVo optionStatisticsVo = new QuestionnaireTaskOptionStatisticsVo(); + //根据 题目序号、选项已选择过滤 + List 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 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 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); } /** diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskOptionStatisticsVo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskOptionStatisticsVo.java index 66f9dfcf..6642829f 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskOptionStatisticsVo.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskOptionStatisticsVo.java @@ -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; } \ No newline at end of file diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskStatisticsVo.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskStatisticsVo.java index 7c9a77af..3141f00b 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskStatisticsVo.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/statistics/QuestionnaireTaskStatisticsVo.java @@ -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; } \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/aiob/AIOBCallbackMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/aiob/AIOBCallbackMapper.xml new file mode 100644 index 00000000..800dabac --- /dev/null +++ b/postdischarge-manage/src/main/resources/mapper/manage/aiob/AIOBCallbackMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + id, callback_type, callback_data, read_state, create_date, update_date + + + + + + update aiob_callback_data set read_state = #{readState}, update_date = sysdate() + where id = #{id} + + + + delete from aiob_callback_data where read_state = 1 and DATE(create_date) < DATE_SUB(CURDATE(), INTERVAL 1 MONTH) + + diff --git a/postdischarge-manage/src/main/resources/mapper/manage/questionsubject/QuestionSubjectMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/questionsubject/QuestionSubjectMapper.xml index 28ef85de..2e4fa216 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/questionsubject/QuestionSubjectMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/questionsubject/QuestionSubjectMapper.xml @@ -369,4 +369,20 @@ from question_subject where question_info_id = #{questionInfoId} + + diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/GetAiobCallbackDataTask.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/GetAiobCallbackDataTask.java new file mode 100644 index 00000000..9267058e --- /dev/null +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/task/GetAiobCallbackDataTask.java @@ -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 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 +"条......"); + } +}