247 lines
8.6 KiB
JavaScript
Raw Normal View History

2026-07-27 11:28:33 +08:00
const validator = require('../../utils/validator.js')
2026-07-31 16:22:09 +08:00
const {
AUTOMATION_DELAY_KEYS,
DEFAULT_AUTOMATION_CONFIG,
validateAutomationDelayConfig,
} = require("../automation/config");
2026-07-27 11:28:33 +08:00
let db = "";
module.exports = async (item, mongodb) => {
db = mongodb;
switch (item.type) {
case "getHlwOrderConfig":
return await getHlwOrderConfig(item);
case "updateHlwOrderConfig":
return await updateHlwOrderConfig(item);
case "getHlwConfig":
return await getHlwConfig(item);
case "changeHlwConfig":
return await changeHlwConfig(item);
case "getHlwConfigGroup":
return await getHlwConfigGroup(item);
case "getHlwConfigByCorpIds":
return await getHlwConfigByCorpIds(item);
}
};
async function getHlwOrderConfig({ corpId }) {
try {
const res = await db.collection("hlw-config").findOne(
{ corpId },
{
projection: {
payDuration: 1,
acceptDuration: 1,
consultationDuration: 1,
medicinePurchaseRxDuration: 1,
emsExpressDiscountFee: 1,
emsExpressFee: 1,
fengNiaoExpressDiscountFee: 1,
fengNiaoExpressFee: 1,
firstSubmitRxIntervel: 1,
2026-07-31 16:22:09 +08:00
submitRxInterval: 1,
autoAcceptOrder: 1,
autoOpenRx: 1,
autoPassRx: 1,
autoAcceptDelayMinSeconds: 1,
autoAcceptDelayMaxSeconds: 1,
autoOpenRxDelayMinSeconds: 1,
autoOpenRxDelayMaxSeconds: 1,
autoPassRxDelayMinSeconds: 1,
autoPassRxDelayMaxSeconds: 1
2026-07-27 11:28:33 +08:00
}
});
if (!res) {
return { success: false, message: "未找到配置" };
}
2026-07-31 16:22:09 +08:00
return {
success: true,
data: { ...DEFAULT_AUTOMATION_CONFIG, ...res },
message: "获取配置成功",
};
2026-07-27 11:28:33 +08:00
} catch (e) {
return { success: false, message: e.message }
}
}
async function updateHlwOrderConfig(ctx) {
try {
2026-07-31 16:22:09 +08:00
const {
payDuration,
acceptDuration,
consultationDuration,
medicinePurchaseRxDuration,
emsExpressDiscountFee,
emsExpressFee,
fengNiaoExpressDiscountFee,
fengNiaoExpressFee,
presOpen,
autoAcceptOrder,
autoOpenRx,
autoPassRx,
} = ctx;
2026-07-27 11:28:33 +08:00
const data = {}
if (typeof payDuration == 'number') {
const [valid, message] = validator.verifyNumber(payDuration, "支付时长", 0, 5, 60, true, true);
if (!valid) {
return { success: false, message };
}
data.payDuration = payDuration;
}
if (typeof acceptDuration == 'number') {
const [valid, message] = validator.verifyNumber(acceptDuration, "接诊时长", 0, 5, 120, true, true);
if (!valid) {
return { success: false, message };
}
data.acceptDuration = acceptDuration;
}
if (typeof consultationDuration == 'number') {
const [valid, message] = validator.verifyNumber(consultationDuration, "订单持续时长", 0, 10, 60 * 8, true, true);
if (!valid) {
return { success: false, message };
}
data.consultationDuration = consultationDuration;
}
if (typeof medicinePurchaseRxDuration == 'number') {
const [valid, message] = validator.verifyNumber(medicinePurchaseRxDuration, "配药处方持续时长", 0, 10, 60 * 8, true, true);
if (!valid) {
return { success: false, message };
}
data.medicinePurchaseRxDuration = medicinePurchaseRxDuration;
}
if (typeof presOpen == 'boolean') {
data.presOpen = presOpen;
}
2026-07-31 16:22:09 +08:00
if (typeof autoAcceptOrder === 'boolean') {
data.autoAcceptOrder = autoAcceptOrder;
}
if (typeof autoOpenRx === 'boolean') {
data.autoOpenRx = autoOpenRx;
}
if (typeof autoPassRx === 'boolean') {
data.autoPassRx = autoPassRx;
}
if (AUTOMATION_DELAY_KEYS.some((key) => key in ctx)) {
const current = await db.collection("hlw-config").findOne(
{ corpId: ctx.corpId },
{
projection: Object.fromEntries(
AUTOMATION_DELAY_KEYS.map((key) => [key, 1])
),
}
);
const validation = validateAutomationDelayConfig(ctx, current || {});
if (!validation.success) {
return validation;
}
Object.assign(data, validation.data);
}
2026-07-27 11:28:33 +08:00
if (typeof emsExpressDiscountFee == 'number' || typeof emsExpressFee == 'number') {
const [valid, message] = validator.verifyNumber(emsExpressDiscountFee, "邮政快递优惠费用", 2, 0, 9999, true, true);
if (!valid) {
return { success: false, message };
}
const [valid1, message1] = validator.verifyNumber(emsExpressFee, "邮政快递费用", 2, 0, 9999, true, true);
if (!valid1) {
return { success: false, message: message1 };
}
data.emsExpressDiscountFee = Number(emsExpressDiscountFee);
data.emsExpressFee = Number(emsExpressFee);
if (!(data.emsExpressFee >= data.emsExpressDiscountFee)) {
return { success: false, message: "邮政快递优惠费用不能大于邮政快递费用" };
}
}
if (typeof fengNiaoExpressDiscountFee == 'number' || typeof fengNiaoExpressFee == 'number') {
const [valid, message] = validator.verifyNumber(fengNiaoExpressDiscountFee, "蜂鸟配送优惠费用", 2, 0, 9999, true, true);
if (!valid) {
return { success: false, message };
}
const [valid1, message1] = validator.verifyNumber(fengNiaoExpressFee, "蜂鸟配送费用", 2, 0, 9999, true, true);
if (!valid1) {
return { success: false, message: message1 };
}
data.fengNiaoExpressDiscountFee = Number(fengNiaoExpressDiscountFee);
data.fengNiaoExpressFee = Number(fengNiaoExpressFee);
if (!(data.fengNiaoExpressFee >= data.fengNiaoExpressDiscountFee)) {
return { success: false, message: "蜂鸟配送优惠费用不能大于蜂鸟配送费用" };
}
}
if (Object.keys(data).length === 0) {
return { success: false, message: "没有需要更新的配置" };
}
const res = await db.collection("hlw-config").updateOne({ corpId: ctx.corpId }, { $set: data });
if (res.modifiedCount === 0) {
return { success: false, message: "更新配置失败" };
}
return { success: true, message: "更新配置成功" };
} catch (e) {
return { success: false, message: e.message }
}
}
async function getHlwConfig({ corpId }) {
try {
if (typeof corpId !== 'string' || corpId.trim() === '') {
return { success: false, message: 'corpId不能为空' }
}
const res = await db.collection("hlw-config").findOne({ corpId: corpId.trim() });
return { success: true, data: res, message: '获取配置成功' }
} catch (e) {
return { success: false, message: e.message }
}
}
async function changeHlwConfig({ corpId, data }) {
try {
if (typeof corpId !== 'string' || corpId.trim() === '') {
return { success: false, message: 'corpId不能为空' }
}
if (Object.prototype.toString.call(data) !== '[object Object]' || Object.keys(data).length === 0) {
return { success: false, message: 'data不能为空' }
}
const trimmedCorpId = corpId.trim();
const now = Date.now();
const res = await db.collection("hlw-config").updateOne(
{ corpId: trimmedCorpId },
{
$set: { ...data, updateTime: now },
$setOnInsert: { createTime: now }
},
{ upsert: true }
);
const message = res.upsertedCount > 0 ? '新增配置成功' : '更新配置成功';
return { success: true, data: res, message, id: res.upsertedId || res.modifiedCount }
} catch (e) {
return { success: false, message: e.message }
}
}
async function getHlwConfigGroup({ group }) {
try {
if (typeof group !== 'string' || group.trim() === '') {
return { success: false, message: 'group不能为空' }
}
const res = await db.collection("hlw-config").find({ group }, { projection: { _id: 0, key: 1, description: 1, list: 1 } }).toArray();
return { success: true, data: res, message: "获取配置成功" }
} catch (e) {
return { success: false, message: e.message }
}
}
async function getHlwConfigByCorpIds(ctx) {
try {
const corpIds = Array.isArray(ctx.corpIds) ? ctx.corpIds.filter(i => typeof i == 'string' && i.trim() !== '') : [];
if (corpIds.length === 0) {
return { success: false, message: 'corpIds不能为空' }
}
const trimmedCorpIds = corpIds.map(i => i.trim());
const res = await db.collection("hlw-config").find({ corpId: { $in: trimmedCorpIds } }, { projection: { _id: 0, key: 1, description: 1, list: 1 } }).toArray();
return { success: true, data: res, message: "获取配置成功" }
} catch (e) {
return { success: false, message: e.message }
}
2026-07-31 16:22:09 +08:00
}