jiazx0107@163.com
2023-07-04 785ce007ce4b7b2119a99aacc95cefe9da09e32e
igds-inout/src/main/java/com/ld/igds/inout/manager/InoutEventControlManager.java
ÎļþÃû´Ó igds-inout/src/main/java/com/ld/igds/inout/manager/InoutDeviceManager.java ÐÞ¸Ä
@@ -5,22 +5,26 @@
import com.ld.igds.camera.data.ApiCameraData;
import com.ld.igds.camera.data.ApiCameraResp;
import com.ld.igds.camera.data.ApiSnapReq;
import com.ld.igds.constant.BizType;
import com.ld.igds.data.SnapImgDto;
import com.ld.igds.file.CoreFileService;
import com.ld.igds.inout.ApiInoutManager;
import com.ld.igds.inout.InoutConstant;
import com.ld.igds.inout.dto.ApiInoutData;
import com.ld.igds.inout.dto.InoutCameraDto;
import com.ld.igds.inout.dto.InoutData;
import com.ld.igds.inout.ApiInoutService;
import com.ld.igds.inout.InoutConstant;
import com.ld.igds.inout.dto.*;
import com.ld.igds.inout.service.InoutService;
import com.ld.igds.io.constant.ProtocolEnum;
import com.ld.igds.m.service.InoutCommonService;
import com.ld.igds.models.InoutConf;
import com.ld.igds.models.SnapSer;
import com.ld.igds.util.ContextUtil;
import com.ld.igds.util.NumberUtil;
import com.ld.igds.view.service.SnapSerService;
import com.ld.igds.websocket.WebSocketPacket;
import com.ld.igds.websocket.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@@ -30,18 +34,22 @@
/**
 * @Desc: å‡ºå…¥åº“相关设备操作,业务逻辑包括摄像头操作,地磅,扦样机等所有设备
 * @Desc: å‡ºå…¥åº“过程中,针对流程相关的设备联动控制包括,地磅、扦样机、读卡器、闸机、LED对接等
 * <p>
 * æ³¨æ„ï¼›å½“前类中事件类方法均使用异步方式实现
 * @author: Andy
 * @update-time: 2022/11/24
 * @update-time: 2023/7/4 é‡æ–°ä¼˜åŒ–
 */
