LIJU 2 weeks ago
parent
commit
81151710e1

+ 88 - 0
src/main/java/cn/hnthyy/thmz/controller/mz/MzPharmacyController.java

@@ -1570,4 +1570,92 @@ public class MzPharmacyController {
             return resultMap;
         }
     }
+
+    @UserLoginToken
+    @RequestMapping(value = "/validateDrugTracCodgForDispensing", method = {RequestMethod.POST})
+    public Map<String, Object> validateDrugTracCodgForDispensing(@RequestBody Map<String, Object> request, HttpServletRequest httpServletRequest) {
+        Map<String, Object> resultMap = new HashMap<>();
+        try {
+            String drugTracCodg = (String) request.get("drugTracCodg");
+            String chargeItemCode = (String) request.get("chargeItemCode");
+            String patientId = (String) request.get("patientId");
+            Integer times = (Integer) request.get("times");
+            Integer receiptNo = (Integer) request.get("receiptNo");
+            Integer orderNo = (Integer) request.get("orderNo");
+            Integer itemNo = (Integer) request.get("itemNo");
+            String drugName = (String) request.get("drugName");
+            String specification = (String) request.get("specification");
+            
+            if (StringUtils.isBlank(drugTracCodg) || StringUtils.isBlank(chargeItemCode)) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "追溯码或药品编码不能为空");
+                return resultMap;
+            }
+            
+            // 1. 先查询追溯码是否存在(不限制药品编码)
+            Map<String, Object> ypManuBarCodeQuery = new HashMap<>();
+            ypManuBarCodeQuery.put("drugTracCodg", drugTracCodg);
+            List<Map<String, Object>> barCodeList = mzPharmacyService.queryYpManuBarCodeByTracCodg(ypManuBarCodeQuery);
+            
+            log.info("查询追溯码 {} 的结果: {}", drugTracCodg, barCodeList);
+            
+            if (barCodeList == null || barCodeList.isEmpty()) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "追溯码不存在,请检查");
+                return resultMap;
+            }
+            
+            // 2. 验证药品编码是否匹配
+            boolean foundMatchingChargeCode = false;
+            Map<String, Object> foundBarCode = null;
+            
+            log.info("开始验证药品编码匹配,期望的chargeItemCode: {}", chargeItemCode);
+            
+            for (Map<String, Object> barCode : barCodeList) {
+                String foundChargeCode = (String) barCode.get("charge_code");
+                log.info("数据库中的charge_code: {}, 是否匹配: {}", foundChargeCode, chargeItemCode.equals(foundChargeCode));
+                
+                if (chargeItemCode.equals(foundChargeCode)) {
+                    foundMatchingChargeCode = true;
+                    foundBarCode = barCode;
+                    break;
+                }
+            }
+            
+            log.info("是否找到匹配的药品编码: {}", foundMatchingChargeCode);
+            
+            if (!foundMatchingChargeCode) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "追溯码与当前药品不匹配");
+                return resultMap;
+            }
+            
+            // 3. 查询门诊发药追溯码表,检查是否已被使用
+            MzDrugTracCodg queryTracCodg = new MzDrugTracCodg();
+            queryTracCodg.setDrugTracCodg(drugTracCodg);
+            List<MzDrugTracCodg> existingTracCodgList = mzDrugTracCodgService.getMzDrugTracCodgData(queryTracCodg);
+            
+            if (existingTracCodgList != null && !existingTracCodgList.isEmpty()) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "追溯码已被使用");
+                return resultMap;
+            }
+            
+            // 4. 验证通过,返回成功
+            Map<String, Object> responseData = new HashMap<>();
+            responseData.put("isValid", true);
+            responseData.put("drugInfo", foundBarCode);
+            
+            resultMap.put("code", 0);
+            resultMap.put("message", "追溯码验证成功");
+            resultMap.put("data", responseData);
+            
+        } catch (Exception e) {
+            log.error("验证追溯码过程中发生错误", e);
+            resultMap.put("code", -1);
+            resultMap.put("message", "验证过程中发生错误:" + e.getMessage());
+        }
+        
+        return resultMap;
+    }
 }

+ 23 - 0
src/main/java/cn/hnthyy/thmz/mapper/his/mz/MzPharmacyMapper.java

