Browse Source

完成医嘱开长期医嘱变成临时医嘱的功能

xiaochan 4 ngày trước cách đây
mục cha
commit
967ed0afc5

+ 2 - 0
src/main/java/thyyxxk/webserver/config/exception/ExceptionEnum.java

@@ -22,6 +22,8 @@ public enum ExceptionEnum implements ExceptionEnumInterface {
     // 以下是需要消息提示的错误
     INTERNAL_SERVER_ERROR(1001, "服务器内部错误!"),
     NULL_POINTER(1002, "有不合法的空值存在!"),
+    ERROR_EL_MESSAGE(1002, "前端 ElMessage 通知!"),
+
     NETWORK_ERROR(1003, "网络异常!"),
     EXIST_NEGATIVE_FEES(1004, "此患者费用清单存在负数。"),
     EXIST_UNHANDLED_DRUG_ORDER(1104, "此患者有未处理的药单,请联系药房处理。"),

+ 7 - 0
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/YizhuLuRuController.java

@@ -23,6 +23,7 @@ import thyyxxk.webserver.entity.zhuyuanyisheng.OneClickOrder;
 import thyyxxk.webserver.entity.zhuyuanyisheng.dto.doctorAuth.DoctorAuthParams;
 import thyyxxk.webserver.entity.zhuyuanyisheng.vo.doctorAuth.DoctorAuthRest;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.*;
+import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.req.CopyOrderOnceReq;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.req.PoisonousHempReq;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.vo.printOrder.PrintOrderVo;
 import thyyxxk.webserver.service.hutoolcache.CacheEnums;
@@ -33,6 +34,7 @@ import thyyxxk.webserver.utils.R;
 import thyyxxk.webserver.utils.ResultVoUtil;
 import thyyxxk.webserver.utils.StringUtil;
 
+import javax.validation.Valid;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -292,4 +294,9 @@ public class YizhuLuRuController {
         return server.printPoisonousHemp(params);
     }
 
+    @PostMapping("/copyOrderToOnce")
+    public ResultVo<JSONObject> copyOrderToOnce(@RequestBody @Valid CopyOrderOnceReq req) {
+        return server.copyOrderToOnce(req);
+    }
+
 }

+ 13 - 4
src/main/java/thyyxxk/webserver/controller/zhuyuanyizheng/emr/EmrController.java

@@ -2,6 +2,7 @@ package thyyxxk.webserver.controller.zhuyuanyizheng.emr;
 
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import thyyxxk.webserver.config.auth.PassToken;
@@ -16,7 +17,9 @@ import thyyxxk.webserver.entity.zhuyuanyisheng.ZyZkList;
 import thyyxxk.webserver.entity.zhuyuanyisheng.emr.*;
 import thyyxxk.webserver.entity.zhuyuanyisheng.jianyanjiancha.YshYjReq;
 import thyyxxk.webserver.entity.zhuyuanyisheng.shoushu.OpRecord;
+import thyyxxk.webserver.service.externalhttp.emr.EmrEditor;
 import thyyxxk.webserver.service.zhuyuanyisheng.emr.EmrServer;
+import thyyxxk.webserver.utils.R;
 import thyyxxk.webserver.utils.ResultVoUtil;
 import thyyxxk.webserver.utils.StringUtil;
 
@@ -28,14 +31,12 @@ import java.util.Map;
  */
 @RequestMapping("/Emr")
 @RestController
+@RequiredArgsConstructor
 public class EmrController {
     private final EmrServer server;
     private final ApiUrl apiUrl;
+    private final EmrEditor emr;
 
-    public EmrController(EmrServer server, ApiUrl apiUrl) {
-        this.server = server;
-        this.apiUrl = apiUrl;
-    }
 
     @GetMapping("/getPatientDataTree")
     @PassToken
@@ -304,4 +305,12 @@ public class EmrController {
         }
         return ResultVoUtil.success(url);
     }
+
+    @GetMapping("/history/destroy")
+    @PassToken
+    public ResultVo<String> historyDestroy() {
+        emr.historyDestroy();
+        return R.ok();
+    }
+
 }

