Commit fea40a22 authored by 李尚科's avatar 李尚科
parents 7cb35009 9db07f47
Pipeline #14990 passed with stage
in 8 seconds
......@@ -13,7 +13,7 @@ class InstitutionService extends Service {
const { ctx } = this;
const user_uuid = ctx.userUuid;
const { cats, ages, lat, lng, address } = input;
const { cats, ages, lat, lng, address, page } = input;
const where_institutions = input.institutions;
// 保存定位记录
if (address && lat && lng) {
......@@ -50,11 +50,27 @@ class InstitutionService extends Service {
const institution_area_list = await this.getInstitutionAreaList(institutions);// 将校区表处理成数组
// const from = { lat, lng };
const area_lbs = await this.computeDistance(institution_area_list, { lat, lng });// 计算距离信息
const institution_areas = await this.findShortestDistanceAreas(institution_area_list, area_lbs);// 查找最短距离并输出
const ret = await this.formatInstitutions(institution_areas);
// const area_lbs = await this.computeDistance(institution_area_list, { lat, lng });// 计算距离信息
const area_distance_list = await this.calcDistance(institution_area_list, { lat, lng }, page);
const area_distance = area_distance_list.rows;
const institution_areas = await this.computeDistance(area_distance, { lat, lng });
for (const i in institution_areas) {
area_distance[i].distance = Number(institution_areas[i].distance) === 0 ? 999999999.0 : parseFloat(institution_areas[i].distance);
area_distance[i].duration = institution_areas[i].duration;
area_distance[i].travel_method = institution_areas[i].travel_method;
area_distance[i].travel_tips = `距我${area_distance[i].distance}km,开车${area_distance[i].duration}分钟`;
if (area_distance[i].travel_method === 'walking') {
area_distance[i].travel_tips = `距我${area_distance[i].distance}km,步行${area_distance[i].duration}分钟`;
}
if (Number(institution_areas[i].distance) === 0 && institution_areas[i].duration === 0) {
area_distance[i].travel_tips = '暂无法计算出距离';
}
}
// const institution_areas = await this.findShortestDistanceAreas(institution_area_list, area_lbs);// 查找最短距离并输出
// const ret = await this.formatInstitutions(institution_areas);
const ret = await this.formatInstitutions(area_distance);
return ret;
return { count: area_distance_list.count, rows: ret };
}
/**
......@@ -385,6 +401,60 @@ class InstitutionService extends Service {
}
// 先本地用公式计算距离,然后分页,取对应的再去调腾讯接口
async calcDistance(lbs_array, from_gps, page = 1) {
const { ctx } = this;
if (!Array.isArray(lbs_array) || lbs_array.length === 0) {
return { count: 0, rows: [] };
}
const calcHandle = [];
for (const v of lbs_array) {
calcHandle.push(ctx.service.course.lbs.getDistance(v, from_gps));
}
const result = await Promise.all(calcHandle).then(result => {
return result;
}).catch(error => {
ctx.failed(error);
});
let ret = [];
for (const i in result) {
const tmp = lbs_array[i];
tmp.distance = result[i];
ret.push(tmp);
}
const sort = function(a, b) {
return a.distance - b.distance;
};
ret = R.sort(sort)(ret);
const institutions = [];
for (const v of ret) {
if (!institutions[v.id] && !ctx.isEmpty(v)) {
institutions[v.id] = v;
}
}
const results = [];
for (const v of institutions) {
if (!ctx.isEmpty(v)) {
results.push(v);
}
}
if (results.length <= (page - 1) * 10) {
return { count: 0, rows: [] };
}
const end = page * 10 > results.length ? results.length : page * 10;
return {
count: results.length,
rows: R.slice((page - 1) * 10, end)(results),
};
}
/**
*
* @param {*} institution_areas 校区列表
......@@ -456,6 +526,9 @@ class InstitutionService extends Service {
ctx.failed(error);
});
const userCollect = await ctx.classModel.CourseUserCollection.findAll({ where: { user_uuid: ctx.userUuid, is_deleted: 0 } });
const ids = R.pluck('institution_id', userCollect);
let ret = [];
for (const i in institutions) {
const institution = institutions[i];
......@@ -497,6 +570,7 @@ class InstitutionService extends Service {
travel_tips: institution.travel_tips, // TODO
characteristic: institution.characteristic ? institution.characteristic : '',
distance: institution.distance,
is_collected: ids.includes(institution.id) ? 1 : 0,
});
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment