فهرست منبع

Merge branch 'dev-1.1.0' of https://172.16.32.165/hurugang/thmz_system into dev-1.1.0

hurugang 4 سال پیش
والد
کامیت
ee597fd876

+ 13 - 4
src/main/java/cn/hnthyy/thmz/controller/mz/MzPharmacyController.java

@@ -8,10 +8,12 @@ import cn.hnthyy.thmz.entity.his.mz.*;
 import cn.hnthyy.thmz.entity.his.zd.ZdUnitCode;
 import cn.hnthyy.thmz.entity.thmz.User;
 import cn.hnthyy.thmz.enums.ConfirmFlagEnum;
+import cn.hnthyy.thmz.enums.SocketSenderTypeEnum;
 import cn.hnthyy.thmz.service.his.YpZdDictService;
 import cn.hnthyy.thmz.service.his.YpZdManufactoryService;
 import cn.hnthyy.thmz.service.his.mz.*;
 import cn.hnthyy.thmz.service.his.zd.ZdUnitCodeService;
+import cn.hnthyy.thmz.service.thmz.DispensingSocketService;
 import cn.hnthyy.thmz.vo.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -49,7 +51,8 @@ public class MzPharmacyController {
     private MzPatientMiService mzPatientMiService;
     @Autowired
     private MzOrderFrequencyService mzOrderFrequencyService;
-
+    @Autowired
+    private DispensingSocketService dispensingSocketService;
     /**
      * 查询处方信息
      *
@@ -441,6 +444,7 @@ public class MzPharmacyController {
                 return resultMap;
             }
             resultMap = mzPharmacyService.sendMedicineProcessing(mzChargeDetail, tokenUser);
+            dispensingSocketService.sendToMedicine(mzChargeDetail.getPatientId(),SocketSenderTypeEnum.SEND_MEDICINE.code);
             return resultMap;
         } catch (Exception e) {
             e.printStackTrace();
@@ -491,6 +495,8 @@ public class MzPharmacyController {
             if (num > 0) {
                 resultMap.put("code", 0);
                 resultMap.put("message", "配药处理成功");
+                dispensingSocketService.sendDispensing(SocketSenderTypeEnum.DISPENSING_MEDICINE.code);
+                dispensingSocketService.sendToMedicine(mzChargeDetail.getPatientId(),SocketSenderTypeEnum.DISPENSING_MEDICINE.code);
                 return resultMap;
             }
             resultMap.put("code", -1);
@@ -544,7 +550,6 @@ public class MzPharmacyController {
             Map<String, Object> printMap = new HashMap<>();
             MzPatientMi mzPatientMi = mzPatientMiService.queryByPatientId(mzChargeDetail.getPatientId());
             MzVisitTable visit = mzVisitTableService.queryByPatientIdAndTimes(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes());
-            String warnDeptName = zdUnitCodeService.queryDeptNameByIdInCache(mzChargeDetail.getWarnDept());
             printMap.put("patientId", mzChargeDetail.getPatientId());
             printMap.put("ybCardNo", mzPatientMi.getYbCardNo());
             printMap.put("name", mzPatientMi.getName());
@@ -554,7 +559,6 @@ public class MzPharmacyController {
             printMap.put("phoneNo", mzPatientMi.getPhoneNo());
             printMap.put("address", mzPatientMi.getAddress());
             printMap.put("icdText", visit.getIcdText());//诊断
-            printMap.put("warnDeptName", warnDeptName);//科室
             mzChargeDetail.setBillItemCode("TC");
             List<MzChargeDetail> mzChargeDetails = mzChargeDetailService.getMzChargeDetailList(mzChargeDetail);
             if (mzChargeDetails.size() > 0) {
@@ -563,7 +567,12 @@ public class MzPharmacyController {
             Employee employee = new Employee();
             BigDecimal totalPrice = new BigDecimal("0");//总价
             List<Map<String, Object>> list = new ArrayList<>();
-            for (MzChargeDetail chargeDetail : mzChargeDetails) {
+            for (int i = 0; i < mzChargeDetails.size(); i++) {
+                MzChargeDetail chargeDetail =  mzChargeDetails.get(i);
+                if(i == 0){
+                    String warnDeptName = zdUnitCodeService.queryDeptNameByIdInCache(chargeDetail.getWarnDept());
+                    printMap.put("warnDeptName", warnDeptName);//科室
+                }
                 Map<String, Object> map = new HashMap<>();
                 totalPrice = totalPrice.add(chargeDetail.getUnitPrice().multiply(BigDecimal.valueOf(chargeDetail.getQuantity())));
                 map.put("quantity", chargeDetail.getQuantity());//数量

+ 37 - 0
src/main/java/cn/hnthyy/thmz/enums/SocketSenderTypeEnum.java

@@ -0,0 +1,37 @@
+package cn.hnthyy.thmz.enums;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * socket发送方类型
+ */
+public enum SocketSenderTypeEnum {
+    PAY("JF","缴费"),
+    DISPENSING_MEDICINE("PY","配药"),
+    SEND_MEDICINE("FY","发药"),
+    CALL_NUMBER("JH","叫号");
+
+    public String code;
+    public String name;
+
+    SocketSenderTypeEnum(String code, String name){
+        this.code=code;
+        this.name=name;
+    }
+
+    /**
+     * 根据编码查询对应的类型
+     * @param code
+     * @return
+     */
+    public static SocketSenderTypeEnum geteBedStatusByCode(String code){
+        List<SocketSenderTypeEnum> classCodeEnums= Arrays.asList(values());
+        for (SocketSenderTypeEnum classCode:classCodeEnums){
+            if(classCode.code.equals(code)){
+                return classCode;
+            }
+        }
+        return null;
+    }
+}

+ 73 - 0
src/main/java/cn/hnthyy/thmz/service/impl/thmz/DispensingSocketServiceImpl.java

@@ -0,0 +1,73 @@
+package cn.hnthyy.thmz.service.impl.thmz;
+
+import cn.hnthyy.thmz.entity.his.mz.MzChargeDetail;
+import cn.hnthyy.thmz.entity.his.mz.MzPatientMi;
+import cn.hnthyy.thmz.enums.SocketSenderTypeEnum;
+import cn.hnthyy.thmz.service.his.mz.MzChargeDetailService;
+import cn.hnthyy.thmz.service.his.mz.MzPatientMiService;
+import cn.hnthyy.thmz.service.thmz.DispensingSocketService;
+import cn.hnthyy.thmz.socket.PrescriptionPrintSocket;
+import cn.hnthyy.thmz.socket.ToMedicineSocket;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Service
+public class DispensingSocketServiceImpl implements DispensingSocketService {
+    @Autowired
+    PrescriptionPrintSocket prescriptionPrintSocket;
+    @Autowired
+    ToMedicineSocket toMedicineSocket;
+    @Autowired
+    MzPatientMiService mzPatientMiService;
+    @Autowired
+    MzChargeDetailService mzChargeDetailService;
+
+    @Override
+    public int sendPrescription(String patientId,int times,String type) {
+        Map<String,Object> msgMap = new HashMap();
+        msgMap.put("patientId",patientId);
+        msgMap.put("times",times);
+        msgMap.put("type",type);
+        JSONObject jsonObject = new JSONObject(msgMap);
+        return prescriptionPrintSocket.sendMessage(jsonObject.toString());
+    }
+
+    @Override
+    public int sendToMedicine(String patientId,String type) {
+        Map<String,Object> msgMap = new HashMap();
+        msgMap.put("patientId",patientId);
+        MzPatientMi mzPatientMi = mzPatientMiService.queryByPatientId(patientId);
+        msgMap.put("name",mzPatientMi.getName());
+        msgMap.put("type",type);
+        JSONObject jsonObject = new JSONObject(msgMap);
+        return toMedicineSocket.sendMessage(jsonObject.toString());
+    }
+
+    @Override
+    public int sendToMedicine(String patientId, int times) {
+        //查询缴费药品的发药药房
+        MzChargeDetail mzChargeDetail = new MzChargeDetail();
+        mzChargeDetail.setPatientId(patientId);
+        mzChargeDetail.setTimes(times);
+        mzChargeDetailService.queryChargeDetail(mzChargeDetail);
+        Map<String,Object> msgMap = new HashMap();
+        msgMap.put("patientId",patientId);
+        MzPatientMi mzPatientMi = mzPatientMiService.queryByPatientId(patientId);
+        msgMap.put("name",mzPatientMi.getName());
+        msgMap.put("type",SocketSenderTypeEnum.PAY.code);
+        JSONObject jsonObject = new JSONObject(msgMap);
+        return toMedicineSocket.sendMessage(jsonObject.toString());
+    }
+
+    @Override
+    public int sendDispensing(String type) {
+        Map<String,Object> msgMap = new HashMap();
+        msgMap.put("type",type);
+        JSONObject jsonObject = new JSONObject(msgMap);
+        return prescriptionPrintSocket.sendMessage(jsonObject.toString());
+    }
+}

+ 41 - 0
src/main/java/cn/hnthyy/thmz/service/thmz/DispensingSocketService.java

@@ -0,0 +1,41 @@
+package cn.hnthyy.thmz.service.thmz;
+
+
+
+/**
+ * 门诊发药socket服务接口
+ */
+public interface DispensingSocketService {
+
+    /**
+     * 缴费通知配药处理
+     * @param patientId
+     * @param times
+     * @param type socket发送方类型SocketSenderTypeEnum
+     * @return
+     */
+    int sendPrescription(String patientId,int times,String type);
+
+    /**
+     * 通知发药提醒
+     * @param patientId
+     * @param type socket发送方类型SocketSenderTypeEnum
+     * @return
+     */
+    int sendToMedicine(String patientId,String type);
+
+    /**
+     * 通知发药提醒
+     * @param patientId
+     * @return
+     */
+    int sendToMedicine(String patientId,int times);
+
+    /**
+     * 通知发药处理
+     * @param type socket发送方类型SocketSenderTypeEnum
+     * @return
+     */
+    int sendDispensing(String type);
+
+}

+ 0 - 1
src/main/java/cn/hnthyy/thmz/service/thmz/DispensingWindowsService.java

@@ -1,7 +1,6 @@
 package cn.hnthyy.thmz.service.thmz;
 
 import cn.hnthyy.thmz.entity.thmz.DispensingWindows;
-import cn.hnthyy.thmz.entity.thmz.Windows;
 
 public interface DispensingWindowsService {
     /**

+ 20 - 9
src/main/java/cn/hnthyy/thmz/socket/PrescriptionPrintSocket.java

@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
 import javax.websocket.*;
+import javax.websocket.server.PathParam;
 import javax.websocket.server.ServerEndpoint;
 import java.util.HashMap;
 import java.util.Map;
@@ -16,7 +17,7 @@ import java.util.concurrent.atomic.AtomicInteger;
  * @ServerEndpoint(value = "/prescriptionPrintSocket") 前端通过此URI 和后端交互,建立连接
  */
 @Slf4j
-@ServerEndpoint(value = "/prescriptionPrintSocket")
+@ServerEndpoint(value = "/prescriptionPrintSocket/{type}")
 @Component
 public class PrescriptionPrintSocket {
 
@@ -30,14 +31,20 @@ public class PrescriptionPrintSocket {
      */
     private static Map<String, Session> clients = new ConcurrentHashMap<>();
 
+    /**
+     * 存放所有在线客户端所属的类型
+     */
+    private static Map<String, String> clientTypes = new HashMap<>();
+
     /**
      * 连接建立成功调用的方法
      */
     @OnOpen
-    public void onOpen(Session session) {
+    public void onOpen(@PathParam(value = "type") String type, Session session) {
         onlineCount.incrementAndGet(); // 在线数加1
         clients.put(session.getId(), session);
-        log.info("有新连接加入:{},当前在线人数为:{}", session.getId(), onlineCount.get());
+        clientTypes.put(session.getId(),type);
+        log.info("有新连接加入:{},类型:{},当前在线人数为:{}", session.getId(),type, onlineCount.get());
     }
 
     /**
@@ -47,7 +54,8 @@ public class PrescriptionPrintSocket {
     public void onClose(Session session) {
         onlineCount.decrementAndGet(); // 在线数减1
         clients.remove(session.getId());
-        log.info("有一连接关闭:{},当前在线人数为:{}", session.getId(), onlineCount.get());
+        clientTypes.remove(session.getId());
+        log.info("有一连接关闭:{},类型:{},当前在线人数为:{}", session.getId(),clientTypes.get(session.getId()),onlineCount.get());
     }
 
     /**
@@ -58,7 +66,7 @@ public class PrescriptionPrintSocket {
     @OnMessage
     public void onMessage(String message, Session session) {
         log.info("服务端收到客户端[{}]的消息:{}", session.getId(), message);
-        this.sendMessage(message, session);
+        this.sendMessage(message);
     }
 
     @OnError
@@ -69,17 +77,20 @@ public class PrescriptionPrintSocket {
 
     /**
      * 群发消息
-     *
      * @param message 消息内容
+     * @return
      */
-    private void sendMessage(String message, Session fromSession) {
+    public int sendMessage(String message) {
+        int i = 0;
         for (Map.Entry<String, Session> sessionEntry : clients.entrySet()) {
             Session toSession = sessionEntry.getValue();
-            // 排除掉自己
-            if (!fromSession.getId().equals(toSession.getId())) {
+            // 发送消息给接收方
+            if (clientTypes.get(toSession.getId()).equals("acceptor")) {
                 log.info("服务端给客户端[{}]发送消息{}", toSession.getId(), message);
                 toSession.getAsyncRemote().sendText(message);
+                i++;
             }
         }
+        return i;
     }
 }

+ 4 - 1
src/main/java/cn/hnthyy/thmz/socket/ToMedicineSocket.java

@@ -80,14 +80,17 @@ public class ToMedicineSocket {
      *
      * @param message 消息内容
      */
-    private void sendMessage(String message) {
+    public int sendMessage(String message) {
+        int i = 0;
         for (Map.Entry<String, Session> sessionEntry : clients.entrySet()) {
             Session toSession = sessionEntry.getValue();
             // 发送消息给接收方
             if (clientTypes.get(toSession.getId()).equals("acceptor")) {
                 log.info("服务端给客户端[{}]发送消息{}", toSession.getId(), message);
                 toSession.getAsyncRemote().sendText(message);
+                i++;
             }
         }
+        return i;
     }
 }

+ 4 - 4
src/main/resources/static/js/mz/to-medicine-test.js

@@ -316,10 +316,10 @@ websocket.onopen = function (event) {
 //接收到消息的回调方法
 websocket.onmessage = function (event) {
     var data = JSON.parse(event.data);
-    if(data.type == 'sf'){
+    if(data.type == 'JF'){//来自缴费后的消息
         //添加正在配药列表
         dispenseList[dispenseList.length] = {name: data.name, patient_id: data.patient_id};
-    }else if (data.type == 'py') {//来自配药处理成功后的消息
+    }else if (data.type == 'PY') {//来自配药处理成功后的消息
         //删除正在配药列表
         for (let i = 0; i < dispenseList.length; i++) {
             if (dispenseList[i].patient_id == data.patient_id) {
@@ -328,7 +328,7 @@ websocket.onmessage = function (event) {
         }
         //添加等待取药列表
         currentList[currentList.length] = {name: data.name, patient_id: data.patient_id};
-    } else if (data.type == 'jh') {
+    } else if (data.type == 'JH') {//来自发药叫号的消息
         //判断正在取药是否为空,不为空将上一位放入过号队列
         if ($('#rightPerson').text() != "") {
             pastList[pastList.length] = {name: rightPerson.name, patient_id: rightPerson.patient_id};
@@ -355,7 +355,7 @@ websocket.onmessage = function (event) {
                 dispenseList.splice(i, 1);
             }
         }
-    } else if (data.type == 'fy') {
+    } else if (data.type == 'FY') {//来自发药处理后的消息
         //将该用户叫号列表清除
         if(rightPerson != '' && rightPerson != null && rightPerson.patient_id == data.patient_id){
             rightPerson = null;

+ 11 - 11
src/main/resources/static/js/mz/west_pharmacy_dispensing.js

@@ -129,9 +129,9 @@ function initTable() {
                 align: "center",
                 valign: 'middle',
                 formatter: function (value, row, index) {
-                    var str = '<button type="button" class="btn btn-default btn-sm" onclick="printPrescription(\'' + row.patientId + '\',\'' + row.orderNo + '\',\'' + row.realNo + '\',\'' + row.chargeDate + '\',\'' + row.times + '\',\'' + row.receiptNo + '\',\'' + row.warnDept + '\')">打印</button>';
-                    str += '<button type="button" class="btn btn-primary  btn-sm" onclick="dispensingDispose(\'' + row.patientId + '\',\'' + row.orderNo + '\',\'' + row.name + '\',\'' + row.realNo + '\',\'' + row.chargeDate + '\')">配药完成</button>';
-                    return [str].join('');
+                    var str = '<button type="button" class="registration-no-color-foot-button" title="打印" onclick="printPrescription(\'' + row.patientId + '\',\'' + row.orderNo + '\',\'' + row.realNo + '\',\'' + row.chargeDate + '\',\'' + row.times + '\',\'' + row.receiptNo + '\',\'' + row.warnDept + '\')"  style="color: #35D082;"><i class="fa fa-print"></i></button>';
+                    str += '<button type="button" class="registration-no-color-foot-button" title="配药完成" onclick="dispensingDispose(\'' + row.patientId + '\',\'' + row.orderNo + '\',\'' + row.name + '\',\'' + row.realNo + '\',\'' + row.chargeDate + '\')"><i class="glyphicon glyphicon-send"></i></button>';
+                    return str;
                 }
             }
         ],
@@ -194,11 +194,15 @@ function queryParams(params) {
  * 配药处理
  */
 function dispensingDispose(patientId, orderNo, name, realNo, chargeDate) {
+    if (!confirm("确定要对当前处方进行配药处理吗?")) {
+        return;
+    }
     var tem = {
         "patientId": patientId,
         "orderNo": orderNo,
         "realNo": realNo,
-        "chargeDate": chargeDate
+        "chargeDate": chargeDate,
+        "name": name
     }
     $.ajax({
         type: "POST",
@@ -215,8 +219,6 @@ function dispensingDispose(patientId, orderNo, name, realNo, chargeDate) {
             if (res.code == 0) {
                 successMesage(res);
                 initTable();
-                prescriptionPrintWebsocket.send(JSON.stringify({content: '1', type: 'py'}));//配药成功发药处理未发药列表刷新
-                toMedicineWebsocket.send(JSON.stringify({patientId: patientId, name: name, type: 'py'}));//配药成功更新叫号队列
             } else {
                 errorMesage(res);
             }
@@ -227,15 +229,13 @@ function dispensingDispose(patientId, orderNo, name, realNo, chargeDate) {
 /**
  * 打印处方
  */
-function printPrescription(patientId, orderNo, realNo, chargeDate, times, receiptNo, warnDept) {
+function printPrescription(patientId, orderNo, realNo, times, receiptNo) {
     var tem = {
         patientId: patientId,
         orderNo: orderNo,
         realNo: realNo,
-        chargeDate: chargeDate,
         times: times,
         receiptNo: receiptNo,
-        warnDept: warnDept,
         groupNo: 71
     };
     $.ajax({
@@ -394,7 +394,7 @@ var toMedicineWebsocket = null;
 
 //判断当前浏览器是否支持WebSocket, 主要此处要更换为自己的地址
 if ('WebSocket' in window) {
-    prescriptionPrintWebsocket = new WebSocket("ws://" + window.location.host + "/thmz/prescriptionPrintSocket");
+    prescriptionPrintWebsocket = new WebSocket("ws://" + window.location.host + "/thmz/prescriptionPrintSocket/sender");
     toMedicineWebsocket = new WebSocket("ws://" + window.location.host + "/thmz/toMedicineSocket/sender");
 } else {
     alert('Not support websocket')
@@ -421,7 +421,7 @@ prescriptionPrintWebsocket.onmessage = function (event) {
         initTable();
         if($("#aotuPrint1").is(':checked')){//自动打印
             console.log("自动打印");
-            printPrescription(data.patientId, data.orderNo, data.realNo, data.chargeDate, data.times, data.receiptNo, data.warnDept);
+            printPrescription(data.patientId, data.orderNo, data.realNo, data.times, data.receiptNo);
         }
     }
 }

+ 11 - 7
src/main/resources/static/js/mz/west_pharmacy_send.js

@@ -104,6 +104,9 @@ function sendRefundButtonChange(object, realIndex) {
  * 发药处理
  */
 function sendMedicineProcessing(realNo, groupNo, orderNo, receiptNo, times, patientId, name) {
+    if (!confirm("确定要对当前处方进行发药处理吗?")) {
+        return;
+    }
     var temp = {
         groupNo: groupNo,
         realNo: realNo,
@@ -111,10 +114,10 @@ function sendMedicineProcessing(realNo, groupNo, orderNo, receiptNo, times, pati
         receiptNo: receiptNo,
         times: times,
         patientId: patientId,
+        name: name,
         windowsNoYf: '04'
     };
-    toMedicineWebSocket.send(JSON.stringify({patient_id: patientId, name: name, type: 'fy'}));
-    /*$.ajax({
+    $.ajax({
         type: "POST",
         url: '/thmz/sendMedicineProcessing',
         contentType: "application/json;charset=UTF-8",
@@ -129,12 +132,12 @@ function sendMedicineProcessing(realNo, groupNo, orderNo, receiptNo, times, pati
             if (res.code == 0) {
                 successMesage(res);
                 initTbTable();
-                toMedicineWebSocket.send(JSON.stringify({patient_id:patientId,name:name,type:'fy'}));
+                //toMedicineWebSocket.send(JSON.stringify({patient_id:patientId,name:name,type:'fy'}));
             } else {
                 errorMesage(res);
             }
         }
-    });*/
+    });
 }
 
 /**
@@ -909,7 +912,7 @@ function saveRefundMedicine() {
  * @param name
  */
 function callNumber(patientId, name) {
-    toMedicineWebSocket.send(JSON.stringify({patient_id: patientId, name: name, type: 'jh'}));
+    toMedicineWebSocket.send(JSON.stringify({patient_id: patientId, name: name, type: 'JH'}));
 }
 
 /**
@@ -948,7 +951,7 @@ var toMedicineWebSocket = null;
 
 //判断当前浏览器是否支持WebSocket, 主要此处要更换为自己的地址
 if ('WebSocket' in window) {
-    prescriptionPrintWebSocket = new WebSocket("ws://" + window.location.host + "/thmz/prescriptionPrintSocket");
+    prescriptionPrintWebSocket = new WebSocket("ws://" + window.location.host + "/thmz/prescriptionPrintSocket/acceptor");
     toMedicineWebSocket = new WebSocket("ws://" + window.location.host + "/thmz/toMedicineSocket/sender");
 } else {
     alert('Not support websocket')
@@ -969,7 +972,8 @@ prescriptionPrintWebSocket.onopen = function (event) {
 prescriptionPrintWebSocket.onmessage = function (event) {
     var confirmFlag = $("#confirmFlagSearch").val();
     var data = JSON.parse(event.data);
-    if (data.type == 'py' && data.content == 1 && confirmFlag == 0) {//来自配药处理成功后的消息
+    if (data.type == 'PY' && confirmFlag == 0) {//来自配药处理成功后的消息,未发药列表刷新
+        console.log("刷新");
         initTbTable();
     }
 }

+ 2 - 1
src/main/resources/templates/mz/west_pharmacy_dispensing.html

@@ -1,6 +1,7 @@
 <link rel="stylesheet" href="/thmz/css/bootstrap/css/bootstrap-select.css"/>
 <link rel="stylesheet" href="/thmz/css/bootstrap/css/daterangepicker.css"/>
 <link rel="stylesheet" href="/thmz/css/custom.min.css">
+<link rel="stylesheet" href="/thmz/css/toll_administration.css">
 <script src="/thmz/js/dependent/bootstrap-select.js"></script>
 <script src="/thmz/js/dependent/daterangepicker.js"></script>
 <script src="/thmz/js/mz/west_pharmacy_dispensing.js"></script>
@@ -8,7 +9,7 @@
 <title>门诊西药房配药</title>
 <div class="row" style="height: calc(100% - 60px);overflow-y: auto;">
     <div class="col-md-12 col-sm-12 col-xs-12">
-        <div class="x_panel">
+        <div class="x_panel" style="background: #EBEBE4;">
             <div style="padding: 15px 15px 0px 15px;">
                 <form id="formSearch" class="form-horizontal " autocomplete="off">
                     <div class="form-group">