浏览代码

优化住院医生

DESKTOP-0GD05B0\Administrator 2 年之前
父节点
当前提交
47e792fd8e

+ 0 - 39
src/main/java/thyyxxk/webserver/controller/inpatient/ZhuYuanYiZhuController.java

@@ -1,39 +0,0 @@
-package thyyxxk.webserver.controller.inpatient;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import thyyxxk.webserver.entity.ResultVo;
-import thyyxxk.webserver.entity.datamodify.YzActOrder;
-import thyyxxk.webserver.service.inpatient.ZhuYuanYiZhuServer;
-
-/**
- * <p>
- * 描述: 医嘱退费
- * </p>
- *
- * @author xc
- * @date 2021-09-17 10:26
- */
-@RestController
-@RequestMapping("/zhuYuanYiZhu")
-public class ZhuYuanYiZhuController {
-
-    private final ZhuYuanYiZhuServer server;
-
-    public ZhuYuanYiZhuController(ZhuYuanYiZhuServer server) {
-        this.server = server;
-    }
-
-    @PostMapping("/getOrderList")
-    public ResultVo<IPage<YzActOrder>> getOrderList(@RequestBody YzActOrder yzActOrder) {
-        return server.getOrderList(yzActOrder);
-    }
-
-    @PostMapping("/yiZhuTuiFei")
-    public ResultVo<String> yiZhuTuiFei(@RequestBody YzActOrder param) {
-        return server.yiZhuTuiFei(param);
-    }
-}

+ 13 - 24
src/main/java/thyyxxk/webserver/dao/his/PublicDao.java

