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.core.toolkit.Wrappers;
|
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(item -> {
|
item.setBusinessCommonFiles(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.FILE, RecordTypeEnum.BUSINESS_OPPORTUNITY, item.getId()));
|
item.setBusinessDescription(businessDescriptionMapper.selectList(Wrappers.lambdaQuery(BusinessDescription.class)
|
.eq(BusinessDescription::getBusinessOpportunityId, item.getId())
|
.orderByDesc(BusinessDescription::getCreateTime)));
|
});
|
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, businessDescription.getBusinessOpportunityId(), businessDescription.getStorageBlobDTOS());
|
|
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);
|
}
|
}
|