public HttpStatus getStatus() {
RestTemplate restTemplate = new RestTemplate();
HttpEntity httpEntity = new HttpEntity(hotelbedsAuth.hotelsAuth());
ResponseEntity<String> response = restTemplate.exchange(
hotelbedsProperties.getHotelBaseUrl()+"/status", HttpMethod.GET, httpEntity, String.class);
return response.getStatusCode();
}
Once the bearer token expires, you will have to use Basic Authorization again to obtain a new bearer token.
@Scheduled
, чтобы по крону в заданный интервал времени запускать метод по обновлению токенаSELECT id name // выполнится, но не так как задумано, не хватает запятых
FROM table1
LEFT JOIN b as // здесь все совсем плохо
(
SELECT worker_id date value //тут уже даже не выполнится
FROM table2
WHERE data = 'интересующая дата' //date же!
)
ON table1.id = b.worker_id //могло бы даже работать, но выше куча ошибок
WHERE date = 'null' // так работать не будет. date IS NULL будет, но у вас вроде нужно value проверять?
TelegramController ts = new TelegramController();
но обратил внимание что не инжектится репозиторий, точнее при отладке его значение равно Null
<script>
$('#modal_purchase_question').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
var recipient = button.data('whatever');
var recipient_two = button.parents('.card').find('h3').text();
var modal = $(this);
modal.find('.modal-title').text('Заголовок: ' + recipient_two + ', дата-аттрибут: ' + recipient);
})
</script>
static byte[] crc(byte[] data) {
ushort sum = 0;
foreach (byte b in data)
sum += b;
return new byte[] {(byte)(sum & 255), (byte)(sum >> 8)};
}
static ushort crc(byte[] data, ushort sum = 0) {
foreach (byte b in data) sum += b;
return sum;
}
static void Main(string[] args)
{
// пакеты без чексумм
byte[] mass1 = new byte[] { 75, 0, 25, 0, 3, 48, 117, 0, 126, 37, 0, 188, 138, 169, 53, 66, 15, 52, 115, 203, 112, 103, 220, 16, 92, 237, 76, 80, 254};
byte[] mass2 = new byte[] { 75, 0, 25, 0, 3, 64, 156, 0, 126, 37, 0, 188, 138, 169, 245, 165, 14, 52, 115, 203, 96, 64, 220, 16, 92, 237, 76, 80, 254};
byte[] mass3 = new byte[] { 75, 0, 25, 0, 3, 80, 195, 0, 126, 37, 0, 88, 138, 169, 181, 9, 14, 52, 115, 203, 120, 60, 220, 32, 131, 237, 236, 214, 255};
byte[] mass4 = new byte[] { 75, 0, 25, 0, 3, 112, 17, 1, 126, 37, 0, 88, 138, 169, 181, 9, 14, 52, 115, 203, 120, 60, 220, 32, 131, 237, 236, 214, 255};
byte[] mass5 = new byte[] { 75, 0, 25, 0, 3, 60, 134, 1, 126, 37, 0, 88, 138, 169, 181, 9, 14, 52, 115, 203, 120, 60, 220, 32, 131, 237, 236, 214, 255};
foreach(var mass in new byte[][] {mass1, mass2, mass3, mass4, mass5}) {
bool first = true;
Console.Write("{");
foreach (var b in mass) {
if (!first) Console.Write(", ");
else first = false;
Console.Write(b);
}
var sum = BitConverter.GetBytes(crc(mass));
// вывод чексуммы
Console.WriteLine(", {0}, {1}}}", sum[0], sum[1]);
}
}
// Наследуем наш клас от SerialPort для более красивого кода
public class MySerialPort : SerialPort
{
private const int DataSize = 54; // я так и не понял, какой размер данных нужен. Укажите правильное число в байтах
private readonly byte[] _bufer = new byte[DataSize];
private int _stepIndex;
private bool _startRead;
public MySerialPort(string port)
: base()
{
// все папаметры вы должны указать в соответствии с вашим устройством
//base.PortName = COM1;
base.BaudRate = 115200;
base.DataBits = 8;
base.StopBits = StopBits.Two;
base.Parity = Parity.None;
base.ReadTimeout = 1000;
// тут подписываемся на событие прихода данных в порт
// для вашей задачи это должно подойт идеально
base.DataReceived += SerialPort_DataReceived;
}
// открываем порт передав туда имя
public void Open(string portName)
{
if (base.IsOpen)
{
base.Close();
}
base.PortName = portName;
base.Open();
}
// эта функция вызвется каждый раз, когда в порт чтото будет передано от вашего устройства
void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var port = (SerialPort)sender;
try
{
// узнаем сколько байт пришло
int buferSize = port.BytesToRead;
for (int i = 0; i < buferSize; ++i)
{
// читаем по одному байту
byte bt = (byte)port.ReadByte();
// если встретили начало кадра (0xFF) - начинаем запись в _bufer
if (0xFF == bt)
{
_stepIndex = 0;
_startRead = true;
// раскоментировать если надо сохранять этот байт
//_bufer[_stepIndex] = bt;
//++_stepIndex;
}
// дописываем в буфер все остальное
if (_startRead)
{
_bufer[_stepIndex] = bt;
++_stepIndex;
}
// когда буфер наполнлся данными
if (_stepIndex == DataSize && _startRead)
{
// по идее тут должны быть все ваши данные.
// .. что то делаем ...
// var item = _bufer[7];
_startRead = false;
}
}
}
catch {}
}
}
var port = new MySerialPort();
port.Open("COM5");
private void TransferWorker_DoWork(object sender, DoWorkEventArgs e)
{
// переменная для снятия из очереди
Packet pkt;
// массив для передачи
byte[] wr_buf = new byte[6];
// массив для приема
byte[] rd_buf = new byte[6];
// цикл до отмены работы или опустошения очереди запросов
/// TODO теперь не выходит по завершению очереди - уменьшить на переключение контекста задач
while ((_TransferWorker.CancellationPending == false))// && (_toTransfer.Count != 0))
{
case Mode_transfer.Read_ADC:// Чтение данных
Массив data = pkt.obj as Массив;
// читаем АЦП
wr_buf[0] = Convert.ToByte('A');
wr_buf[1] = (byte)0;
// Пишем отправляеммый пакет
_Serial.Write(wr_buf, 0, 2);
// ждем пока весь пакет уйдет или запросят отбой
while ((_TransferWorker.CancellationPending == false) && (_Serial.BytesToWrite != 0)) ;
// попытка поймать заголовок
try
{
int dummy = 0, lenghtReadingPacket;
bool end = false;
int counter =0;
while (end != true){
dummy = _Serial.BytesToRead;
if (dummy <= 3)
{
System.Threading.Thread.Sleep(1);
if (counter++ > _Serial.ReadTimeout)
{
_dataLostArgs.ErrorPreambulaLen++;
throw new TimeoutException("Preambula not full!");
}
}
else end = true;
}
dummy = _Serial.Read(rd_buf, 0, 3);
var dummy2 = dummy;
if ((dummy != 3))
{
_dataLostArgs.ErrorPreambulaLen++;
throw new TimeoutException("Preambula not full!");
}
if (rd_buf[(int)ADC_Packet.Name] != 'D'){
_dataLostArgs.PreambulaLost ++;
throw new TimeoutException("Data preambula lost!");
}
// длина пакета в словах
lenghtReadingPacket = rd_buf[(int)ADC_Packet.LenghtOfPacket];
byte[] rd_buf_ADC = new byte[lenghtReadingPacket * 2 + 1];
end = false;
counter = 0;
while (end != true){
dummy = _Serial.BytesToRead;
if (dummy < (lenghtReadingPacket * 2 + 1))
{
System.Threading.Thread.Sleep(1);
if (counter++ > _Serial.ReadTimeout + 100)
{
var dummy3 = _Serial.Read(rd_buf_ADC, 0, lenghtReadingPacket * 2 + 1);
_dataLostArgs.PoorPacket++;
throw new TimeoutException();
}
}
else end = true;
}
dummy = _Serial.Read(rd_buf_ADC, 0, lenghtReadingPacket * 2 + 1);
if (dummy == (lenghtReadingPacket * 2 + 1))
for (Int32 i = 0; i < lenghtReadingPacket * 2 ; i += 2)
{
int a = rd_buf_ADC[i];
int b = rd_buf_ADC[i + 1];
if (a != 0 || b != 0) data.Add(rd_buf_ADC[i] * 256 + rd_buf_ADC[i + 1]);
}
else {
_dataLostArgs.PoorPacket++;
throw new TimeoutException("Not all bytes received!");
}
}
catch (TimeoutException)
{
/// TODO ПОдумать при зависании считывания АЦП
OnADCDataLost(this, _dataLostArgs);
}
finally
{
// Чистим за собой
_Serial.DiscardInBuffer();
_Serial.DiscardOutBuffer();
}
break;
new SerialPort(selectedItem.ToString(), 9600, Parity.None, 416, StopBits.One);