+ 121 - 2
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/YiZhuLuRuDao.java

@@ -121,7 +121,7 @@ public interface YiZhuLuRuDao {
     default List<XinZhenYzActOrder> selectOrderNo(@Param(Constants.WRAPPER) QueryWrapper<?> wq) {
         String fullSql = WrapperUtils.getFullSql(wq);
         List<XinZhenYzActOrder> xinZhenYzActOrders = this.selectOrderNoByOld(fullSql);
-        List<XinZhenYzActOrder> xinZhenYzActOrders1 = this.selectOrderNoByNew(fullSql);
+        List<XinZhenYzActOrder> xinZhenYzActOrders1 = this.selectOrderNoByNew("status_flag = '1' and " + fullSql);
         List<XinZhenYzActOrder> result = new ArrayList<>();
         result.addAll(xinZhenYzActOrders1);
         result.addAll(xinZhenYzActOrders);
@@ -242,7 +242,7 @@ public interface YiZhuLuRuDao {
             "from view_xc_all_yz a  with (NOLOCK) left join " +
             "zy_order_zk b with (NOLOCK) on (a.act_order_no = b.act_order_no) left join " +
             "yz_act_record_kss kss on (a.act_order_no = kss.act_order_no) " +
-            "where status_flag = '1' and  ${sql} ")
+            "where ${sql} ")
     List<XinZhenYzActOrder> selectOrderNoByNew(String sql);
 
 
@@ -1651,4 +1651,123 @@ public interface YiZhuLuRuDao {
             "where a.serial <> '00' " +
             "  and b.drug_flag in ('1', '2', '3', '4','6') and ${ew.sqlSegment} ")
     List<PrintOrderVo.DrugData> selectPoisonousHempByConfirm(@Param(Constants.WRAPPER) Wrapper<?> qw);
+
+
+    @Insert("insert into yz_act_order (act_order_no, status_flag, frequ_code, parent_no, inpatient_no, admiss_times, order_code,\n" +
+            "                          order_time,\n" +
+            "                          enter_time,\n" +
+            "                          enter_oper, start_time, end_time, infant_flag, drug_flag, supply_code, performance_time,\n" +
+            "                          physician, confirm_time, signer, modifier, status_time, drug_quan, instruction,\n" +
+            "                          drug_specification, mini_unit, drug_weight, drug_weight_unit, print_order_change,\n" +
+            "                          self_buy, eat_card_flag, drug_volume, drug_vol_unit, dose, dose_unit, drug_occ, print_order,\n" +
+            "                          print_order_once, print_order_anew, print_infusion, exclu_back_time, exclu_act_order_no,\n" +
+            "                          order_name, discription, del_flag, pay_self, serial, group_no, ward_code, yb_self_flag,\n" +
+            "                          doctor_flag, dept_code, exec_unit, cl_code, zy_serial_no, executer1, executer2, reg_flag,\n" +
+            "                          msg_flag, exec_time, exec_id, ps_status, ps_oper, ps_time, exec_id2, act_order_no2,\n" +
+            "                          print_page, print_page_once, print_order_change_end, emergency_flag, req_receive_flag,\n" +
+            "                          inspect_stuff, charge_status, ps_result_time, kf_flag, modifier_oper, pass_flag, pass_id,\n" +
+            "                          pass_date, pass_comment, refer_physician, consult_physician, req_no)\n" +
+            "select ${pa.actOrderNo},\n" +
+            "       '2',\n" +
+            "       'ONCE',\n" +
+            "       #{pa.parentNo,jdbcType=DECIMAL},\n" +
+            "       inpatient_no,\n" +
+            "       admiss_times,\n" +
+            "       order_code,\n" +
+            "       order_time,\n" +
+            "       enter_time,\n" +
+            "       enter_oper,\n" +
+            "       start_time,\n" +
+            "       end_time,\n" +
+            "       infant_flag,\n" +
+            "       drug_flag,\n" +
+            "       supply_code,\n" +
+            "       performance_time,\n" +
+            "       physician,\n" +
+            "       confirm_time,\n" +
+            "       signer,\n" +
+            "       modifier,\n" +
+            "       status_time,\n" +
+            "       drug_quan,\n" +
+            "       instruction,\n" +
+            "       drug_specification,\n" +
+            "       mini_unit,\n" +
+            "       drug_weight,\n" +
+            "       drug_weight_unit,\n" +
+            "       print_order_change,\n" +
+            "       self_buy,\n" +
+            "       eat_card_flag,\n" +
+            "       drug_volume,\n" +
+            "       drug_vol_unit,\n" +
+            "       dose,\n" +
+            "       dose_unit,\n" +
+            "       drug_occ,\n" +
+            "       print_order,\n" +
+            "       print_order_once,\n" +
+            "       print_order_anew,\n" +
+            "       print_infusion,\n" +
+            "       exclu_back_time,\n" +
+            "       exclu_act_order_no,\n" +
+            "       order_name,\n" +
+            "       discription,\n" +
+            "       del_flag,\n" +
+            "       pay_self,\n" +
+            "       serial,\n" +
+            "       group_no,\n" +
+            "       ward_code,\n" +
+            "       yb_self_flag,\n" +
+            "       doctor_flag,\n" +
+            "       dept_code,\n" +
+            "       exec_unit,\n" +
+            "       cl_code,\n" +
+            "       zy_serial_no,\n" +
+            "       executer1,\n" +
+            "       executer2,\n" +
+            "       reg_flag,\n" +
+            "       msg_flag,\n" +
+            "       exec_time,\n" +
+            "       exec_id,\n" +
+            "       ps_status,\n" +
+            "       ps_oper,\n" +
+            "       ps_time,\n" +
+            "       exec_id2,\n" +
+            "       act_order_no2,\n" +
+            "       print_page,\n" +
+            "       print_page_once,\n" +
+            "       print_order_change_end,\n" +
+            "       emergency_flag,\n" +
+            "       req_receive_flag,\n" +
+            "       inspect_stuff,\n" +
+            "       charge_status,\n" +
+            "       ps_result_time,\n" +
+            "       kf_flag,\n" +
+            "       modifier_oper,\n" +
+            "       pass_flag,\n" +
+            "       pass_id,\n" +
+            "       pass_date,\n" +
+            "       pass_comment,\n" +
+            "       refer_physician,\n" +
+            "       consult_physician,\n" +
+            "       req_no\n" +
+            "from yz_act_order\n" +
+            "where act_order_no = ${oldOrderNo};" +
+            "insert into yz_act_record_kss (act_order_no, charge_code, yyfs, ssqk, yysj, input_id, input_date, inpatient_no,\n" +
+            "                               admiss_times)\n" +
+            "SELECT ${pa.actOrderNo},\n" +
+            "       charge_code,\n" +
+            "       yyfs,\n" +
+            "       ssqk,\n" +
+            "       yysj,\n" +
+            "       input_id,\n" +
+            "       input_date,\n" +
+            "       inpatient_no,\n" +
+            "       admiss_times\n" +
+            "from yz_act_record_kss\n" +
+            "where act_order_no = ${oldOrderNo};" +
+            "update new_act_order_recording\n" +
+            "set authorized_doctor = (select authorized_doctor\n" +
+            "                         from new_act_order_recording a\n" +
+            "                         where a.act_order_no = ${oldOrderNo})\n" +
+            "where act_order_no = ${pa.actOrderNo};")
+    void copyOrderToOnce(XinZhenYzActOrder pa, BigDecimal oldOrderNo);
 }

