From 579438ab87a88332f3643fbeefb3bbc43c87ae59 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 04 十一月 2026 10:36:43 +0800
Subject: [PATCH] 【丽水】妇幼门诊接诊完成记录生成专科档案

---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |  178 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 178 insertions(+), 0 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
index bdcb5e9..f482eaf 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -5926,6 +5926,184 @@
         }
     }
 
+    /**
+     * 寰俊鍏紬鍙峰凡棰嗗彇鏈~鍐欙細鎸夐鐩粯璁ら�夐」琛ラ綈褰撳墠瀛愪换鍔★紝骞跺皢褰撳墠瀛愪换鍔″畬鎴愩��
+     * <p>
+     * 鎵�鏈夋煡璇€�佹槑缁嗗啓鍏ャ�佺姸鎬佹洿鏂伴兘鍙娇鐢ㄥ綋鍓� subid锛岄伩鍏嶅奖鍝嶅叾浠栦换鍔�/瀛愪换鍔°��
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean completeWechatClaimedByDefault(ServiceSubtask serviceSubtask) {
+        if (serviceSubtask == null || serviceSubtask.getId() == null) {
+            return false;
+        }
+
+        // 閲嶆柊璇诲彇褰撳墠瀛愪换鍔★紝鎵�鏈夊垽鏂彧閽堝杩欎竴涓� subid
+        ServiceSubtask current = serviceSubtaskMapper.selectServiceSubtaskById(serviceSubtask.getId());
+        if (current == null) {
+            return false;
+        }
+        // 鍙鐞嗭細涓芥按涓尰闄€�侀棶鍗枫�佸綋鍓嶆柟寮忓叕浼楀彿銆佸凡棰嗗彇銆佹湭鎻愪氦
+        // 鍏朵粬鍖婚櫌 orgid 涓嶅尮閰嶆椂鐩存帴杩斿洖 false锛岀户缁蛋鍘熻ˉ鍋块�昏緫銆�
+        if (!IServiceSubtaskService.WECHAT_DEFAULT_COMPLETE_ORGID.equals(current.getOrgid())
+                || !"2".equals(current.getType())
+                || !"5".equals(current.getCurrentPreachform())
+                || !Long.valueOf(1L).equals(current.getSendstate())
+                || Long.valueOf(1L).equals(current.getSubmit())) {
+            return false;
+        }
+
+        // 鏌ヨ褰撳墠瀛愪换鍔¤嚜宸辩殑鍏紬鍙峰彂閫佹柟寮忥紝蹇呴』鏄凡鍙戦��(2)鎴栧凡棰嗗彇(3)
+        ServiceSubtaskPreachform query = new ServiceSubtaskPreachform();
+        query.setSubid(current.getId());
+        query.setTaskid(current.getTaskid());
+        query.setPreachform("5");
+        List<ServiceSubtaskPreachform> preachforms = serviceSubtaskPreachformMapper.selectServiceSubtaskPreachformList(query);
+        if (CollectionUtils.isEmpty(preachforms)) {
+            return false;
+        }
+        ServiceSubtaskPreachform currentPreachform = preachforms.stream()
+                .filter(item -> "2".equals(item.getSendstate()) || "3".equals(item.getSendstate()))
+                .findFirst().orElse(null);
+        if (currentPreachform == null) {
+            return false;
+        }
+
+        // 鍙粰褰撳墠 subid 琛ラ綈榛樿閫夐」锛涜嚦灏戞湁涓�棰橀粯璁ら�夐」鎵嶇户缁�
+        int filled = fillWechatDefaultDetailForCurrentSubtask(current);
+        if (filled <= 0) {
+            log.info("銆愬井淇″叕浼楀彿榛樿瀹屾垚銆憇ubid锛歿} 娌℃湁鍙~鍏呯殑榛樿閫夐」锛岃烦杩�", current.getId());
+            return false;
+        }
+
+        // 褰撳墠鍏紬鍙峰彂閫佹柟寮忥細宸插彂閫�/宸查鍙� -> 瀹屾垚(9)
+        ServiceSubtaskPreachform updatePreachform = new ServiceSubtaskPreachform();
+        updatePreachform.setId(currentPreachform.getId());
+        updatePreachform.setSubid(current.getId());
+        updatePreachform.setPreachform("5");
+        updatePreachform.setOrgid(current.getOrgid());
+        updatePreachform.setRemark("宸查鍙栨湭濉啓锛屾寜榛樿閫夐」瀹屾垚");
+        int preachformUpdated = serviceSubtaskPreachformMapper.updateWechatPreachformComplete(updatePreachform);
+        if (preachformUpdated == 0) {
+            throw new BaseException("寰俊鍏紬鍙烽粯璁ゅ畬鎴愬け璐ワ細鍙戦�佹柟寮忕姸鎬佸凡鍙樺寲锛宻ubid=" + current.getId());
+        }
+
+        // 褰撳墠瀛愪换鍔★細宸查鍙�(1) -> 瀹屾垚(6)锛屽彧鏇存柊杩欎竴涓� subid
+        ServiceSubtask complete = new ServiceSubtask();
+        complete.setId(current.getId());
+        complete.setOrgid(current.getOrgid());
+        complete.setFinishtime(new Date());
+        complete.setResult("success");
+        complete.setRemark("宸查鍙栨湭濉啓锛屾寜榛樿閫夐」瀹屾垚");
+        int subtaskUpdated = serviceSubtaskMapper.updateWechatDefaultComplete(complete);
+        if (subtaskUpdated == 0) {
+            throw new BaseException("寰俊鍏紬鍙烽粯璁ゅ畬鎴愬け璐ワ細瀛愪换鍔$姸鎬佸凡鍙樺寲锛宻ubid=" + current.getId());
+        }
+
+        log.info("銆愬井淇″叕浼楀彿榛樿瀹屾垚銆憇ubid锛歿}锛屽凡鎸夐粯璁ら�夐」瀹屾垚锛屽~鍏呴鐩暟锛歿}", current.getId(), filled);
+        return true;
+    }
+
+    /**
+     * 浠呯粰褰撳墠瀛愪换鍔¤ˉ榻愰棶鍗峰崟閫�/澶氶�夐涓� default_value=2 鐨勯�夐」銆�
+     * 宸叉湁闈炵┖绛旀鐨勯鐩烦杩囷紝涓嶈鐩栨偅鑰呭凡濉啓鍐呭銆�
+     *
+     * @return 瀹為檯濉厖锛堟垨姝ゅ墠宸茬敱绯荤粺榛樿濉厖锛夌殑棰樼洰鏁�
+     */
+    private int fillWechatDefaultDetailForCurrentSubtask(ServiceSubtask serviceSubtask) {
+        Long templateId = serviceSubtask.getTemplateid();
+        ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid());
+        if (templateId == null && serviceTask != null) {
+            templateId = serviceTask.getTemplateid();
+        }
+        if (templateId == null) {
+            return 0;
+        }
+
+        SvyTaskTemplateScript scriptQuery = new SvyTaskTemplateScript();
+        scriptQuery.setTemplateID(templateId);
+        List<SvyTaskTemplateScript> scripts = svyTaskTemplateScriptService.selectSvyTaskTemplateScriptList(scriptQuery);
+        if (CollectionUtils.isEmpty(scripts)) {
+            return 0;
+        }
+
+        int filled = 0;
+        for (SvyTaskTemplateScript script : scripts) {
+            SvyTaskTemplateScriptVO scriptVO = DtoConversionUtils.sourceToTarget(script, SvyTaskTemplateScriptVO.class);
+            SvyTaskTemplateScriptVO scriptWithOptions = svyTaskTemplateScriptService.selectInfoByCondition(scriptVO);
+            if (scriptWithOptions == null
+                    || scriptWithOptions.getId() == null
+                    || CollectionUtils.isEmpty(scriptWithOptions.getSvyTaskTemplateTargetoptions())
+                    || (!"1".equals(scriptWithOptions.getScriptType()) && !"2".equals(scriptWithOptions.getScriptType()))) {
+                continue;
+            }
+
+            List<SvyTaskTemplateTargetoption> options = scriptWithOptions.getSvyTaskTemplateTargetoptions();
+            List<SvyTaskTemplateTargetoption> defaultOptions = options.stream()
+                    .filter(option -> option.getDefaultValue() != null && option.getDefaultValue() == 2L)
+                    .filter(option -> StringUtils.isNotBlank(option.getOptioncontent()))
+                    .collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(defaultOptions)) {
+                continue;
+            }
+
+            // 宸叉湁闈炵┖绛旀鍒欎笉瑕嗙洊锛岄伩鍏嶅奖鍝嶆偅鑰呭凡濉啓鍐呭
+            ServiceSubtaskDetail detailQuery = new ServiceSubtaskDetail();
+            detailQuery.setSubId(serviceSubtask.getId());
+            detailQuery.setScriptid(scriptWithOptions.getId());
+            List<ServiceSubtaskDetail> existingDetails = serviceSubtaskDetailMapper.selectServiceSubtaskDetailList(detailQuery);
+            ServiceSubtaskDetail existing = CollectionUtils.isNotEmpty(existingDetails) ? existingDetails.get(0) : null;
+            if (existing != null
+                    && (StringUtils.isNotBlank(existing.getAsrtext()) || StringUtils.isNotBlank(existing.getMatchedtext()))) {
+                // 涔嬪墠宸茬敱绯荤粺榛樿濉厖杩囩殑锛岃鍏ュ凡濉厖锛屼繚璇侀噸璇曞箓绛�
+                if ("DEFAULT".equals(existing.getOperate())) {
+                    filled++;
+                }
+                continue;
+            }
+
+            String targetValue = options.stream()
+                    .map(SvyTaskTemplateTargetoption::getOptioncontent)
+                    .filter(StringUtils::isNotBlank)
+                    .collect(Collectors.joining("&"));
+            String defaultValue = defaultOptions.stream()
+                    .map(SvyTaskTemplateTargetoption::getOptioncontent)
+                    .collect(Collectors.joining("&"));
+
+            ServiceSubtaskDetail detail = new ServiceSubtaskDetail();
+            detail.setSubId(serviceSubtask.getId());
+            detail.setTaskid(serviceSubtask.getTaskid());
+            detail.setPatid(serviceSubtask.getPatid());
+            detail.setScriptid(scriptWithOptions.getId());
+            detail.setTemplatequestionnum(scriptWithOptions.getId());
+            detail.setQuestiontext(scriptWithOptions.getScriptContent());
+            detail.setCategoryid(scriptWithOptions.getCategoryid());
+            detail.setTargetid(scriptWithOptions.getTargetid() != null ? scriptWithOptions.getTargetid().intValue() : null);
+            detail.setValueType(scriptWithOptions.getScriptType());
+            detail.setTargetvalue(targetValue);
+            detail.setAsrtext(defaultValue);
+            detail.setMatchedtext(defaultValue);
+            detail.setOperate("DEFAULT");
+            detail.setTemplateType(2);
+            detail.setLibTemplateid(serviceSubtask.getLibtemplateid() != null ? serviceSubtask.getLibtemplateid().intValue() : null);
+            detail.setTemplateid(templateId.toString());
+            detail.setGuid(scriptWithOptions.getGuid());
+            detail.setOrgid(StringUtils.isNotEmpty(scriptWithOptions.getOrgid()) ? scriptWithOptions.getOrgid()
+                    : (serviceTask != null ? serviceTask.getOrgid() : null));
+            detail.setCreateTime(new Date());
+            detail.setUpdateTime(new Date());
+
+            if (existing != null) {
+                detail.setId(existing.getId());
+                serviceSubtaskDetailMapper.updateServiceSubtaskDetail(detail);
+            } else {
+                serviceSubtaskDetailMapper.insertServiceSubtaskDetail(detail);
+            }
+            filled++;
+        }
+        return filled;
+    }
+
     @Override
     public Map<String, Object> getHeLibraryCount(@RequestBody HeLibraryCountVO heLibraryCountVO) {
         if (ObjectUtils.isEmpty(heLibraryCountVO)) {

--
Gitblit v1.9.3