|  | @@ -1961,6 +1961,29 @@ function saveCancelRefundMedicine() {
 | 
	
		
			
				|  |  |      }).then((res) => {
 | 
	
		
			
				|  |  |          $("#btn_cancel_ty").attr("disabled", false);
 | 
	
		
			
				|  |  |          successMesage(res);
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // ========== 调用撤销退药医保接口 ==========
 | 
	
		
			
				|  |  | +        console.log('=== 开始调用撤销退药医保接口 ===');
 | 
	
		
			
				|  |  | +        // 获取撤销退药记录的基本信息
 | 
	
		
			
				|  |  | +        let patientId = row[0].patientId;
 | 
	
		
			
				|  |  | +        let times = row[0].times;
 | 
	
		
			
				|  |  | +        let receiptNo = row[0].receiptNo;
 | 
	
		
			
				|  |  | +        let orderNo = row[0].orderNo;
 | 
	
		
			
				|  |  | +        let realNo = row[0].realNo;
 | 
	
		
			
				|  |  | +        let name = row[0].name;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        console.log('撤销退药医保接口参数:', {
 | 
	
		
			
				|  |  | +            patientId: patientId,
 | 
	
		
			
				|  |  | +            times: times,
 | 
	
		
			
				|  |  | +            receiptNo: receiptNo,
 | 
	
		
			
				|  |  | +            orderNo: orderNo,
 | 
	
		
			
				|  |  | +            realNo: realNo,
 | 
	
		
			
				|  |  | +            name: name
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // 调用撤销退药医保接口
 | 
	
		
			
				|  |  | +        callYbSaleGoodsItemForCancelRefund(realNo, orderNo, receiptNo, times, patientId, name);
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  |          initTbTable();
 | 
	
		
			
				|  |  |      },err =>{
 | 
	
		
			
				|  |  |          $("#btn_cancel_ty").attr("disabled",false);
 | 
	
	
		
			
				|  | @@ -3260,14 +3283,14 @@ function callYbSaleGoodsItem(realNo, orderNo, receiptNo, times, patientId, name,
 | 
	
		
			
				|  |  |          let item = tableData[i];
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          // 构建关联字段组合(用于关联发药记录)
 | 
	
		
			
				|  |  | -        let patientId = item.patientId || patientId;
 | 
	
		
			
				|  |  | -        let times = item.times || times;
 | 
	
		
			
				|  |  | -        let receiptNo = item.receiptNo || receiptNo;
 | 
	
		
			
				|  |  | -        let orderNo = item.orderNo || orderNo;
 | 
	
		
			
				|  |  | +        let currentPatientId = item.patientId || patientId;
 | 
	
		
			
				|  |  | +        let currentTimes = item.times || times;
 | 
	
		
			
				|  |  | +        let currentReceiptNo = item.receiptNo || receiptNo;
 | 
	
		
			
				|  |  | +        let currentOrderNo = item.orderNo || orderNo;
 | 
	
		
			
				|  |  |          let chargeItemCode = item.chargeItemCode;
 | 
	
		
			
				|  |  | -        let realNo = item.realNo || realNo;
 | 
	
		
			
				|  |  | +        let currentRealNo = item.realNo || realNo;
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  | -        console.log('发药关联键:', {patientId, times, receiptNo, orderNo, chargeItemCode, realNo});
 | 
	
		
			
				|  |  | +        console.log('发药关联键:', {patientId: currentPatientId, times: currentTimes, receiptNo: currentReceiptNo, orderNo: currentOrderNo, chargeItemCode, realNo: currentRealNo});
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  |          // 参数验证
 | 
	
		
			
				|  |  |          // 从处方明细数据中获取开方医师姓名
 | 
	
	
		
			
				|  | @@ -3285,12 +3308,12 @@ function callYbSaleGoodsItem(realNo, orderNo, receiptNo, times, patientId, name,
 | 
	
		
			
				|  |  |          // 构建医保接口参数
 | 
	
		
			
				|  |  |          let ybData = {
 | 
	
		
			
				|  |  |              // 关联字段 - 直接传递到医保接口
 | 
	
		
			
				|  |  | -            patientId: patientId,
 | 
	
		
			
				|  |  | -            times: times,
 | 
	
		
			
				|  |  | -            receiptNo: receiptNo,
 | 
	
		
			
				|  |  | -            orderNo: orderNo,
 | 
	
		
			
				|  |  | +            patientId: currentPatientId,
 | 
	
		
			
				|  |  | +            times: currentTimes,
 | 
	
		
			
				|  |  | +            receiptNo: currentReceiptNo,
 | 
	
		
			
				|  |  | +            orderNo: currentOrderNo,
 | 
	
		
			
				|  |  |              chargeItemCode: chargeItemCode,
 | 
	
		
			
				|  |  | -            realNo: realNo,
 | 
	
		
			
				|  |  | +            realNo: currentRealNo,
 | 
	
		
			
				|  |  |              
 | 
	
		
			
				|  |  |              // 医疗目录编码(医保编码)
 | 
	
		
			
				|  |  |              medListCodg: item.nationalCode,
 | 
	
	
		
			
				|  | @@ -3478,7 +3501,7 @@ function callYbReturnGoodsItem(realNo, orderNo, receiptNo, times, patientId, nam
 | 
	
		
			
				|  |  |              itemNo: item.item_no,
 | 
	
		
			
				|  |  |              groupNo: item.group_no || groupNo
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | +        console.log("调用退药医保接口tracCodgParams000000000000000000000",tracCodgParams)
 | 
	
		
			
				|  |  |          // 调用追溯码查询接口(异步方式)
 | 
	
		
			
				|  |  |          // 注意:退药处理后,追溯码已转移到 mz_drug_trac_codg_ty 表
 | 
	
		
			
				|  |  |          $.ajax({
 | 
	
	
		
			
				|  | @@ -3654,4 +3677,206 @@ function validateTracCodgQuantity(realNo, orderNo, receiptNo, times, patientId,
 | 
	
		
			
				|  |  |          console.log('追溯码数量匹配,直接发药');
 | 
	
		
			
				|  |  |          sendMedicineProcessing(realNo, orderNo, receiptNo, times, patientId, name, pharPracCertNo);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 调用撤销退药医保接口(销售接口)
 | 
	
		
			
				|  |  | + * @param realNo 流水号
 | 
	
		
			
				|  |  | + * @param orderNo 处方号
 | 
	
		
			
				|  |  | + * @param receiptNo 发票分票号
 | 
	
		
			
				|  |  | + * @param times 次数
 | 
	
		
			
				|  |  | + * @param patientId 病人ID
 | 
	
		
			
				|  |  | + * @param name 病人姓名
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function callYbSaleGoodsItemForCancelRefund(realNo, orderNo, receiptNo, times, patientId, name) {
 | 
	
		
			
				|  |  | +    // 获取撤销退药后的处方明细数据 - 从已恢复的收费明细表获取
 | 
	
		
			
				|  |  | +    let tableData = $("#tb_table_right").bootstrapTable('getData');
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    if (!tableData || tableData.length === 0) {
 | 
	
		
			
				|  |  | +        console.log('没有处方明细数据,跳过撤销退药医保接口调用');
 | 
	
		
			
				|  |  | +        return;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // 获取当前用户信息(药师信息)
 | 
	
		
			
				|  |  | +    let currentUserName = localStorage.getItem('userName') || '';
 | 
	
		
			
				|  |  | +    let currentUserId = localStorage.getItem('userID') || '';
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // 获取当前时间
 | 
	
		
			
				|  |  | +    let currentTime = new Date();
 | 
	
		
			
				|  |  | +    let selRetnTime = currentTime.getFullYear() + '-' + 
 | 
	
		
			
				|  |  | +                     String(currentTime.getMonth() + 1).padStart(2, '0') + '-' + 
 | 
	
		
			
				|  |  | +                     String(currentTime.getDate()).padStart(2, '0') + ' ' +
 | 
	
		
			
				|  |  | +                     String(currentTime.getHours()).padStart(2, '0') + ':' + 
 | 
	
		
			
				|  |  | +                     String(currentTime.getMinutes()).padStart(2, '0') + ':' + 
 | 
	
		
			
				|  |  | +                     String(currentTime.getSeconds()).padStart(2, '0');
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // 为每个药品调用一次医保接口
 | 
	
		
			
				|  |  | +    for (let i = 0; i < tableData.length; i++) {
 | 
	
		
			
				|  |  | +        let item = tableData[i];
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // 构建关联字段组合(用于关联撤销退药记录)
 | 
	
		
			
				|  |  | +        let currentPatientId = item.patientId || patientId;
 | 
	
		
			
				|  |  | +        let currentTimes = item.times || times;
 | 
	
		
			
				|  |  | +        let currentReceiptNo = item.receiptNo || receiptNo;
 | 
	
		
			
				|  |  | +        let currentOrderNo = item.orderNo || orderNo;
 | 
	
		
			
				|  |  | +        let chargeItemCode = item.chargeItemCode;
 | 
	
		
			
				|  |  | +        let currentRealNo = item.realNo || realNo;
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        console.log('撤销退药关联键:', {patientId: currentPatientId, times: currentTimes, receiptNo: currentReceiptNo, orderNo: currentOrderNo, chargeItemCode, realNo: currentRealNo});
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // 参数验证
 | 
	
		
			
				|  |  | +        // 从处方明细数据中获取开方医师姓名
 | 
	
		
			
				|  |  | +        let doctorName = item.doctorName || item.employeeName || '';
 | 
	
		
			
				|  |  | +        if (!doctorName) {
 | 
	
		
			
				|  |  | +            console.warn('开方医师姓名为空,使用默认值');
 | 
	
		
			
				|  |  | +            doctorName = '未知医师';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        if (!currentUserName) {
 | 
	
		
			
				|  |  | +            console.warn('药师姓名为空,使用默认值');
 | 
	
		
			
				|  |  | +            currentUserName = '未知药师';
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // 构建医保接口参数 - 与发药时相同的参数结构
 | 
	
		
			
				|  |  | +        let ybData = {
 | 
	
		
			
				|  |  | +            // 关联字段 - 直接传递到医保接口
 | 
	
		
			
				|  |  | +            patientId: currentPatientId,
 | 
	
		
			
				|  |  | +            times: currentTimes,
 | 
	
		
			
				|  |  | +            receiptNo: currentReceiptNo,
 | 
	
		
			
				|  |  | +            orderNo: currentOrderNo,
 | 
	
		
			
				|  |  | +            chargeItemCode: chargeItemCode,
 | 
	
		
			
				|  |  | +            realNo: currentRealNo,
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 医疗目录编码(医保编码)
 | 
	
		
			
				|  |  | +            medListCodg: item.nationalCode,
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 开方医师姓名
 | 
	
		
			
				|  |  | +            prscDrName: doctorName,
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 药师姓名
 | 
	
		
			
				|  |  | +            pharName: currentUserName,
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 药师执业资格证号(取当前操作者的药师执业资格证号)
 | 
	
		
			
				|  |  | +            pharPracCertNo: localStorage.getItem('pharPracCertNo') || '',
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 销售/退货经办人姓名
 | 
	
		
			
				|  |  | +            selRetnOpterName: currentUserName,
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 就诊结算类型(1-医保结算 2-自费结算)
 | 
	
		
			
				|  |  | +            mdtrtSetlType: item.mdtrtSetlType || '2',
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 处方药标志
 | 
	
		
			
				|  |  | +            rxFlag: item.rxFlag || '0',
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 拆零标志(0-否;1-是)
 | 
	
		
			
				|  |  | +            trdnFlag: item.clFlag || '0',
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            // 患者相关参数(医保接口需要)
 | 
	
		
			
				|  |  | +            // 人员证件类型
 | 
	
		
			
				|  |  | +            psnCertType: item.psnCertType || '01',
 | 
	
		
			
				|  |  | +            // 证件号码
 | 
	
		
			
				|  |  | +            certno: item.certno || '',
 | 
	
		
			
				|  |  | +            // 人员姓名
 | 
	
		
			
				|  |  | +            psnName: item.psnName || item.name || name || '',
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // 追溯码信息 - 从已恢复的追溯码表获取
 | 
	
		
			
				|  |  | +        let drugtracinfo = [];
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // 主动获取追溯码信息(撤销退药后,追溯码已恢复到 mz_drug_trac_codg 表)
 | 
	
		
			
				|  |  | +        let tracCodgParams = {
 | 
	
		
			
				|  |  | +            patientId: currentPatientId,
 | 
	
		
			
				|  |  | +            times: currentTimes,
 | 
	
		
			
				|  |  | +            receiptNo: currentReceiptNo,
 | 
	
		
			
				|  |  | +            orderNo: currentOrderNo,
 | 
	
		
			
				|  |  | +            chargeItemCode: chargeItemCode,
 | 
	
		
			
				|  |  | +            serial: item.serial,
 | 
	
		
			
				|  |  | +            itemNo: item.itemNo,
 | 
	
		
			
				|  |  | +            groupNo: item.groupNo || groupNo
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // 调用追溯码查询接口(异步方式)
 | 
	
		
			
				|  |  | +        // 注意:撤销退药后,追溯码已恢复到 mz_drug_trac_codg 表
 | 
	
		
			
				|  |  | +        $.ajax({
 | 
	
		
			
				|  |  | +            type: "POST",
 | 
	
		
			
				|  |  | +            url: '/thmz/getMzDrugTracCodgData',
 | 
	
		
			
				|  |  | +            contentType: "application/json;charset=UTF-8",
 | 
	
		
			
				|  |  | +            dataType: "json",
 | 
	
		
			
				|  |  | +            headers: {
 | 
	
		
			
				|  |  | +                'Accept': 'application/json',
 | 
	
		
			
				|  |  | +                'Authorization': 'Bearer ' + localStorage.getItem("token")
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            data: JSON.stringify(tracCodgParams),
 | 
	
		
			
				|  |  | +            success: function (tracRes) {
 | 
	
		
			
				|  |  | +                console.log('撤销退药追溯码查询结果:', tracRes);
 | 
	
		
			
				|  |  | +                if (tracRes.code === 0 && tracRes.data && tracRes.data.length > 0) {
 | 
	
		
			
				|  |  | +                    // 将追溯码添加到医保接口参数中
 | 
	
		
			
				|  |  | +                    for (let k = 0; k < tracRes.data.length; k++) {
 | 
	
		
			
				|  |  | +                        let tracItem = tracRes.data[k];
 | 
	
		
			
				|  |  | +                        if (tracItem.drugTracCodg && tracItem.drugTracCodg !== '') {
 | 
	
		
			
				|  |  | +                            drugtracinfo.push({
 | 
	
		
			
				|  |  | +                                drugTracCodg: tracItem.drugTracCodg
 | 
	
		
			
				|  |  | +                            });
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                    console.log('撤销退药成功获取追溯码:', drugtracinfo);
 | 
	
		
			
				|  |  | +                } else {
 | 
	
		
			
				|  |  | +                    console.log('撤销退药未找到追溯码信息');
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                
 | 
	
		
			
				|  |  | +                // 追溯码查询完成后,调用医保接口
 | 
	
		
			
				|  |  | +                callYbSaleGoodsItemWithDataForCancelRefund(ybData, item, drugtracinfo);
 | 
	
		
			
				|  |  | +            },
 | 
	
		
			
				|  |  | +            error: function (xhr, status, error) {
 | 
	
		
			
				|  |  | +                console.error('撤销退药追溯码查询失败:', error);
 | 
	
		
			
				|  |  | +                // 即使追溯码查询失败,也要调用医保接口
 | 
	
		
			
				|  |  | +                callYbSaleGoodsItemWithDataForCancelRefund(ybData, item, drugtracinfo);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * 调用撤销退药医保接口(带追溯码数据)
 | 
	
		
			
				|  |  | + * @param ybData 医保接口参数
 | 
	
		
			
				|  |  | + * @param item 药品信息
 | 
	
		
			
				|  |  | + * @param drugtracinfo 追溯码信息
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function callYbSaleGoodsItemWithDataForCancelRefund(ybData, item, drugtracinfo) {
 | 
	
		
			
				|  |  | +    // 如果没有追溯码,添加空数组(保持数据结构一致)
 | 
	
		
			
				|  |  | +    if (drugtracinfo.length === 0) {
 | 
	
		
			
				|  |  | +        drugtracinfo = [];
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    console.log('调用撤销退药医保接口,药品:', item.drugname, '参数:', ybData);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    let param = {
 | 
	
		
			
				|  |  | +        selinfoSold: ybData,
 | 
	
		
			
				|  |  | +        drugtracinfo: drugtracinfo
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    console.log("调用撤销退药医保接口param11111111111111111111111111111111111",param)
 | 
	
		
			
				|  |  | +    // 调用医保接口
 | 
	
		
			
				|  |  | +    $.ajax({
 | 
	
		
			
				|  |  | +        type: "POST",
 | 
	
		
			
				|  |  | +        url: '/thmz/Yb/saleGoodsItem',
 | 
	
		
			
				|  |  | +        contentType: "application/json;charset=UTF-8",
 | 
	
		
			
				|  |  | +        dataType: "json",
 | 
	
		
			
				|  |  | +        headers: {
 | 
	
		
			
				|  |  | +            'Accept': 'application/json',
 | 
	
		
			
				|  |  | +            'Authorization': 'Bearer ' + localStorage.getItem("token")
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        data: JSON.stringify(param),
 | 
	
		
			
				|  |  | +        success: function (res) {
 | 
	
		
			
				|  |  | +            console.log('撤销退药医保接口调用成功:', res);
 | 
	
		
			
				|  |  | +            if (res.code !== 0) {
 | 
	
		
			
				|  |  | +                console.error('撤销退药医保接口调用失败:', res.message);
 | 
	
		
			
				|  |  | +                // 医保接口失败不影响撤销退药流程,只记录日志
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        error: function (xhr, status, error) {
 | 
	
		
			
				|  |  | +            console.error('撤销退药医保接口调用失败:', error);
 | 
	
		
			
				|  |  | +            // 医保接口失败不影响撤销退药流程,只记录日志
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |  }
 |