package com.ruoyi.basic.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.basic.dto.BusinessDescriptionDto;
|
import com.ruoyi.basic.dto.BusinessOpportunityDto;
|
import com.ruoyi.basic.dto.StorageBlobDTO;
|
import com.ruoyi.basic.dto.StorageBlobVO;
|
import com.ruoyi.basic.enums.ApplicationTypeEnum;
|
import com.ruoyi.basic.enums.RecordTypeEnum;
|
import com.ruoyi.basic.mapper.AreaMapper;
|
import com.ruoyi.basic.mapper.BusinessDescriptionMapper;
|
import com.ruoyi.basic.mapper.BusinessOpportunityMapper;
|
import com.ruoyi.basic.pojo.Area;
|
import com.ruoyi.basic.pojo.BusinessDescription;
|
import com.ruoyi.basic.pojo.BusinessOpportunity;
|
import com.ruoyi.basic.service.BusinessOpportunityService;
|
import com.ruoyi.basic.utils.FileUtil;
|
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.framework.security.LoginUser;
|
import com.ruoyi.framework.web.domain.R;
|
import com.ruoyi.project.system.domain.SysNotice;
|
import com.ruoyi.project.system.mapper.SysNoticeMapper;
|
import com.ruoyi.project.system.service.impl.UnipushService;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 商机管理 服务实现类
|
* </p>
|
*
|
* @author 芯导软件(江苏)有限公司
|
* @since 2026-05-07 04:46:10
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportunityMapper, BusinessOpportunity> implements BusinessOpportunityService {
|
|
private final BusinessOpportunityMapper businessOpportunityMapper;
|
private final AreaMapper areaMapper;
|
private final BusinessDescriptionMapper businessDescriptionMapper;
|
private final UnipushService unipushService;
|
private final SysNoticeMapper sysNoticeMapper;
|
private final FileUtil fileUtil;
|
|
@Override
|
public IPage<BusinessOpportunityDto> listPage(Page page, BusinessOpportunityDto businessOpportunityDto) {
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
IPage<BusinessOpportunityDto> businessOpportunityDtoIPage = businessOpportunityMapper.listPage(page, businessOpportunityDto);
|
|
businessOpportunityDtoIPage.getRecords().forEach(opportunity -> {
|
ArrayList<StorageBlobVO> storageBlobVOS = new ArrayList<>();
|
// 查询业务描述列表
|
List<BusinessDescription> businessDescriptions = businessDescriptionMapper.selectList(
|
new LambdaQueryWrapper<BusinessDescription>()
|
.eq(BusinessDescription::getBusinessOpportunityId, opportunity.getId())
|
.orderByDesc(BusinessDescription::getCreateTime)
|
);
|
|
// 收集每个业务描述的文件
|
if (businessDescriptions != null && !businessDescriptions.isEmpty()) {
|
businessDescriptions.forEach(description -> {
|
List<StorageBlobVO> files = fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(
|
ApplicationTypeEnum.FILE,
|
RecordTypeEnum.BUSINESS_DESCRIPTION,
|
Long.valueOf(description.getId())
|
);
|
if (files != null && !files.isEmpty()) {
|
storageBlobVOS.addAll(files);
|
}
|
});
|
}
|
|
// 查询商机主表的文件
|
List<StorageBlobVO> opportunityFiles = fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(
|
ApplicationTypeEnum.FILE,
|
RecordTypeEnum.BUSINESS_OPPORTUNITY,
|
opportunity.getId()
|
);
|
if (opportunityFiles != null && !opportunityFiles.isEmpty()) {
|
storageBlobVOS.addAll(opportunityFiles);
|
}
|
|
opportunity.setBusinessCommonFiles(storageBlobVOS);
|
opportunity.setBusinessDescription(businessDescriptions);
|
});
|
return businessOpportunityDtoIPage;
|
|
}
|
|
@Override
|
public List<Area> getProvinceList() {
|
return areaMapper.selectList(new LambdaQueryWrapper<Area>().eq(Area::getLevel,1).eq(Area::getParentId,0));
|
}
|
|
@Override
|
public List<Area> getCityList(Integer provinceId) {
|
return areaMapper.selectList(new LambdaQueryWrapper<Area>().eq(Area::getLevel,2).eq(Area::getParentId,provinceId));
|
}
|
|
@Override
|
public R add(BusinessOpportunityDto businessOpportunity) {
|
this.save(businessOpportunity);
|
BusinessDescription businessDescription = new BusinessDescription();
|
BeanUtils.copyProperties(businessOpportunity, businessDescription);
|
businessDescription.setBusinessOpportunityId(businessOpportunity.getId());
|
// 迁移临时文件到正式文件
|
// commonFileService.migrateTempFilesToFormal(businessOpportunity.getId(), businessOpportunity.getTempFileIds());
|
ArrayList<StorageBlobDTO> storageBlobDTOS = new ArrayList<>();
|
for (StorageBlobVO businessCommonFile : businessOpportunity.getBusinessCommonFiles()) {
|
StorageBlobDTO storageBlobDTO = new StorageBlobDTO();
|
BeanUtils.copyProperties(businessCommonFile, storageBlobDTO);
|
storageBlobDTOS.add(storageBlobDTO);
|
}
|
fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.BUSINESS_OPPORTUNITY, businessOpportunity.getId(), storageBlobDTOS);
|
// 推送消息
|
List<SysNotice> sysNoticeList = new ArrayList<>();
|
SysNotice sysNotice = new SysNotice();
|
sysNotice.setNoticeTitle("业务员 "+ businessOpportunity.getEntryPerson());
|
sysNotice.setNoticeContent("新增客户 " + businessOpportunity.getCustomerName() + " 金额 "+ businessOpportunity.getContractAmount());
|
sysNotice.setNoticeType("1");
|
sysNotice.setStatus("0");
|
sysNotice.setSenderId(SecurityUtils.getUserId());
|
// 推送给谁 需要待定
|
sysNotice.setConsigneeId(105L);
|
sysNotice.setAppJumpPath("pages/opportunityManagement/index");
|
sysNoticeMapper.insert(sysNotice);
|
sysNoticeList.add(sysNotice);
|
unipushService.sendClientMessage(sysNoticeList);
|
return businessDescriptionMapper.insert(businessDescription) > 0 ? R.ok() : R.fail();
|
}
|
|
@Override
|
public R addDescription(BusinessDescriptionDto businessDescription) {
|
// 迁移临时文件到正式文件
|
BusinessOpportunity byId = this.getById(businessDescription.getBusinessOpportunityId());
|
if(byId != null){
|
byId.setStatus(businessDescription.getStatus());
|
this.updateById(byId);
|
// 推送消息
|
List<SysNotice> sysNoticeList = new ArrayList<>();
|
SysNotice sysNotice = new SysNotice();
|
sysNotice.setNoticeTitle("业务员 "+ businessDescription.getEntryPerson());
|
sysNotice.setNoticeContent("客户 " + byId.getCustomerName() + " 金额 "+ byId.getContractAmount() + " 状态 " + businessDescription.getStatus());
|
sysNotice.setNoticeType("1");
|
sysNotice.setStatus("0");
|
sysNotice.setSenderId(SecurityUtils.getUserId());
|
sysNotice.setConsigneeId(105L);
|
sysNotice.setAppJumpPath("pages/opportunityManagement/index");
|
sysNoticeMapper.insert(sysNotice);
|
sysNoticeList.add(sysNotice);
|
unipushService.sendClientMessage(sysNoticeList);
|
}
|
int insert = businessDescriptionMapper.insert(businessDescription);
|
|
fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.BUSINESS_DESCRIPTION, Long.valueOf(businessDescription.getId()), businessDescription.getBusinessCommonFiles());
|
|
return insert > 0 ? R.ok() : R.fail();
|
}
|
|
@Override
|
public boolean updateBusinessOpportunityById(BusinessOpportunityDto businessOpportunity) {
|
ArrayList<StorageBlobDTO> storageBlobDTOS = new ArrayList<>();
|
for (StorageBlobVO businessCommonFile : businessOpportunity.getBusinessCommonFiles()) {
|
StorageBlobDTO storageBlobDTO = new StorageBlobDTO();
|
BeanUtils.copyProperties(businessCommonFile, storageBlobDTO);
|
storageBlobDTOS.add(storageBlobDTO);
|
}
|
fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.BUSINESS_OPPORTUNITY, businessOpportunity.getId(), storageBlobDTOS);
|
return this.updateById(businessOpportunity);
|
}
|
|
@Override
|
public boolean delete(List<Long> ids) {
|
for (Long id : ids) {
|
fileUtil.deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.FILE, RecordTypeEnum.BUSINESS_OPPORTUNITY, id);
|
}
|
return this.removeBatchByIds(ids);
|
}
|
}
|