Prechádzať zdrojové kódy

医嘱变更单药品分组

zengfanwei 9 hodín pred
rodič
commit
12ec268206

+ 3 - 1
src/main/java/thyyxxk/webserver/dao/his/executeItem/YzChangeDao.java

@@ -66,6 +66,8 @@ public interface YzChangeDao {
             "       yz_act_order.self_buy," +
             "       yz_act_order.order_time," +
             "       yz_act_order.exec_time," +
+            "       yz_act_order.parent_no," +
+            "       yz_act_order.serial," +
             "       exec_id=(select name from a_employee_mi a where a.code= yz_act_order.exec_id)," +
             "       order_flag='0'" +
             " FROM yz_act_order" +
@@ -130,7 +132,7 @@ public interface YzChangeDao {
             " AND ((yz_act_order.supply_code != '001' ) OR (yz_act_order.supply_code is null))" +
             "</if>"+
             "<if test=\"frequCode != null and frequCode != '' \">" +
-            "  AND yz_act_order.frequ_code  ${frequCode}" +
+            "  AND yz_act_order.frequ_code = #{frequCode}" +
             "</if>"+
             "<if test=\"typeClass != null and typeClass != '' \">" +
             "  AND yz_supply_type.class = #{typeClass}  " +

+ 3 - 4
src/main/java/thyyxxk/webserver/entity/executeItem/YzChangeData.java

@@ -45,8 +45,7 @@ public class YzChangeData {
     private Date orderTime;
     //0 医嘱  1 撤销医嘱
     private String orderFlag;
-
-
-
-
+    private BigDecimal parentNo;
+    private String groupFlag;
+    private String serial;
 }

+ 73 - 4
src/main/java/thyyxxk/webserver/service/executeItem/YzChangeService.java

@@ -17,10 +17,7 @@ import thyyxxk.webserver.utils.ResultVoUtil;
 import thyyxxk.webserver.utils.TokenUtil;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -45,6 +42,9 @@ public class YzChangeService {
         List<YzChangeData>  result = new ArrayList<>();
         dealYzChangeParam(param);
         List<YzChangeData> list = dao.listYzActOrder(param);
+        // 调用groupFlag处理方法
+        processGroupFlags(list);
+
         if (CollUtil.isNotEmpty(list)) {
             result.addAll(list);
         }
@@ -62,6 +62,75 @@ public class YzChangeService {
         return result;
     }
 
+    private void processGroupFlags(List<YzChangeData> list) {
+        if (CollUtil.isEmpty(list)) {
+            return;
+        }
+
+        // 1. 建立映射关系:actOrderNo -> 元素(用于快速查找主项b)
+        Map<BigDecimal, YzChangeData> actOrderMap = new HashMap<>();
+        // 2. 建立映射关系:parentNo -> 子元素列表(用于快速查找主项b的所有子项)
+        Map<BigDecimal, List<YzChangeData>> childMap = new HashMap<>();
+
+        // 初始化映射关系
+        for (YzChangeData item : list) {
+            // 建立actOrderNo到元素的映射(用于找主项b)
+            BigDecimal actOrderNo = item.getActOrderNo();
+            if (actOrderNo != null) {
+                actOrderMap.put(actOrderNo, item);
+            }
+
+            // 建立parentNo到子元素列表的映射(用于找b的子项)
+            BigDecimal parentNo = item.getParentNo();
+            if (parentNo != null) {
+                childMap.computeIfAbsent(parentNo, k -> new ArrayList<>()).add(item);
+            }
+        }
+
+        // 记录已处理的主项actOrderNo,避免重复处理
+        Set<BigDecimal> processedMainActOrderNos = new HashSet<>();
+
+        // 遍历列表,寻找符合条件的元素a
+        for (YzChangeData a : list) {
+            String serial = a.getSerial();
+            BigDecimal parentNo = a.getParentNo();
+
+            // 判断元素a是否符合条件:serial为'01'或'99',且parentNo不为空
+            if (parentNo != null && ("01".equals(serial) || "99".equals(serial))) {
+                // 找到主项b:actOrderNo等于a的parentNo
+                YzChangeData b = actOrderMap.get(parentNo);
+                if (b == null) {
+                    continue; // 主项b不存在,跳过处理
+                }
+
+                // 避免重复处理同一个主项b
+                if (processedMainActOrderNos.contains(b.getActOrderNo())) {
+                    continue;
+                }
+
+                // 3. 给主项b设置groupFlag为'┌'
+                b.setGroupFlag("┌");
+
+                // 4. 找到主项b的所有子项(parentNo等于b的actOrderNo的元素)
+                BigDecimal bActOrderNo = b.getActOrderNo();
+                List<YzChangeData> bChildren = childMap.getOrDefault(bActOrderNo, new ArrayList<>());
+
+                // 5. 处理子项的groupFlag:最后一个设为'└',其余设为'丨'
+                for (int i = 0; i < bChildren.size(); i++) {
+                    YzChangeData child = bChildren.get(i);
+                    if (i == bChildren.size() - 1) {
+                        child.setGroupFlag("└");
+                    } else {
+                        child.setGroupFlag("丨");
+                    }
+                }
+
+                // 标记主项b已处理
+                processedMainActOrderNos.add(bActOrderNo);
+            }
+        }
+    }
+
     private void dealYzChangeParam(YzChangeParam param) {
         if(CollUtil.newArrayList(YzChangeParam.ChangeClassEnum.CQ_KF.getCode(),YzChangeParam.ChangeClassEnum.LS_KF.getCode()).contains(param.getChangeClass())){
             param.setTypeClass("1");