package com.ycl.platform.service.impl;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.dataListener.CurrencyDataListener;
|
import com.ycl.platform.domain.entity.YwPeople;
|
import com.ycl.platform.domain.entity.YwPoint;
|
import com.ycl.platform.domain.excel.PointExport;
|
import com.ycl.platform.domain.form.BatchEditPointForm;
|
import com.ycl.platform.domain.form.YwPointForm;
|
import com.ycl.platform.domain.query.YwPointQuery;
|
import com.ycl.platform.domain.vo.YwPointVO;
|
import com.ycl.platform.mapper.YwPeopleMapper;
|
import com.ycl.platform.mapper.YwPointMapper;
|
import com.ycl.platform.service.YwPointService;
|
import com.ycl.platform.service.YwUnitService;
|
import com.ycl.system.Result;
|
import com.ycl.system.mapper.SysDeptMapper;
|
import com.ycl.system.page.PageUtil;
|
import com.ycl.thread.PointImportCallable;
|
import com.ycl.utils.DateUtils;
|
import com.ycl.utils.SecurityUtils;
|
import jakarta.servlet.http.HttpServletResponse;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.Assert;
|
import org.springframework.util.CollectionUtils;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import java.io.IOException;
|
import java.util.*;
|
import java.util.concurrent.*;
|
import java.util.function.Consumer;
|
import java.util.stream.Collectors;
|
|
/**
|
* 运维点位 服务实现类
|
*
|
* @author xp
|
* @since 2024-03-05
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class YwPointServiceImpl extends ServiceImpl<YwPointMapper, YwPoint> implements YwPointService {
|
|
private final SysDeptMapper sysDeptMapper;
|
private final YwUnitService unitService;
|
private final YwPeopleMapper ywPeopleMapper;
|
|
private static final ExecutorService executorService = new ThreadPoolExecutor(8,
|
24,
|
5000,
|
TimeUnit.SECONDS,
|
new ArrayBlockingQueue<>(10),
|
new ThreadPoolExecutor.CallerRunsPolicy()
|
);
|
|
/**
|
* 添加
|
* @param form
|
* @return
|
*/
|
@Override
|
public Result add(YwPointForm form) {
|
YwPoint entity = YwPointForm.getEntityByForm(form, null);
|
Date now = new Date();
|
entity.setCreateTime(now);
|
entity.setUpdateTime(now);
|
if(baseMapper.insert(entity) > 0) {
|
return Result.ok("添加成功");
|
}
|
return Result.error("添加失败");
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Result batchAdd(List<YwPointForm> formList) {
|
formList.stream()
|
.forEach(form -> {
|
YwPoint entity = YwPointForm.getEntityByForm(form, null);
|
entity.setStatus("未开始");
|
Date now = new Date();
|
entity.setCreateTime(now);
|
entity.setUpdateTime(now);
|
baseMapper.insert(entity);
|
});
|
return Result.ok("添加成功");
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Result batchEdit(BatchEditPointForm form) {
|
if (Objects.nonNull(form.getUnitId())) {
|
new LambdaUpdateChainWrapper<>(baseMapper)
|
.in(YwPoint::getId, form.getIds())
|
.set(YwPoint::getUnitId, form.getUnitId())
|
.set(YwPoint::getUpdateTime, new Date())
|
.update();
|
} else {
|
new LambdaUpdateChainWrapper<>(baseMapper)
|
.in(YwPoint::getId, form.getIds())
|
.set(YwPoint::getUnitId, form.getUnitId())
|
.set(YwPoint::getStartTime, null)
|
.set(YwPoint::getEndTime, null)
|
.set(YwPoint::getUpdateTime, new Date())
|
.update();
|
}
|
return Result.ok("修改成功");
|
}
|
|
/**
|
* 修改
|
* @param form
|
* @return
|
*/
|
@Override
|
public Result update(YwPointForm form) {
|
YwPoint entity = baseMapper.selectById(form.getId());
|
Assert.notNull(entity, "记录不存在");
|
BeanUtils.copyProperties(form, entity);
|
Date now = new Date();
|
entity.setUpdateTime(now);
|
baseMapper.updateById(entity);
|
return Result.ok("修改成功");
|
}
|
|
/**
|
* 批量删除
|
* @param ids
|
* @return
|
*/
|
@Override
|
public Result remove(List<String> ids) {
|
if(baseMapper.deleteBatchIds(ids) > 0) {
|
return Result.ok("删除成功");
|
}
|
return Result.error("删除失败");
|
}
|
|
/**
|
* id删除
|
* @param id
|
* @return
|
*/
|
@Override
|
public Result removeById(String id) {
|
if(baseMapper.deleteById(id) > 0) {
|
return Result.ok("删除成功");
|
}
|
return Result.error("删除失败");
|
}
|
|
/**
|
* 分页查询
|
* @param query
|
* @return
|
*/
|
@Override
|
public Result page(YwPointQuery query) {
|
IPage<YwPointVO> page = PageUtil.getPage(query, YwPointVO.class);
|
baseMapper.page(page, query);
|
return Result.ok().data(page.getRecords()).total(page.getTotal());
|
}
|
|
/**
|
* 根据id查找
|
* @param id
|
* @return
|
*/
|
@Override
|
public Result detail(String id) {
|
YwPoint entity = baseMapper.selectById(id);
|
Assert.notNull(entity, "记录不存在");
|
YwPointVO vo = YwPointVO.getVoByEntity(entity, null);
|
if (Objects.nonNull(entity.getDeptId())) {
|
vo.setDeptIds(sysDeptMapper.selectParents(entity.getDeptId()));
|
}
|
return Result.ok().data(vo);
|
}
|
|
/**
|
* 列表
|
* @return
|
*/
|
@Override
|
public Result all() {
|
List<YwPoint> entities = baseMapper.selectList(null);
|
List<YwPointVO> vos = entities.stream()
|
.map(
|
entity -> YwPointVO.getVoByEntity(entity, null)
|
)
|
.collect(Collectors.toList());
|
return Result.ok().data(vos);
|
}
|
|
@Override
|
public Result select(String keyword) {
|
Long userId = SecurityUtils.getUserId();
|
// 获取当前运维人员的运维单位
|
YwPeople people = new LambdaQueryChainWrapper<>(ywPeopleMapper)
|
.eq(YwPeople::getUserId, userId)
|
.one();
|
Integer unitId = null;
|
if (Objects.nonNull(people)) {
|
unitId = people.getBelongUnit();
|
}
|
|
List<YwPoint> list = new LambdaQueryChainWrapper<>(baseMapper)
|
.eq(YwPoint::getUnitId, unitId)
|
.like(YwPoint::getPointName, keyword)
|
.list();
|
List data = list.stream().map(item -> {
|
Map map = new HashMap<String, Object>();
|
map.put("id", item.getSerialNumber());
|
map.put("value", item.getPointName());
|
return map;
|
}).collect(Collectors.toList());
|
return Result.ok().data(data);
|
}
|
|
@Override
|
public boolean updateRecovery(List<String> serialNumberList, int recovery) {
|
return new LambdaUpdateChainWrapper<>(baseMapper)
|
.in(YwPoint::getSerialNumber, serialNumberList)
|
.set(YwPoint::getRecovery, recovery)
|
.set(YwPoint::getUpdateTime, new Date())
|
.set(recovery == 0, YwPoint::getRecoveryTime, DateUtils.getNowDate())
|
.update();
|
}
|
|
@Override
|
public List<YwPoint> home() {
|
return baseMapper.home();
|
}
|
|
@Override
|
public void export(YwPointQuery query, HttpServletResponse response) throws IOException {
|
// 导出数据
|
List<PointExport> exportData = baseMapper.export(query);
|
EasyExcel.write(response.getOutputStream(), PointExport.class)
|
.sheet("点位更换运维单位")
|
.doWrite(exportData);
|
}
|
|
@Override
|
public Result importData(MultipartFile file, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws IOException {
|
Consumer<List<PointExport>> consumer = (dataList) -> {
|
try {
|
this.updatePoint(dataList, unitId, startTime, endTime, needUpdateUnit);
|
} catch (ExecutionException e) {
|
e.printStackTrace();
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
};
|
EasyExcel.read(file.getInputStream(), PointExport.class , new CurrencyDataListener(consumer)).headRowNumber(1).doReadAll();
|
return Result.ok();
|
}
|
|
/**
|
* 修改点位的运维单位
|
*
|
* @param dataList
|
* @param unitId
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public void updatePoint(List<PointExport> dataList, Integer unitId, Date startTime, Date endTime, Boolean needUpdateUnit) throws ExecutionException, InterruptedException {
|
if (CollectionUtils.isEmpty(dataList)) {
|
throw new RuntimeException("导入数据不能为空");
|
}
|
List<YwPoint> pointList = dataList.stream().map(item -> {
|
YwPoint point = new YwPoint();
|
point.setImportantCommandImageTag("是".equals(item.getImportantCommandImageTagString()));
|
point.setProvinceTag("是".equals(item.getProvinceTagString()));
|
point.setDeptTag("是".equals(item.getDeptTag()));
|
if (needUpdateUnit) {
|
if (Objects.nonNull(unitId)) {
|
point.setUnitId(Long.valueOf(unitId));
|
}
|
point.setStartTime(startTime);
|
point.setEndTime(endTime);
|
} else {
|
point.setUnitId(null);
|
point.setStartTime(null);
|
point.setEndTime(null);
|
}
|
|
point.setPointName(item.getPointName());
|
point.setSerialNumber(item.getSerialNumber());
|
return point;
|
}).collect(Collectors.toList());
|
this.waitAllFinishAndGetResult(pointList);
|
}
|
|
public void waitAllFinishAndGetResult(List<YwPoint> dataList) throws InterruptedException, ExecutionException {
|
int start = 0;
|
Date startTime = new Date();
|
while (true) {
|
if (dataList.size() < start + 800) {
|
List<YwPoint> list = dataList.subList(start, dataList.size() - 1);
|
this.baseMapper.updatePoint(list);
|
break;
|
} else {
|
List<YwPoint> list = dataList.subList(start, start + 800);
|
this.baseMapper.updatePoint(list);
|
start += 800;
|
}
|
}
|
Date endTime = new Date();
|
log.error("总共耗时:" + (endTime.getTime() - startTime.getTime()));
|
}
|
|
}
|