whycxzp
2023-11-30 a0157d91f635f6b21285ee4e30670c3e06d248b7
src/main/java/com/whyc/util/OpCmdUtil.java
@@ -1,6 +1,7 @@
package com.whyc.util;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.gson.JsonObject;
@@ -44,6 +45,36 @@
        }
    }
    /**读取*/
    public static Response readByUpdateOpCmd(CustomMapper mapper, QueryWrapper<?> queryWrapper, Integer opCmd, Integer ackTimeLimitSecond) {
        try {
            //更新cmd
            UpdateWrapper<Object> update = Wrappers.update();
            update.set("op_cmd",opCmd);
            mapper.update(null,update);
            //读取cmd返回
            int count = ackTimeLimitSecond * 1000 / 250;
            for (int i = 0; i < count; i++) {
                queryWrapper.select("op_cmd").last(" limit 1");
                Object obj = mapper.selectOne(queryWrapper);
                Class clazz = obj.getClass();
                Field fieldOpCmdAck = clazz.getDeclaredField("opCmd");
                ReflectionUtils.makeAccessible(fieldOpCmdAck);
                Integer opCmdAck = (Integer) fieldOpCmdAck.get(obj);
                boolean ackStatus = getAckStatus(opCmd, opCmdAck);
                if (ackStatus) {//操作成功
                    Object data = mapper.selectList(null).get(0);
                    return new Response().setII(1, true, data,"读取完成");
                }
                Thread.sleep(250);
            }
            return new Response().set(1, false, "网络连接失败,读取失败");
        }catch (NoSuchFieldException | IllegalAccessException | InterruptedException e){
            return new Response().set(0,e.toString());
        }
    }
    /**
     * 持续更新cmd和cmdAck对应关系
     * @param opCmd