@@ -1193,4 +1193,27 @@ public interface MzPharmacyMapper {
             " where pay_mark = '0' and group_no = #{groupNo} and confirm_flag in ('0', '5')" +
             " and patient_id = #{patientId} and times = #{times} and receipt_no = #{receiptNo} ")
     List<MzChargeDetail> getMzCfWfy(MzChargeDetail mzChargeDetail);
+
+    /**
+     * @Description 根据追溯码查询药品入库信息
+     * @Author hsh
+     * @param queryParams 查询参数
+     * @return
+     * @Date 2025/1/31 10:00
+     */
+    @Select({"<script>",
+            "SELECT * FROM yp_manu_bar_code WITH(NOLOCK)",
+            "<where>",
+            "<when test='chargeCode != null and chargeCode != \"\"'>",
+            " and charge_code = #{chargeCode}",
+            "</when>",
+            "<when test='drugTracCodg != null'>",
+            " and (CAST(drug_trac_codg AS NVARCHAR(MAX)) LIKE '%,' + #{drugTracCodg} + ',%'",
+            " OR CAST(drug_trac_codg AS NVARCHAR(MAX)) LIKE #{drugTracCodg} + ',%'",
+            " OR CAST(drug_trac_codg AS NVARCHAR(MAX)) LIKE '%,' + #{drugTracCodg}",
+            " OR CAST(drug_trac_codg AS NVARCHAR(MAX)) = #{drugTracCodg})",
+            "</when>",
+            "</where>",
+            "</script>"})
+    List<Map<String, Object>> selectYpManuBarCodeByTracCodg(Map<String, Object> queryParams);
 }

+ 9 - 0
src/main/java/cn/hnthyy/thmz/service/his/mz/MzPharmacyService.java

@@ -223,4 +223,13 @@ public interface MzPharmacyService {
      */
     List<MzChargeDetail> getMzCfWfy(MzChargeDetail mzChargeDetail);
 
+    /**
+     * @Description 根据追溯码查询药品入库信息
+     * @Author hsh
+     * @param queryParams 查询参数
+     * @return
+     * @Date 2025/1/31 10:00
+     */
+    List<Map<String, Object>> queryYpManuBarCodeByTracCodg(Map<String, Object> queryParams);
+
 }

+ 5 - 0
src/main/java/cn/hnthyy/thmz/service/impl/his/mz/MzPharmacyServiceImpl.java

@@ -508,4 +508,9 @@ public class MzPharmacyServiceImpl implements MzPharmacyService {
     public List<ChargeDetailInfoVo> getFyclWfyPrescription(ChargeFeeParamsVo chargeFeeParamsVo) {
         return mzPharmacyMapper.selectFyclWfyPrescription(chargeFeeParamsVo);
     }
+
+    @Override
+    public List<Map<String, Object>> queryYpManuBarCodeByTracCodg(Map<String, Object> queryParams) {
+        return mzPharmacyMapper.selectYpManuBarCodeByTracCodg(queryParams);
+    }
 }

+ 126 - 3
src/main/resources/static/js/mz/west_pharmacy_send.js