@Slf4j
@Component
public class InoutDeviceManager {
public class InoutEventControlManager {
    @Resource
    private SnapSerService snapSerService;
    @Resource
    private InoutCommonService inoutCommonService;
    @Resource
    private InoutService inoutService;
    @Resource
    private CoreFileService fileService;
    @Resource
@@ -50,6 +58,12 @@
    private ApiCameraManager apiCameraManager;
    /**
     * é¡µé¢èŽ·å–è½¦ç‰Œè¯†åˆ«
     *
     * @param param
     * @return
     */
    public ApiInoutData getPlateNum(ApiInoutData param) {
        //如果使用的是地磅插件获取,则需要调整设备为地磅插件信息
@@ -61,68 +75,44 @@
                return param;
            }
            ApiInoutData pluginWeight = new ApiInoutData();
            pluginWeight = param;
            pluginWeight.setIp(conf.getIp());
            pluginWeight.setPort(conf.getPort());
            pluginWeight.setProtocol(conf.getProtocol());
            return apiInoutManager.getApiService(param.getProtocol()).getPlateNum(pluginWeight);
            param.setIp(conf.getIp());
            param.setPort(conf.getPort());
            param.setProtocol(conf.getProtocol());
            return apiInoutManager.getApiService(param.getProtocol()).getPlateNum(param);
        }
        return apiInoutManager.getApiService(param.getProtocol()).getPlateNum(param);
    }
    /**
     * èŽ·å–æ™ºæ…§å¡ç»“æžœ
     *
     * @param param
     * @return
     */
    public ApiInoutData getIcCardNum(ApiInoutData param) {
        return apiInoutManager.getApiService(param.getProtocol()).getIcCardNum(param);
    }
    /**
     * èŽ·å–ç§°é‡æ’ä»¶é…ç½®ä¿¡æ¯
     *
     * @param companyId
     * @param deptId
     * @param sort
     * @param type
     * @return
     */
    public InoutConf getInoutConf(String companyId, String deptId, String sort, String type) {
        // èŽ·å–å‡ºå…¥åº“é…ç½®ä¿¡æ¯
        List<InoutConf> listInoutConf = inoutCommonService.getCacheInoutConf(companyId, deptId);
        if (null == listInoutConf) return null;
        InoutConf result = null;
        for (InoutConf conf : listInoutConf) {
            if (sort.equals(conf.getSort()) && type.equals(conf.getType())) {
                result = conf;
                break;
            }
        }
        if (null == result) return null;
        return result;
    }
    /**
     * åˆå§‹åŒ–车牌识别
     * å‡ºå…¥åº“登记初始化
     *
     * @param conf
     * @param lpr è½¦ç‰Œè¯†åˆ«é…ç½®ä¿¡æ¯
     */
    public void initLpr(InoutConf conf) {
    @Async
    public void initInoutRegister(InoutConf lpr) {
        if (null == conf) return;
        if (null == lpr) return;
        ApiInoutData lprData = new ApiInoutData(conf);
        ApiInoutData lprData = new ApiInoutData(lpr);
        apiInoutManager.getApiService(conf.getProtocol()).initLpr(lprData);
        apiInoutManager.getApiService(lpr.getProtocol()).initLpr(lprData);
    }
@@ -157,34 +147,17 @@
    public SnapImgDto snapImg(SnapImgDto param) {
        try {
            InoutConf conf;
            //登记时候抓拍
            if (InoutConstant.PROGRESS_REGISTER.equals(param.getProgress())) {
                this.noticeGatewayAddWhitePlate(param);
            }
            //点击称重完成
            if (InoutConstant.PROGRESS_WEIGHT_TAG.equals(param.getProgress())
                    || InoutConstant.PROGRESS_WEIGHT_FULL.equals(param.getProgress()) ||
                    InoutConstant.PROGRESS_WEIGHT_EMPTY.equals(param.getProgress())) {
                this.noticeGatewayWeightInfo(param);
            }
            SnapSer ser = snapSerService.getCacheByDeptId(param.getDeptId());
            if (StringUtils.isNotEmpty(param.getId1())) {
                conf = inoutCommonService.getCacheInoutConf(param.getCompanyId(), param.getDeptId(), param.getId1());
                param.setFileName1(this.snapImgByConf(conf, param, ser));
                Thread.sleep(600);
                Thread.sleep(500);
            }
            if (StringUtils.isNotEmpty(param.getId2())) {
                conf = inoutCommonService.getCacheInoutConf(param.getCompanyId(), param.getDeptId(), param.getId2());
                param.setFileName2(this.snapImgByConf(conf, param, ser));
                Thread.sleep(600);
                Thread.sleep(500);
            }
            if (StringUtils.isNotEmpty(param.getId3())) {
                conf = inoutCommonService.getCacheInoutConf(param.getCompanyId(), param.getDeptId(), param.getId3());
                param.setFileName3(this.snapImgByConf(conf, param, ser));
@@ -221,7 +194,7 @@
        apiData.setMsg("称重已完成");
//        apiInoutManager.getApiService(apiData.getProtocol()).noticeWeightDone(apiData);
        apiInoutManager.getApiService(apiData.getProtocol()).noticeRadio(apiData);
      //  apiInoutManager.getApiService(apiData.getProtocol()).noticeRadio(apiData);
    }
    /**
@@ -426,17 +399,224 @@
        return null;
    }
    /**
     * å‡ºå…¥åº“登记完成触发事件,默认为异步处理
     *
     * @param data
     */
    @Async
    public void onInoutRegister(InoutData data) {
        //DO Nothing
    }
    /**
     * æ ¹æ®å‡ºå…¥åº“信息,控制出入库控制器
     * å‡ºå…¥åº“称重完成,事件
     *
     * @param data
     * @param curProgress
     * @param nextProgress
     */
    public void controlWeight(InoutData data, String curProgress, String nextProgress) {
    @Async
    public void onInoutWeight(InoutData data, String curProgress, String nextProgress) {
        //TODO
        //1、通知称重显示屏
        //2、语音通知
        //3、开闸机
        //4、开红绿灯
    }
    /**
     * å€¼ä»“完成,事件
     *
     * @param data
     * @param curProgress
     * @param nextProgress
     */
    @Async
    public void onInoutHandle(InoutData data, String curProgress, String nextProgress) {
        //DO Nothing
    }
    /**
     * æ‰¦æ ·å®Œæˆï¼Œäº‹ä»¶
     *
     * @param data
     */
    @Async
    public void onInSimple(InoutCheckData data) {
        //DO Nothing
    }
    /**
     * è´¨æ£€å®Œæˆï¼Œäº‹ä»¶
     *
     * @param data
     * @param curProgress
     * @param nextProgress
     */
    @Async
    public void onInCheck(InoutCheckData data, String curProgress, String nextProgress) {
        //1、质检大屏显示
    }
    /**
     * æµç¨‹å®Œæˆï¼Œäº‹ä»¶
     *
     * @param data
     */
    @Async
    public void onInoutComplete(InoutData data) {
        //DO Nothing
    }
    /**
     * åˆå§‹åŒ–大屏
     *
     * @param companyId ç»„织编码
     * @param deptId    åˆ†åº“编码
     * @param progress  æµç¨‹çŽ¯èŠ‚
     */
    @Async
    public void initInoutScreen(String companyId, String deptId, String progress) {
        if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN
                .getCode())) {
            WebSocketServer.contextOnLineMap.put(BizType.SCREEN.getCode(),
                    false);
        }
        if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN_INOUT
                .getCode())) {
            WebSocketServer.contextOnLineMap.put(
                    BizType.SCREEN_INOUT.getCode(), false);
        }
        if (null == WebSocketServer.contextOnLineMap.get(BizType.SCREEN_CHECK
                .getCode())) {
            WebSocketServer.contextOnLineMap.put(
                    BizType.SCREEN_CHECK.getCode(), false);
        }
        if (WebSocketServer.contextOnLineMap.get(BizType.SCREEN.getCode())
                || WebSocketServer.contextOnLineMap.get(BizType.SCREEN_INOUT
                .getCode())
                || WebSocketServer.contextOnLineMap.get(BizType.SCREEN_CHECK
                .getCode())) {
            // æŽ¨é€åˆ°å¤§å±
            List<InoutData> curList = inoutService.getListInoutCache(deptId);
            List<InoutData> completeList = inoutService.getCompleteListInoutCache(deptId);
            notifyInoutScreen(companyId, deptId, curList, completeList);
        }
    }
    private void notifyInoutScreen(String companyId, String deptId, List<InoutData> curList, List<InoutData> completeList) {
        InoutSumDto dto = new InoutSumDto();
        if (null != curList) {
            for (InoutData data : curList) {
                if (InoutConstant.TYPE_IN.equals(data.getType())) {
                    dto.setInSumNum(dto.getInSumNum() + 1);
                }
                if (InoutConstant.TYPE_OUT.equals(data.getType())) {
                    dto.setOutSumNum(dto.getOutSumNum() + 1);
                }
                dto.setCompanyId(companyId);
                dto.setDeptId(deptId);
            }
        }
        if (null != completeList) {
            for (InoutData data : completeList) {
                if (InoutConstant.TYPE_IN.equals(data.getType())) {
                    dto.setInSumNum(dto.getInSumNum() + 1);
                    dto.setInComplateNum(dto.getInComplateNum() + 1);
                }
                if (InoutConstant.TYPE_OUT.equals(data.getType())) {
                    dto.setOutSumNum(dto.getOutSumNum() + 1);
                    dto.setOutComplateNum(dto.getOutComplateNum() + 1);
                }
                dto.setCompanyId(data.getCompanyId());
                dto.setDeptId(data.getDeptId());
            }
        }
        // è°ƒæ•´å°è£…
        if (dto.getInSumNum() > 0) {
            dto.setPerInComplate(dto.getInComplateNum() / Double.valueOf(dto.getInSumNum()));
            dto.setPerInComplate(NumberUtil.keepPrecision(
                    dto.getPerInComplate() * 100, 1));
        }
        if (dto.getOutSumNum() > 0) {
            dto.setPerOutComplate(dto.getOutComplateNum() / Double.valueOf(dto.getOutSumNum()));
            dto.setPerOutComplate(NumberUtil.keepPrecision(
                    dto.getPerOutComplate() * 100, 1));
        }
        if (null == dto.getCompanyId()) {
            dto.setCompanyId(ContextUtil.getDefaultCompanyId());
        }
        // æŽ¨é€ç»¼åˆç®¡ç†å¤§å±
        WebSocketPacket packet = new WebSocketPacket();
        packet.setBizId("IN_OUT_SUMMARY");
        packet.setCompanyId(dto.getCompanyId());
        packet.setDeptId(dto.getDeptId());
        packet.setBizType(BizType.SCREEN.getCode());
        packet.setData(dto);
        WebSocketServer.sendByBizTag(packet);
        // æŽ¨é€å‡ºå…¥åº“大屏
        dto.setCurList(curList);
        dto.setComplateList(completeList);
        packet.setBizType(BizType.SCREEN.getCode());
        packet.setBizTag(WebSocketPacket.BIZ_TAG_SCREEN_INOUT);
        WebSocketServer.sendByBizTag(packet);
        // æŽ¨é€åŒ–验大屏
        packet.setBizType(BizType.SCREEN.getCode());
        packet.setBizTag(WebSocketPacket.BIZ_TAG_SCREEN_CHECK);
        WebSocketServer.sendByBizTag(packet);
    }
    /**
     * èŽ·å–ç§°é‡æ’ä»¶é…ç½®ä¿¡æ¯
     *
     * @param companyId
     * @param deptId
     * @param sort
     * @param type
     * @return
     */
    public InoutConf getInoutConf(String companyId, String deptId, String sort, String type) {
        // èŽ·å–å‡ºå…¥åº“é…ç½®ä¿¡æ¯
        List<InoutConf> listInoutConf = inoutCommonService.getCacheInoutConf(companyId, deptId);
        if (null == listInoutConf) return null;
        InoutConf result = null;
        for (InoutConf conf : listInoutConf) {
            if (sort.equals(conf.getSort()) && type.equals(conf.getType())) {
                result = conf;
                break;
            }
        }
        if (null == result) return null;
        return result;
    }
}