From b46b8b8fee4d10e52dd882febc07974b02e2aed9 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期二, 03 十一月 2026 14:14:18 +0800
Subject: [PATCH] 本地测试前提交:跨模块收口相关源码改动
---
ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 151 insertions(+), 19 deletions(-)
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
index bad652a..8548af1 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/service/impl/ServiceSubtaskServiceImpl.java
@@ -101,11 +101,8 @@
import com.ruoyi.task.mapper.ServiceOutPathMapper;
import com.ruoyi.task.service.IServiceOutPathService;
import com.ruoyi.task.domain.ServiceSubtaskPreachform;
-import com.ruoyi.task.api.spi.TaskPreachformPort;
+import com.ruoyi.task.mapper.ServiceSubtaskPreachformMapper;
import com.ruoyi.task.api.spi.TaskArchivePort;
-import com.ruoyi.task.api.spi.TaskFtpPort;
-import com.ruoyi.task.api.spi.TaskSysConfigPort;
-import com.ruoyi.task.api.spi.TaskSysDeptPort;
import com.ruoyi.task.common.ScheduleSubtaskBuilder;
import com.ruoyi.task.domain.ServiceTaskScheduleVO;
import com.ruoyi.task.service.IServiceSubtaskService;
@@ -124,6 +121,8 @@
import com.ruoyi.task.domain.ServiceSubtaskTemplateVO;
import com.ruoyi.task.domain.ServiceTaskVO;
import com.ruoyi.task.domain.VO.TransferDeptVO;
+import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.mapper.ext.SysDept2Mapper;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級Service涓氬姟灞傚鐞�
@@ -166,7 +165,7 @@
private ServiceSubtaskMapper serviceSubtaskMapper;
@Autowired
- private TaskPreachformPort taskPreachformPort;
+ private ServiceSubtaskPreachformMapper taskPreachformPort;
@Autowired
private ServiceSubtaskDetailMapper serviceSubtaskDetailMapper;
@@ -221,9 +220,6 @@
@Autowired
private ScheduleSubtaskBuilder scheduleSubtaskBuilder;
- @Autowired
- private TaskFtpPort taskFtpPort;
-
@@ -236,7 +232,7 @@
@Autowired
- private TaskSysConfigPort taskSysConfigPort;
+ private ISysConfigService sysConfigService;
/**
* 娑堟伅鍙戦�佹柟宸ュ巶锛堢煭淇�/寰俊鍏紬鍙凤級锛屾浛浠e師鏉ョ洿鎺ヨ皟鐢ㄥ悇绔欑偣鍙戦�佷唬鐮佺殑鍐欐硶
@@ -255,7 +251,7 @@
@Autowired
- private TaskSysDeptPort taskSysDeptPort;
+ private SysDept2Mapper sysDept2Mapper;
@Value("${spring.profiles.active}")
private String active;
@@ -542,9 +538,9 @@
public List<ServiceSubtask> getServiceSubtasks(ServiceSubtaskEntity serviceSubtaskEntity) {
if (serviceSubtaskEntity.getSendstateView() != null) {
- // 1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��5 鍙戦�佸け璐ャ��7銆佽秴鏃讹級锛�2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
+ // 1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��7 瓒呮椂锛涘彂閫佸け璐�(5) 鍗曠嫭缁熻锛夛紱2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
if (serviceSubtaskEntity.getSendstateView() == 1)
- serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
+ serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 7L)));
if (serviceSubtaskEntity.getSendstateView() == 2)
serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
if (serviceSubtaskEntity.getSendstateView() == 3)
@@ -813,6 +809,50 @@
}
/**
+ * 缁熶竴銆岄殢璁跨梾鍖恒�嶅彛寰勶細涓�寰嬩互銆愬嚭闄㈣褰曘�憑@code pat_med_inhosp} 涓哄噯锛�2026-10-29 涓氬姟纭锛夈��
+ *
+ * <h3>涓轰粈涔堥渶瑕佸畠</h3>
+ * 鍑洪櫌闅忚瀛愪换鍔$殑绉戝/鐥呭尯鏈簲鏉ヨ嚜鍑洪櫌璁板綍锛屼絾銆屽啀娆¢殢璁� / 鎵嬪伐鏂板銆嶈繖涓や釜鍏ュ彛鏄�
+ * <b>鐩存帴鎸夊墠绔紶鏉ョ殑瀛楁钀藉簱</b>鐨勶細鍓嶇涓嶅甫杩欎簺瀛楁鏃�
+ * {@code leaveldeptcode} / {@code leavehospitaldistrictcode} / {@code campusid} 灏辨槸绌恒��
+ * 鑰岄殢璁垮垪琛ㄦ槸鎸夌瀹�/鐥呭尯杩囨护鐨勶紙{@code and leavehospitaldistrictcode = #{...}}锛夛紝
+ * 绌哄�间笉鍖归厤浠讳綍鍊� 鈫� 杩欎簺浠诲姟"鐢熸垚浜嗕絾椤甸潰涓婃煡涓嶅埌"锛堢嚎涓� 2026-10 瀹炴祴 314 鏉★級銆�
+ *
+ * <p>鍙e緞锛�<b>鐥呭尯鍙鍑洪櫌璁板綍</b> 鈥斺�� 涓嶆寜鎮h�呮。妗堝弽鎺ㄣ�佷篃涓嶇敤鍓嶇浼犵殑鍊笺��
+ * 鍙鍑洪櫌闅忚锛坽@code service_type='2'}锛変笖鑳藉畾浣嶅埌鍑洪櫌璁板綍锛坽@code inhospid} 闈炵┖锛夌殑琛岀敓鏁堬紱
+ * 鍏朵綑鎯呭喌鍘熸牱鏀捐锛屽婊℃剰搴�(6)/瀹f暀/闂ㄨ瘖绛夊叾瀹冪被鍨嬫病鏈変换浣曞奖鍝嶃��
+ *
+ * @param serviceSubtask 寰呰惤搴撶殑瀛愪换鍔★紙灏卞湴淇敼锛�
+ */
+ private void alignDischargeWardFromInhosp(ServiceSubtask serviceSubtask) {
+ if (serviceSubtask == null || serviceSubtask.getInhospid() == null) {
+ return;
+ }
+ if (!"2".equals(serviceSubtask.getServiceType())) {
+ return;
+ }
+ PatMedInhosp inhosp;
+ try {
+ inhosp = inhospVisitFacade.selectPatMedInhospByInhospid(serviceSubtask.getInhospid());
+ } catch (Exception e) {
+ log.warn("銆愰殢璁夸换鍔°�戞寜 inhospid={} 鍙栧嚭闄㈣褰曞け璐ワ紝鐥呭尯娌跨敤鍏ュ弬锛歿}",
+ serviceSubtask.getInhospid(), e.toString());
+ return;
+ }
+ if (inhosp == null) {
+ log.warn("銆愰殢璁夸换鍔°�慽nhospid={} 鏌ヤ笉鍒板嚭闄㈣褰曪紝鐥呭尯娌跨敤鍏ュ弬", serviceSubtask.getInhospid());
+ return;
+ }
+ serviceSubtask.setLeaveldeptcode(inhosp.getLeaveldeptcode());
+ serviceSubtask.setLeaveldeptname(inhosp.getLeaveldeptname());
+ serviceSubtask.setLeavehospitaldistrictcode(inhosp.getLeavehospitaldistrictcode());
+ serviceSubtask.setLeavehospitaldistrictname(inhosp.getLeavehospitaldistrictname());
+ if (StringUtils.isNotEmpty(inhosp.getCampusid())) {
+ serviceSubtask.setCampusid(inhosp.getCampusid());
+ }
+ }
+
+ /**
* 鏂板鍗曚竴浠诲姟锛堥殢璁匡級
*
* @param serviceSubtask 鍗曚竴浠诲姟锛堥殢璁匡級
@@ -854,6 +894,8 @@
}
serviceSubtask.setCreateTime(DateUtils.getNowDate());
+ // 鍙e緞锛�2026-10-29 涓氬姟纭锛夛細鍑洪櫌闅忚鐨勭瀹�/鐥呭尯涓�寰嬩互鍑洪櫌璁板綍涓哄噯
+ alignDischargeWardFromInhosp(serviceSubtask);
serviceSubtaskMapper.insertServiceSubtask(serviceSubtask);
//淇敼浣忛櫌婊℃剰搴︾姸鎬侊紙閬垮厤閲嶅鏌ヨ锛�
if (serviceSubtask.getServiceType() != null && "6".equals(serviceSubtask.getServiceType())) {
@@ -947,6 +989,13 @@
serviceSubtask2.setVisitType(serviceSubtask.getVisitType());
serviceSubtask2.setVisitDeptCode(serviceSubtask.getVisitDeptCode());
serviceSubtask2.setVisitDeptName(serviceSubtask.getVisitDeptName());
+ // 鍙e緞锛�2026-10-29 涓氬姟纭锛夛細闅忚鐥呭尯涓�寰嬪彇鍑洪櫌璁板綍鐨�
+ // 鈶� 鍐嶆闅忚鏄粠璇锋眰 DTO 澶嶅埗鍑烘潵鐨勶紝鍑洪櫌璁板綍ID 涓嶅湪璇锋眰閲� 鈫� 鍏堢敤鍘熶换鍔$殑涓婏紱
+ // 鈶� 鍐嶆寜鍑洪櫌璁板綍鎶婄瀹�/鐥呭尯/闄㈠尯缁熶竴杩囨潵锛堝彇涓嶅埌灏变繚鎸佷笉鍙橈級銆�
+ if (serviceSubtask2.getInhospid() == null) {
+ serviceSubtask2.setInhospid(serviceSubtask1.getInhospid());
+ }
+ alignDischargeWardFromInhosp(serviceSubtask2);
int i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask2);
if (i == 1) {
//鏂板鎴愬姛鍚庯紝闇�瑕佸皢涔嬪墠鐨勪换鍔¤缃负涓嶈鍐嶉殢璁匡紙闃叉閲嶅鐐癸紝鐒跺悗閲嶅鐢熸垚锛�
@@ -1085,7 +1134,7 @@
}
serviceTask.setLeaveldeptcodes(serviceTaskVO.getLeaveldeptcodes());
if (StringUtils.isEmpty(serviceTask.getLeavehospitaldistrictname()) && StringUtils.isNotEmpty(serviceTask.getLeavehospitaldistrictcode())) {
- SysDept sysDept = taskSysDeptPort.selectDeptByCode(serviceTask.getLeavehospitaldistrictcode(), null);
+ SysDept sysDept = sysDept2Mapper.selectDeptByCode(serviceTask.getLeavehospitaldistrictcode(), null);
serviceTask.setLeavehospitaldistrictname(sysDept.getDeptName());
}
if (serviceTaskVO.getLongTask() == 1) serviceTask.setSendState(2L);
@@ -3210,6 +3259,20 @@
serviceSubtaskCountReq.setGroupKey(groupKey);
// 鍒嗙粍鍒椾笌杩囨护鍒椾繚鎸佷竴鑷达細绂婚櫌绉戝 leaveldeptcode銆佸湪闄㈢瀹� deptcode
serviceSubtaskCountReq.setGroupColumn(groupKey);
+ /*
+ * 婊℃剰搴︺�岀梾鍖虹粺璁°�嶏紙绂婚櫌缁村害锛夛細鍑洪櫌鐥呭尯涓虹┖鍒欏洖閫�鍒板湪闄㈢梾鍖恒��
+ * 婊℃剰搴﹀瓙浠诲姟锛坰ervice_type 6/14/15/16锛夌殑 leavehospitaldistrictcode 绾︿笁鎴愪负绌猴紝
+ * 涔嬪墠涓轰簡鈥滄煡寰楀埌鏁版嵁鈥濇妸鐥呭尯鏉′欢鍐欐垚 `xxx IS NULL OR xxx IN (...)`锛�
+ * 浜庢槸閫変簡 A 鐥呭尯涔熶細鎶婄┖鐥呭尯鐨勫叏閲忔暟鎹甫杩涙潵锛屽啀缁熶竴褰掑埌 'Unknown' 缁勶紝
+ * 璇ョ粍鐨勭梾鍖哄悕鍙堟槸 MAX(hospitaldistrictname) 闅忎究鎸戠殑 鈥斺�� 琛ㄧ幇灏辨槸
+ * 鈥滈�変簡琛�娑插唴绉戠梾鍖猴紝鍗存煡鍑轰竴琛屾樉绀洪绉戜腑蹇冧笁鐥呭尯鈥濄��
+ * 鐢ㄢ�滄湁鏁堢梾鍖衡�濆垪杩囨护 + 鍒嗙粍鍚庯細绛涢�夌湡姝g敓鏁堬紝绌虹梾鍖虹殑璁板綍涔熷洖鍒板畠鐪熷疄鐨勫湪闄㈢梾鍖恒��
+ */
+ if ("leavehospitaldistrictcode".equals(groupKey)) {
+ String districtColumn = "IFNULL(leavehospitaldistrictcode, hospitaldistrictcode)";
+ serviceSubtaskCountReq.setGroupColumn(districtColumn);
+ serviceSubtaskCountReq.setDistrictColumn(districtColumn);
+ }
//鍒嗙粍閿泦鍚堬細杩欎竴姝ヤ繚鎸佷笉鍙橈紙鍒嗛〉鍙傛暟鐓ф棫浣滅敤鍦ㄨ鏌ヨ涓婏級锛屼繚璇佲�滃弬涓庣粺璁$殑鍒嗙粍鈥濅笌鏀归�犲墠涓�鑷�
List<String> groupKeyList = serviceSubtaskMapper.getSfStatisticsGroupKey(serviceSubtaskCountReq);
/*
@@ -3284,6 +3347,24 @@
serviceSubtaskStatistics.add(statistic);
}
+ /*
+ * 鐥呭尯缁熻锛氳繖涓�琛岀殑鐥呭尯灏辨槸鍒嗙粍閿湰韬紝灞曠ず鍚嶅彇璇ョ粍鑷繁鐨勭梾鍖哄悕銆�
+ * 鑱氬悎 SQL 閲屽師鏉ョ殑 MAX(hospitaldistrictname) 鍦ㄢ�滀竴涓粍娣蜂簡澶氫釜鐥呭尯鈥濇椂浼氭寫鍑�
+ * 涓�涓涓嶇浉骞茬殑鐥呭尯鍚嶏紙閫夎娑插唴绉戠梾鍖烘樉绀烘垚楠ㄧ涓績涓夌梾鍖哄氨鏄繖涔堟潵鐨勶級銆�
+ * 杩欓噷鎶婂垎缁勯敭鍥炲~鍒板湪闄�/绂婚櫌涓ゅ鐥呭尯瀛楁锛屼繚璇佸墠绔笉璁鸿鍝竴鍒楅兘鏄悓涓�涓梾鍖猴紝
+ * 涔熻鈥滄煡鐪嬭鎯呪�濆甫涓婃潵鐨勭梾鍖虹紪鐮佽兘鏌ュ洖鍚屼竴鎵规暟鎹��
+ */
+ if (StringUtils.isNotEmpty(serviceSubtaskCountReq.getDistrictColumn())) {
+ for (ServiceSubtaskStatistic statistic : serviceSubtaskStatistics) {
+ String districtCode = statistic.getGroupCode() == null ? "Unknown" : statistic.getGroupCode();
+ String districtName = StringUtils.isNotEmpty(statistic.getGroupName()) ? statistic.getGroupName() : districtCode;
+ statistic.setLeavehospitaldistrictcode(districtCode);
+ statistic.setLeavehospitaldistrictname(districtName);
+ statistic.setHospitaldistrictcode(districtCode);
+ statistic.setHospitaldistrictname(districtName);
+ }
+ }
+
//鑾峰彇鍙婃椂鐜囩粺璁″悎闆嗭紙涓�娆℃壒閲忔煡璇紝涓嶆寜鍒嗙粍寰幆鏌ワ級
Map<String, Map<String, Object>> jsRates = getSsRateForSfStatistics(serviceSubtaskCountReq, statisticsGroupKeys);
for (ServiceSubtaskStatistic statistic : serviceSubtaskStatistics) {
@@ -3313,7 +3394,9 @@
sum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
}
if (sum.intValue() != 0) {
- finishedPercentage = finishedSum.divide(sum, 2, RoundingMode.HALF_UP).doubleValue();
+ // 鍘熸潵鍙繚鐣� 2 浣嶅皬鏁帮紙23634/26106 浼氳鎴垚 0.91锛夛紝鍓嶇鍐� 脳100
+ // 灏辨樉绀烘垚 91.00%锛屼笌瀹為檯鐨� 90.53% 宸簡鍗婁釜鐧惧垎鐐广�傝繖閲屼繚鐣� 4 浣嶃��
+ finishedPercentage = finishedSum.divide(sum, 4, RoundingMode.HALF_UP).doubleValue();
}
serviceSubtaskStatistic.setJoyAllCount(sum.intValue());
serviceSubtaskStatistic.setJoyCount(finishedSum.intValue());
@@ -3574,6 +3657,55 @@
return serviceSubtaskMapper.getCurrentUserServiceSubtaskCount(entity);
}
+ /**
+ * 褰撳墠鐧诲綍浜哄緟澶勭悊闅忚浠诲姟锛屾寜鍑洪櫌骞存湀鍒嗙粍缁熻锛堝嚭闄㈤殢璁裤�侀棬璇婇殢璁垮垎寮�璁℃暟锛�
+ * <p>
+ * 鍙繑鍥炴湁鏁版嵁鐨勬湀浠斤紝鍓嶇鎸夈�屽綋鏈� + 鍓� 3 涓湀銆嶈ˉ榻愶紝娌℃湁鏁版嵁鏄剧ず 0 涓��
+ */
+ @Override
+ public Map<String, Object> getPendingManualTaskMonthStats(ServiceSubtaskEntity entity) {
+ List<Map<String, Object>> rows = serviceSubtaskMapper.countPendingManualTaskByMonth(entity);
+ List<Map<String, Object>> months = new ArrayList<>();
+ long total = 0L;
+ if (rows != null) {
+ for (Map<String, Object> row : rows) {
+ if (row == null || row.get("month") == null) {
+ continue;
+ }
+ long dischargeCount = parsePendingCount(row.get("dischargeCnt"));
+ long outpatientCount = parsePendingCount(row.get("outpatientCnt"));
+ if (dischargeCount <= 0 && outpatientCount <= 0) {
+ continue;
+ }
+ Map<String, Object> item = new LinkedHashMap<>();
+ item.put("month", row.get("month").toString());
+ item.put("dischargeCount", dischargeCount);
+ item.put("outpatientCount", outpatientCount);
+ months.add(item);
+ total += dischargeCount + outpatientCount;
+ }
+ }
+ Map<String, Object> result = new LinkedHashMap<>();
+ result.put("total", total);
+ result.put("months", months);
+ return result;
+ }
+
+ /**
+ * 缁熻缁撴灉閲岀殑鏁伴噺杞� long锛岃В鏋愬け璐ユ寜 0 澶勭悊
+ */
+ private long parsePendingCount(Object value) {
+ if (value == null) {
+ return 0L;
+ }
+ try {
+ return Long.parseLong(value.toString());
+ } catch (NumberFormatException e) {
+ log.warn("缁熻寰呭鐞嗛殢璁夸换鍔″け璐ワ紝鏁伴噺鏃犳硶瑙f瀽锛歿}", value);
+ return 0L;
+ }
+ }
+
@Override
public Map<String, Object> getContinueNurseCount(ServiceSubtaskCotinueCountVO vo) {
boolean hasDistrict = !CollectionUtils.isEmpty(vo.getLeavehospitaldistrictcodes());
@@ -3641,8 +3773,8 @@
public void setFailSubTaskDefalutVal(Long failDay) {
//1.鍏堝幓sys_config涓紝鑾峰彇鍝簺绉戝鎴栫梾鍖洪渶瑕侀粯璁ら棶鍗烽粯璁ゅ��
IConfigService configService = SpringUtils.getBean(IConfigService.class);
- String deptConfigValue = taskSysConfigPort.selectConfigValue("hosp.default.dept");
- String wardConfigValue = taskSysConfigPort.selectConfigValue("hosp.default.ward");
+ String deptConfigValue = sysConfigService.selectConfigByKey("hosp.default.dept");
+ String wardConfigValue = sysConfigService.selectConfigByKey("hosp.default.ward");
List<String> leaveWard = null;
List<String> leaveDept = null;
if (deptConfigValue != null && !deptConfigValue.isEmpty()) {
@@ -3870,8 +4002,8 @@
// 鍙傛暟鍊肩粡绔彛鍙栫敤锛堝師涓� sysConfigMapper.checkConfigKeyUnique + getConfigValue锛夈��
// 璇箟绛変环锛氬師鍒ゅ畾"琛屽瓨鍦�"銆佽繖閲屽垽瀹�"鍊奸潪 null"锛岃�� sys_config.config_value 鏄�
- // varchar(500) NOT NULL DEFAULT '' 鈬� 浜岃�呬笉鍙兘涓嶅悓锛堣瑙� TaskSysConfigPort javadoc锛夈��
- String smsContemt = taskSysConfigPort.findConfigValueByKey("wj.sms.template");
+ // varchar(500) NOT NULL DEFAULT '' 鈬� 浜岃�呬笉鍙兘涓嶅悓锛堣瑙� ISysConfigService javadoc锛夈��
+ String smsContemt = sysConfigService.selectConfigByKey("wj.sms.template");
if (smsContemt != null) {
sendMagParam.setContent(smsContemt.replace("${wjurl}", sendMagParam.getUrl()));
@@ -4214,7 +4346,7 @@
return null;
}
try {
- SysDept sysDept = taskSysDeptPort.selectDeptByCode(deptCode, orgid);
+ SysDept sysDept = sysDept2Mapper.selectDeptByCode(deptCode, orgid);
return sysDept == null ? null : sysDept.getCampusid();
} catch (Exception e) {
log.warn("鎸夌紪鐮佸弽鏌ラ櫌鍖哄け璐ワ細deptCode={}, orgid={}, err={}", deptCode, orgid, e.getMessage());
--
Gitblit v1.9.3