+ 25 - 0
src/main/java/thyyxxk/webserver/entity/zhuyuanyisheng/yizhuluru/req/CopyOrderOnceReq.java

@@ -0,0 +1,25 @@
+package thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.req;
+
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Size;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class CopyOrderOnceReq {
+
+    @NotBlank(message = "住院号不能为空")
+    private String patNo;
+
+    @NotNull(message = "次数不能为空")
+    @Min(value = 1, message = "次数不能小于1")
+    private Integer times;
+
+    @Size(min = 1, message = "请选择医嘱号")
+    private List<BigDecimal> orderNos;
+}
+

+ 14 - 8
src/main/java/thyyxxk/webserver/service/PublicServer.java

@@ -73,6 +73,7 @@ public class PublicServer {
     private final SocketV2 intergrationPlatformSocket;
     private final ExtraCache extraCache;
     private final UserCache userCache;
+    private final PublicDao publicDao;
 
     /**
      * 手术日期格式
@@ -174,11 +175,22 @@ public class PublicServer {
         BigDecimal oldId = dao.getActOrderNo();
         BigDecimal newId = oldId.add(new BigDecimal(size));
         int num = dao.updateActOrderNo(newId, oldId);
-        // 插入生成医嘱的日志
-        orderRecord(newId, TokenUtil.getInstance().getTokenUserId());
         if (num == 0) {
             throw new BizException(ExceptionEnum.LOGICAL_ERROR, "生成医嘱号错误,请重试!");
         }
+        List<BigDecimal> data = new ArrayList<>();
+
+        BigDecimal tmpData = oldId;
+
+        for (int i = 0; i < size; i++) {
+            tmpData = tmpData.add(BigDecimal.ONE);
+            data.add(tmpData);
+        }
+        String userCode = TokenUtil.getInstance().getTokenUserId();
+        // 插入生成医嘱的日志
+        ListUtil.batchList(data, PublicDao.class, (m, i) -> {
+            m.insertOrderNoRecord(i, userCode);
+        });
         return new BigDecimal[]{oldId, newId};
     }
 
@@ -932,12 +944,6 @@ public class PublicServer {
 
     @Async
     public void orderRecord(BigDecimal orderCode, String userCode) {
-        if (orderCode == null) {
-            return;
-        }
-        if (dao.selectRecordByOrderNo(orderCode) > 0) {
-            return;
-        }
         dao.insertOrderNoRecord(orderCode, userCode);
     }
 

+ 3 - 0
src/main/java/thyyxxk/webserver/service/externalhttp/emr/EmrEditor.java

@@ -61,4 +61,7 @@ public interface EmrEditor {
 
     @Get("/category/list/dept?code={deptCode}")
     JSONArray getDeptList(@Var("deptCode") String deptCode);
+
+    @Get("/document/history/destroy/7")
+    JSONObject historyDestroy();
 }

+ 0 - 1
src/main/java/thyyxxk/webserver/service/inpatient/xmlr/XiangMuLuRuService.java

@@ -24,7 +24,6 @@ import thyyxxk.webserver.dao.his.medicalinsurance.SiSettleApplyDao;
 import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.datamodify.GetDropdownBox;
-import thyyxxk.webserver.entity.datamodify.YzActOrder;
 import thyyxxk.webserver.entity.datamodify.ZyDetailCharge;
 import thyyxxk.webserver.entity.inpatient.FeeSelect;
 import thyyxxk.webserver.entity.inpatient.ZyActpatient;

+ 54 - 4
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/YiZhuLuRuServer.java

@@ -1,5 +1,6 @@
 package thyyxxk.webserver.service.zhuyuanyisheng;
 
+import cn.hutool.core.map.BiMap;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.db.DbUtil;
@@ -14,6 +15,7 @@ import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.support.TransactionTemplate;
 import thyyxxk.webserver.config.envionment.YzConfig;
 import thyyxxk.webserver.config.exception.BizException;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
@@ -37,6 +39,7 @@ import thyyxxk.webserver.entity.zhuyuanyisheng.ZyOrderZk;
 import thyyxxk.webserver.entity.zhuyuanyisheng.dto.doctorAuth.DoctorAuthParams;
 import thyyxxk.webserver.entity.zhuyuanyisheng.vo.doctorAuth.DoctorAuthRest;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.*;
+import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.req.CopyOrderOnceReq;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.req.PoisonousHempReq;
 import thyyxxk.webserver.entity.zhuyuanyisheng.yizhuluru.vo.printOrder.PrintOrderVo;
 import thyyxxk.webserver.enums.DrugFlag;
@@ -53,6 +56,7 @@ import thyyxxk.webserver.utils.*;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 /**
@@ -76,6 +80,7 @@ public class YiZhuLuRuServer {
     private final ExtraCache extraCache;
     private final YzConfig yzConfig;
     private final DrgWebApi drgWebApi;
+    private final TransactionTemplate transactionTemplate;
 
     private final String ITEM = "00";
     private final DrugCache drugCache;
@@ -1213,7 +1218,6 @@ public class YiZhuLuRuServer {
      * @return
      */
     public ResultVo<Map<String, Object>> confirmTheDoctorSOrderWithMedicine(String patNo, Integer times) {
-
         // 判断是否开了出院医嘱后的医嘱
         if (!yzConfig.getPrescribeMedicalAdviceAfterDischarge()) {
             YzActOrder ourOrderInfo = dao.selectFinallyOutOrderInfo(patNo, times);
@@ -1270,8 +1274,8 @@ public class YiZhuLuRuServer {
 
     public void insertATemplate(List<XinZhenYzActOrder> list, XinZhenYiZhu patInfo) {
         String userCode = TokenUtil.getInstance().getTokenUserId();
-        list.forEach(item -> {
-            dao.insertEntryOrder(patInfo, item, userCode);
+        ListUtil.batchList(list, YiZhuLuRuDao.class, (mapper, item) -> {
+            mapper.insertEntryOrder(patInfo, item, userCode);
         });
     }
 
@@ -1586,7 +1590,53 @@ public class YiZhuLuRuServer {
         if (params.getMyselfOrder()) {
             qw.eq("a.enter_oper", userInfoByToken.getCode());
         }
-
         return printPoisonousHemp(params, dao.selectPoisonousHempByConfirm(qw));
     }
+
+    public ResultVo<JSONObject> copyOrderToOnce(CopyOrderOnceReq req) {
+        QueryWrapper<?> qw = new QueryWrapper<>();
+        qw.eq("a.inpatient_no", req.getPatNo())
+                .eq("a.admiss_times", req.getTimes())
+                .eq("a.enter_oper", TokenUtil.getInstance().getTokenUserId())
+                .in("a.act_order_no", req.getOrderNos());
+        String fullSql = WrapperUtils.getFullSql(qw);
+        List<XinZhenYzActOrder> xinZhenYzActOrders = dao.selectOrderNoByNew(fullSql);
+        if (xinZhenYzActOrders == null) {
+            return R.fail(ExceptionEnum.ERROR_EL_MESSAGE, "未找到相关数据");
+        }
+        BigDecimal[] actOrderNo = publicServer.getActOrderNo(xinZhenYzActOrders.size());
+        List<BigDecimal> execute = transactionTemplate.execute(status -> {
+            try {
+                return createOnceOrder(xinZhenYzActOrders, actOrderNo[0]);
+            } catch (Exception e) {
+                status.setRollbackOnly();
+                throw e;
+            }
+        });
+        JSONObject js = new JSONObject();
+        js.put("data", xinZhenYzActOrders);
+        js.put("list", execute);
+        return R.ok(js);
+    }
+
+    private List<BigDecimal> createOnceOrder(List<XinZhenYzActOrder> orderList, BigDecimal orderNo) {
+        BiMap<BigDecimal, BigDecimal> map = new BiMap<>(new HashMap<>());
+        AtomicReference<BigDecimal> startOrderNo = new AtomicReference<>(orderNo);
+        List<BigDecimal> rst = new ArrayList<>();
+        orderList.forEach(item -> {
+            startOrderNo.set(startOrderNo.get().add(BigDecimal.ONE));
+            map.put(item.getActOrderNo(), startOrderNo.get());
+            item.setActOrderNo(startOrderNo.get());
+        });
+        ListUtil.batchList(orderList, YiZhuLuRuDao.class, (mapper, item) -> {
+            if (item.getParentNo() != null) {
+                item.setParentNo(map.get(item.getParentNo()));
+            }
+            item.setStatusFlag("2");
+            item.setFrequCode("ONCE");
+            dao.copyOrderToOnce(item, map.getKey(item.getActOrderNo()));
+            rst.add(item.getActOrderNo());
+        });
+        return rst;
+    }
 }