diff --git a/postdischarge-admin/src/main/resources/application.yml b/postdischarge-admin/src/main/resources/application.yml index 3d001ce7..1289c1fd 100644 --- a/postdischarge-admin/src/main/resources/application.yml +++ b/postdischarge-admin/src/main/resources/application.yml @@ -267,3 +267,10 @@ applet-page-config: page-url: pages/startup/startup # 个人中心-优惠券页面跳转路径 propaganda-page-url: pages/propaganda/propaganda + +#推送消息限制 +push-message-restrictions: + #次数 + number: 1 + #时间 : 单位,天 + time: 2 diff --git a/postdischarge-common/src/main/java/com/xinelu/common/config/PushMessageRestrictions.java b/postdischarge-common/src/main/java/com/xinelu/common/config/PushMessageRestrictions.java new file mode 100644 index 00000000..22415af6 --- /dev/null +++ b/postdischarge-common/src/main/java/com/xinelu/common/config/PushMessageRestrictions.java @@ -0,0 +1,20 @@ +package com.xinelu.common.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * @Description 新医路院后微信小程序消息参数配置类 + * @Author zh + * @Date 2024-07-31 + */ +@Data +@Component +@ConfigurationProperties(prefix = "push-message-restrictions") +public class PushMessageRestrictions { + + private Long number; + + private Long time; +} diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/department/DepartmentController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/department/DepartmentController.java index ce9931db..9ccbfb2f 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/department/DepartmentController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/department/DepartmentController.java @@ -105,7 +105,7 @@ public class DepartmentController extends BaseController { @Log(title = "科室信息", businessType = BusinessType.INSERT) @PostMapping("/add") public AjaxResult add(@RequestBody Department department) { - return toAjax(departmentService.insertDepartment(department)); + return departmentService.insertDepartment(department); } /** @@ -115,7 +115,7 @@ public class DepartmentController extends BaseController { @Log(title = "科室信息", businessType = BusinessType.UPDATE) @PutMapping("/edit") public AjaxResult edit(@RequestBody Department department) { - return toAjax(departmentService.updateDepartment(department)); + return departmentService.updateDepartment(department); } /** diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/patienttaskexecuterecord/PatientTaskExecuteRecordController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/patienttaskexecuterecord/PatientTaskExecuteRecordController.java index 34c5485f..bbe9eb36 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/patienttaskexecuterecord/PatientTaskExecuteRecordController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/patienttaskexecuterecord/PatientTaskExecuteRecordController.java @@ -81,8 +81,8 @@ public class PatientTaskExecuteRecordController extends BaseController { * 根据患者信息查询就诊记录 */ @GetMapping("/selectVisitRecord") - public AjaxResult selectVisitRecord(Long id) { - return patientTaskExecuteRecordService.selectVisitRecord(id); + public AjaxResult selectVisitRecord(Long patientId) { + return patientTaskExecuteRecordService.selectVisitRecord(patientId); } /** diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/specialdiseasenode/SpecialDiseaseNodeController.java b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/specialdiseasenode/SpecialDiseaseNodeController.java index 66d27266..1ed1d5d4 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/controller/specialdiseasenode/SpecialDiseaseNodeController.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/controller/specialdiseasenode/SpecialDiseaseNodeController.java @@ -82,7 +82,7 @@ public class SpecialDiseaseNodeController extends BaseController { } /** - * 修改专病路径-管理节点信息 + * 修改专病路径-管理节点信息(专病路径新增修改) */ @PreAuthorize("@ss.hasPermi('system:specialDiseaseNode:edit')") @Log(title = "专病路径-管理节点信息", businessType = BusinessType.UPDATE) diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/specialdiseasenode/SpecialDiseaseNode.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/specialdiseasenode/SpecialDiseaseNode.java index f4f104dd..2fff0547 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/specialdiseasenode/SpecialDiseaseNode.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/specialdiseasenode/SpecialDiseaseNode.java @@ -246,11 +246,18 @@ public class SpecialDiseaseNode extends BaseEntity { private String phoneDialMethod; /** - * AI电话模板表id + * 话术表 ID */ - @ApiModelProperty(value = "AI电话模板表id") + @ApiModelProperty(value = "话术表 ID") + @Excel(name = "话术表 ID") + private Long scriptInfoId; + + /** + * AI电话模板id + */ + @ApiModelProperty(value = "AI电话模板id") @Excel(name = "AI电话模板表id") - private Long phoneTemplateId; + private String phoneTemplateId; /** * AI电话模板名称 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/subscribemessagesendrecord/SubscribeMessageSendRecord.java b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/subscribemessagesendrecord/SubscribeMessageSendRecord.java index 074a0550..b43b0b9a 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/domain/subscribemessagesendrecord/SubscribeMessageSendRecord.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/domain/subscribemessagesendrecord/SubscribeMessageSendRecord.java @@ -101,7 +101,7 @@ public class SubscribeMessageSendRecord extends BaseEntity { * 推送结果状态码(0表示成功) */ @ApiModelProperty(value = "推送结果状态码") - @Excel(name = "推送结果状态码", readConverterExp = "0=表示成功") + @Excel(name = "推送结果状态码", readConverterExp = "0表示成功") private Integer errorCode; /** diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/department/DepartmentMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/department/DepartmentMapper.java index 04add12e..92a0e381 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/department/DepartmentMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/department/DepartmentMapper.java @@ -145,4 +145,12 @@ public interface DepartmentMapper { * @return 机构信息 */ List selectDepartmentByParentId(Long[] id); + + /** + * 根据上级机构id和科室名称查询数量 + * + * @param department 科室 + * @return int + */ + List selectDepartmentNameCount(Department department); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patienttaskexecuterecord/PatientTaskExecuteRecordMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patienttaskexecuterecord/PatientTaskExecuteRecordMapper.java index e603d004..ea47b590 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patienttaskexecuterecord/PatientTaskExecuteRecordMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/patienttaskexecuterecord/PatientTaskExecuteRecordMapper.java @@ -2,6 +2,7 @@ package com.xinelu.manage.mapper.patienttaskexecuterecord; import com.xinelu.manage.domain.patienttaskexecuterecord.PatientTaskExecuteRecord; import com.xinelu.manage.vo.patienttaskexecuterecord.PatientTaskExecuteRecordVO; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -71,8 +72,8 @@ public interface PatientTaskExecuteRecordMapper { /** * 根据患者信息查询就诊记录 * - * @param id id + * @param patientId id * @return AjaxResult */ - PatientTaskExecuteRecordVO selectVisitRecord(Long id); + PatientTaskExecuteRecordVO selectVisitRecord(@Param("patientId") Long patientId); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/shortmessagesendrecord/ShortMessageSendRecordMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/shortmessagesendrecord/ShortMessageSendRecordMapper.java index 561fc34f..024b52b3 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/shortmessagesendrecord/ShortMessageSendRecordMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/shortmessagesendrecord/ShortMessageSendRecordMapper.java @@ -1,6 +1,8 @@ package com.xinelu.manage.mapper.shortmessagesendrecord; import com.xinelu.manage.domain.shortmessagesendrecord.ShortMessageSendRecord; +import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -58,4 +60,12 @@ public interface ShortMessageSendRecordMapper { * @return 结果 */ int deleteShortMessageSendRecordByIds(Long[] ids); + + /** + * 节点推送数量 + * + * @param manageRouteNodeIds 节点id + * @return RecordNum + */ + List selectShortMessageRecordCountByManageRouteNodeIds(@Param("manageRouteNodeIds") List manageRouteNodeIds); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java index b414f74c..d0918835 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.java @@ -114,7 +114,7 @@ public interface SignPatientManageRouteNodeMapper { /** * 患者详情,查询任务节点详情 - * @param manageRouteIds 路径列表 + * @param manageRouteIds 路径主键列表 * @return 节点详细信息列表 */ List selectNodeInfoByManageIds(@Param("manageRouteIds") List manageRouteIds); @@ -142,10 +142,14 @@ public interface SignPatientManageRouteNodeMapper { List selectMessagePushSign(); /** - * 根据节点id修改状态 + * 修改执行状态 * - * @param ids 节点ids + * @param manageRouteNodeIds 节点id + * @param nodeExecuteStatus 执行状态 + * @param appletStatus 小程序发送状态 + * @param messageStatus 短信发送状态 + * @param officialStatus 公众号发送状态 * @return int */ - int updateMessageStatusByIds(@Param("ids") List ids); + int updateNodeExecuteStatusByIds(@Param("manageRouteNodeIds") List manageRouteNodeIds, @Param("nodeExecuteStatus") String nodeExecuteStatus, @Param("appletStatus") String appletStatus, @Param("messageStatus") String messageStatus, @Param("officialStatus") String officialStatus); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/subscribemessagesendrecord/SubscribeMessageSendRecordMapper.java b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/subscribemessagesendrecord/SubscribeMessageSendRecordMapper.java index 7ceb8caa..3cce61e1 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/subscribemessagesendrecord/SubscribeMessageSendRecordMapper.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/mapper/subscribemessagesendrecord/SubscribeMessageSendRecordMapper.java @@ -1,6 +1,8 @@ package com.xinelu.manage.mapper.subscribemessagesendrecord; import com.xinelu.manage.domain.subscribemessagesendrecord.SubscribeMessageSendRecord; +import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -66,4 +68,12 @@ public interface SubscribeMessageSendRecordMapper { * @return int **/ int insertSubscribeMessageSendRecordList(List subscribeMessageSendRecordList); + + /** + * 节点推送数量 + * + * @param manageRouteNodeIds 节点id + * @return RecordNum + */ + List selectRecordCountByManageRouteNodeIds(@Param("manageRouteNodeIds") List manageRouteNodeIds); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/department/IDepartmentService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/department/IDepartmentService.java index 321906d7..120ee817 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/department/IDepartmentService.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/department/IDepartmentService.java @@ -52,7 +52,7 @@ public interface IDepartmentService { * @param department 科室信息 * @return 结果 */ - int insertDepartment(Department department); + AjaxResult insertDepartment(Department department); /** * 修改科室信息 @@ -60,7 +60,7 @@ public interface IDepartmentService { * @param department 科室信息 * @return 结果 */ - int updateDepartment(Department department); + AjaxResult updateDepartment(Department department); /** * 批量删除科室信息 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/department/impl/DepartmentServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/department/impl/DepartmentServiceImpl.java index d99d9e66..2576a6c1 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/department/impl/DepartmentServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/department/impl/DepartmentServiceImpl.java @@ -19,18 +19,19 @@ import com.xinelu.manage.vo.department.DepartmentBaseVo; import com.xinelu.manage.vo.department.DepartmentListVO; import com.xinelu.manage.vo.department.DepartmentVO; import com.xinelu.system.mapper.SysUserMapper; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; -import javax.annotation.Resource; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + /** * 科室信息Service业务层处理 @@ -46,8 +47,8 @@ public class DepartmentServiceImpl implements IDepartmentService { private RegexUtil regexUtil; @Resource private SysUserMapper sysUserMapper; - @Resource - private AgencyMapper agencyMapper; + @Resource + private AgencyMapper agencyMapper; @Resource private GenerateSystemCodeUtil generateSystemCodeUtil; @@ -111,14 +112,28 @@ public class DepartmentServiceImpl implements IDepartmentService { * @return 结果 */ @Override - public int insertDepartment(Department department) { + public AjaxResult insertDepartment(Department department) { if (Objects.isNull(department.getParentDepartmentId())) { department.setParentDepartmentId(0L); } department.setCreateTime(LocalDateTime.now()); department.setCreateBy(SecurityUtils.getUsername()); + //根据上级机构id查询 + List departmentList = departmentMapper.selectDepartmentNameCount(department); + if (CollectionUtils.isNotEmpty(departmentList)) { + //重名 + List departmentName = departmentList.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getDepartmentName()) && department.getDepartmentName().equals(item.getDepartmentName())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(departmentName)) { + return AjaxResult.error("该" + department.getHospitalAgencyName() + "下,已存在名称为" + department.getDepartmentName() + "的科室!"); + } + //重编号 + List departmentCode = departmentList.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getDepartmentCode()) && department.getDepartmentCode().equals(item.getDepartmentName())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(departmentCode)) { + return AjaxResult.error("该" + department.getHospitalAgencyName() + "下,已存在科室编号为" + department.getDepartmentName() + "的科室!"); + } + } //department.setDepartmentCode(Constants.DEPARTMENT_CODE + generateSystemCodeUtil.generateSystemCode(Constants.DEPARTMENT_CODE)); - return departmentMapper.insertDepartment(department); + return AjaxResult.success(departmentMapper.insertDepartment(department)); } /** @@ -128,13 +143,28 @@ public class DepartmentServiceImpl implements IDepartmentService { * @return 结果 */ @Override - public int updateDepartment(Department department) { + public AjaxResult updateDepartment(Department department) { + //上级科室是自己本身,取消上级科室 if (Objects.nonNull(department) && Objects.nonNull(department.getId()) && Objects.nonNull(department.getParentDepartmentId()) && department.getId().equals(department.getParentDepartmentId())) { department.setParentDepartmentId(null); } + //根据上级机构id查询 + List departmentList = departmentMapper.selectDepartmentNameCount(department); + if (CollectionUtils.isNotEmpty(departmentList)) { + //重名 + List departmentName = departmentList.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getDepartmentName()) && department.getDepartmentName().equals(item.getDepartmentName()) && !department.getId().equals(item.getId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(departmentName)) { + return AjaxResult.error("该" + department.getHospitalAgencyName() + "下,已存在名称为" + department.getDepartmentName() + "的科室!"); + } + //重编号 + List departmentCode = departmentList.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getDepartmentCode()) && department.getDepartmentCode().equals(item.getDepartmentName()) && !department.getId().equals(item.getId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(departmentCode)) { + return AjaxResult.error("该" + department.getHospitalAgencyName() + "下,已存在科室编号为" + department.getDepartmentName() + "的科室!"); + } + } department.setUpdateBy(SecurityUtils.getUsername()); department.setUpdateTime(LocalDateTime.now()); - return departmentMapper.updateDepartmentById(department); + return AjaxResult.success(departmentMapper.updateDepartmentById(department)); } /** @@ -245,9 +275,9 @@ public class DepartmentServiceImpl implements IDepartmentService { return AjaxResult.error("当前科室电话:" + department.getDepartmentPhone() + " 格式不正确,请重新录入!"); } List departmentName = importDataList.stream().filter(item -> StringUtils.isNotBlank(item.getDepartmentName())).map(Department::getDepartmentName).distinct().collect(Collectors.toList()); - //根据名称查询护理站基本信息 + //根据名称查询科室基本信息 List allDepartment = departmentMapper.getAllDepartmentInfo(departmentName); - //做差集,去除数据库中已经存在的护理站信息 + //做差集,去除数据库中已经存在的科室信息 List subtractList = new ArrayList<>(CollectionUtils.subtract(importDataList, allDepartment)); if (CollectionUtils.isEmpty(subtractList)) { return AjaxResult.success(); @@ -279,9 +309,9 @@ public class DepartmentServiceImpl implements IDepartmentService { @DataScope(agencyAlias = "d", deptAlias = "sp") @Override public DepartmentBaseVo selectListServicePackageNum(DepartmentDTO departmentDto) { - Agency agency = agencyMapper.selectAgencyById(departmentDto.getHospitalAgencyId()); - List departmentVOList = departmentMapper.selectListServicePackageNum(departmentDto); - return DepartmentBaseVo.builder().hospitalAgencyName(ObjectUtils.isEmpty(agency) ? "" : agency.getAgencyName()) - .deptNumList(departmentVOList).build(); + Agency agency = agencyMapper.selectAgencyById(departmentDto.getHospitalAgencyId()); + List departmentVOList = departmentMapper.selectListServicePackageNum(departmentDto); + return DepartmentBaseVo.builder().hospitalAgencyName(ObjectUtils.isEmpty(agency) ? "" : agency.getAgencyName()) + .deptNumList(departmentVOList).build(); } } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskexecuterecord/IPatientTaskExecuteRecordService.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskexecuterecord/IPatientTaskExecuteRecordService.java index 833daf7c..3e36c481 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskexecuterecord/IPatientTaskExecuteRecordService.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskexecuterecord/IPatientTaskExecuteRecordService.java @@ -64,10 +64,10 @@ public interface IPatientTaskExecuteRecordService { /** * 根据患者信息查询就诊记录 * - * @param id 记录id + * @param patientId 患者id * @return AjaxResult */ - AjaxResult selectVisitRecord(Long id); + AjaxResult selectVisitRecord(Long patientId); /** * 根据任务执行记录查询患者问卷信息 diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskexecuterecord/impl/PatientTaskExecuteRecordServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskexecuterecord/impl/PatientTaskExecuteRecordServiceImpl.java index 8dfb7131..db6398e4 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskexecuterecord/impl/PatientTaskExecuteRecordServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patienttaskexecuterecord/impl/PatientTaskExecuteRecordServiceImpl.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; +import java.util.Objects; /** * 患者管理任务执行记录Service业务层处理 @@ -99,13 +100,18 @@ public class PatientTaskExecuteRecordServiceImpl implements IPatientTaskExecuteR /** * 根据患者信息查询就诊记录 * - * @param id id + * @param patientId id * @return AjaxResult */ @Override - public AjaxResult selectVisitRecord(Long id) { - PatientTaskExecuteRecordVO patientTaskExecuteRecordVO = patientTaskExecuteRecordMapper.selectVisitRecord(id); - patientTaskExecuteRecordVO.setAge(AgeUtil.getAgeMonth(patientTaskExecuteRecordVO.getBirthDate().toString())); + public AjaxResult selectVisitRecord(Long patientId) { + if (Objects.isNull(patientId)) { + return AjaxResult.error("请选择要查询的信息!"); + } + PatientTaskExecuteRecordVO patientTaskExecuteRecordVO = patientTaskExecuteRecordMapper.selectVisitRecord(patientId); + if (Objects.nonNull(patientTaskExecuteRecordVO) && Objects.nonNull(patientTaskExecuteRecordVO.getBirthDate())) { + patientTaskExecuteRecordVO.setAge(AgeUtil.getAgeMonth(patientTaskExecuteRecordVO.getBirthDate().toString())); + } return AjaxResult.success(patientTaskExecuteRecordVO); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientvisitrecord/impl/PatientVisitRecordServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientvisitrecord/impl/PatientVisitRecordServiceImpl.java index c8074a44..9f49ab84 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientvisitrecord/impl/PatientVisitRecordServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/patientvisitrecord/impl/PatientVisitRecordServiceImpl.java @@ -273,10 +273,10 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService PatientInfo patientInfo = patientMapper.selectPatientInfoById(updDto.getPatientId()); // 修改患者信息 patientInfo.setVisitMethod(updDto.getVisitMethod()); - patientInfo.setDepartmentId(updDto.getDepartmentId()); - patientInfo.setDepartmentName(updDto.getDepartmentName()); - patientInfo.setAdmissionTime(updDto.getAdmissionTime()); - patientInfo.setDischargeTime(updDto.getDischargeTime()); + patientInfo.setDepartmentId(updDto.getDepartmentId()); + patientInfo.setDepartmentName(updDto.getDepartmentName()); + patientInfo.setAdmissionTime(updDto.getAdmissionTime()); + patientInfo.setDischargeTime(updDto.getDischargeTime()); setPatientType(patientInfo, patientVisitRecord); patientInfoService.updatePatientInfo(patientInfo); } diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java index 8f99920e..ec016b8f 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroute/impl/SignPatientManageRouteServiceImpl.java @@ -309,13 +309,16 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout @Override @DataScope(agencyAlias = "pi", deptAlias = "pi") public List selectManualFollowUpList(ManualFollowUpDTO manualFollowUpDTO) { - if (manualFollowUpDTO.getNodeExecuteStatus().equals(NodeExecuteStatusEnum.UNEXECUTED.getInfo())){ + if (manualFollowUpDTO.getNodeExecuteStatus().equals(NodeExecuteStatusEnum.UNEXECUTED.getInfo())) { manualFollowUpDTO.setPhoneNodeExecuteResultStatus(null); } List manualFollowUpVOS = signPatientManageRouteMapper.selectManualFollowUpList(manualFollowUpDTO); if (StringUtils.isNotBlank(manualFollowUpDTO.getTimeSign()) && manualFollowUpDTO.getTimeSign().equals("WHOLE")) { return manualFollowUpVOS; } + if (manualFollowUpDTO.getNodeExecuteStatus().equals(NodeExecuteStatusEnum.EXECUTED.getInfo())) { + return manualFollowUpVOS; + } ArrayList manualFollowUps = new ArrayList<>(); for (ManualFollowUpVO manualFollowUpVO : manualFollowUpVOS) { //判断路径节点,组装数据 @@ -693,9 +696,9 @@ public class SignPatientManageRouteServiceImpl implements ISignPatientManageRout break; // 话术 case TaskNodeTypeConstants.PHONE_OUTBOUND: - manageRouteNode.setPhoneId(node.getPhoneTemplateId()); + manageRouteNode.setPhoneId(node.getScriptInfoId()); // 查询话术 - ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getPhoneTemplateId()); + ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getScriptInfoId()); if (ObjectUtils.isNotEmpty(scriptInfo)) { // 话术库json内容替换 manageRouteNode.setPhoneNodeContent(signPatientManageRouteNodeService.getFlowScheme(scriptInfo.getFlowScheme(), labelFieldContentList)); diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/SignPatientManageRouteNodeServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/SignPatientManageRouteNodeServiceImpl.java index b1122cda..f1fb6797 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/SignPatientManageRouteNodeServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/signpatientmanageroutenode/impl/SignPatientManageRouteNodeServiceImpl.java @@ -1127,9 +1127,9 @@ public class SignPatientManageRouteNodeServiceImpl implements ISignPatientManage break; // 话术 case TaskNodeTypeConstants.PHONE_OUTBOUND: - manageRouteNode.setPhoneId(node.getPhoneTemplateId()); + manageRouteNode.setPhoneId(node.getScriptInfoId()); // 查询话术 - ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getPhoneTemplateId()); + ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getScriptInfoId()); if (ObjectUtils.isNotEmpty(scriptInfo)) { // 话术库json内容替换 manageRouteNode.setPhoneNodeContent(getFlowScheme(scriptInfo.getFlowScheme(), labelFieldContentList)); diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/service/specialdiseaseroute/impl/SpecialDiseaseRouteServiceImpl.java b/postdischarge-manage/src/main/java/com/xinelu/manage/service/specialdiseaseroute/impl/SpecialDiseaseRouteServiceImpl.java index 8ac3c5b7..857d0016 100644 --- a/postdischarge-manage/src/main/java/com/xinelu/manage/service/specialdiseaseroute/impl/SpecialDiseaseRouteServiceImpl.java +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/service/specialdiseaseroute/impl/SpecialDiseaseRouteServiceImpl.java @@ -342,9 +342,9 @@ public class SpecialDiseaseRouteServiceImpl implements ISpecialDiseaseRouteServi break; // 话术 case TaskNodeTypeConstants.PHONE_OUTBOUND: - manageRouteNode.setPhoneId(node.getPhoneTemplateId()); + manageRouteNode.setPhoneId(node.getScriptInfoId()); // 查询话术 - ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getPhoneTemplateId()); + ScriptInfo scriptInfo = scriptInfoMapper.selectScriptInfoById(node.getScriptInfoId()); if (ObjectUtils.isNotEmpty(scriptInfo)) { // 话术库json内容替换 manageRouteNode.setPhoneNodeContent(scriptInfo.getFlowScheme()); diff --git a/postdischarge-manage/src/main/java/com/xinelu/manage/vo/subscribemessagesendrecord/RecordNum.java b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/subscribemessagesendrecord/RecordNum.java new file mode 100644 index 00000000..88150b44 --- /dev/null +++ b/postdischarge-manage/src/main/java/com/xinelu/manage/vo/subscribemessagesendrecord/RecordNum.java @@ -0,0 +1,23 @@ +package com.xinelu.manage.vo.subscribemessagesendrecord; + +import lombok.Data; + +/** + * 微信小程序订阅消息发送结果记录数量 + * + * @author zh + * @date 2024-07-31 + */ +@Data +public class RecordNum { + + /* + *推送数量 + */ + private Long num; + + /** + * 节点id + */ + private Long manageRouteNodeId; +} \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/department/DepartmentMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/department/DepartmentMapper.xml index 0afaadfc..f298ce16 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/department/DepartmentMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/department/DepartmentMapper.xml @@ -496,76 +496,76 @@ update department parent_department_id = - #{parentDepartmentId}, + #{parentDepartmentId}, hospital_agency_id = - #{hospitalAgencyId}, + #{hospitalAgencyId}, hospital_agency_name = - #{hospitalAgencyName}, + #{hospitalAgencyName}, department_name = - #{departmentName}, + #{departmentName}, department_code = - #{departmentCode}, + #{departmentCode}, department_type = - #{departmentType}, + #{departmentType}, department_abbreviation = - #{departmentAbbreviation}, + #{departmentAbbreviation}, department_person_id = - #{departmentPersonId}, + #{departmentPersonId}, department_person_name = - #{departmentPersonName}, + #{departmentPersonName}, node_type = - #{nodeType}, + #{nodeType}, provide_service_category = - #{provideServiceCategory}, + #{provideServiceCategory}, subdivision_category_id = - #{subdivisionCategoryId}, + #{subdivisionCategoryId}, subdivision_category_name = - #{subdivisionCategoryName}, + #{subdivisionCategoryName}, norm_department_compare_id = - #{normDepartmentCompareId}, + #{normDepartmentCompareId}, norm_department_compare_name = - #{normDepartmentCompareName}, + #{normDepartmentCompareName}, prepare_beds_count = - #{prepareBedsCount}, + #{prepareBedsCount}, department_phone = - #{departmentPhone}, + #{departmentPhone}, department_mail = - #{departmentMail}, + #{departmentMail}, establish_date = - #{establishDate}, + #{establishDate}, revoke_date = - #{revokeDate}, + #{revokeDate}, create_by = - #{createBy}, + #{createBy}, create_time = - #{createTime}, + #{createTime}, update_by = - #{updateBy}, + #{updateBy}, update_time = - #{updateTime}, + #{updateTime}, where id = #{id} @@ -624,4 +624,13 @@ #{id} + + \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/patienttaskexecuterecord/PatientTaskExecuteRecordMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/patienttaskexecuterecord/PatientTaskExecuteRecordMapper.xml index 2c1e60c1..ddc0e698 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/patienttaskexecuterecord/PatientTaskExecuteRecordMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/patienttaskexecuterecord/PatientTaskExecuteRecordMapper.xml @@ -313,10 +313,9 @@ ri.card_no, ri.sex, ri.address - FROM patient_task_execute_record pter - LEFT JOIN patient_visit_record pvr ON pter.visit_record_id = pvr.id - LEFT JOIN patient_info pi ON pi.id = pter.patient_id + FROM patient_info pi + LEFT JOIN patient_visit_record pvr ON pvr.id = pi.patient_visit_record_id LEFT JOIN resident_info ri ON ri.id = pi.resident_id - where pter.id = #{id} + where pi.id = #{patientId} \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/shortmessagesendrecord/ShortMessageSendRecordMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/shortmessagesendrecord/ShortMessageSendRecordMapper.xml index 3ca18fc1..4904777b 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/shortmessagesendrecord/ShortMessageSendRecordMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/shortmessagesendrecord/ShortMessageSendRecordMapper.xml @@ -198,4 +198,16 @@ #{id} + + \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml index 6260bb48..569f1410 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/signpatientmanageroutenode/SignPatientManageRouteNodeMapper.xml @@ -889,14 +889,28 @@ where spmrn.message_push_sign = 1 and spmrn.del_flag = 0 and spmrn.node_execute_status = 'UNEXECUTED' + and (spmrn.message_node_execute_result_status is null or spmrn.message_node_execute_result_status = ' ') - + update sign_patient_manage_route_node - set message_status = 'EXECUTED' + + node_execute_status = + #{nodeExecuteStatus}, + + applet_node_execute_result_status = + #{appletStatus}, + + message_node_execute_result_status = + #{messageStatus}, + + official_node_execute_result_status = + #{officialStatus}, + + where id in - - #{ids} + + #{manageRouteNodeIds} \ No newline at end of file diff --git a/postdischarge-manage/src/main/resources/mapper/manage/specialdiseasenode/SpecialDiseaseNodeMapper.xml b/postdischarge-manage/src/main/resources/mapper/manage/specialdiseasenode/SpecialDiseaseNodeMapper.xml index b57ed244..a3b5400f 100644 --- a/postdischarge-manage/src/main/resources/mapper/manage/specialdiseasenode/SpecialDiseaseNodeMapper.xml +++ b/postdischarge-manage/src/main/resources/mapper/manage/specialdiseasenode/SpecialDiseaseNodeMapper.xml @@ -75,6 +75,7 @@ + @@ -128,6 +129,7 @@ + @@ -180,7 +182,8 @@ create_by, create_time, update_by, - update_time + update_time, + script_info_id from special_disease_node @@ -316,6 +319,9 @@ and node_content = #{nodeContent} + + and script_info_id = #{scriptInfoId} + + select + manage_route_node_id, + COUNT(1) num + from subscribe_message_send_record + where manage_route_node_id IN + + #{manageRouteNodeIds} + + \ No newline at end of file diff --git a/postdischarge-mobile/src/main/java/com/xinelu/mobile/controller/homepage/HomePageController.java b/postdischarge-mobile/src/main/java/com/xinelu/mobile/controller/homepage/HomePageController.java index 2cd6e9b4..638c207c 100644 --- a/postdischarge-mobile/src/main/java/com/xinelu/mobile/controller/homepage/HomePageController.java +++ b/postdischarge-mobile/src/main/java/com/xinelu/mobile/controller/homepage/HomePageController.java @@ -119,4 +119,12 @@ public class HomePageController extends BaseController { public AjaxResult nodeExecuteStatus(Long manageRouteNodeId) { return homePageService.nodeExecuteStatus(manageRouteNodeId); } + + /** + * 保存宣教文章查看时间 + */ + @PostMapping("/viewPropaganda") + public AjaxResult viewPropaganda(Long manageRouteNodeId) { + return homePageService.viewPropaganda(manageRouteNodeId); + } } \ No newline at end of file diff --git a/postdischarge-mobile/src/main/java/com/xinelu/mobile/mapper/homepage/HomePageMapper.java b/postdischarge-mobile/src/main/java/com/xinelu/mobile/mapper/homepage/HomePageMapper.java index 1a694c19..3d32018a 100644 --- a/postdischarge-mobile/src/main/java/com/xinelu/mobile/mapper/homepage/HomePageMapper.java +++ b/postdischarge-mobile/src/main/java/com/xinelu/mobile/mapper/homepage/HomePageMapper.java @@ -60,14 +60,6 @@ public interface HomePageMapper { */ List selectSignPatientManageRouteNode(@Param("patientId") List patientId); - /** - * 修改执行状态 - * - * @param signPatientManageRouteNodeIds 节点id - * @return int - */ - int updateNodeExecuteStatusByIds(@Param("signPatientManageRouteNodeIds") List signPatientManageRouteNodeIds, @Param("nodeExecuteStatus") String nodeExecuteStatus, @Param("appletNodeExecuteResultStatus") String appletNodeExecuteResultStatus); - /** * 查询个人任务消息 * diff --git a/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/HomePageService.java b/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/HomePageService.java index 461b20fe..408976e7 100644 --- a/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/HomePageService.java +++ b/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/HomePageService.java @@ -105,4 +105,12 @@ public interface HomePageService { * @return AjaxResult */ AjaxResult nodeExecuteStatus(Long manageRouteNodeId); + + /** + * 保存宣教文章查看时间 + * + * @param manageRouteNodeId 节点id + * @return AjaxResult + */ + AjaxResult viewPropaganda(Long manageRouteNodeId); } \ No newline at end of file diff --git a/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/Impl/HomePageServiceImpl.java b/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/Impl/HomePageServiceImpl.java index e77a24e5..44b6e659 100644 --- a/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/Impl/HomePageServiceImpl.java +++ b/postdischarge-mobile/src/main/java/com/xinelu/mobile/service/homepage/Impl/HomePageServiceImpl.java @@ -209,7 +209,8 @@ public class HomePageServiceImpl implements HomePageService { patientQuestionSubmitResult.setCreateTime(time); // 新增患者问卷提交结果 if (patientQuestionSubmitResultMapper.insertPatientQuestionSubmitResult(patientQuestionSubmitResult) <= 0) { - throw new ServiceException("新增患者问卷提交结果失败"); + log.info("新增任务记录表失败"); + throw new ServiceException("问卷提交失败!"); } // 获取到患者问卷题目提交结果信息DTO List subjectResultList = dto.getSubjectResultDTOList(); @@ -229,7 +230,8 @@ public class HomePageServiceImpl implements HomePageService { } // 新增患者问卷题目提交结果 if (patientQuestionSubjectResultMapper.saveQuestionSubjectList(patientQuestionSubjectResults) < 0) { - throw new ServiceException("新增患者问卷题目提交结果失败"); + log.info("新增患者问卷题目提交结果失败"); + throw new ServiceException("问卷提交失败"); } if (CollectionUtils.isEmpty(patientQuestionOptionResults)) { return AjaxResult.success(); @@ -247,7 +249,17 @@ public class HomePageServiceImpl implements HomePageService { } // 新增患者问卷题目选项提交结果 if (patientQuestionOptionResultMapper.saveQuestionOptionList(saveQuestionSubjectOptions) < 0) { - throw new ServiceException("新增患者问卷题目选项提交结果失败"); + log.info("新增患者问卷题目选项提交结果失败"); + throw new ServiceException("问卷提交失败"); + } + SignPatientManageRouteNode signPatientManageRouteNode = new SignPatientManageRouteNode(); + signPatientManageRouteNode.setId(dto.getManageRouteNodeId()); + signPatientManageRouteNode.setRouteCheckDate(time); + signPatientManageRouteNode.setRouteHandleId(dto.getPatientId()); + signPatientManageRouteNode.setRouteHandlePerson(dto.getRouteHandlePerson()); + if (signPatientManageRouteNodeMapper.updateSignPatientManageRouteNode(signPatientManageRouteNode) < 0) { + log.info("修改签约患者管理任务路径节点表失败"); + throw new ServiceException("问卷提交失败"); } return AjaxResult.success(); } @@ -400,4 +412,19 @@ public class HomePageServiceImpl implements HomePageService { } return AjaxResult.success(nodeExecuteStatus); } + + /** + * 保存宣教文章查看时间 + * + * @param manageRouteNodeId 节点id + * @return AjaxResult + */ + @Override + public AjaxResult viewPropaganda(Long manageRouteNodeId) { + SignPatientManageRouteNode signPatientManageRouteNode = new SignPatientManageRouteNode(); + signPatientManageRouteNode.setId(manageRouteNodeId); + signPatientManageRouteNode.setNodeFinishDate(LocalDateTime.now()); + signPatientManageRouteNodeMapper.updateSignPatientManageRouteNode(signPatientManageRouteNode); + return AjaxResult.success(); + } } \ No newline at end of file diff --git a/postdischarge-mobile/src/main/java/com/xinelu/mobile/vo/homepage/MessageTabulationVO.java b/postdischarge-mobile/src/main/java/com/xinelu/mobile/vo/homepage/MessageTabulationVO.java index 829abebb..7f8aeba3 100644 --- a/postdischarge-mobile/src/main/java/com/xinelu/mobile/vo/homepage/MessageTabulationVO.java +++ b/postdischarge-mobile/src/main/java/com/xinelu/mobile/vo/homepage/MessageTabulationVO.java @@ -62,4 +62,6 @@ public class MessageTabulationVO { * 模版名称 */ private String manageRouteNodeName; + + private String nodeFinishDate; } diff --git a/postdischarge-mobile/src/main/resources/mapper/homepage/HomePageMapper.xml b/postdischarge-mobile/src/main/resources/mapper/homepage/HomePageMapper.xml index cf5ee38d..5001042b 100644 --- a/postdischarge-mobile/src/main/resources/mapper/homepage/HomePageMapper.xml +++ b/postdischarge-mobile/src/main/resources/mapper/homepage/HomePageMapper.xml @@ -86,7 +86,8 @@ LEFT JOIN patient_question_submit_result pqsr on spmrn.id = pqsr.manage_route_node_id WHERE qi.question_type = #{questionType} AND qi.questionnaire_status = #{questionnaireStatus} - and pi.resident_id = #{residentId} + AND pi.resident_id = #{residentId} + AND spmrn.node_execute_status = 'EXECUTED' ORDER BY pqsr.create_time DESC, spmrn.create_time DESC @@ -147,17 +148,6 @@ - - update sign_patient_manage_route_node - set node_execute_status = #{nodeExecuteStatus}, - applet_node_execute_result_status = #{appletNodeExecuteResultStatus} - where id in - - #{signPatientManageRouteNodeIds} - - - diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java index afd2e8f0..cf1916ca 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/SendTextMessageServiceImpl.java @@ -2,10 +2,17 @@ package com.xinelu.quartz.service.impl; import com.aliyuncs.exceptions.ClientException; import com.xinelu.common.config.AliYunSmsTwoConfig; +import com.xinelu.common.config.PushMessageRestrictions; +import com.xinelu.common.enums.ErrorStatusEnum; +import com.xinelu.common.enums.NodeExecuteResultStatusEnum; +import com.xinelu.common.enums.NodeExecuteStatusEnum; import com.xinelu.common.enums.RouteNodeNameEnum; +import com.xinelu.manage.domain.subscribemessagesendrecord.SubscribeMessageSendRecord; import com.xinelu.manage.dto.smssend.SmsInfoDTO; +import com.xinelu.manage.mapper.shortmessagesendrecord.ShortMessageSendRecordMapper; import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper; import com.xinelu.manage.vo.signpatientmanageroutenode.TextMessage; +import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum; import com.xinelu.mobile.utils.SmsSendUtils; import com.xinelu.quartz.service.SendTextMessageService; import lombok.extern.slf4j.Slf4j; @@ -15,9 +22,11 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @Description 短信发送定时任务业务层 @@ -34,6 +43,10 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { private SmsSendUtils smsSendUtils; @Resource private AliYunSmsTwoConfig aliYunSmsTwoConfig; + @Resource + private PushMessageRestrictions pushMessageRestrictions; + @Resource + private ShortMessageSendRecordMapper shortMessageSendRecordMapper; /** * 签约患者管理任务路径节点短信发送定时任务 @@ -44,7 +57,13 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { public void sendTextMessageSendTask() throws ClientException { //查询短信发送数据 List textMessages = signPatientManageRouteNodeMapper.selectMessagePushSign(); + if (CollectionUtils.isEmpty(textMessages)) { + return; + } + //条件过滤后短信信息 List messages = new ArrayList<>(); + //超时短信ids + List expiredManageRouteNodeIds = new ArrayList<>(); for (TextMessage textMessage : textMessages) { //判断推送状态 if (Objects.isNull(textMessage.getMessagePushSign()) || textMessage.getMessagePushSign() != 1) { @@ -70,10 +89,20 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { } boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now()); if (before) { + //超出7天,更改状态 + long until = localDate.until(LocalDate.now(), ChronoUnit.DAYS); + if (until >= pushMessageRestrictions.getTime()) { + expiredManageRouteNodeIds.add(textMessage.getSignPatientManageRouteNodeId()); + continue; + } textMessage.setRouteNodeName(RouteNodeNameEnum.getNameByInfo(textMessage.getRouteNodeName()).getName()); messages.add(textMessage); } } + //更改过期执行状态 + if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) { + signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(expiredManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), null, NodeExecuteResultStatusEnum.EXPIRED.getInfo(), null); + } //判断路径节点,组装数据 // if (textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_DISCHARGE.getInfo()) || textMessage.getRouteNodeName().equals(RouteNodeNameEnum.AFTER_VISIT_DISCHARGE.getInfo())) { @@ -107,7 +136,12 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { // } // } // } + //节点推送数量 + List collect = messages.stream().filter(Objects::nonNull).map(TextMessage::getSignPatientManageRouteNodeId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + List recordNums = shortMessageSendRecordMapper.selectShortMessageRecordCountByManageRouteNodeIds(collect); //发送 + //发送失败ids + List failSignPatientManageRouteNodeIds = new ArrayList<>(); if (CollectionUtils.isNotEmpty(messages)) { List ids = new ArrayList<>(); for (TextMessage message : messages) { @@ -117,13 +151,30 @@ public class SendTextMessageServiceImpl implements SendTextMessageService { // 根据模版id发送 smsInfoDTO.setTemplateCode(message.getTextMessageId()); Boolean aBoolean = smsSendUtils.sendTextMessage(smsInfoDTO); + SubscribeMessageSendRecord subscribeMessageSendRecord = new SubscribeMessageSendRecord(); + //成功 if (aBoolean) { ids.add(message.getSignPatientManageRouteNodeId()); + subscribeMessageSendRecord.setErrorCode(0); + subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.success.getValue()); + } else { + //失败 + subscribeMessageSendRecord.setErrorCode(1); + subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.fail.getValue()); + RecordNum recordNum = recordNums.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getManageRouteNodeId()) && item.getManageRouteNodeId().equals(message.getSignPatientManageRouteNodeId())).findFirst().orElse(new RecordNum()); + //三次失败 + if (Objects.nonNull(recordNum.getNum()) && recordNum.getNum() >= pushMessageRestrictions.getNumber()) { + failSignPatientManageRouteNodeIds.add(message.getSignPatientManageRouteNodeId()); + } } } //修改节点状态 - if (CollectionUtils.isNotEmpty(ids)) { - signPatientManageRouteNodeMapper.updateMessageStatusByIds(ids); + if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) { + signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(ids, NodeExecuteStatusEnum.EXECUTED.getInfo(), null, NodeExecuteResultStatusEnum.SUCCESS.getInfo(), null); + } + //修改节点状态 + if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) { + signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), null, NodeExecuteResultStatusEnum.FAILURE.getInfo(), null); } } } diff --git a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java index e1ddd931..0ff3f93b 100644 --- a/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java +++ b/postdischarge-quartz/src/main/java/com/xinelu/quartz/service/impl/subscribeTaskServiceImpl.java @@ -1,11 +1,14 @@ package com.xinelu.quartz.service.impl; import com.alibaba.fastjson2.JSON; +import com.xinelu.common.config.PushMessageRestrictions; import com.xinelu.common.config.WeChatAppletChatConfig; import com.xinelu.common.enums.*; import com.xinelu.common.utils.SecurityUtils; import com.xinelu.manage.domain.subscribemessagesendrecord.SubscribeMessageSendRecord; +import com.xinelu.manage.mapper.signpatientmanageroutenode.SignPatientManageRouteNodeMapper; import com.xinelu.manage.mapper.subscribemessagesendrecord.SubscribeMessageSendRecordMapper; +import com.xinelu.manage.vo.subscribemessagesendrecord.RecordNum; import com.xinelu.mobile.domain.TemplateContent; import com.xinelu.mobile.mapper.homepage.HomePageMapper; import com.xinelu.mobile.utils.WeChatOfficialAccountUtils; @@ -18,6 +21,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -40,6 +44,10 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { private WeChatOfficialAccountUtils weChatOfficialAccountUtils; @Resource private SubscribeMessageSendRecordMapper subscribeMessageSendRecordMapper; + @Resource + private PushMessageRestrictions pushMessageRestrictions; + @Resource + private SignPatientManageRouteNodeMapper signPatientManageRouteNodeMapper; /** * 推送任务组装数据 @@ -53,6 +61,9 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { } // 患者节点表 List signPatientManageRouteNodes = homePageMapper.selectSignPatientManageRouteNode(patientIdList); + if (CollectionUtils.isEmpty(signPatientManageRouteNodes)) { + return; + } // 注:PatientVO 包含签约路径节点相关属性,后面用于推送消息 List patientVOList = new ArrayList<>(); //发送消息到期节点id集合 @@ -76,8 +87,8 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { } boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now()); if (before) { - int i = LocalDate.now().compareTo(localDate); - if (i >= 1) { + long until =localDate.until(LocalDate.now(), ChronoUnit.DAYS); + if (until >= pushMessageRestrictions.getTime()) { expiredManageRouteNodeIds.add(patientVO.getSignPatientManageRouteNodeId()); continue; } @@ -89,7 +100,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { } //更改过期执行状态 if (CollectionUtils.isNotEmpty(expiredManageRouteNodeIds)) { - homePageMapper.updateNodeExecuteStatusByIds(expiredManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.EXPIRED.getInfo()); + signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(expiredManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.EXPIRED.getInfo(), null, null); } // //如果节点 适用范围是 出院后或就诊/出院后 @@ -112,6 +123,7 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { // PatientVO patientVO = patientList.stream().filter(Objects::nonNull).filter(item -> signPatientManageRouteNode.getPatientId().equals(item.getPatientId())).findFirst().orElse(new PatientVO()); // //患者类型如果是 在院患者 // if (patientVO.getPatientType().equals(PatientTypeEnum.IN_HOSPITAL_PATIENT.getInfo())) { +// if (patientVO.getPatientType().equals(PatientTypeEnum.IN_HOSPITAL_PATIENT.getInfo())) { // //入院时间 // LocalDate localDate = patientVO.getAdmissionTime().plusDays(signPatientManageRouteNode.getRouteNodeDay()); // boolean before = localDate.isBefore(LocalDate.now()) || localDate.isEqual(LocalDate.now()); @@ -137,11 +149,19 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { // } // } // } - //发送 - //发送失败id集合 + if (CollectionUtils.isEmpty(patientVOList)) { + return; + } + //节点推送数量 + List collect = patientVOList.stream().filter(Objects::nonNull).map(PatientVO::getSignPatientManageRouteNodeId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); + List recordNums = subscribeMessageSendRecordMapper.selectRecordCountByManageRouteNodeIds(collect); + //发送成功id集合 List signPatientManageRouteNodeIds = new ArrayList<>(); + //发送失败 + List failSignPatientManageRouteNodeIds = new ArrayList<>(); for (PatientVO patientVO : patientVOList) { try { + //判断推送内容格式是否符合 JSON.parseArray(patientVO.getAppletNodeContent(), TemplateContent.class); } catch (Exception e) { continue; @@ -149,13 +169,18 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { // 开始推送消息 Integer integer = weChatOfficialAccountUtils.sendAppletTemplateMessage(patientVO); SubscribeMessageSendRecord subscribeMessageSendRecord = new SubscribeMessageSendRecord(); + //推送结果 if (integer == 0) { signPatientManageRouteNodeIds.add(patientVO.getSignPatientManageRouteNodeId()); subscribeMessageSendRecord.setErrorCode(0); subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.success.getValue()); } else { - subscribeMessageSendRecord.setErrorCode(1); + subscribeMessageSendRecord.setErrorCode(integer); subscribeMessageSendRecord.setErrorStatus(ErrorStatusEnum.fail.getValue()); + RecordNum recordNum = recordNums.stream().filter(Objects::nonNull).filter(item -> Objects.nonNull(item.getManageRouteNodeId()) && item.getManageRouteNodeId().equals(patientVO.getSignPatientManageRouteNodeId())).findFirst().orElse(new RecordNum()); + if (Objects.nonNull(recordNum.getNum()) && recordNum.getNum() >= pushMessageRestrictions.getNumber()) { + failSignPatientManageRouteNodeIds.add(patientVO.getSignPatientManageRouteNodeId()); + } } subscribeMessageSendRecord.setPatientId(patientVO.getPatientId()); subscribeMessageSendRecord.setManageRouteNodeId(patientVO.getSignPatientManageRouteNodeId()); @@ -169,7 +194,11 @@ public class subscribeTaskServiceImpl implements SubscribeTaskService { } //更改成功执行状态 if (CollectionUtils.isNotEmpty(signPatientManageRouteNodeIds)) { - homePageMapper.updateNodeExecuteStatusByIds(signPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.SUCCESS.getInfo()); + signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(signPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.SUCCESS.getInfo(), null, null); + } + //更改失败执行状态 + if (CollectionUtils.isNotEmpty(failSignPatientManageRouteNodeIds)) { + signPatientManageRouteNodeMapper.updateNodeExecuteStatusByIds(failSignPatientManageRouteNodeIds, NodeExecuteStatusEnum.EXECUTED.getInfo(), NodeExecuteResultStatusEnum.FAILURE.getInfo(), null, null); } } }