@@ -1437,11 +1437,34 @@ function prescriptionDetail(realNo, orderNo, receiptNo, times, patientId, confir
             if (field === 'drugTracCodg') {
                 $element.attr('contenteditable', true);
                 $element.focus();
-                $element.blur(function () {
+                
+                // 添加扫码输入监听(新增功能,不影响原有逻辑)
+                let inputTimer = null;
+                
+                $element.off('input.tracCodg').on('input.tracCodg', function(e) {
+                    let inputValue = e.target.textContent || e.target.innerText;
+                    
+                    // 清除之前的定时器
+                    if (inputTimer) {
+                        clearTimeout(inputTimer);
+                    }
+                    
+                    // 设置防抖定时器,0.5秒后触发验证
+                    inputTimer = setTimeout(function() {
+                        if (inputValue && inputValue.trim().length > 0) {
+                            // 保存当前内容,用于验证失败时恢复
+                            let originalContent = $element.html();
+                            validateAndAddTracCodg(inputValue.trim(), row, $element, originalContent);
+                        }
+                    }, 500);
+                });
+                
+                // 保持原有的失去焦点保存逻辑
+                $element.off('blur.tracCodg').blur(function () {
                     let index = $element.parent().data('index');
                     let tdValue = $element.html();
                     saveCellData($('#tb_table_right'), index, field, tdValue);
-                })
+                });
             }
         },
         responseHandler: function (res) {
@@ -2828,4 +2851,104 @@ $(document).ready(function () {
     isTyOk = false;
     
     initTbTable();
-});
+});
+
+/**
+ * 验证并添加追溯码
+ * @param tracCodg 追溯码
+ * @param rowData 行数据
+ * @param $element 单元格元素
+ */
+function validateAndAddTracCodg(tracCodg, rowData, $element, originalContent) {
+    // 构建验证数据,只包含可以从rowData中获取的字段
+    let validateData = {
+        drugTracCodg: tracCodg,  // 这是用户扫码输入的追溯码
+        patientId: rowData.patientId,
+        times: rowData.times,
+        receiptNo: rowData.receiptNo,
+        orderNo: rowData.orderNo,
+        itemNo: rowData.itemNo,
+        chargeItemCode: rowData.chargeItemCode,
+        drugName: rowData.drugname,
+        specification: rowData.specification
+    };
+    
+    // 添加调试日志
+    console.log('验证追溯码参数:', validateData);
+    console.log('行数据:', rowData);
+    
+    $.ajax({
+        type: "POST",
+        url: '/thmz/validateDrugTracCodgForDispensing',
+        contentType: "application/json;charset=UTF-8",
+        dataType: "json",
+        headers: {
+            'Accept': 'application/json',
+            'Authorization': 'Bearer ' + localStorage.getItem("token")
+        },
+        data: JSON.stringify(validateData),
+        success: function (res) {
+            console.log('验证响应:', res);
+            if (res.code == 0 && res.data && res.data.isValid) {
+                // 验证成功,添加到追溯码集合
+                addTracCodgToCell(tracCodg, $element);
+                successMesage(res);
+                // 验证成功后,保持单元格可编辑状态,用户可以继续扫码
+                $element.focus();
+            } else {
+                // 验证失败
+                errorMesage(res);
+                // 验证失败时,恢复原始内容
+                if (originalContent !== undefined) {
+                    $element.html(originalContent);
+                }
+                // 保持焦点,让用户继续扫码
+                $element.focus();
+            }
+        },
+        error: function (xhr, status, error) {
+            console.error('验证请求失败:', error);
+            errorMesageSimaple("验证请求失败");
+            // 错误时也恢复原始内容
+            if (originalContent !== undefined) {
+                $element.html(originalContent);
+            }
+            $element.focus();
+        }
+    });
+}
+
+/**
+ * 添加追溯码到单元格
+ * @param tracCodg 追溯码
+ * @param $element 单元格元素
+ */
+function addTracCodgToCell(tracCodg, $element) {
+    let currentValue = $element.html();
+    let newValue = '';
+    
+    if (isEmpty(currentValue)) {
+        newValue = tracCodg;
+    } else {
+        // 检查是否已存在该追溯码
+        let existingCodes = currentValue.split('<br>');
+        if (!existingCodes.includes(tracCodg)) {
+            newValue = currentValue + '<br>' + tracCodg;
+        } else {
+            // 追溯码已存在,显示提示但不显示错误样式
+            console.log('追溯码已存在:', tracCodg);
+            // 使用简单的提示,而不是错误消息
+            if (typeof PNotify !== 'undefined') {
+                new PNotify({
+                    title: '提示',
+                    text: '该追溯码已添加',
+                    type: 'info',
+                    delay: 2000
+                });
+            }
+            return;
+        }
+    }
+    
+    $element.html(newValue);
+}

+ 1 - 0
src/main/resources/templates/mz/west_pharmacy_send.html

@@ -6,6 +6,7 @@
 <script src="/thmz/js/dependent/daterangepicker.js"></script>
 <script src="/thmz/js/common/pharmacy-com.js"></script>
 <script src="/thmz/js/common/socket-com.js"></script>
+<script src="/thmz/js/common/message.js"></script>
 <script src="/thmz/js/common/map-util.js"></script>
 <script src="/thmz/js/common/select-util.js"></script>
 <script src="/thmz/js/common/string-util.js"></script>