const smpp = require('smpp');
const session = smpp.connect('smpp://your-smpp-server');
function splitMessage(message) {
const messageParts = [];
const partSize = 153;
for (let i = 0; i < message.length; i += partSize) {
messageParts.push(message.substring(i, i + partSize));
}
return messageParts;
}
function sendLongSms(session, destination, source, message) {
const parts = splitMessage(message);
const refNumber = Math.floor(Math.random() * 255);
const totalParts = parts.length;
parts.forEach((part, index) => {
const udh = Buffer.from([
0x05, // UDH length
0x00, // IEI (Information Element Identifier)
0x03, // Length of header
refNumber, // Reference number (randomized)
totalParts, // Total number of parts
index + 1, // Current part number
]);
const shortMessage = Buffer.concat([udh, Buffer.from(part, 'utf-8')]);
session.submit_sm({
destination_addr: destination,
source_addr: source,
short_message: shortMessage,
data_coding: 0,
}, (pdu) => {
if (pdu.command_status === 0) {
console.log('Message sent successfully.');
} else {
console.error('Message failed with status:', pdu.command_status);
}
});
});
}
session.bind_transceiver({
system_id: 'your_system_id',
password: 'your_password',
}, (pdu) => {
if (pdu.command_status === 0) {
console.log('Connected');
const longMessage = 'Your very long message goes here...';
sendLongSms(session, 'destination_number', 'source_number', longMessage);
} else {
console.error('Failed to connect:', pdu.command_status);
}
});
Как вы видите, тут идёт выборка за 2 дня: 2024-04-09 и 2024-04-10. Но проблема в том, что количество дней указывает пользователь и их может быть сколько угодно. Подскажите, как правильно сделать, что если пользователь указал, например, 10 дней, то выборку сделать за 10 дней (начиная от сегодня)?
SELECT o.id, o.variant_id,
/* vp.variant_id, */ -- заджойненные id дублировать в выборке не нужно, если, конечно, не хотите наблюдать null-значения по другую сторону присоединения таблицы vp
vp.quantity AS quantity_result,
sum(vp.quantity) over (partition by vp.variant_id) as sum_by_variant_id -- сумма в пределах партиции variant_id
FROM orders AS o
LEFT JOIN variant_products AS vp ON vp.variant_id = o.variant_id
LEFT JOIN products AS p ON p.id = vp.product_id
LEFT JOIN product_types AS pt ON pt.id = p.type_id
/*WHERE */ and pt.id NOT IN (1, 2) -- если напишите в where, то выборка усечется до такого условия с pt.id. Но если напишите это условие в left join, то выберутся все Order, но где pt.id IN (1, 2) будут null значения.
SELECT o.id, o.variant_id,
/* vp.variant_id, */ -- заджойненные id дублировать в выборке не нужно, если, конечно, не хотите наблюдать null-значения по другую сторону присоединения таблицы vp
sum(vp.quantity) as sum_by_variant_id -- сумма в пределах группировки o.id, o.variant_id
FROM orders AS o
LEFT JOIN variant_products AS vp ON vp.variant_id = o.variant_id
LEFT JOIN products AS p ON p.id = vp.product_id
LEFT JOIN product_types AS pt ON pt.id = p.type_id
/*WHERE */ and pt.id NOT IN (1, 2) -- если напишите в where, то выборка усечется до такого условия с pt.id. Но если напишите это условие в left join, то выберутся все Order, но где pt.id IN (1, 2) будут null значения.
group by o.id, o.variant_id /*, vp.variant_id */
select json_build_object('id', A.id, 'status', A.status)
from (select apa.id, apa.status, va.created_at,
row_number() over (partition by va.order_id, apa.sale_type_id order by apa.created_at desc) Rn
from vt.applications va
join orders o on va.order_id = o.id
join cc.additional_projects_actions apa on apa.order_id = va.order_id
and apa.sale_type_id = va.sale_type_id
where o.id = 64
and va.sale_type_id is not null
) A
where A.Rn = 1 -- отсекаем 1 запись - аналог order by apa.created_at desc limit 1 из первоначального запроса
order by A.created_at desc;
const filters = reactive({});
<input v-model="filters.search">
watch(
() => filters.search,
debounce(search => store.commit('setFilters', { search }), 1500)
);
watch(
store.state.filters,
val => Object.assign(filters, val), { immediate: true }
);
Плагин Dimensions замеряет расстояния через canvas. Реализация выглядит достаточно сложно...
Вызов mongoose.model устанавливает имя коллекции, к которой привязана модель, по умолчанию используется имя модели в нижнем регистре во множественном числе.
Источник: https://stackoverflow.com/questions/14183611/mongo...