@@ -34,21 +34,13 @@ import java.util.Set;
 @Mapper
 public interface PublicDao {
 
-    @Select("select role_id from dj_user_role where  user_code = #{code}")
-    List<Integer> huoQuJueSe(@Param("code") String code);
-
-    /**
-     * 把表锁住
-     */
-    @Update("update yz_sequence set act_order_no = act_order_no")
-    void lockTable();
 
     /**
      * 查询医嘱
      *
      * @return 返回医嘱号
      */
-    @Select("select act_order_no from yz_sequence")
+    @Select("select act_order_no from yz_sequence WITH (NOLOCK) ")
     float getActOrderNo();
 
     /**
@@ -60,8 +52,8 @@ public interface PublicDao {
     /**
      * @param patternCode 返回新的模板编码
      */
-    @Update("update yz_sequence set pattern_code = #{patternCode} ")
-    void updatePatternCode(Integer patternCode);
+    @Update("update yz_sequence set pattern_code = #{newId} where pattern_code = #{oldId} ")
+    int updatePatternCode(Integer newId, Integer oldId);
 
     @Select("select p_act_order_no from yz_sequence")
     float getPatternOrderCode();
@@ -69,32 +61,29 @@ public interface PublicDao {
     /**
      * @param pActOrderNo 返回新的模板编码
      */
-    @Update("update yz_sequence set p_act_order_no = #{pActOrderNo} ")
-    void updatePatternOrderCode(float pActOrderNo);
+    @Update("update yz_sequence set p_act_order_no = #{newId} where p_act_order_no = #{oldId} ")
+    int updatePatternOrderCode(float newId, float oldId);
 
     /**
      * 插入新的医嘱
      *
      * @param actOrderNo 医嘱号
      */
-    @Update("update yz_sequence set act_order_no = #{actOrderNo}")
-    void updateActOrderNo(float actOrderNo);
+    @Update("update yz_sequence set act_order_no = #{newOrderNo} where act_order_no = #{oldOrderNo} ")
+    int updateActOrderNo(float newOrderNo, float oldOrderNo);
 
-    @Update("update ysh_config set req_no =req_no ")
-    void lockYshConfig();
 
     @Select("select req_no from ysh_config ")
     Integer getReqNo();
 
-    @Update("update ysh_config set req_no =#{reqPageNo} ")
-    void updateReqNo(Integer reqPageNo);
+    @Update("update ysh_config set req_no =#{newId} where req_no = #{oldId} ")
+    int updateReqNo(Integer newId, Integer oldId);
 
     @Select("select yj_template_no from ysh_config")
     Integer tempNo();
 
-    @Update("update ysh_config " +
-            "set yj_template_no = #{tempNo}")
-    void updateTempNo(Integer tempNo);
+    @Update("update ysh_config set yj_template_no = #{newId} where yj_template_no = #{oldId} ")
+    int updateTempNo(Integer newId, Integer oldId);
 
     /**
      * 获取 这个科室 的子科室
@@ -335,8 +324,8 @@ public interface PublicDao {
     @Select("select page_no from yz_sequence")
     Integer caoYaoDanHao();
 
-    @Update("update yz_sequence set page_no = #{index}")
-    void genXingCaoYaoDanHao(Integer index);
+    @Update("update yz_sequence set page_no = #{index} where page_no = #{oldId} ")
+    int genXingCaoYaoDanHao(Integer newId, Integer oldId);
 
     @Select("select top (1) cast(settle_type as int) as settle_type " +
             "from zy_ledger_file " +

+ 1 - 1
src/main/java/thyyxxk/webserver/dao/his/inpatient/DismissDao.java

@@ -56,7 +56,7 @@ public interface DismissDao {
 
     @Select("SELECT message = N'药单号:' + CAST(page_no as VARCHAR) + " +
             "                 N',药品名称:' + + (select top 1 name from yp_zd_dict where charge_code = code) + " +
-            "                 N',医嘱号:' + CAST(CAST(act_order_no AS DECIMAL) AS VARCHAR(20)) " +
+            "                 N',医嘱号:' + CAST(`CAST(act_order_no AS DECIMAL`) AS VARCHAR(20)) " +
             " FROM yp_zy_patient WHERE inpatient_no=#{patNo} AND " +
             "admiss_times=#{times} AND amount <> 0 and acct_sign <> '2' ")
     List<String> hasUnreceivedDrugList(@Param("patNo") String patNo, @Param("times") Integer times);

+ 1 - 1
src/main/java/thyyxxk/webserver/dao/his/zhuyuanyisheng/JianYanJianChaDao.java

@@ -358,7 +358,7 @@ public interface JianYanJianChaDao {
                        @Param("reqType") String reqType);
 
     @Insert("<script>" +
-            "INSERT INTO yz_act_order (order_code, order_name, frequ_code, infant_flag/*婴儿标志*/, order_time, physician, start_time, " +
+            "INSERT INTO yz_act_order2 (order_code, order_name, frequ_code, infant_flag/*婴儿标志*/, order_time, physician, start_time, " +
             "                          act_order_no, inpatient_no, admiss_times, drug_flag/*o*/, enter_oper/*录入人*/, enter_time/*录时间*/, " +
             "                          status_flag/*2*/, confirm_time, signer,/*在我这里保存了医嘱就直接确定了*/ " +
             "                          self_buy/*0*/, pay_self/*0*/, serial/*00*/, group_no/*00*/, doctor_flag, exec_unit, dept_code, " +

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

@@ -542,7 +542,7 @@ public interface YiZhuLuRuDao {
             "                          kf_flag /*饭前饭后*/, parent_no, refer_physician/*患者的管床医生*/, end_time) " +
             "values (#{pa.orderCode}, #{pa.orderName}, #{pa.frequCode}, #{pa.instruction}, #{pa.discription}, #{patInfo.infantFlag}, " +
             "        #{pa.orderTime}, #{userCode}, " +
-            "        #{pa.startTime}, #{pa.drugSpecification}, #{pa.drugQuan,jdbcType=REAL}, #{pa.supplyCode}, #{pa.actOrderNo,jdbcType=REAL}, #{patInfo.inpatientNo}, " +
+            "        #{pa.startTime}, cast(#{pa.drugSpecification} as varchar(16)), #{pa.drugQuan,jdbcType=REAL}, #{pa.supplyCode}, #{pa.actOrderNo,jdbcType=REAL}, #{patInfo.inpatientNo}, " +
             "        #{patInfo.admissTimes}, #{pa.drugFlag}, #{userCode}, getdate(), " +
             "        #{pa.miniUnit}, #{pa.drugWeight,jdbcType = REAL}, #{pa.drugWeightUnit,jdbcType=REAL}, '1', #{pa.selfBuy}, " +
             "        #{pa.dose ,jdbcType = REAL}, #{pa.doseUnit}, #{pa.drugOcc ,jdbcType = REAL}, " +

+ 59 - 31
src/main/java/thyyxxk/webserver/service/PublicServer.java

@@ -1,5 +1,6 @@
 package thyyxxk.webserver.service;
 
+import cn.xfyun.exception.BusinessException;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
@@ -9,6 +10,8 @@ import org.apache.commons.collections4.ListUtils;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import thyyxxk.webserver.config.exception.BizException;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
@@ -153,16 +156,21 @@ public class PublicServer {
         return true;
     }
 
+
     /**
      * 获取新的医嘱号
      *
      * @return 返回医嘱号
      */
+    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
     public float getActOrderNo() {
-        dao.lockTable();
-        float actOrderNo = dao.getActOrderNo() + 1;
-        dao.updateActOrderNo(actOrderNo);
-        return actOrderNo;
+        float oldId = dao.getActOrderNo();
+        float newId = oldId + 1;
+        int num = dao.updateActOrderNo(newId, oldId);
+        if (num == 0) {
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR, "生成医嘱号错误请重新,请重试!");
+        }
+        return newId;
     }
 
     /**
@@ -170,11 +178,15 @@ public class PublicServer {
      *
      * @return 返回编码信息
      */
+    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
     public String getPatternCode() {
-        dao.lockTable();
-        Integer patternCode = dao.getPatternCode() + 1;
-        dao.updatePatternCode(patternCode);
-        return patternCode.toString();
+        Integer oldId = dao.getPatternCode();
+        Integer newId = oldId + 1;
+        int num = dao.updatePatternCode(newId, oldId);
+        if (num == 0) {
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR, "生成模板编码错误,请重试!");
+        }
+        return newId.toString();
     }
 
     /**
@@ -182,31 +194,58 @@ public class PublicServer {
      *
      * @return 返回序号
      */
+    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
     public float getPatternOrderCode() {
-        dao.lockTable();
-        float patternOrderCode = dao.getPatternOrderCode() + 1;
-        dao.updatePatternOrderCode(patternOrderCode);
-        return patternOrderCode;
+        float oldId = dao.getPatternOrderCode();
+        float newId = oldId + 1;
+        int num = dao.updatePatternOrderCode(newId, oldId);
+        if (num == 0) {
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR, "生成子医嘱模板编码错误,请重试!");
+        }
+        return newId;
     }
 
     /**
      * @return 返回说明模板的编码
      */
