package com.ld.igds.protocol.weight; import com.alibaba.fastjson.JSONObject; import com.ld.igds.inout.dto.ApiInoutData; import com.ld.igds.inout.ApiInoutService; import com.ld.igds.inout.dto.InoutData; import com.ld.igds.io.constant.ProtocolEnum; import com.ld.igds.util.HttpUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.stereotype.Component; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; /** * @Desc: 风正致远地磅主控协议实现,出入库相关接口 * @author: andy.jia * @update-time: 2022/11/26 15:37 */ @Slf4j @Component public class FzzyWeightServiceImpl implements ApiInoutService { @Override public String getProtocol() { return ProtocolEnum.TCP_FZZY_WEIGHT.getCode(); } /** * @param param * @return */ @Override public ApiInoutData getPlateNum(ApiInoutData param) { if (null == param.getSn()) { param.setErrorMsg("当前车牌识别配置未配置设备编号,无法获取"); return param; } try { String url = "http://" + param.getIp() + ":" + param.getPort() + "/get-plate"; JSONObject json = new JSONObject(); json.put("actionCode", WeightUtil.ACTION_CODE_50); json.put("deviceId", param.getSn()); json.put("time", DateFormatUtils.format(param.getTime(), "yyyyMMddHHmmss")); log.debug("---------调用车牌识别获取结果-------------------{}-{}-{}", param.getIp(), param.getPort(), param.getSn()); String result = HttpUtils.doPostJson(url, json.toJSONString()); log.debug("---------车牌识别返回结果-------------------{}", result); WeightResult weightResult = JSONObject.parseObject(result, WeightResult.class); if (null == weightResult) { param.setErrorMsg("获取失败:未获取到车牌识别信息"); return param; } if (StringUtils.isEmpty(weightResult.getPlateNum())) { param.setErrorMsg("获取失败:未获取到车牌识别信息"); return param; } if (WeightUtil.RESULT_CODE_0.equals(weightResult.getCode())) { param.setPlateNum(weightResult.getPlateNum()); } else { param.setErrorMsg("获取失败:" + weightResult.getMsg()); } } catch (Exception e) { param.setErrorMsg("获取失败:" + e.getMessage()); return param; } return param; } /** * 不需要实现 * * @param param * @return */ @Override public String initLpr(ApiInoutData param) { return "当前模式无需初始化车牌识别"; } @Override public String lightControl(ApiInoutData param) { return null; } /** * 暂时不实现 * * @param param deviceId和actionCode 不可为空 * @return */ @Override public String gateControl(ApiInoutData param) { return null; } /** * 增加白名单 --调用子线程实现 * * @param param deviceId和actionCode 不可为空 * @return */ public String addWhitePlate(ApiInoutData param) { FutureTask futureTask = new FutureTask<>(new WeightGatewayRemoteTask(param, new String[]{WeightUtil.ACTION_CODE_10})); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(futureTask); executorService.shutdown(); return "SUCCESS"; } /** * 删除白名单---调用子线程实现 * * @param param * @return */ public String delWhitePlate(ApiInoutData param) { FutureTask futureTask = new FutureTask<>(new WeightGatewayRemoteTask(param, new String[]{WeightUtil.ACTION_CODE_11})); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(futureTask); executorService.shutdown(); return "SUCCESS"; } /** * 语音通知 --调用子线程实现 * * @param param actionCode 和 msg不可为空 * @return */ @Override public String noticeRadio(ApiInoutData param, InoutData data) { FutureTask futureTask = new FutureTask<>(new WeightGatewayRemoteTask(param, new String[]{WeightUtil.ACTION_CODE_30})); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(futureTask); executorService.shutdown(); return "SUCCESS"; } /** * 称重完成 --调用子线程实现 * * @param param * @return */ public String noticeWeightDone(ApiInoutData param) { FutureTask futureTask = new FutureTask<>(new WeightGatewayRemoteTask(param, new String[]{WeightUtil.ACTION_CODE_60, WeightUtil.ACTION_CODE_30})); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(futureTask); executorService.shutdown(); return "SUCCESS"; } /** * @param param * @return */ @Override public ApiInoutData getIcCardNum(ApiInoutData param) { try { String url = "http://" + param.getIp() + ":" + param.getPort() + "/get-plate"; JSONObject json = new JSONObject(); json.put("actionCode", WeightUtil.ACTION_CODE_70); json.put("time", DateFormatUtils.format(param.getTime(), "yyyyMMddHHmmss")); log.debug("---------获取智慧卡信息-------------------{}-{}-{}", param.getIp(), param.getPort(), param.getSn()); String result = HttpUtils.doPostJson(url, json.toJSONString()); log.debug("---------智慧卡返回结果-------------------{}", result); WeightResult weightResult = JSONObject.parseObject(result, WeightResult.class); if (null == weightResult) { param.setErrorMsg("获取失败:未获取到IC卡识别信息"); return param; } if (StringUtils.isEmpty(weightResult.getIcCardNo())) { param.setErrorMsg("获取失败:未获取到IC卡识别信息"); return param; } if (WeightUtil.RESULT_CODE_0.equals(weightResult.getCode())) { param.setIcCardNo(weightResult.getIcCardNo()); } else { param.setErrorMsg("获取失败:" + weightResult.getMsg()); } } catch (Exception e) { param.setErrorMsg("获取失败:" + e.getMessage()); return param; } return param; } @Override public String noticeLed(ApiInoutData param, InoutData data) { // TODO Auto-generated method stub return null; } }