ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -23,6 +23,7 @@ import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysUserDeptService; import com.smartor.domain.*; import com.smartor.domain.VO.HeLibraryCountVO; import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO; import com.smartor.domain.VO.ServiceSubtaskVO; import com.smartor.domain.entity.ServiceSubtaskEntity; @@ -242,13 +243,12 @@ //@PreAuthorize("@ss.hasPermi('system:taskcall:list')") @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid") @PostMapping("/patItemByCondition") public TableDataInfo patItemByCondition(@RequestBody ServiceSubtaskVO serviceSubtaskVO) { public Map<String, Object> patItemByCondition(@RequestBody ServiceSubtaskVO serviceSubtaskVO) { List<ServiceSubtask> serviceSubtaskList = null; ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class); serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null); if (serviceSubtaskEntity != null) { PageUtils.startPageByPost(serviceSubtaskEntity.getPageNum(), serviceSubtaskEntity.getPageSize()); serviceSubtaskEntity.setPageNum(PageUtils.getOffset(serviceSubtaskEntity.getPageNum(), serviceSubtaskEntity.getPageSize())); serviceSubtaskList = serviceSubtaskService.patItem2(serviceSubtaskEntity); } for (ServiceSubtask serviceSubtask : serviceSubtaskList) { @@ -273,7 +273,7 @@ serviceSubtaskService.patItem2(serviceSubtaskEntity); } }); return getDataTable2(total, list); return getDataTable3(total, list); } /** @@ -730,4 +730,11 @@ return map; } @ApiOperation("è·åå½åç¨æ·å®£ææ°éç»è®¡") @PostMapping("/gethelibraryCount") public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO) { log.info("è·åå½åç¨æ·å®£ææ°éç»è®¡çå ¥å为ï¼{}", heLibraryCountVO); return serviceSubtaskService.getHeLibraryCount(heLibraryCountVO); } } smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -446,7 +446,7 @@ * å°±è¯ç±»åï¼1é¨è¯ 2åºé¢ï¼ */ @Excel(name = " å°±è¯ç±»åï¼1é¨è¯ 2åºé¢ï¼") @ApiModelProperty(value = "å°±è¯ç±»åï¼1é¨è¯ 2åºé¢ 3.ä¸ç 4.å¤é¨å¯¼å ¥ 5æ¥è¯ã5ä½é¢ã7使£ï¼") @ApiModelProperty(value = "å°±è¯ç±»åï¼1é¨è¯ 2åºé¢ 3.ä¸ç 4.å¤é¨å¯¼å ¥ 5æ¥è¯ã6ä½é¢ã7使£ï¼") private String hospType; smartor/src/main/java/com/smartor/domain/VO/HeLibraryCountVO.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,40 @@ package com.smartor.domain.VO; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; import java.util.List; @Data @ApiModel("宣æç»è®¡æ¥è¯¢è¯·æ±å¯¹è±¡") public class HeLibraryCountVO { @ApiModelProperty(value = "ç åºCodeéå") private List<String> hospitaldistrictcodes; @ApiModelProperty(value = "ç§å®¤Codeéå") private List<String> deptcodes; @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "åºé¢æ¶é´") private Date endtime; @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "å ¥é¢æ¶é´") private Date starttime; @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "宣æåéæ¶é´") private Date visittime; @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "宣æå®ææ¶é´") private Date finishtime; @ApiModelProperty(value = "å°±è¯ç±»åï¼1é¨è¯ 2åºé¢ 3.ä¸ç 4.å¤é¨å¯¼å ¥ 5æ¥è¯ã6ä½é¢ã7使£ï¼") private String hospType; } smartor/src/main/java/com/smartor/domain/entity/ServiceSubtaskEntity.java
@@ -105,6 +105,7 @@ */ @ApiModelProperty(value = "å 天忶ç") private Integer rateDay; /** * æ§å« */ smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -2,6 +2,7 @@ import com.smartor.domain.*; import com.smartor.domain.VO.PatSatisfactionReqVO; import com.smartor.domain.VO.HeLibraryCountVO; import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO; import com.smartor.domain.entity.ServiceSubtaskEntity; import com.smartor.domain.entity.ServiceSubtaskSatisfactionEntity; @@ -211,4 +212,12 @@ */ List<Map<String, Object>> getContinueNurseCountByDept(ServiceSubtaskCotinueCountVO vo); /** * 宣æç»è®¡ï¼æç åºæç§å®¤åç»ç»è®¡åéæåçå已读ç * * @param heLibraryCountVO æ¥è¯¢æ¡ä»¶ * @return æ¯ç»çç»è®¡ç»æï¼groupName, sendSuccessCount, totalCount, readCountï¼ */ List<Map<String, Object>> getHeLibraryCount(HeLibraryCountVO heLibraryCountVO); } smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -3,6 +3,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.smartor.domain.*; import com.smartor.domain.ServiceSubtask; import com.smartor.domain.VO.HeLibraryCountVO; import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO; import com.smartor.domain.entity.ServiceSubtaskEntity; import org.springframework.web.bind.annotation.RequestBody; @@ -169,4 +170,6 @@ * @return */ public void setFailSubTaskDefalutVal(Long failDay); public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO); } smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -264,70 +264,67 @@ // å¤çç¨æ·ä¸é¨é¨çå ³ç³» List businessDepts = (List<?>) dataItem.get("businessDepts"); if (CollectionUtils.isEmpty(businessDepts)) { continue; } if (CollectionUtils.isNotEmpty(businessDepts)) { List<List<String>> deptInfoList = new ArrayList<>(); List<List<String>> hospInfoList = new ArrayList<>(); log.info("------businessDeptsæ¯å¦æå¼ï¼{}", businessDepts.size()); for (Object businessDept : businessDepts) { if (businessDept instanceof Map) { Map<String, Object> businessDeptMap = (Map<String, Object>) businessDept; log.info("------businessDeptMapæ¯å¦æå¼ï¼{}", businessDeptMap); String hisDeptId = getStringValue(businessDeptMap, "deptId"); log.info("------hisDeptIdæ¯å¦æå¼ï¼{}, reqVO.getOrgId()çå¼ä¸º:{}", hisDeptId, reqVO.getCampusId()); //å¨è¿éï¼hisDeptIdå°±æ¯deptCode SysDept sysDept = sysDeptMapper.selectDeptByCode(hisDeptId, reqVO.getOrgId()); log.info("------hisDeptIdæ¯å¦æå¼ï¼{}, reqVO.getCampusId()çå¼ä¸º:{}", hisDeptId, reqVO.getCampusId()); if (Objects.isNull(sysDept)) continue; SysUserDept sysUserDept = new SysUserDept(); sysUserDept.setUserId(sysUser.getUserId()); sysUserDept.setDeptType(sysDept.getDeptType()); sysUserDept.setDeptId(sysDept.getDeptId()); sysUserDept.setDeptCode(sysDept.getDeptCode()); sysUserDept.setDeptName(sysDept.getDeptName()); sysUserDept.setOrgid(sysDept.getOrgid()); sysUserDept.setCreateTime(new Date()); sysUserDept.setDelFlag(0L); List<List<String>> deptInfoList = new ArrayList<>(); List<List<String>> hospInfoList = new ArrayList<>(); log.info("------businessDeptsæ¯å¦æå¼ï¼{}", businessDepts.size()); for (Object businessDept : businessDepts) { if (businessDept instanceof Map) { Map<String, Object> businessDeptMap = (Map<String, Object>) businessDept; log.info("------businessDeptMapæ¯å¦æå¼ï¼{}", businessDeptMap); // Long hisDeptId = (Long) personnelDeptMap.get("deptId"); String hisDeptId = getStringValue(businessDeptMap, "deptId"); log.info("------hisDeptIdæ¯å¦æå¼ï¼{}, reqVO.getOrgId()çå¼ä¸º:{}", hisDeptId, reqVO.getCampusId()); //å¨è¿éï¼hisDeptIdå°±æ¯deptCode SysDept sysDept = sysDeptMapper.selectDeptByCode(hisDeptId, reqVO.getOrgId()); log.info("------hisDeptIdæ¯å¦æå¼ï¼{}, reqVO.getCampusId()çå¼ä¸º:{}", hisDeptId, reqVO.getCampusId()); if (Objects.isNull(sysDept)) continue; SysUserDept sysUserDept = new SysUserDept(); sysUserDept.setUserId(sysUser.getUserId()); sysUserDept.setDeptType(sysDept.getDeptType()); sysUserDept.setDeptId(sysDept.getDeptId()); sysUserDept.setDeptCode(sysDept.getDeptCode()); sysUserDept.setDeptName(sysDept.getDeptName()); sysUserDept.setOrgid(sysDept.getOrgid()); sysUserDept.setCreateTime(new Date()); sysUserDept.setDelFlag(0L); //夿ä¸ä¸ç¨æ·-é¨é¨å ³ç³»æ¯ä¸æ¯å·²ç»åå¨äºï¼æ 论æ°ç¨æ·è¿æ¯èç¨æ·é½éè¦å»éï¼ if (ObjectUtils.isNotEmpty(sysUser.getUserId()) && ObjectUtils.isNotEmpty(sysDept)) { SysUserDept sud = new SysUserDept(); sud.setUserId(sysUser.getUserId()); sud.setDeptId(sysDept.getDeptId()); sud.setOrgid(sysDept.getOrgid()); List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sud); if (CollectionUtils.isNotEmpty(sysUserDepts)) { sysUserDept.setId(sysUserDepts.get(0).getId()); sysUserDeptMapper.updateSysUserDept(sysUserDept); } else { sysUserDeptMapper.insertSysUserDept(sysUserDept); //夿ä¸ä¸ç¨æ·-é¨é¨å ³ç³»æ¯ä¸æ¯å·²ç»åå¨äºï¼æ 论æ°ç¨æ·è¿æ¯èç¨æ·é½éè¦å»éï¼ if (ObjectUtils.isNotEmpty(sysUser.getUserId()) && ObjectUtils.isNotEmpty(sysDept)) { SysUserDept sud = new SysUserDept(); sud.setUserId(sysUser.getUserId()); sud.setDeptId(sysDept.getDeptId()); sud.setOrgid(sysDept.getOrgid()); List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sud); if (CollectionUtils.isNotEmpty(sysUserDepts)) { sysUserDept.setId(sysUserDepts.get(0).getId()); sysUserDeptMapper.updateSysUserDept(sysUserDept); } else { sysUserDeptMapper.insertSysUserDept(sysUserDept); } } if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("1")) { hospInfoList.add(Arrays.asList(sysDept.getDeptCode())); } else if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("2")) { deptInfoList.add(Arrays.asList(sysDept.getDeptCode())); } } if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("1")) { hospInfoList.add(Arrays.asList(sysDept.getDeptCode())); } else if (StringUtils.isNotEmpty(sysDept.getDeptType()) && sysDept.getDeptType().equals("2")) { deptInfoList.add(Arrays.asList(sysDept.getDeptCode())); } } //å°é¨é¨æç åºæ¾å°æå®åæ®µä¸ Gson gson = new Gson(); sysUser.setHospInfo(gson.toJson(hospInfoList)); sysUser.setDeptInfo(gson.toJson(deptInfoList)); sysUser2Mapper.updateUser(sysUser); } //å°é¨é¨æç åºæ¾å°æå®åæ®µä¸ Gson gson = new Gson(); sysUser.setHospInfo(gson.toJson(hospInfoList)); sysUser.setDeptInfo(gson.toJson(deptInfoList)); sysUser2Mapper.updateUser(sysUser); //设置ä¸ä¸ªé»è®¤è§è²ï¼å»çè§è²ï¼ List<SysUserRole> userRoleList = new ArrayList(); SysUserRole sur = new SysUserRole(); sur.setUserId(sysUser.getUserId()); sur.setRoleId(3L); sur.setRoleId(4L); sur.setOrgid(sysUser.getOrgid()); //å æ¥è¯¢ä¸ä¸ï¼æ¯å¦åå¨ SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(3L, sysUser.getUserId()); SysUserRole sysUserRole = sysUserRoleMapper.selectUserRoleByRoleIdAndUserId(4L, sysUser.getUserId()); if (ObjectUtils.isNotEmpty(sysUserRole)) continue; userRoleList.add(sur); smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -16,6 +16,7 @@ import com.smartor.config.PhoneUtils; import com.smartor.domain.DTO.ServiceSubtaskDetailDTO; import com.smartor.domain.*; import com.smartor.domain.VO.HeLibraryCountVO; import com.smartor.domain.VO.ServiceSubtaskCotinueCountVO; import com.smartor.domain.entity.ServiceSubtaskEntity; import com.smartor.mapper.*; @@ -31,6 +32,7 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import java.math.BigDecimal; import java.math.RoundingMode; @@ -3589,7 +3591,8 @@ map.put("content", sendMagParam.getContent()); String result = HttpUtil.postJsonRequest(xhsmsPath, new Gson().toJson(map)); redisCache.setCacheObject(subTaskId + "recordAccept-hungup", "1", 10, TimeUnit.MINUTES); if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) serviceSubtask.setRemark("çµè¯åéææ¥,çä¿¡è¡¥å¿åéæå"); if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) serviceSubtask.setRemark("çµè¯åéææ¥,çä¿¡è¡¥å¿åéæå"); else serviceSubtask.setRemark("çä¿¡è¡¥å¿åéæå"); serviceSubtask.setSendstate(3L); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); @@ -4172,6 +4175,38 @@ } } @Override public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO) { if (ObjectUtils.isEmpty(heLibraryCountVO)) { return new HashMap<>(); } // 1. æ¥è¯¢åç»ç»è®¡ï¼åéæ»éãåéæåéã已读éï¼ List<Map<String, Object>> groupStats = serviceSubtaskMapper.getHeLibraryCount(heLibraryCountVO); // 2. 计ç®åç»çåéæåçå已读ç List<Map<String, Object>> result = new ArrayList<>(); if (CollectionUtils.isNotEmpty(groupStats)) { for (Map<String, Object> row : groupStats) { long totalCount = row.get("totalCount") != null ? ((Number) row.get("totalCount")).longValue() : 0L; long sendSuccessCount = row.get("sendSuccessCount") != null ? ((Number) row.get("sendSuccessCount")).longValue() : 0L; long readCount = row.get("readCount") != null ? ((Number) row.get("readCount")).longValue() : 0L; // åéæåç double sendSuccessRate = totalCount > 0 ? (double) sendSuccessCount / totalCount : 0.0; // 已读çï¼åºäºåéæåçæ°é计ç®ï¼ double readRate = sendSuccessCount > 0 ? (double) readCount / sendSuccessCount : 0.0; row.put("sendSuccessRate", sendSuccessRate); row.put("readRate", readRate); result.add(row); } } Map<String, Object> resultMap = new HashMap<>(); resultMap.put("list", result); resultMap.put("total", result.size()); return resultMap; } private Boolean saveServiceSubtaskDetail(ServiceSubtask serviceSubtask) { Boolean result = true; //3.4 妿3.1æ3.2为trueçè¯ï¼æ ¹æ®type夿ä»ä¹ç±»å smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -2495,4 +2495,50 @@ ORDER BY groupCode </select> <!-- 宣æç»è®¡ï¼æç åºæç§å®¤åç»ï¼ç»è®¡åéæ»éãåéæåéï¼sendstate=6ï¼ã已读éï¼finishtimeä¸ä¸ºç©ºï¼ --> <select id="getHeLibraryCount" parameterType="com.smartor.domain.VO.HeLibraryCountVO" resultType="map"> SELECT <choose> <when test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0"> leavehospitaldistrictcode AS groupCode, leavehospitaldistrictname AS groupName, </when> <otherwise> deptcode AS groupCode, deptname AS groupName, </otherwise> </choose> COUNT(*) AS totalCount, SUM(CASE WHEN sendstate = 6 THEN 1 ELSE 0 END) AS sendSuccessCount, SUM(CASE WHEN finishtime IS NOT NULL THEN 1 ELSE 0 END) AS readCount FROM service_subtask WHERE del_flag = 0 AND service_type = 4 <if test="starttime != null">AND starttime >= #{starttime}</if> <if test="endtime != null">AND endtime <= #{endtime}</if> <if test="visittime != null">AND DATE(visit_time) = DATE(#{visittime})</if> <if test="finishtime != null">AND DATE(finishtime) = DATE(#{finishtime})</if> <if test="hospType != null and hospType != ''">AND hosp_type = #{hospType}</if> <choose> <when test="hospitaldistrictcodes != null and hospitaldistrictcodes.size() > 0"> AND leavehospitaldistrictcode IN <foreach collection="hospitaldistrictcodes" item="code" open="(" separator="," close=")"> #{code} </foreach> GROUP BY leavehospitaldistrictcode, leavehospitaldistrictname ORDER BY groupCode </when> <otherwise> <if test="deptcodes != null and deptcodes.size() > 0"> AND deptcode IN <foreach collection="deptcodes" item="code" open="(" separator="," close=")"> #{code} </foreach> </if> GROUP BY deptcode, deptname ORDER BY groupCode </otherwise> </choose> </select> </mapper>