+    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
     public Integer getYjTemplateNo() {
-        dao.lockYshConfig();
-        Integer tempNo = dao.tempNo() + 1;
-        dao.updateTempNo(tempNo);
-        return tempNo;
+        Integer oldId = dao.tempNo();
+        Integer newId = oldId + 1;
+        int num = dao.updateTempNo(newId, oldId);
+        if (num == 0) {
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR, "生成说明模板的编码错误,请重试!");
+        }
+        return newId;
     }
 
     /**
      * @return 返回申请号
      */
+    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
     public Integer getReqPageNo() {
-        dao.lockYshConfig();
-        Integer reqNo = dao.getReqNo() + 1;
-        dao.updateReqNo(reqNo);
-        return reqNo;
+        Integer oldId = dao.getReqNo();
+        Integer newId = oldId + 1;
+        int num = dao.updateReqNo(newId, oldId);
+        if (num == 0) {
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR, "生成申请号错误,请重试!");
+        }
+        return newId;
+    }
+
+    /**
+     * 获取药品单号
+     *
+     * @return 药品单号
+     */
+    public Integer getTheDrugListNo() {
+        Integer oldId = dao.caoYaoDanHao();
+        Integer newId = oldId + 1;
+        int num = dao.genXingCaoYaoDanHao(newId, oldId);
+        if (num == 0) {
+            throw new BizException(ExceptionEnum.LOGICAL_ERROR, "生成申请号错误,请重试!");
+        }
+        return Integer.valueOf(DateUtil.formatDatetime(new Date(), "yyMMdd") + newId);
     }
 
     /**
@@ -475,17 +514,6 @@ public class PublicServer {
         return index;
     }
 
-    /**
-     * 获取药品单号
-     *
-     * @return 药品单号
-     */
-    public Integer getTheDrugListNo() {
-        dao.lockTable();
-        Integer index = dao.caoYaoDanHao() + 1;
-        dao.genXingCaoYaoDanHao(index);
-        return Integer.valueOf(DateUtil.formatDatetime(new Date(), "yyMMdd") + index);
-    }
 
     public String getGroupNo() {
         String groupNo = "71";

+ 16 - 6
src/main/java/thyyxxk/webserver/service/casefrontsheet/HuiZhenShenQingService.java

@@ -1,10 +1,12 @@
 package thyyxxk.webserver.service.casefrontsheet;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.dao.his.casefrontsheet.HuiZhenShenQingDao;
 import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao;
@@ -40,6 +42,10 @@ public class HuiZhenShenQingService {
 
     private final RedisLikeService redisLikeService;
 
+    private HuiZhenShenQingService getThis() {
+        return SpringUtil.getBean(this.getClass());
+    }
+
     public HuiZhenShenQingService(HuiZhenShenQingDao dao, PublicServer publicServer, YiZhuLuRuDao yiZhuLuRuDao, RedisLikeService redisLikeService) {
         this.dao = dao;
         this.publicServer = publicServer;
@@ -81,10 +87,8 @@ public class HuiZhenShenQingService {
         param.setReqDate(param.getInputDate());
         param.setOrderCode(getOrderCode("00" + param.getHzType()));
         param.setOrderName(String.format("请%s进行院内会诊", param.getReqDeptName()));
-        //插入会诊申请
-        dao.chaRuHuiZhenShenQing(param);
-        //申请成功了就还需要插入一条医嘱
-        dao.chaRuYiZhu(param);
+        // 生成会诊和医嘱
+        getThis().generateConsultation(param);
         log.info("插入数据:{}", JSON.toJSONString(param));
         XinZhenYiZhu patientInfo = yiZhuLuRuDao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
         UserInfo userInfo = redisLikeService.getUserInfoByToken();
@@ -97,11 +101,17 @@ public class HuiZhenShenQingService {
         } else {
             publicServer.sendDoctorNotification(patientInfo, msg, "新增会诊申请", TokenUtil.getTokenUserId(), dao.obtainDepartmentDoctor(param.getReqDept1()));
         }
-
-
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "会诊申请成功,正在通知会诊医生。 <p>(〜^㉨^)〜</p>");
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public void generateConsultation(YshHzRecord param) {
+        //插入会诊申请
+        dao.chaRuHuiZhenShenQing(param);
+        //申请成功了就还需要插入一条医嘱
+        dao.chaRuYiZhu(param);
+    }
+
 
     /**
      * 查询会诊的信息

+ 0 - 122
src/main/java/thyyxxk/webserver/service/inpatient/ZhuYuanYiZhuServer.java

@@ -1,122 +0,0 @@
-package thyyxxk.webserver.service.inpatient;
-
-
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import thyyxxk.webserver.config.exception.ExceptionEnum;
-import thyyxxk.webserver.dao.his.inpatient.ZhuYuanYiZhuDao;
-import thyyxxk.webserver.entity.ResultVo;
-import thyyxxk.webserver.entity.datamodify.YzActOrder;
-import thyyxxk.webserver.service.PublicServer;
-import thyyxxk.webserver.utils.*;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * <p>
- * 描述: 医嘱退费
- * </p>
- *
- * @author xc
- * @date 2021-09-17 10:25
- */
-@Service
-@Slf4j
-public class ZhuYuanYiZhuServer {
-
-    private final ZhuYuanYiZhuDao dao;
-
-
-    private final PublicServer publicServer;
-
-    public ZhuYuanYiZhuServer(ZhuYuanYiZhuDao dao, PublicServer publicServer) {
-        this.dao = dao;
-        this.publicServer = publicServer;
-    }
-
-    /**
-     * 分页获取可以退费的医嘱号 只有 临时医嘱才能退费
-     *
-     * @param param 查询条件 分页 住院号 ,次数 ,医嘱编码,医嘱号,开始时间,结束时间
-     * @return 返回分页数据
-     */
-    public ResultVo<IPage<YzActOrder>> getOrderList(YzActOrder param) {
-        int infantFlag = 0;
-        if (param.getInpatientNo().contains("$")) {
-            param.setInpatientNo(param.getInpatientNo().split("\\$")[0]);
-            infantFlag = 1;
-        }
-        if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null) {
-            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "住院号或住院次数为空。( >﹏<。)");
-        }
-        IPage<YzActOrder> page = new Page<>(param.getCurrentPage(), param.getPageSize());
-        dao.getYzXinXi(page, param.getInpatientNo(), param.getAdmissTimes(), param.getOrderCode(),
-                param.getActOrderNo(), param.getQueryStartTime(), param.getQueryEndTime(), infantFlag);
-        if (page.getRecords().isEmpty()) {
-            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
-        }
-        List<YzActOrder> tuiFeiYiZhuHaoList = dao.getTuiFei(page.getRecords());
-        if (ListUtil.notBlank(tuiFeiYiZhuHaoList)) {
-            Map<BigDecimal, YzActOrder> yiTuiFeiYiZhuMap = tuiFeiYiZhuHaoList.stream().collect(Collectors.toMap(YzActOrder::getActOrderNo, a -> a, (k1, k2) -> k1));
-            page.getRecords().forEach(item -> {
-                if (yiTuiFeiYiZhuMap.containsKey(item.getActOrderNo())) {
-                    item.setTfFlag(1);
-                } else if (item.getDrugQuan().signum() == -1) {
-                    item.setTfFlag(2);
-                } else {
-                    item.setTfFlag(0);
-                }
-
-            });
-        }
-        return ResultVoUtil.success(page);
-    }
-
-    /**
-     * 生成退费医嘱数据
-     * 不能重复退费,不能退负数
-     *
-     * @param param 需要,住院号,次数,医嘱号
-     * @return 返回提示
-     */
-    public ResultVo<String> yiZhuTuiFei(YzActOrder param) {
-        if (ListUtil.isBlank(param.getTuiFeiList())) {
-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请先选择退费数据,¬o( ̄- ̄メ)");
-        }
-        if (param.getTuiFeiList().size() >= 100) {
-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "一次性退费超过100条,¬o( ̄- ̄メ)");
-        }
-        List<YzActOrder> yuanYiZhuShuJu = dao.yuanYiZhu(param.getInpatientNo(), param.getAdmissTimes(), param.getTuiFeiList());
-        if (ListUtil.isBlank(yuanYiZhuShuJu)) {
-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未查询到对应的住院号。┌(。Д。)┐");
-        }
-        List<YzActOrder> tuiFeiList = dao.getTuiFei(param.getTuiFeiList());
-        if (!tuiFeiList.isEmpty()) {
-            StringBuilder sb = new StringBuilder();
-            tuiFeiList.forEach(item -> {
-                sb.append("<span style='color:red'>【").append(item.getActOrderNo()).append("】</span><br>");
-            });
-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("%s 以上医嘱重复退费", sb));
-        }
-
-        for (YzActOrder yzActOrder : yuanYiZhuShuJu) {
-            // 价格 不为负数 才能退费
-            if (yzActOrder.getDrugQuan().signum() == -1) {
-                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("医嘱号为:【%s】费用为负数无法退费。( ´Д`)y━・~~", yzActOrder.getActOrderNo()));
-            }
-            yzActOrder.setDrugQuan(yzActOrder.getDrugQuan().negate());
-            yzActOrder.setNewActOrderNo(publicServer.getActOrderNo());
-        }
-        dao.yiZhuTuiFei(yuanYiZhuShuJu, TokenUtil.getTokenUserId());
-        dao.insertYzActOrderTf(yuanYiZhuShuJu);
-        log.info("医嘱退费:操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(yuanYiZhuShuJu, DateUtil.DEFAULT_PATTERN));
-        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "操作成功。*.。(๑・∀・๑)*.。");
-    }
-
-}

