Sfoglia il codice sorgente

Merge branch 'dev-1.1.4' into 'dev-1.1.4'

新增中草药颗粒剂退药

See merge request lihong/thmz_system!73
huangshuhua 1 anno fa
parent
commit
1944ca1fc2

+ 14 - 4
src/main/java/cn/hnthyy/thmz/controller/yf/YfWardPrescriptionController.java

@@ -98,7 +98,15 @@ public class YfWardPrescriptionController {
                 yzActOrderCyVo.setPageNo(yzYpPageNoVo.getPageNo());
                 yzActOrderCyVo.setWardCode(yzYpPageNoVo.getWardCode());
                 yzActOrderCyVo.setGroupNo(yzYpPageNoVo.getGroupNo());
-                yzActOrderCyVo.setStatusFlag(yzYpPageNoVo.getSubmitFlag());
+                String s;
+                if("3".equals(yzYpPageNoVo.getSubmitFlag())){
+                    s = "'3','T'";
+                } else if("4".equals(yzYpPageNoVo.getSubmitFlag())){
+                    s = "'4','N'";
+                } else {
+                    s = "'5'";
+                }
+                yzActOrderCyVo.setStatusFlag(s);
                 resultMap.put("data", yfWardPrescriptionService.queryYzActOrderCy(yzActOrderCyVo));
             }else{
                 resultMap.put("data", yfWardPrescriptionService.queryYzYpPageNo(yzYpPageNoVo));
@@ -174,7 +182,7 @@ public class YfWardPrescriptionController {
      */
     @UserLoginToken
     @RequestMapping(value = "/getZyDrugCyCount", method = {RequestMethod.GET})
-    public Map<String, Object> getZyDrugCyCount(@RequestParam("pageNo") String pageNo) {
+    public Map<String, Object> getZyDrugCyCount(@RequestParam("pageNo") String pageNo, @RequestParam("submitFlag") String submitFlag) {
         Map<String, Object> resultMap = new HashMap<>();
         try {
             if (null == pageNo) {
@@ -182,7 +190,7 @@ public class YfWardPrescriptionController {
                 resultMap.put("message", "请领单号参数不能为空");
                 return resultMap;
             }
-            List<YzActOrderCyDetailVo> YzActOrderCyDetails= yfWardPrescriptionService.queryZyDrugCy(pageNo);
+            List<YzActOrderCyDetailVo> YzActOrderCyDetails= yfWardPrescriptionService.queryZyDrugCy(pageNo, submitFlag);
             resultMap.put("code", 0);
             resultMap.put("message", "查询病房请领单药品汇总信息成功");
             resultMap.put("data", YzActOrderCyDetails);
@@ -295,6 +303,9 @@ public class YfWardPrescriptionController {
             Map<String, Set<Date>> occTimeMap = yfWardVos.stream().collect(Collectors.groupingBy(yfWardVo -> yfWardVo.getActOrderNo().toString(), Collectors.mapping(YfWardVo::getOccTime, Collectors.toSet())));
             //根据病人药品分组
             Map<String, List<YfWardVo>> groupMap = yfWardVos.stream().collect(Collectors.groupingBy(yfWardVo -> yfWardVo.getActOrderNo().toString()));
+            //获取药单的医嘱开始时间
+            List<YfWardVo> yfWardVosOccTime = yfWardVos.stream().sorted(Comparator.comparing(YfWardVo::getOccTime)).collect(Collectors.toList());
+            Date performanceDate = DateUtil.pase(yfWardVosOccTime.get(0).getOccTime(), "yyyy-MM-dd");
             for (List<YfWardVo> y : groupMap.values()) {
                 YfWardVo yfWardVo = y.get(0);
                 yfWardVo.setAmount(countMap.get(yfWardVo.getActOrderNo().toString()));
@@ -307,7 +318,6 @@ public class YfWardPrescriptionController {
                     if(null == yfWardVo.getOccTime()){
                         continue;
                     }
-                    Date performanceDate = DateUtil.pase(yfWardVo.getPerformanceTime(), "yyyy-MM-dd");
                     if (h >= 12) {
                         if (h >= 13) {
                             if (d.getTime() == performanceDate.getTime()) {

+ 13 - 0
src/main/java/cn/hnthyy/thmz/mapper/his/yz/YzActOrderCyDetailMapper.java

@@ -18,4 +18,17 @@ public interface YzActOrderCyDetailMapper {
                     " from yz_act_order_cy_detail WITH(NOLOCK) where order_no=#{orderNo}"
             , "</script>"})
     List<YzActOrderCyDetail> selectYzActOrderCyDetail(@Param("orderNo") Integer orderNo);
+
+    @Select({"<script>",
+            "select charge_code,serial,group_no,-quantity as quantity,supply_code,instruction,order_no,serial_no,unit_price" +
+                    " from yz_act_order_cy_detail WITH(NOLOCK) where order_no=#{orderNo}"
+            , "</script>"})
+    List<YzActOrderCyDetail> selectYzActOrderCyDetailTy(@Param("orderNo") Integer orderNo);
+
+    @Select({"<script>",
+            "select charge_code,serial,group_no,amount as quantity,supply_code,'退药' as instruction,act_order_no as order_no, 1 as serial_no,retprice as unit_price" +
+                    " from yp_zy_patient WITH(NOLOCK) where act_order_no=#{orderNo} and page_type = 'ZT' "
+            , "</script>"})
+    List<YzActOrderCyDetail> selectYpZyPatientTy(@Param("orderNo") Integer orderNo);
+
 }

+ 1 - 1
src/main/java/cn/hnthyy/thmz/mapper/his/yz/YzActOrderCyMapper.java

@@ -58,7 +58,7 @@ public interface YzActOrderCyMapper {
                     " and a.ward_code =#{wardCode}",
                     "</when>",
                     "<when test='statusFlag!=null'>",
-                    " and a.status_flag =#{statusFlag}",
+                    " and a.status_flag in (${statusFlag}) ",
                     "</when>",
                     "<when test='beginDate!=null'>",
                     " and a.input_date &gt;=#{beginDate,jdbcType=TIMESTAMP}",

+ 7 - 0
src/main/java/cn/hnthyy/thmz/mapper/his/yz/YzActOrderMapper.java

@@ -183,4 +183,11 @@ public interface YzActOrderMapper {
             "drug_vol_unit =isnull(drug_vol_unit,'')," +
             "drug_volume =isnull(drug_volume,0),mini_unit,start_time,order_name,performance_time,exec_unit,yb_self_flag,consult_physician from yz_erase_order WITH(NOLOCK) where act_order_no=#{actOrderNo}")
     YzActOrder selectYzEraseOrderByActOrderNo(@Param("actOrderNo") double actOrderNo);
+
+    @Delete(" delete from yz_act_order where act_order_no = #{actOrderNo} ")
+    int deleteYzActOrderByActOrderNo(@Param("actOrderNo") Integer actOrderNo);
+
+    @Delete(" delete from yz_inact_order where act_order_no = #{actOrderNo} ")
+    int deleteYzInActOrderByActOrderNo(@Param("actOrderNo") Integer actOrderNo);
+
 }

+ 10 - 0
src/main/java/cn/hnthyy/thmz/mapper/his/zy/ZyDetailChargeMapper.java

@@ -221,4 +221,14 @@ public interface ZyDetailChargeMapper {
     int updateZyDetailCharge(ZyDetailCharge zyDetailCharge);
     @Select(" select sum ( charge_fee ) from zy_detail_charge where inpatient_no =#{inpatientNo} and admiss_times =#{admissTimes}")
     BigDecimal selectSumChargeFee(@Param("inpatientNo") String inpatientNo, @Param("admissTimes")Integer admissTimes);
+
+    @Select("select inpatient_no , admiss_times , ledger_sn , detail_sn , charge_date , op_id_code , charge_code , infant_flag ," +
+            " charge_status , charge_fee , self_flag , separate_flag , suppress_flag , ward_code , dept_code , order_no , ope_flag ," +
+            " exec_unit , charge_amount , charge_code_mx , serial , zy_serial_no , gen_time  from  zy_detail_charge " +
+            "  where inpatient_no =#{inpatientNo} AND admiss_times =#{admissTimes} and order_no = #{orderNo} ")
+    List<ZyDetailCharge> selectZyDetailChargeByOrderCode(@Param("inpatientNo") String inpatientNo, @Param("admissTimes")Integer admissTimes, @Param("orderNo")Integer orderNo);
+
+    @Update(" update zy_detail_charge set ori_detail_sn = -1 where inpatient_no =#{inpatientNo} AND admiss_times =#{admissTimes} and ledger_sn = #{ledgerSn} and detail_sn = #{detailSn} ")
+    int updateChargeOriDetailSn(@Param("inpatientNo") String inpatientNo, @Param("admissTimes")Integer admissTimes, @Param("ledgerSn") Integer ledgerSn, @Param("detailSn") Integer detailSn);
+
 }

+ 1 - 1
src/main/java/cn/hnthyy/thmz/service/his/yf/YfWardPrescriptionService.java

@@ -62,7 +62,7 @@ public interface YfWardPrescriptionService {
      *  @param pageNo 药单号
      * @return
      */
-    List<YzActOrderCyDetailVo> queryZyDrugCy(String pageNo);
+    List<YzActOrderCyDetailVo> queryZyDrugCy(String pageNo, String submitFlag);
 
     /**
      * 查询药品请领单明细(医技科室领药单)

+ 117 - 9
src/main/java/cn/hnthyy/thmz/service/impl/his/yf/YfWardPrescriptionServiceImpl.java

@@ -266,10 +266,19 @@ public class YfWardPrescriptionServiceImpl implements YfWardPrescriptionService
     }
 
     @Override
-    public List<YzActOrderCyDetailVo> queryZyDrugCy(String pageNo) {
+    public List<YzActOrderCyDetailVo> queryZyDrugCy(String pageNo,  String submitFlag) {
         List<YzActOrderCyDetailVo> yzActOrderCyDetailVos = new ArrayList<>();
         YzActOrderCy yzActOrderCy = yzActOrderCyMapper.selectYzActOrderCyByPageNo(pageNo);
-        List<YzActOrderCyDetail> yzActOrderCyDetails = yzActOrderCyDetailMapper.selectYzActOrderCyDetail(yzActOrderCy.getOrderNo());
+        List<YzActOrderCyDetail> yzActOrderCyDetails;
+        // 中草药退药
+        if("T".equals(yzActOrderCy.getStatusFlag()) && "3".equals(submitFlag)){
+            yzActOrderCyDetails = yzActOrderCyDetailMapper.selectYzActOrderCyDetailTy(yzActOrderCy.getOrderNo());
+        } else if("5".equals(submitFlag)){
+            // 查询已退药
+            yzActOrderCyDetails = yzActOrderCyDetailMapper.selectYpZyPatientTy(yzActOrderCy.getOrderNo());
+        } else {
+            yzActOrderCyDetails = yzActOrderCyDetailMapper.selectYzActOrderCyDetail(yzActOrderCy.getOrderNo());
+        }
         for (int i = 0; i < yzActOrderCyDetails.size(); i++) {
             YzActOrderCyDetail yzActOrderCyDetail = yzActOrderCyDetails.get(i);
             YzActOrderCyDetailVo vo = new YzActOrderCyDetailVo();
@@ -688,6 +697,16 @@ public class YfWardPrescriptionServiceImpl implements YfWardPrescriptionService
         Date now = new Date();
         Map<String, Object> resultMap = new HashMap<>();
         YzActOrderCy yzActOrderCy = yzActOrderCyMapper.selectYzActOrderCyByPageNo(pageNo);
+        // 中草药拒绝退药
+        if(isTy == 2 && "T".equals(yzActOrderCy.getStatusFlag())){
+            int s = yzActOrderCyMapper.updateChargeStatus(now, userCode, "N", pageNo);
+            if(s == 0){
+                throw new MzException("拒绝退药失败,请检查!");
+            }
+            resultMap.put("code", 0);
+            resultMap.put("message", "拒绝退药成功!");
+            return resultMap;
+        }
         if(isTy == 0){
             if(yzActOrderCy != null && yzActOrderCy.getQuantity() == 0d){
                 throw new MzException("药单发药剂数为0,请检查!");
@@ -701,6 +720,10 @@ public class YfWardPrescriptionServiceImpl implements YfWardPrescriptionService
         if (null == zyActpatient) {
             zyActpatient = zyActpatientMapper.selectByInpatientNo(ZyActpatient.ZY_INACTPATIENT, yzActOrderCy.getInpatientNo(), yzActOrderCy.getAdmissTimes());
         }
+        // 中草药退药
+        if("T".equals(yzActOrderCy.getStatusFlag())){
+            isTy = 99;
+        }
         if (isTy == 0) {
             YzActOrderCy cy = yzActOrderCyMapper.selectYzActOrderCyByPageNoAndFour(pageNo, "4");
             if(cy != null){
@@ -723,11 +746,42 @@ public class YfWardPrescriptionServiceImpl implements YfWardPrescriptionService
             actpatient.setCharge2(multiply);
             actpatient.setTableName(tableName);
             zyActpatientMapper.updateZyActpatientZy(actpatient);
+        } if(isTy == 99){
+            YzActOrderCy cy = yzActOrderCyMapper.selectYzActOrderCyByPageNoAndFour(pageNo, "T");
+            if(cy != null){
+                throw new MzException("确认退药失败,请勿重复退药!药单号:" + pageNo);
+            }
+            // 退费
+            BigDecimal m = DecimalUtil.minus(BigDecimal.ZERO, multiply);
+            ZyLedgerFile zyLedgerFile = new ZyLedgerFile();
+            zyLedgerFile.setInpatientNo(yzActOrderCy.getInpatientNo());
+            zyLedgerFile.setAdmissTimes(yzActOrderCy.getAdmissTimes());
+            zyLedgerFile.setLedgerSn(ledgerSn);
+            zyLedgerFile.setTotalCharge(m);
+            zyLedgerFile.setBalance(m);
+            zyLedgerFile.setCharge2(m);
+            zyLedgerFileMapper.updateZyLedgerFileZy(zyLedgerFile);
+            ZyActpatient actpatient = new ZyActpatient();
+            actpatient.setInpatientNo(yzActOrderCy.getInpatientNo());
+            actpatient.setAdmissTimes(yzActOrderCy.getAdmissTimes());
+            actpatient.setTotalCharge(m);
+            actpatient.setBalance(m);
+            actpatient.setCharge2(m);
+            actpatient.setTableName(tableName);
+            zyActpatientMapper.updateZyActpatientZy(actpatient);
         }
-        if (yzActOrderCyMapper.updateChargeStatus(now, userCode, "4", pageNo) == 0) {
-            throw new MzException("确认发药失败,更新药单状态异常"+pageNo);
-        }else{
-            log.info("确认药单成功,药单号:{}", pageNo);
+        if(isTy == 99){
+            if (yzActOrderCyMapper.updateChargeStatus(now, userCode, "5", pageNo) == 0) {
+                throw new MzException("确认退药失败,更新药单状态异常"+pageNo);
+            }else{
+                log.info("确认药单退药成功,药单号:{}", pageNo);
+            }
+        } else {
+            if (yzActOrderCyMapper.updateChargeStatus(now, userCode, "4", pageNo) == 0) {
+                throw new MzException("确认发药失败,更新药单状态异常"+pageNo);
+            }else{
+                log.info("确认药单成功,药单号:{}", pageNo);
+            }
         }
         for (int i = 0; i < yzActOrderCyDetails.size(); i++) {
             YzActOrderCyDetail yzActOrderCyDetail = yzActOrderCyDetails.get(i);
@@ -755,14 +809,32 @@ public class YfWardPrescriptionServiceImpl implements YfWardPrescriptionService
                     log.info("确认药单,更新库存成功[{}]", JSONObject.valueToString(yzActOrderCyDetail));
                 }
                 supplyCode = "Z";
+            } else if(isTy == 99){
+                // 退药库存
+                quantity = yzActOrderCyDetail.getQuantity() * yzActOrderCy.getQuantity();
+                int j = ypBaseYfMapper.updateStockAmount(yzActOrderCyDetail.getChargeCode(), yzActOrderCyDetail.getSerial(), yzActOrderCy.getGroupNo(),
+                        yzActOrderCyDetail.getQuantity() * yzActOrderCy.getQuantity(), BigDecimal.valueOf(quantity * yzActOrderCyDetail.getUnitPrice()));
+                if (j == 0) {
+                    throw new MzException("确认退药失败,更新药房库存异常");
+                }else{
+                    log.info("确认药单,更新库存成功[{}]", JSONObject.valueToString(yzActOrderCyDetail));
+                }
+                supplyCode = "t";
             }
             ypZyPatient.setSupplyCode(supplyCode);
-            ypZyPatient.setAmount(quantity);
+            if(isTy == 99){
+                ypZyPatient.setAmount(-quantity);
+                // 药单类型为ZT(中草药退药)
+                ypZyPatient.setPageType("ZT");
+            } else {
+                ypZyPatient.setAmount(quantity);
+                // 药单类型为Z(中草药发药)
+                ypZyPatient.setPageType("Z");
+            }
             ypZyPatient.setInfantFlag(!yzActOrderCy.getInpatientNo().contains("$") ? "0" : "1");
             ypZyPatient.setDrawer(yzActOrderCy.getDoctorCode());
             ypZyPatient.setKeeper(userCode);
-            ypZyPatient.setAlwaysFlag("t").setDrugClass("j").setAcctSign("2").setSelfFlag("1").setPaySelf("0").setPageType("Z")
-                    .setJyFlag("0").setConfirmTime(now);
+            ypZyPatient.setAlwaysFlag("t").setDrugClass("j").setAcctSign("2").setSelfFlag("1").setPaySelf("0").setJyFlag("0").setConfirmTime(now);
             ypZyPatient.setActOrderNo(yzActOrderCy.getOrderNo());
             ypZyPatient.setPageNo(Integer.parseInt(pageNo));
             ypZyPatient.setGroupNo(yzActOrderCy.getGroupNo());
@@ -814,6 +886,42 @@ public class YfWardPrescriptionServiceImpl implements YfWardPrescriptionService
                 }
             }
         }
+        if(isTy == 99){
+            // 退药产生退费记录
+            List<ZyDetailCharge> fyList = zyDetailChargeMapper.selectZyDetailChargeByOrderCode(
+                    yzActOrderCy.getInpatientNo(), yzActOrderCy.getAdmissTimes(), yzActOrderCy.getOrderNo());
+            for(ZyDetailCharge fy : fyList){
+                ZyDetailCharge fyNew = new ZyDetailCharge();
+                BeanUtils.copyProperties(fy, fyNew);
+                int d = zyDetailChargeMapper.updateChargeOriDetailSn(fy.getInpatientNo(), fy.getAdmissTimes(), fy.getLedgerSn(), fy.getDetailSn());
+                if (d == 0) {
+                    throw new MzException("确认退药失败,更新费用退费标志异常!");
+                }
+                fyNew.setLedgerSn(zyLedgerFileMapper.selectMaxLedgerSn(fy.getInpatientNo(), fy.getAdmissTimes()));
+                fyNew.setOriDetailSn(fy.getDetailSn());
+                int maxDetailSn = zyDetailChargeMapper.selectMaxDetailSn(fy.getInpatientNo(), fy.getAdmissTimes());
+                fyNew.setDetailSn(maxDetailSn + 1);
+                fyNew.setChargeAmount(-fy.getChargeAmount());
+                fyNew.setChargeFee(DecimalUtil.minus(BigDecimal.ZERO, fy.getChargeFee()));
+                fyNew.setChargeDate(new Date());
+                fyNew.setGenTime(new Date());
+                // 保存退费记录
+                int f = zyDetailChargeMapper.insertZyDetailCharge(fyNew);
+                if (f == 0) {
+                    throw new MzException("确认退药失败,保存退费记录异常!");
+                }
+            }
+
+            // 删除医嘱
+            int g = yzActOrderMapper.deleteYzActOrderByActOrderNo(yzActOrderCy.getOrderNo());
+            if (g == 0) {
+                g = yzActOrderMapper.deleteYzInActOrderByActOrderNo(yzActOrderCy.getOrderNo());
+                if (g == 0) {
+                    throw new MzException("确认退药失败,更新医嘱记录标志异常!");
+                }
+            }
+        }
+
         resultMap.put("code", 0);
         resultMap.put("message", "保存领药单发药数据成功");
         return resultMap;

+ 45 - 3
src/main/resources/static/js/yf/ward_prescription.js

@@ -30,7 +30,8 @@ $(function () {
         $('.isZy').css('display', '');
         $('#mx').css('display', 'none');
         submitFlagHtml = '<option value="3" selected>待发</option>' +
-            '<option value="4">已发</option>';
+            '<option value="4">已发</option>' +
+            '<option value="5">已退</option>';
     } else {
         $('.isXy').css('display', '');
         $('.isZy').css('display', 'none');
@@ -385,9 +386,12 @@ function initColumns() {
             if ((groupNo !== '81' && groupNo !== '83') && $("#submitFlagSearch").val() === '1' && row.pageClass != 'T' && row.pageClass != 'HT' && row.pageClass != 'A' && row.pageClass != '5' && row.pageClass != '6') {
                 str += '<button type="button" class="registration-no-color-foot-button" title="病室药单汇总" onclick="detail(\'' + row.pageNo + '\',\'' + row.pageClass + '\',\'' + row.wardCode + '\',1)"><i class="fa fa-compress"></i></button>';
             }
-            if (((groupNo !== '81' && groupNo !== '83') && $("#submitFlagSearch").val() === '1') || ((groupNo === '81' || groupNo === '83') && $("#submitFlagSearch").val() === '3')) {
+            if (((groupNo !== '81' && groupNo !== '83') && $("#submitFlagSearch").val() === '1') || ((groupNo === '81' || groupNo === '83') && $("#submitFlagSearch").val() === '3'  && row.statusFlag !== 'T')) {
                 str += '<button type="button" class="registration-no-color-foot-button" title="拒绝发药" onclick="cancelSubmit(\'' + row.pageNo + '\',\'' + row.wardName + '\',\'' + row.pageClass + '\')"><i class="fa fa-reply"></i></button>';
             }
+            if((groupNo === '81' || groupNo === '83') && $("#submitFlagSearch").val() === '3' && row.statusFlag === 'T'){
+                str += '<button type="button" class="registration-no-color-foot-button" title="拒绝退药" onclick="cancelZcySubmit(\'' + row.pageNo + '\',\'' + row.wardName + '\',\'' + row.pageClass + '\')"><i class="fa fa-close"></i></button>';
+            }
             return str;
         }
     }, {
@@ -498,7 +502,29 @@ function initColumns() {
             }
             return "";
         }
-    },{
+    }, {
+        field: 'statusFlag',
+        title: '药单类型',
+        align: "center",
+        width: "100",
+        valign: 'middle',
+        formatter: function (value, row, index) {
+            if (value != null && value !== "") {
+                if("T" === value){
+                    return '待退药单';
+                } else if("5" === value){
+                    return '已退药单';
+                } else if("3" === value){
+                    return '待发药单';
+                } else if("N" === value){
+                    return '拒退药单';
+                } else {
+                    return '已发药单';
+                }
+            }
+            return "";
+        }
+    }, {
         field: 'inputDate',
         title: '提交时间',
         align: "center",
@@ -578,6 +604,7 @@ function loadSummarizingTable() {
         });
     } else {
         tem.pageNo = pageNo;
+        tem.submitFlag = $("#submitFlagSearch").val();
         $("#tb_summarizing_table").jqGrid('setGridParam', {
             datatype: 'json',
             url: url,
@@ -1930,6 +1957,21 @@ function cancelSubmit(pageNo, wardName, pageClass) {
     }
 }
 
+/**
+ * 中草药拒绝退药
+ * @param pageNo 药单号
+ */
+function cancelZcySubmit(pageNo, wardName, pageClass){
+    request({
+        url: '/sendZyWard',
+        method: 'GET',
+        data: {pageNo: pageNo, isTy: 2}
+    }).then((res) => {
+        successMesage(res);
+        initTbTable();
+    });
+}
+
 /**
  * 中药单撤销
  * @param pageNo