瀏覽代碼

医嘱生成优化

lihong 2 周之前
父節點
當前提交
028e575632

+ 1 - 3
src/main/java/thyyxxk/webserver/controller/executeItem/GenerateYzController.java

@@ -4,7 +4,6 @@ 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.config.exception.ExceptionEnum;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.executeItem.GenerateYzVo;
 import thyyxxk.webserver.entity.inpatient.ZyActpatient;
@@ -47,8 +46,7 @@ public class GenerateYzController {
      **/
     @PostMapping("/generateYpOrZl")
     public ResultVo<Set<String>> generateYpOrZl(@RequestBody GenerateYzVo param){
-      return   ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, "该功能暂不开放,请在老系统生成!");
-//        return service.generateYpOrZl(param);
+        return service.generateYpOrZl(param);
     }
 
 

+ 68 - 3
src/main/java/thyyxxk/webserver/dao/his/executeItem/YzYpZyOrderDao.java

@@ -1,9 +1,7 @@
 package thyyxxk.webserver.dao.his.executeItem;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Update;
+import org.apache.ibatis.annotations.*;
 import thyyxxk.webserver.entity.executeItem.YpZyPatient;
 import thyyxxk.webserver.entity.executeItem.YzYpZyOrder;
 
@@ -69,5 +67,72 @@ public interface YzYpZyOrderDao extends BaseMapper<YzYpZyOrder> {
           " </foreach>  " +
           " </script> ")
   int batchInsertYpZyPatient(List<YpZyPatient> list);
+  @Insert(" insert into yz_yp_zy_order (inpatient_no, admiss_times, name, bed_no, dept_code, ward_code, charge_code, amount, retprice, charge_date, infant_flag, drawer, always_flag, status_flag, drug_class, serail, occ_time, act_order_no, page_no, pay_self, self_flag, separate_flag, suprice_flag, drug_flag, serial, group_no, doctor_name, zy_serial_no, page_class, yb_self_flag, ledger_sn, detail_sn) values" +
+          " ( #{item.inpatientNo},#{item.admissTimes} ,#{item.name}, #{item.bedNo}, #{item.deptCode}, #{item.wardCode}, #{item.chargeCode},  #{item.amount,jdbcType=DECIMAL}, #{item.retprice,jdbcType=DECIMAL}, #{item.chargeDate,jdbcType=TIMESTAMP}, #{item.infantFlag}, #{item.drawer},#{item.alwaysFlag}, #{item.statusFlag},  #{item.drugClass},  #{item.serail}, #{item.occTime,jdbcType=TIMESTAMP}, ${item.actOrderNoStr} ,#{item.pageNo,jdbcType=DECIMAL} , #{item.paySelf}, #{item.selfFlag}, #{item.separateFlag}, #{item.supriceFlag}, #{item.drugFlag},  #{item.serial}, #{item.groupNo}, #{item.doctorName}, #{item.zySerialNo}, #{item.pageClass}, #{item.ybSelfFlag}, #{item.ledgerSn}, #{item.detailSn}) ")
+  int insertOne(@Param("item") YzYpZyOrder yzYpZyOrder);
+
+  @Select(" select order_date, out_seri, dept_code, ward_code, section_code, inpatient_no, name, bed_no, charge_code, retprice, amount, infant_flag, drawer, keeper, date1, date2, always_flag, drug_class, acct_sign, total_flag, admiss_times, supply_code, act_order_no, page_no, self_flag, separate_flag, suprice_flag, drug_flag, pay_self, group_no, confirm_time, serial, doctor_name, country_flag, zy_serial_no, page_type, jy_flag, manu_no from yp_zy_patient where act_order_no = ${actOrderNoStr} and order_date > #{endTime} and amount > 0  ")
+  List<YpZyPatient> selectYpZyPatientByOccTime(@Param("actOrderNoStr") String actOrderNoStr, @Param("endTime") String endTime);
+  @Update(" update yz_yp_zy_order set amount=-amount  where  act_order_no=${actOrderNoStr} and occ_time > #{endTime} ")
+  int updateTfAmount(@Param("actOrderNoStr") String actOrderNoStr, @Param("endTime") String endTime);
+
+  /**
+   * 查询需要执行时间超过结束时间的医嘱
+   * @author lihong
+   * @since 2025/8/7 15:07
+   * @param
+   * @param wardCode
+   * @return List<YzYpZyOrder>
+   **/
+  @Select(" SELECT yz_yp_zy_order.act_order_no, " +
+          "       yz_yp_zy_order.charge_code, " +
+          "       yz_yp_zy_order.occ_time, " +
+          "       yz_yp_zy_order.status_flag, " +
+          "       yz_yp_zy_order.amount, " +
+          "       yz_yp_zy_order.pay_self, " +
+          "       yz_yp_zy_order.inpatient_no, " +
+          "       yz_yp_zy_order.admiss_times, " +
+          "       yz_yp_zy_order.name, " +
+          "       yz_yp_zy_order.bed_no, " +
+          "       yz_yp_zy_order.dept_code, " +
+          "       yz_yp_zy_order.ward_code, " +
+          "       yz_yp_zy_order.retprice, " +
+          "       yz_yp_zy_order.charge_date, " +
+          "       yz_yp_zy_order.infant_flag, " +
+          "       yz_yp_zy_order.drawer, " +
+          "       yz_yp_zy_order.always_flag, " +
+          "       yz_yp_zy_order.drug_class, " +
+          "       yz_yp_zy_order.serail, " +
+          "       yz_yp_zy_order.page_no, " +
+          "       yz_yp_zy_order.self_flag, " +
+          "       yz_yp_zy_order.separate_flag, " +
+          "       yz_yp_zy_order.suprice_flag, " +
+          "       yz_yp_zy_order.drug_flag, " +
+          "       yz_yp_zy_order.serial, " +
+          "       yz_yp_zy_order.group_no, " +
+          "       yz_yp_zy_order.doctor_name " +
+          "FROM yz_yp_zy_order  ,yz_act_order b " +
+          "WHERE yz_yp_zy_order.dept_code = #{wardCode} and " +
+          "    yz_yp_zy_order.ward_code = #{wardCode} and " +
+          "    yz_yp_zy_order.status_flag in ('3','4') and " +
+          "    yz_yp_zy_order.amount > 0 and " +
+          "    yz_yp_zy_order.occ_time >  b.end_time and " +
+          "    yz_yp_zy_order.inpatient_no=b.inpatient_no and " +
+          "    yz_yp_zy_order.admiss_times=b.admiss_times and " +
+          "    yz_yp_zy_order.act_order_no=b.act_order_no and " +
+          "    yz_yp_zy_order.drug_class <> 'd'")
+  List<YzYpZyOrder> selectYzYpZyOrderByEnd(@Param("wardCode") String wardCode);
+
+  @Delete(" delete  a from yz_yp_zy_order as a join yz_act_order b on a.inpatient_no=b.inpatient_no " +
+          "   and a.admiss_times=b.admiss_times " +
+          "   and a.act_order_no = b.act_order_no " +
+          "   where a.drug_class <>'d' " +
+          "   and  a.occ_time > b.end_time " +
+          "   and a.amount > 0" +
+          "   and a.status_flag in ('3','4') " +
+          "   and a.dept_code = #{wardCode} " +
+          "   and a.ward_code = #{wardCode} ")
+  int deleteYzYpZyOrderEnd(@Param("wardCode") String wardCode);
+
 }
 