+ 17 - 4
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/CaoYaoYiZhuServer.java

@@ -1,11 +1,13 @@
 package thyyxxk.webserver.service.zhuyuanyisheng;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.constants.GetDateFormat;
 import thyyxxk.webserver.dao.his.zhuyuanyisheng.CaoYaoYiZhuDao;
@@ -49,6 +51,10 @@ public class CaoYaoYiZhuServer {
         this.yiZhuLuRuServer = yiZhuLuRuServer;
     }
 
+    private CaoYaoYiZhuServer getThis() {
+        return SpringUtil.getBean(this.getClass());
+    }
+
     public ResultVo<IPage<YzActOrderCy>> huoQuCaoYaoShuJu(CaoYaoChaXunTiaoJian param) {
         IPage<YzActOrderCy> page = new Page<>(param.getCurrentPage(), param.getPageSize(), param.getTotal() == 0);
         QueryWrapper<?> qw = new QueryWrapper<>();
@@ -153,7 +159,6 @@ public class CaoYaoYiZhuServer {
         Map<String, List<String>> errorMap = new HashMap<>();
         // 获取医生开药品的权限
         Integer doctorLevel = yiZhuLuRuDao.huoQuYiShenDengJi(TokenUtil.getTokenUserId());
-
         for (int i = 0; i < param.getList().size(); i++) {
             YzActOrderCyDetail item = param.getList().get(i);
             XinZhenYzActOrder feiYongXinXi = drug.get(item.getChargeCode().trim() + item.getSerial().trim() + item.getGroupNo().trim());
@@ -191,9 +196,10 @@ public class CaoYaoYiZhuServer {
         param.setPageNo(publicServer.getTheDrugListNo());
         XinZhenYiZhu huanZheXinXi = yiZhuLuRuDao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
         param.setOrderNo(BigDecimal.valueOf(publicServer.getActOrderNo()));
-        dao.chaRuCaoYaoYiZhu(param, huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), huanZheXinXi.getSmallDept());
-        dao.chaRuCaoYaoXiangQing(param.getList(), param.getOrderNo());
-        dao.chaRuYiZhu(param, "草药医嘱:" + param.getOrderName() + param.getQuantity() + "剂", huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), huanZheXinXi.getSmallDept(), PublicServer.getInfantFlag(huanZheXinXi.getInpatientNo()));
+
+        // 生成草药和医嘱
+        getThis().generateHerbs(param, huanZheXinXi);
+
         List<String> content = new ArrayList<>();
         content.add(String.format("草药医嘱名:<span style='color:#409eff'>【%s】</span><br>" +
                 "剂数:<span style='color:#409eff'>【%s】</span><br>" +
@@ -203,6 +209,13 @@ public class CaoYaoYiZhuServer {
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    public void generateHerbs(YzActOrderCy param, XinZhenYiZhu huanZheXinXi) {
+        dao.chaRuCaoYaoYiZhu(param, huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), huanZheXinXi.getSmallDept());
+        dao.chaRuCaoYaoXiangQing(param.getList(), param.getOrderNo());
+        dao.chaRuYiZhu(param, "草药医嘱:" + param.getOrderName() + param.getQuantity() + "剂", huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), huanZheXinXi.getSmallDept(), PublicServer.getInfantFlag(huanZheXinXi.getInpatientNo()));
+    }
+
 
     /**
      * 删除草药模板

+ 1 - 0
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/EmrServer.java

@@ -1,5 +1,6 @@
 package thyyxxk.webserver.service.zhuyuanyisheng;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;

+ 22 - 5
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/JianYanJianChaShenQingServer.java

@@ -1,5 +1,6 @@
 package thyyxxk.webserver.service.zhuyuanyisheng;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -50,6 +51,12 @@ public class JianYanJianChaShenQingServer {
 
     private final RedisLikeService realtimeService;
 
+
+    private JianYanJianChaShenQingServer getThis() {
+        return SpringUtil.getBean(this.getClass());
+    }
+
+
     public JianYanJianChaShenQingServer(JianYanJianChaDao dao, PublicServer publicServer, YiZhuLuRuDao yiZhuLuRuDao, RedisLikeService realtimeService) {
         this.dao = dao;
         this.publicServer = publicServer;
@@ -394,10 +401,10 @@ public class JianYanJianChaShenQingServer {
         StringBuilder cuoWuXinXi = new StringBuilder();
 
         for (YshYjReq item : param.getList()) {
-            if (StringUtil.notBlank(item.getJzFlag()) && item.getJzFlag().equals("0")) {
+            if (StringUtil.notBlank(item.getJzFlag()) && "0".equals(item.getJzFlag())) {
                 item.setJzFlag(null);
             }
-            if (StringUtil.notBlank(item.getYbSelfFlag()) && item.getYbSelfFlag().equals("0")) {
+            if (StringUtil.notBlank(item.getYbSelfFlag()) && "0".equals(item.getYbSelfFlag())) {
                 item.setYbSelfFlag(null);
             }
             if (StringUtil.isBlank(item.getOrderCode())) {
@@ -457,15 +464,25 @@ public class JianYanJianChaShenQingServer {
         }
 
         String userCode = TokenUtil.getTokenUserId();
+        getThis().insertData(param, huanZheXinXi, userCode);
+        try {
+            publicServer.faSongXiaoXi(huanZheXinXi, content, "2".equals(param.getReqType()) ? "新增检查" : "新增检验", TokenUtil.getTokenUserId());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        log.info("数据:{}", JSON.toJSONString(param.getList()));
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void insertData(TianJiaJianChaJianYan param, XinZhenYiZhu huanZheXinXi, String userCode) {
         dao.chaRuShenQing(param.getList(), param.getInpatientNo(), param.getName(), param.getAge() + "岁", param.getAdmissTimes(),
                 param.getBedNo(), userCode, huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), param.getReqType());
-        log.info("数据:{}", JSON.toJSONString(param.getList()));
         dao.chaRuShenQingYiZhu(param.getList(), param.getInpatientNo(), param.getAdmissTimes(), userCode, huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(),
                 PublicServer.getInfantFlag(param.getInpatientNo()));
-        publicServer.faSongXiaoXi(huanZheXinXi, content, "2".equals(param.getReqType()) ? "新增检查" : "新增检验", TokenUtil.getTokenUserId());
-        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
     }
 
+
     public String baoCunCuoWuXinXi(int index, String xinXi) {
         return String.format("第【%d】个%s<br>", index, xinXi);
     }

+ 15 - 3
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/ShouShuShenQingServer.java

@@ -1,5 +1,6 @@
 package thyyxxk.webserver.service.zhuyuanyisheng;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -9,6 +10,7 @@ import com.dtflys.forest.annotation.LogHandler;
 import jdk.nashorn.internal.objects.annotations.SpecializedFunction;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.constants.GetDateFormat;
 import thyyxxk.webserver.dao.his.zhuyuanyisheng.ShouShuShenQingDao;
@@ -46,6 +48,10 @@ public class ShouShuShenQingServer {
     private final PublicServer publicServer;
     private final YiZhuLuRuDao yiZhuLuRuDao;
 
+    private ShouShuShenQingServer getThis() {
+        return SpringUtil.getBean(this.getClass());
+    }
+
     public ShouShuShenQingServer(ShouShuShenQingDao dao, PublicServer publicServer, YiZhuLuRuDao yiZhuLuRuDao) {
         this.dao = dao;
         this.publicServer = publicServer;
@@ -161,17 +167,23 @@ public class ShouShuShenQingServer {
         }
         log.info("上传数据:{}", JSON.toJSONString(param));
         XinZhenYiZhu huanZheXinXi = yiZhuLuRuDao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
+        // 生成手术
+        getThis().generativeSurgery(param, userCode, shenChengYiZhu, huanZheXinXi);
+        publicServer.faSongXiaoXi(huanZheXinXi, content, "新增手术", TokenUtil.getTokenUserId());
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void generativeSurgery(XinZengShouShu param, String userCode, List<OpRecord> shenChengYiZhu, XinZhenYiZhu huanZheXinXi) {
         dao.chaRuShouShuYiSheng(param.getList());
         dao.chaRuShouShu(param.getList(), param.getInpatientNo(), param.getName(), param.getAdmissTimes(),
                 huanZheXinXi.getDeptCode(), huanZheXinXi.getDeptCode(), userCode, param.getBedNo(), param.getAdmissWard());
         String yzCode = param.getGenerateRejectedOrders() ? "10399" : "06054";
         // 插入医嘱
         dao.chaRuYiZhu(shenChengYiZhu, huanZheXinXi, userCode, param.getExecDept(), yzCode);
-
-        publicServer.faSongXiaoXi(huanZheXinXi, content, "新增手术", TokenUtil.getTokenUserId());
-        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
     }
 
+
     public String applyForVerification(OpRecord param) {
         StringBuilder sb = new StringBuilder();
 

+ 34 - 18
src/main/java/thyyxxk/webserver/service/zhuyuanyisheng/YiZhuLuRuServer.java

@@ -1,17 +1,17 @@
 package thyyxxk.webserver.service.zhuyuanyisheng;
 
+import cn.hutool.extra.spring.SpringUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.sun.org.apache.bcel.internal.generic.NEW;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.ListUtils;
 import org.jetbrains.annotations.NotNull;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import thyyxxk.webserver.config.exception.BizException;
 import thyyxxk.webserver.config.exception.ExceptionEnum;
 import thyyxxk.webserver.constants.Capacity;
 import thyyxxk.webserver.constants.sidicts.ChargeStatus;
@@ -73,6 +73,10 @@ public class YiZhuLuRuServer {
     private final String SMALL_PACKAGE = "01";
     private final String BIG_PACKAGE = "99";
 
+    private YiZhuLuRuServer getThis() {
+        return SpringUtil.getBean(this.getClass());
+    }
+
 
     public YiZhuLuRuServer(YiZhuLuRuDao dao, PublicServer publicServer, RedisLikeService redisLikeService, XiangMuLuRuDao xiangMuLuRuDao, RationalUseServer rationalUseServer, DrgWebServices drgWebServices) {
         this.dao = dao;
@@ -83,6 +87,7 @@ public class YiZhuLuRuServer {
         this.drgWebServices = drgWebServices;
     }
 
+
     public ResultVo<String> getOrderNo() {
         return ResultVoUtil.success(BigDecimal.valueOf(publicServer.getActOrderNo()).stripTrailingZeros().toPlainString());
     }
@@ -125,7 +130,6 @@ public class YiZhuLuRuServer {
     public ResultVo<List<XinZhenYzActOrder>> huoQuYiZhuShuJu(YiZhuFeiYongChaXunTiaoJian param) {
         QueryWrapper<?> qw = new QueryWrapper<>();
         qw.eq("a.inpatient_no", param.getPatNo()).eq("a.admiss_times", param.getTimes());
-//        qw.orderByDesc("a.act_order_no");
         qw.orderByAsc("a.order_time");
         List<XinZhenYzActOrder> yiZhuList = dao.huoQuYiZhuShuJu(qw);
         // 还有那些没有被匹配的子级医嘱
@@ -298,8 +302,8 @@ public class YiZhuLuRuServer {
         String userCode = TokenUtil.getTokenUserId();
         // 获取医生开药品的权限
         Integer doctorLevel = dao.huoQuYiShenDengJi(userCode);
-        XinZhenYiZhu huanZheXinXi = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
-        Map<String, XinZhenYzActOrder> drug = getDrugInformation(yaoPingCode, huanZheXinXi.getZkWard());
+        XinZhenYiZhu patInfo = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
+        Map<String, XinZhenYzActOrder> drug = getDrugInformation(yaoPingCode, patInfo.getZkWard());
         Map<String, List<XinZhenYzActOrder>> project = getProjectInformation(xiangMuCode);
 
         // 是否可以确认
@@ -323,7 +327,7 @@ public class YiZhuLuRuServer {
             }
 
             confirmOrderInformation.add(item.getActOrderNo());
-            Map<String, Object> errorMessageMap = checkData(item, drug, project, huanZheXinXi, doctorLevel);
+            Map<String, Object> errorMessageMap = checkData(item, drug, project, patInfo, doctorLevel);
             String key = item.getId();
             if (rationalUseOfMedicine.containsKey(key)) {
                 List<String> temp = (List<String>) errorMessageMap.get("error");
@@ -357,19 +361,30 @@ public class YiZhuLuRuServer {
         for (BigDecimal decimal : confirmOrderInformation) {
             dao.confirmOrders(decimal, userCode, new Date());
         }
+        getThis().drgOrderUpdate(patInfo.getInpatientNo() + "_" + patInfo.getAdmissTimes());
+        log.info("确认的医嘱:{}", JSON.toJSONString(yiZhuList));
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
+    }
+
+
+    /**
+     * 在开医嘱时 drg 需要调用一下这个接口
+     *
+     * @param patientNo 患者id
+     */
+    @Async
+    public void drgOrderUpdate(String patientNo) {
         try {
             JSONObject jsonDrg = new JSONObject();
-            jsonDrg.put("visit_id", Collections.singletonList(huanZheXinXi.getInpatientNo() + "_" + huanZheXinXi.getAdmissTimes()));
+            jsonDrg.put("visit_id", Collections.singletonList(patientNo));
             jsonDrg.put("scene_type", 1);
-            drgWebServices.etlClient(jsonDrg);
+            JSONObject js = drgWebServices.etlClient(jsonDrg);
+            log.info("调用drg医嘱确认接口:{}", js);
         } catch (Exception e) {
             e.printStackTrace();
         }
-        log.info("确认的医嘱:{}", JSON.toJSONString(yiZhuList));
-        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION);
     }
 
-
     /**
      * 录入单条医嘱  新的 下面的保存医嘱的都无效了
      *
@@ -379,7 +394,6 @@ public class YiZhuLuRuServer {
     public ResultVo<Map<String, Object>> enterOrders(XinZhenYiZhu param) {
         XinZhenYzActOrder oldOrderNo = dao.getActOrderNoOne(param.getActOrderNo());
         String userCode = TokenUtil.getTokenUserId();
-
         if (oldOrderNo != null) {
             if (!"1".equals(oldOrderNo.getStatusFlag().trim())) {
                 return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该医嘱不是录入状态无法保存.");
@@ -391,7 +405,6 @@ public class YiZhuLuRuServer {
                 return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "医嘱录入人不是您,无法修改。。");
             }
         }
-
         // 获取医生开药品的权限
         Integer doctorLevel = dao.huoQuYiShenDengJi(userCode);
         XinZhenYiZhu huanZheXinXi = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
@@ -456,6 +469,7 @@ public class YiZhuLuRuServer {
             if (errorMessageMap.containsKey("error")) {
                 return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请修改有错误的医嘱。", map);
             }
+
         }
         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "添加成功.");
     }
@@ -471,17 +485,21 @@ public class YiZhuLuRuServer {
             return ResultVoUtil.fail(ExceptionEnum.ERROR_MESSAGE, "请先选择患者.");
         }
         Map<String, XinZhenYzActOrder> fatherAndSonDoctorSAdvice = new HashMap<>(param.getList().size());
-
         param.getList().forEach(item -> {
             fatherAndSonDoctorSAdvice.put(item.getId(), item);
             item.setActOrderNo(BigDecimal.valueOf(publicServer.getActOrderNo()));
         });
         XinZhenYiZhu huanZheXinXi = dao.huoQuHuanZheXinXi(param.getInpatientNo(), param.getAdmissTimes());
-        String userCode = TokenUtil.getTokenUserId();
+        // 把模板的数据插入到医嘱
+        getThis().templateInsertToOrder(param, fatherAndSonDoctorSAdvice, huanZheXinXi);
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION, "插入模板数据成功。");
+    }
 
+    @Transactional(rollbackFor = Exception.class)
+    public void templateInsertToOrder(XinZhenYiZhu param, Map<String, XinZhenYzActOrder> fatherAndSonDoctorSAdvice, XinZhenYiZhu huanZheXinXi) {
+        String userCode = TokenUtil.getTokenUserId();
         param.getList().forEach(item -> {
             String key = item.getParentNo() != null ? item.getParentNo().stripTrailingZeros().toPlainString() : "";
-//            item.setGroupNo(param.getGroupNo());
             if (StringUtil.notBlank(key)) {
                 if (fatherAndSonDoctorSAdvice.containsKey(key)) {
                     item.setParentNo(fatherAndSonDoctorSAdvice.get(key).getActOrderNo());
@@ -489,8 +507,6 @@ public class YiZhuLuRuServer {
             }
             dao.insertEntryOrder(huanZheXinXi, item, userCode);
         });
-
-        return ResultVoUtil.success();
     }
 
     /**