|
@@ -9,9 +9,8 @@ import cn.cslg.pas.common.model.request.QueryRequest;
|
|
|
import cn.cslg.pas.common.model.request.StringRequest;
|
|
|
import cn.cslg.pas.common.utils.CacheUtils;
|
|
|
import cn.cslg.pas.common.utils.LoginUtils;
|
|
|
-import cn.cslg.pas.common.vo.business.EventCountVO;
|
|
|
-import cn.cslg.pas.common.vo.business.EventVO;
|
|
|
-import cn.cslg.pas.common.vo.business.ReportProjectVO;
|
|
|
+import cn.cslg.pas.common.vo.DepartmentVO;
|
|
|
+import cn.cslg.pas.common.vo.business.*;
|
|
|
import cn.cslg.pas.domain.business.*;
|
|
|
import cn.cslg.pas.exception.UnLoginException;
|
|
|
import cn.cslg.pas.exception.XiaoShiException;
|
|
@@ -44,7 +43,7 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
-public class ReportProjectService extends ServiceImpl<ReportProjectMapper,ReportProject> implements Business {
|
|
|
+public class ReportProjectService extends ServiceImpl<ReportProjectMapper, ReportProject> implements Business {
|
|
|
@Autowired
|
|
|
private EventMapper eventMapper;
|
|
|
|
|
@@ -86,17 +85,20 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
@Autowired
|
|
|
private LoginUtils loginUtils;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private FollowUpService followUpService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EventService eventService;
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Object queryMessage(QueryRequest queryRequest) throws Exception {
|
|
|
-
|
|
|
- List<String> sqls = formatQueryService.reSqls(queryRequest,"event");
|
|
|
+ List<String> sqls = formatQueryService.reSqls(queryRequest, "event");
|
|
|
//根据sql查询事件信息
|
|
|
- List<ReportProjectVO> reportProject = reportProjectMapper.getReportProject(sqls.get(0),sqls.get(1),sqls.get(2));
|
|
|
-
|
|
|
+ List<ReportProjectVO> reportProject = reportProjectMapper.getReportProject(sqls.get(0), sqls.get(1), sqls.get(2));
|
|
|
+ this.loadReportProjectVO(reportProject);
|
|
|
//查询总数
|
|
|
- Long total = eventMapper.getEventCount(sqls.get(0));
|
|
|
-
|
|
|
+ Long total = reportProjectMapper.getReportProjectCount(sqls.get(0));
|
|
|
//装载事件信息
|
|
|
Records records = new Records();
|
|
|
records.setCurrent(queryRequest.getCurrent());
|
|
@@ -106,6 +108,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
return records;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Integer addMessage(Object object, List<MultipartFile> files) {
|
|
@@ -143,8 +146,9 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Object updateMessage(Object object, List<MultipartFile> files) {
|
|
|
|
|
|
- return null;
|
|
|
- }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 查询事件分组信息
|
|
|
*
|
|
@@ -153,14 +157,14 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public Object getGroup(GroupRequest groupRequest,String tableName) throws Exception {
|
|
|
- StringRequest stringRequest =new StringRequest();
|
|
|
- BeanUtils.copyProperties(groupRequest,stringRequest);
|
|
|
- List<String> sqls = formatQueryService.reSqls(stringRequest,tableName);
|
|
|
+ public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
|
|
|
+ StringRequest stringRequest = new StringRequest();
|
|
|
+ BeanUtils.copyProperties(groupRequest, stringRequest);
|
|
|
+ List<String> sqls = formatQueryService.reSqls(stringRequest, tableName);
|
|
|
//格式化 分组
|
|
|
- GroupConfig groupConfig=null;
|
|
|
+ GroupConfig groupConfig = null;
|
|
|
if (groupRequest.getGroupBy() != null) {
|
|
|
- String json = CommonService.readJsonFile(tableName+".json");
|
|
|
+ String json = CommonService.readJsonFile(tableName + ".json");
|
|
|
List<GroupConfig> groupConfigs = JSON.parseArray(json, GroupConfig.class);
|
|
|
groupConfig = groupConfigs.stream().filter(item -> groupRequest.getGroupBy().equals(item.getField())).findFirst().orElse(null);
|
|
|
if (groupConfig == null) {
|
|
@@ -170,7 +174,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
|
|
|
//返回分组数据
|
|
|
QueryGroupImp queryGroupImp = queryGroupFactory.getClass(groupConfig.getGroupClass());
|
|
|
- ReGroupDataVO reGroupDataVO = queryGroupImp.getGroup(sqls, tableName, groupConfig.getSqlField());
|
|
|
+ ReGroupDataVO reGroupDataVO = queryGroupImp.getGroup(sqls, tableName, groupConfig.getSqlField());
|
|
|
|
|
|
//装载数据
|
|
|
GroupVO groupVO = new GroupVO();
|
|
@@ -185,6 +189,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public Object addMessage(Object object) {
|
|
|
//TODO 校验参数
|
|
|
//object to reportProjectDTO
|
|
@@ -200,10 +205,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
if (reportProjectDTO.getReportType().equals(null)) {
|
|
|
throw new XiaoShiException("报告类型不能为空");
|
|
|
}
|
|
|
- //报告状态
|
|
|
- if (reportProjectDTO.getStauts().equals(null)) {
|
|
|
- throw new XiaoShiException("报告状态不能为空");
|
|
|
- }
|
|
|
+
|
|
|
//获取登陆人信息 用于设置创建人
|
|
|
PersonnelVO personnelVO = new PersonnelVO();
|
|
|
try {
|
|
@@ -211,6 +213,7 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
} catch (Exception e) {
|
|
|
throw new UnLoginException("未登录");
|
|
|
}
|
|
|
+ String userId =personnelVO.getId();
|
|
|
/**
|
|
|
* 装载project
|
|
|
*/
|
|
@@ -220,12 +223,39 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
project.setTenantId(personnelVO.getTenantId());
|
|
|
project.insert();
|
|
|
/**
|
|
|
+ * 装载和报告关联
|
|
|
+ */
|
|
|
+ if(reportProjectDTO.getAssoReportId()!=null) {
|
|
|
+ AssoProject assoProject = new AssoProject();
|
|
|
+ assoProject.setAssoProjectId(project.getId());
|
|
|
+ assoProject.setAssoProjectType(2);
|
|
|
+ assoProject.setProjectId(reportProjectDTO.getAssoReportId());
|
|
|
+ assoProject.setProjectType(2);
|
|
|
+ assoProject.insert();
|
|
|
+ }
|
|
|
+ /**
|
|
|
* 装载reportProject
|
|
|
*/
|
|
|
ReportProject reportProject = new ReportProject();
|
|
|
BeanUtils.copyProperties(reportProjectDTO, reportProject);
|
|
|
- reportProject.setProject_id(project.getId());
|
|
|
+ reportProject.setProjectId(project.getId());
|
|
|
+ reportProject.setStatus(0);
|
|
|
reportProject.insert();
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 装载后续事项和project关联
|
|
|
+ */
|
|
|
+ if (reportProjectDTO.getFollowUps() != null && reportProjectDTO.getFollowUps().size() != 0) {
|
|
|
+ List<FollowUp> followUps = new ArrayList<>();
|
|
|
+ reportProjectDTO.getFollowUps().forEach(item -> {
|
|
|
+ FollowUp followUp = new FollowUp();
|
|
|
+ BeanUtils.copyProperties(item, followUp);
|
|
|
+ followUp.setCreateId(userId);
|
|
|
+ followUps.add(followUp);
|
|
|
+ });
|
|
|
+ followUpService.saveBatch(followUps);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 装载事件与project关联
|
|
|
*/
|
|
@@ -291,48 +321,52 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 装载事件返回类
|
|
|
+ * 装载报告返回类
|
|
|
*
|
|
|
- * @param eventVOs
|
|
|
+ * @param reportProjectVOs
|
|
|
*/
|
|
|
- private void loadEvent(List<EventVO> eventVOs) throws IOException {
|
|
|
+ private void loadReportProjectVO(List<ReportProjectVO> reportProjectVOs) throws IOException {
|
|
|
List<String> createIds = new ArrayList<>();
|
|
|
+ List<String> departmentIds = new ArrayList<>();
|
|
|
+ List<DepartmentVO> departmentVOS = new ArrayList<>();
|
|
|
List<Integer> clientIds = new ArrayList<>();
|
|
|
List<Integer> ids = new ArrayList<>();
|
|
|
- List<EventCountVO> eventCountVOS = new ArrayList<>();
|
|
|
- //获得所有文件的guid
|
|
|
- eventVOs.forEach(
|
|
|
+ List<Client> clients = new ArrayList<>();
|
|
|
+ List<Event> events =new ArrayList<>();
|
|
|
+ List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
|
|
|
+ reportProjectVOs.forEach(
|
|
|
item -> {
|
|
|
- if (item.getClientId() != null) {
|
|
|
- clientIds.add(item.getClientId());
|
|
|
- }
|
|
|
|
|
|
if (item.getCreateId() != null) {
|
|
|
createIds.add(item.getCreateId());
|
|
|
}
|
|
|
+
|
|
|
+ if (item.getHeadId() != null) {
|
|
|
+ createIds.add(item.getHeadId());
|
|
|
+ }
|
|
|
+
|
|
|
if (item.getId() != null) {
|
|
|
ids.add(item.getId());
|
|
|
}
|
|
|
+
|
|
|
+ if (item.getDepartmentId() != null) {
|
|
|
+ departmentIds.add(item.getDepartmentId());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (item.getEntrustType() != null && item.getEntrustType().equals(2)) {
|
|
|
+ departmentIds.add(item.getEntrustId());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (item.getEntrustType() != null && item.getEntrustType().equals(1)) {
|
|
|
+ clientIds.add(Integer.parseInt(item.getEntrustId()));
|
|
|
+ }
|
|
|
}
|
|
|
);
|
|
|
|
|
|
List<Personnel> personnels = new ArrayList<>();
|
|
|
- List<Client> clients = new ArrayList<>();
|
|
|
List<String> guids = new ArrayList<>();
|
|
|
List<SystemFile> systemFiles = new ArrayList<>();
|
|
|
- List<AssoEventFile> assoEventFiles = new ArrayList<>();
|
|
|
-
|
|
|
- if (ids.size() != 0) {
|
|
|
- //根据事件id获得事件文件关联表
|
|
|
- LambdaQueryWrapper<AssoEventFile> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
- queryWrapper.in(AssoEventFile::getEventId, ids);
|
|
|
- assoEventFiles = assoEventFileService.list(queryWrapper);
|
|
|
- guids = assoEventFiles.stream().map(AssoEventFile::getFileGuid).collect(Collectors.toList());
|
|
|
-
|
|
|
-
|
|
|
- //根据事件id分组查询事件关联专题库或报告数量
|
|
|
- eventCountVOS = assoProjectEventMapper.getEventProjectCount(ids);
|
|
|
- }
|
|
|
+ List<AssoProjectFile> assoEventFiles = new ArrayList<>();
|
|
|
|
|
|
//查询创建人名称
|
|
|
if (createIds.size() != 0) {
|
|
@@ -341,91 +375,136 @@ public class ReportProjectService extends ServiceImpl<ReportProjectMapper,Report
|
|
|
personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
|
|
|
}
|
|
|
|
|
|
- //查询客户名称
|
|
|
- if (clientIds.size() != 0) {
|
|
|
- String res = permissionService.getClientByIdsFromPCS(clientIds);
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(res);
|
|
|
- clients = JSONObject.parseArray(jsonObject.getString("data"), Client.class);
|
|
|
+ //查询部门名称
|
|
|
+ if (departmentIds.size() != 0) {
|
|
|
+ String json = permissionService.getDepartmentByIdsFromPCS(departmentIds);
|
|
|
+ departmentVOS = JSON.parseArray(json, DepartmentVO.class);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+ if (ids.size() != 0) {
|
|
|
+ //根据事件id获得专利数据库文件关联表
|
|
|
+ LambdaQueryWrapper<AssoProjectFile> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.in(AssoProjectFile::getProjectId, ids);
|
|
|
+ assoEventFiles = assoProjectFileService.list(queryWrapper);
|
|
|
+ guids = assoEventFiles.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
//查询文件
|
|
|
if (guids.size() != 0) {
|
|
|
String res = fileManagerService.getSystemFileFromFMS(guids);
|
|
|
+
|
|
|
+ systemFiles = JSONObject.parseArray(res, SystemFile.class);
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询客户名称
|
|
|
+ if (clientIds.size() != 0) {
|
|
|
+ String res = permissionService.getClientByIdsFromPCS(clientIds);
|
|
|
JSONObject jsonObject = JSONObject.parseObject(res);
|
|
|
- systemFiles = JSONObject.parseArray(jsonObject.getString("data"), SystemFile.class);
|
|
|
+ clients = JSONObject.parseArray(jsonObject.getString("data"), Client.class);
|
|
|
}
|
|
|
|
|
|
- //查询关联报告或专题库
|
|
|
+ //查询应用场景、调查类型、事件和专题库的关联
|
|
|
+ if (ids != null && ids.size() > 0) {
|
|
|
+ LambdaQueryWrapper<AssoProjectEvent> assoProjectEventQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ assoProjectEventQueryWrapper.in(AssoProjectEvent::getProjectId, ids);
|
|
|
+ assoProjectEvents = assoProjectEventService.list(assoProjectEventQueryWrapper);
|
|
|
+
|
|
|
+ //查询事件
|
|
|
+ if (assoProjectEvents != null && assoProjectEvents.size() != 0) {
|
|
|
+ List<Integer> eventIds = assoProjectEvents.stream().filter(item -> item.getEventId() != null).map(AssoProjectEvent::getEventId).collect(Collectors.toList());
|
|
|
+ if (eventIds.size() != 0) {
|
|
|
+ LambdaQueryWrapper<Event> eventQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ eventQueryWrapper.in(Event::getEventId, eventIds);
|
|
|
+ events = eventService.list(eventQueryWrapper);
|
|
|
+ }
|
|
|
|
|
|
- //查询应用场景
|
|
|
- List<SystemDict> systemDictList = systemDictService.getSystemDictListByType(Arrays.asList("ENTERPRISE_APPLICATION_SCENARIO"));
|
|
|
|
|
|
- //查询专题库数量
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
//装载信息
|
|
|
- for (EventVO eventVO : eventVOs) {
|
|
|
+ for (ReportProjectVO reportProjectVO : reportProjectVOs) {
|
|
|
+
|
|
|
//装载人员信息
|
|
|
- Personnel personnel = personnels.stream().filter(item -> item.getId().equals(eventVO.getCreateId())).findFirst().orElse(null);
|
|
|
+ Personnel personnel = personnels.stream().filter(item -> item.getId().equals(reportProjectVO.getCreateId())).findFirst().orElse(null);
|
|
|
if (personnel != null) {
|
|
|
- eventVO.setCreateName(personnel.getPersonnelName());
|
|
|
- }
|
|
|
-
|
|
|
- //装载客户信息
|
|
|
- Client client = clients.stream().filter(item -> item.getId().equals(eventVO.getClientId())).findFirst().orElse(null);
|
|
|
- if (client != null) {
|
|
|
- eventVO.setClientName(client.getName());
|
|
|
+ reportProjectVO.setCreateName(personnel.getPersonnelName());
|
|
|
}
|
|
|
|
|
|
- //装载场景
|
|
|
- SystemDict systemDict = systemDictList.stream().filter(item -> item.getValue().equals(eventVO.getScenarioId().toString())).findFirst().orElse(null);
|
|
|
- if (systemDict != null) {
|
|
|
- eventVO.setScenarioName(systemDict.getLabel());
|
|
|
+ if (reportProjectVO.getHeadId() != null) {
|
|
|
+ Personnel headPersonnel = personnels.stream().filter(item -> item.getId().equals(reportProjectVO.getHeadId())).findFirst().orElse(null);
|
|
|
+ if (headPersonnel != null) {
|
|
|
+ reportProjectVO.setHeadName(personnel.getPersonnelName());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//装载文件信息
|
|
|
- List<AssoEventFile> assoEventFileTemp = assoEventFiles.stream().filter(item -> item.getEventId().equals(eventVO.getId())).collect(Collectors.toList());
|
|
|
- if (assoEventFileTemp.size() != 0) {
|
|
|
- List<String> guidTemp = assoEventFileTemp.stream().map(AssoEventFile::getFileGuid).collect(Collectors.toList());
|
|
|
+ List<AssoProjectFile> assoProjectFileTemp = assoEventFiles.stream().filter(item -> item.getProjectId().equals(reportProjectVO.getId())).collect(Collectors.toList());
|
|
|
+ if (assoProjectFileTemp.size() != 0) {
|
|
|
+ List<String> guidTemp = assoProjectFileTemp.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
|
|
|
if (guidTemp.size() != 0) {
|
|
|
List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
|
|
|
if (systemFileTemp.size() != 0) {
|
|
|
- eventVO.setSystemFileList(systemFileTemp);
|
|
|
+ reportProjectVO.setSystemFileList(systemFileTemp);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
- //装载专题库或报告数量
|
|
|
- if (eventCountVOS.size() != 0) {
|
|
|
- //专题库数量
|
|
|
- EventCountVO eventCountVO1 = eventCountVOS.stream().filter(item ->
|
|
|
- item.getEventId().equals(eventVO.getId()) && item.getProjectType().equals(1)).findFirst().orElse(null);
|
|
|
+ //装载部门
|
|
|
+ if (reportProjectVO.getDepartmentId() != null) {
|
|
|
+ DepartmentVO departmentVO = departmentVOS.stream().filter(item -> item.getDepartId().equals(reportProjectVO.getDepartmentId())).findFirst().orElse(null);
|
|
|
+ if (departmentVO != null) {
|
|
|
+ reportProjectVO.setDepartmentName(departmentVO.getDepartName());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- //报告数量
|
|
|
- EventCountVO eventCountVO2 = eventCountVOS.stream().filter(item ->
|
|
|
- item.getEventId().equals(eventVO.getId()) && item.getProjectType().equals(2)).findFirst().orElse(null);
|
|
|
+ //裝載委托方
|
|
|
+ if (reportProjectVO.getEntrustType() != null) {
|
|
|
+ //当委托方为客户时
|
|
|
+ if (reportProjectVO.getEntrustType().equals(1)) {
|
|
|
+ Client client = clients.stream().filter(item -> item.getId().equals(Integer.parseInt(reportProjectVO.getEntrustId()))).findFirst().orElse(null);
|
|
|
|
|
|
- //设置专题库数量
|
|
|
- if (eventCountVO1 != null) {
|
|
|
- eventVO.setPatentProjectNum(eventCountVO1.getProjectCount());
|
|
|
- } else {
|
|
|
- eventVO.setPatentProjectNum(0);
|
|
|
- }
|
|
|
+ if (client != null) {
|
|
|
+ reportProjectVO.setEntrustName(client.getName());
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if (reportProjectVO.getEntrustType().equals(2)) {
|
|
|
+ DepartmentVO departmentVO = departmentVOS.stream().filter(item -> item.getDepartId().equals(reportProjectVO.getEntrustId())).findFirst().orElse(null);
|
|
|
|
|
|
- //设置报告数量
|
|
|
- if (eventCountVO2 != null) {
|
|
|
- eventVO.setReportProjectNum(eventCountVO2.getProjectCount());
|
|
|
- } else {
|
|
|
- eventVO.setReportProjectNum(0);
|
|
|
+ if (departmentVO != null) {
|
|
|
+ reportProjectVO.setEntrustName(departmentVO.getDepartName());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- } else {
|
|
|
- eventVO.setReportProjectNum(0);
|
|
|
- eventVO.setPatentProjectNum(0);
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
+ //装载事件
|
|
|
+ List<Integer> eventIds = new ArrayList<>();
|
|
|
+ List<String> eventTmpNames = new ArrayList<>();
|
|
|
+ if (assoProjectEvents != null) {
|
|
|
+ List<AssoProjectEvent> assoProjectEventTmps = assoProjectEvents.stream().filter(item -> item.getProjectId().equals(reportProjectVO.getId())).collect(Collectors.toList());
|
|
|
|
|
|
+ if (assoProjectEventTmps.size() != 0) {
|
|
|
+ //过滤出事件
|
|
|
+ eventIds = assoProjectEventTmps.stream().filter(item -> item.getEventId() != null).map(AssoProjectEvent::getEventId).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<Integer> eventIdsFilter = eventIds;
|
|
|
+
|
|
|
+ List<Event> eventTmps = events.stream().filter(item -> eventIdsFilter.contains(item.getId())).collect(Collectors.toList());
|
|
|
+ eventTmpNames = eventTmps.stream().map(Event::getName).collect(Collectors.toList());
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ reportProjectVO.setEventIds(eventIds);
|
|
|
+ reportProjectVO.setEventNames(eventTmpNames);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|