

导入功能在每一个系统中都很常见,在白码平台中,导入excel中的数据可以用白码平台自带的导入功能来完成,然后使用编译功能来去重,最后将excel中的数据放入数据表之中
对同公司名的信息进行去重,或同公司内的同名联系人进行去重,并将公司和联系人关联起来
1.创建三张表,一张公司表,一张客户表,一张导入模板表,建立一个导入模板,并放入导入模板表中,并提供一个导入案例
1、在功能流程中新增导入功能
2、交互中属性的别名,要和Excel表中的属性一一对应
3、获取导入模板的文件名要与模板的文件名一致
4.在编程中写出以下代码,将导入的数据去重,以及将联系人和公司关联起来
代码如下: 复制代码
async function runProcess($model = model, $plugin = plugin, $params = params) {
let dataList = $model.getValue("63d899f57483b9394fe334d3")//获取导入信息
let companyList = dataList.map(item => item["field_1675139589761"]) // 提取导入信息中的公司信息
let contactsList = dataList.map(item => item["field_1675139591760"]) // 提取导入信息中的联系人信息
companyList = Array.from(new Set((companyList))) //对公司信息去重
let insetCompanyList = []//导入的公司信息数组
let insetContactsList = [] //导入的联系人信息数组
/* -------------------------------------处理公司信息 ---------------------------------------------------*/
let companyData = await $plugin.data.queryData("63d79a057c95951e53fc206d", {
"63d79aaf7c95951e53fc2287": companyList
}, { all: true })//查询重复的对象
let companyMap = {} //储存公司信息重复的对象
companyData.forEach(item => {
companyMap[item["63d79aaf7c95951e53fc2287"]] = item
})//对公司信息进行储存
companyList.forEach(item => {
let tempCompanyData = companyMap[item] || undefined // 获取重复的公司数据
//如果数据库中没有存储此公司信息,则将公司信息储存进数据库中
if (!tempCompanyData) {
insetCompanyList.push({
"63d79aaf7c95951e53fc2287": item //公司名称 string
})
}
})
//将公司信息储存进数据库中
await $plugin.data.bulk("63d79a057c95951e53fc206d", {
insert: insetCompanyList
})
/* -------------------------------------处理联系人信息 ---------------------------------------------------*/
companyData = await $plugin.data.queryData("63d79a057c95951e53fc206d", {
"63d79aaf7c95951e53fc2287": companyList
}, { all: true })//重新查询数据库中公司信息
let contactsyData = await $plugin.data.queryData("63d79a0ce453bf1e54179064", {
"63d79ac0e453bf1e541792fa": contactsList
}, { all: true })//查找数据库中的联系人信息
let contactsyMap = {} //储存联系人信息重复的对象
contactsyData.forEach(item => {
contactsyMap[item["63d79ac0e453bf1e541792fa"] + item["63d79ad0e453bf1e54179315"]] = item//将联系人和公司结合充当KEY进行储存
})
dataList.forEach(item => {
let companyTempData = companyData.find(o => {
return o["63d79aaf7c95951e53fc2287"] == item["field_1675139589761"]//查找联系人所关联的公司
});
let contactsyTempData = contactsyMap[item["field_1675139591760"] + companyTempData._id] || undefined// 获取重复的联系人数据
//如果数据库中没有存储此联系人信息,则将该联系人信息储存进数据库中
if (!contactsyTempData) {
insetContactsList.push({
"63d79ac0e453bf1e541792fa": item["field_1675139591760"],//联系人 string
"63d79ad0e453bf1e54179315": companyTempData._id,//公司 relate
"63d88f1f1f4bfe394e16819f": item["field_1675139592026"],//联系方式 string
})
}
})
//将联系人信息存储到数据库中
await $plugin.data.bulk("63d79a0ce453bf1e54179064", {
insert: insetContactsList
})
}
5、效果展示