HFHardWaredll.java 4.63 KB
package cn.csbr.app.hardware.HFbwcabinet;

import cn.csbr.app.gui.GUIContext;
import cn.csbr.app.hardware.HardWareDll;
import cn.csbr.app.hardware.RfidHardWareApi;
import cn.csbr.app.hardware.callback.RfidHardWareCallback;
import cn.csbr.app.hardware.callback.ValidCardUserCallback;
import cn.csbr.app.service.CabinetService;
import cn.csbr.springboot.dao.mapper.DatUserLogMapper;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 超高频方法封装类,对于所有柜子
 *
 * @author liwuji
 * @since 2018-12-24
 */
@Component
public class HFHardWaredll implements RfidHardWareApi {
    @Autowired
    private GUIContext guiContext;
    @Autowired
    private DatUserLogMapper datUserLogMapper;
    @Autowired
    private CabinetService cabinetService;

    private List<HFbwcabinetApi> hFbwcabinetlist;

    private List<HFbwcabinetApi> hFMainbwcabinetApi;
    /** rfid硬件数据返回回调接口 */
    public static RfidHardWareCallback rfidHardWareDataReturnCallback;

    private static Logger logger = LoggerFactory.getLogger(HFHardWaredll.class);

    public boolean BWInitCabinet() {
        int flag = HFbwcabinetApi.BWInitCabinet();
        if(flag == 1) {
            logger.info("缺少相应的dll文件");
            return false;
        }
        return true;
    }


    @Override
    public boolean initHardWare(String rfidData, String cardData) {
        //初始化柜子信息
       // logger.info("初始化所有硬件信息");
//       if(!BWInitCabinet()){
//           logger.info("初始化 BWInitCabinet异常");
//       }
        JSONArray array = JSONArray.parseArray(rfidData);
        hFbwcabinetlist = new ArrayList<>();
        for(Object o:array) {
          //  logger.info("初始化所有硬件信息"+o.toString());
            HFbwcabinetApi hFbwcabinetApi = new HFbwcabinetApi();
             hFbwcabinetApi = JSON.parseObject(JSON.toJSONString(o), HFbwcabinetApi.class);
           //调用超高频柜子类的初始化方法
            hFbwcabinetApi.init(hFbwcabinetApi.getStoreguid(),hFbwcabinetApi.getQuyucd(),hFbwcabinetApi.getCabinetindex(),hFbwcabinetApi.getCabinetType(),hFbwcabinetApi.getCabinetCd(),guiContext,datUserLogMapper);
            //调用超高频柜子硬件
            hFbwcabinetApi.initHardWare();
            hFbwcabinetlist.add(hFbwcabinetApi);
        }
        return true;
    }

    @Override
    public boolean startAllRfid(String userCd, String userName) {
        List<String> cabinetcdList=new ArrayList<String>();
        for (HFbwcabinetApi hFbwcabinetApi:hFbwcabinetlist) {
             if(!cabinetcdList.contains(hFbwcabinetApi.getCabinetCd()))
             {   cabinetcdList.add(hFbwcabinetApi.getCabinetCd());
                 getRfid(hFbwcabinetApi);
             }

        }
        return true;
    }


    @Override
    public boolean closeHardWare() {
        hFbwcabinetlist.addAll(hFMainbwcabinetApi);
        for (HFbwcabinetApi hFbwcabinetApi:hFbwcabinetlist) {
            hFbwcabinetApi.closeHardWare();
        }
        HFbwcabinetApi.BWExitCabinet();
        return true;
    }

    @Override
    public boolean setActionRfidDataBack(RfidHardWareCallback callback) {
        this.rfidHardWareDataReturnCallback = callback;
        return true;
    }

    @Override
    public boolean setCardMessDo(RfidHardWareCallback callback) {
        return true;
    }

    @Override
    public boolean setFunCardUserCheck(ValidCardUserCallback callback) {
        return true;
    }


    //获取硬件传过来的rfid
    public void getRfid(HFbwcabinetApi hFbwcabinetApi) {
        Thread thread = new Thread(() -> {
            hFbwcabinetApi.setRfidflag(true);
            hFbwcabinetApi.BWQueryRfidTabFunDo();
        }
        );
        thread.setDaemon(true);
        thread.start();
    }

    //暂停其他柜子的指纹和刷卡
    public boolean pauseOtherCabFingerAndId() {
        for (HFbwcabinetApi hFbwcabinetApi:hFbwcabinetlist) {
            hFbwcabinetApi.setRunflag(false);
        }
        return true;
    }

    //启用其他柜子的指纹和刷卡
    public boolean startOtherCabFingerAndId() {
        for (HFbwcabinetApi hFbwcabinetApi:hFbwcabinetlist) {
            hFbwcabinetApi.setRunflag(true);
        }
        return true;
    }


   // 启用或停用指纹及刷卡验证
    public void stoporstartcheck(int cmd) {
        for (HFbwcabinetApi hFbwcabinetApi:hFbwcabinetlist) {
            hFbwcabinetApi.setIsFinger(cmd);
        }
    }


}