+ 42 - 15
src/main/java/thyyxxk/webserver/service/executeItem/GenerateYzService.java

@@ -191,24 +191,52 @@ public class GenerateYzService {
         }
         if(CollUtil.isNotEmpty(param.getYzYpZyOrders())){
             log.info("最终生成的药品医嘱:{}",param.getYzYpZyOrders());
-            List<YpZyPatient> ypZyPatientList = createYpZyPatient(param.getYzYpZyOrders());
-            if(CollUtil.isNotEmpty(ypZyPatientList)){
-                log.info("自动上账的医嘱:{}",ypZyPatientList);
-                List<List<YpZyPatient>> tempYpZyPatientList = CollUtil.split(ypZyPatientList, 50);
-                for(List<YpZyPatient> temp : tempYpZyPatientList){
-                    yzYpZyOrderDao.batchInsertYpZyPatient(temp);
-                }
-            }
-            List<List<YzYpZyOrder>> tempYzYpZyOrder = CollUtil.split(param.getYzYpZyOrders(),50);
-            for(List<YzYpZyOrder> temp : tempYzYpZyOrder){
-                yzYpZyOrderDao.batchInsertData(temp);
+//            List<YpZyPatient> ypZyPatientList = createYpZyPatient(param.getYzYpZyOrders());
+//            if(CollUtil.isNotEmpty(ypZyPatientList)){
+//                log.info("自动上账的医嘱:{}",ypZyPatientList);
+//                List<List<YpZyPatient>> tempYpZyPatientList = CollUtil.split(ypZyPatientList, 50);
+//                for(List<YpZyPatient> temp : tempYpZyPatientList){
+//                    yzYpZyOrderDao.batchInsertYpZyPatient(temp);
+//                }
+//            }
+            ListUtil.batchList(param.getYzYpZyOrders(),YzYpZyOrderDao.class, YzYpZyOrderDao::insertOne);
+//            List<List<YzYpZyOrder>> tempYzYpZyOrder = CollUtil.split(param.getYzYpZyOrders(),50);
+//            for(List<YzYpZyOrder> temp : tempYzYpZyOrder){
+//                yzYpZyOrderDao.batchInsertData(temp);
+//            }
+        }
+//        新增执行时间大于结束时间的药品数据
+        List<YzYpZyOrder> yzYpZyOrdersEnd = yzYpZyOrderDao.selectYzYpZyOrderByEnd(param.getWardCode());
+        if(CollUtil.isNotEmpty(yzYpZyOrdersEnd)){
+            yzYpZyOrderDao.deleteYzYpZyOrderEnd(param.getWardCode());
+            for(YzYpZyOrder item : yzYpZyOrdersEnd){
+                item.setAmount(item.getAmount().negate());
+                item.setStatusFlag("3");
+                item.setPaySelf("0");
+                item.setPageClass(null);
             }
+            ListUtil.batchList(yzYpZyOrdersEnd,YzYpZyOrderDao.class, YzYpZyOrderDao::insertOne);
         }
         //修改状态
         if(CollUtil.isNotEmpty(param.getUpdateStatusYzActOrders())) {
             for (BigDecimal key : param.getUpdateStatusYzActOrders().keySet()) {
                 YzActOrder tempYzActOrder = param.getUpdateStatusYzActOrders().get(key);
                 log.info("修改状态医嘱 医嘱号={},状态={}", tempYzActOrder.getActOrderNo(), tempYzActOrder.getStatusFlag());
+//                if(NumberEnum.FIVE.getCode().equals(tempYzActOrder.getStatusFlag()) && !FREQ_CODE_ONCE.equals(tempYzActOrder.getFrequCode())){
+//                 List<YpZyPatient> tfYpZyPatientList = yzYpZyOrderDao.selectYpZyPatientByOccTime(tempYzActOrder.getActOrderNoStr(),DateUtil.formatDateTime(tempYzActOrder.getEndTime()));
+//                    yzYpZyOrderDao.updateTfAmount(tempYzActOrder.getActOrderNoStr(), DateUtil.formatDateTime(tempYzActOrder.getEndTime()));
+//                 if(CollUtil.isNotEmpty(tfYpZyPatientList)){
+//                     for(YpZyPatient item : tfYpZyPatientList){
+//                         item.setAmount(BigDecimal.ZERO.subtract(item.getAmount()));
+//                         item.setAcctSign("0");
+//                     }
+//                     log.info("长期医嘱需要退费的数据:{}",tfYpZyPatientList);
+//                     List<List<YpZyPatient>> tempYpZyPatientList = CollUtil.split(tfYpZyPatientList, 50);
+//                     for(List<YpZyPatient> temp : tempYpZyPatientList){
+//                         yzYpZyOrderDao.batchInsertYpZyPatient(temp);
+//                     }
+//                 }
+//                }
                 dao.updateYzActOrderStatusFlag(tempYzActOrder);
             }
            if(CollUtil.isNotEmpty(param.getYzActOccs())){
@@ -377,7 +405,7 @@ public class GenerateYzService {
                 List<String> occTimeStrList = getOccTimeStr(yzOrderFrequency);
                 //周几执行
                 List<Integer> occWeekList = getOccWeek(yzOrderFrequency);
-
+                log.info("医嘱号={},执行频率={},周执行={}",item.getActOrderNoStr(),item.getFrequCode(),occWeekList);
                 //有执行时间
                 if(CollUtil.isNotEmpty(occTimeStrList)){
                     //如果执行时间小于24小时定义的起始时间,那么执行时间
@@ -945,7 +973,7 @@ public class GenerateYzService {
                 .infantFlag(zyActpatient.getInpatientNo().contains("$") ? "1" : "0")
                 .inpatientName(zyActpatient.getName())
                 .inpatientNo(zyActpatient.getInpatientNo())
-                .occName(ypZdDictVo != null ? ypZdDictVo.getName() : StrUtil.sub(zdChargeItem.getName(),0,20))
+                .occName(ypZdDictVo != null ? StrUtil.sub(ypZdDictVo.getName(),0,20) : StrUtil.sub(zdChargeItem.getName(),0,20))
                 .occTime(occTime)
                 .occType(yzActOrder.getOccType())
                 .phyName(yzActOrder.getPhysician())
@@ -963,14 +991,13 @@ public class GenerateYzService {
                 .orderName(orderName)
                 .paySelf(yzActOrder.getPaySelf())
                 .groupNo(yzActOrder.getGroupNo())
-                .selfFlag(zdChargeItem != null ? Convert.toStr(zdChargeItem.getSelfFlag(),"0") : ypZdDictVo.getSelfFlag())
                 .frequCode(yzActOrder.getFrequCode())
                 .retprice(zdChargeItem != null ? Convert.toBigDecimal(zdChargeItem.getChargeAmount(),BigDecimal.ZERO) : ypZdDictVo.getPackRetprice())
                 .serial(yzActOrder.getSerial())
                 .doseUnit(yzActOrder.getDoseUnit())
                 .pageClass(getPageClass(yzActOrder,ypZdDictVo,zdGroupMap))
                 .supplyCode(yzActOrder.getSupplyCode())
-                .instruction(yzActOrder.getInstruction())
+                .instruction(StrUtil.sub(yzActOrder.getInstruction(),0,20))
                 .zySerialNo(zyActpatient.getZySerialNo())
                 .build();
         if(Convert.toBigDecimal(yzActOcc.getDrugQuan(),BigDecimal.ONE).compareTo(BigDecimal.ZERO) == 0){