package com.yuanchu.mom.service.impl;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
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.deepoove.poi.XWPFTemplate;
|
import com.deepoove.poi.config.Configure;
|
import com.yuanchu.mom.common.GetLook;
|
import com.yuanchu.mom.dto.DeviceExaminePlanDetailsDto;
|
import com.yuanchu.mom.dto.DeviceExaminePlanDto;
|
import com.yuanchu.mom.excel.upload.DeviceExaminePlanUpload;
|
import com.yuanchu.mom.exception.ErrorException;
|
import com.yuanchu.mom.mapper.DeviceExaminePlanDetailsMapper;
|
import com.yuanchu.mom.mapper.DeviceExaminePlanMapper;
|
import com.yuanchu.mom.mapper.DeviceMapper;
|
import com.yuanchu.mom.mapper.UserMapper;
|
import com.yuanchu.mom.pojo.Device;
|
import com.yuanchu.mom.pojo.DeviceExaminePlan;
|
import com.yuanchu.mom.pojo.DeviceExaminePlanDetails;
|
import com.yuanchu.mom.pojo.User;
|
import com.yuanchu.mom.service.DeviceExaminePlanDetailsService;
|
import com.yuanchu.mom.service.DeviceExaminePlanService;
|
import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
|
import com.yuanchu.mom.utils.UserUtils;
|
import com.yuanchu.mom.utils.QueryWrappers;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.URLEncoder;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 设备核查计划主表 服务实现类
|
* </p>
|
*
|
* @author 江苏鵷雏网络科技有限公司
|
* @since 2024-12-16 07:14:04
|
*/
|
@Service
|
@Transactional(rollbackFor = Exception.class)
|
public class DeviceExaminePlanServiceImpl extends ServiceImpl<DeviceExaminePlanMapper, DeviceExaminePlan> implements DeviceExaminePlanService {
|
|
@Resource
|
private DeviceExaminePlanDetailsMapper deviceExaminePlanDetailsMapper;
|
@Resource
|
private DeviceExaminePlanDetailsService deviceExaminePlanDetailsService;
|
@Resource
|
private DeviceMapper deviceMapper;
|
@Resource
|
private GetLook getLook;
|
@Resource
|
private UserMapper userMapper;
|
|
/**
|
* 新增设备核查计划
|
* @param examinePlanDto
|
* @return
|
*/
|
@Override
|
public boolean addDeviceExaminePlan(DeviceExaminePlanDto examinePlanDto) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
// 文件名称
|
examinePlanDto.setWriteUserId(userId);
|
examinePlanDto.setWriteTime(LocalDateTime.now());
|
baseMapper.insert(examinePlanDto);
|
|
// 添加详情
|
if (CollectionUtils.isNotEmpty(examinePlanDto.getExaminePlanDetailsList())) {
|
for (DeviceExaminePlanDetails deviceExaminePlanDetails : examinePlanDto.getExaminePlanDetailsList()) {
|
deviceExaminePlanDetails.setPlanId(examinePlanDto.getPlanId());
|
}
|
deviceExaminePlanDetailsService.saveBatch(examinePlanDto.getExaminePlanDetailsList());
|
}
|
return true;
|
}
|
|
/**
|
* 导入设备核查计划
|
* @param file
|
* @return
|
*/
|
@Override
|
public boolean importDeviceExaminePlan(MultipartFile file) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
// 文件名称
|
String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
|
DeviceExaminePlan examinePlan = new DeviceExaminePlan();
|
examinePlan.setPlanName(fileName);
|
examinePlan.setWriteUserId(userId);
|
examinePlan.setWriteTime(LocalDateTime.now());
|
baseMapper.insert(examinePlan);
|
|
List<DeviceExaminePlanDetails> examinePlanDetails = new ArrayList<>();
|
// 导入附件内容
|
try {
|
// excel解析
|
EasyExcel.read(file.getInputStream(), DeviceExaminePlanUpload.class, new AnalysisEventListener<DeviceExaminePlanUpload>() {
|
@Override
|
public void invoke(DeviceExaminePlanUpload detailsUpload, AnalysisContext analysisContext) {
|
// 判断是否为空
|
if (StringUtils.isNotBlank(detailsUpload.getDeviceName()) &&
|
StringUtils.isNotBlank(detailsUpload.getDeviceNumber())) {
|
// 对象复制
|
DeviceExaminePlanDetails planDetails = new DeviceExaminePlanDetails();
|
BeanUtils.copyProperties(detailsUpload, planDetails);
|
|
planDetails.setPlanId(examinePlan.getPlanId());
|
examinePlanDetails.add(planDetails);
|
}
|
}
|
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
|
}
|
}).sheet().doRead();
|
for (DeviceExaminePlanDetails examinePlanDetail : examinePlanDetails) {
|
Device device = deviceMapper.selectOne(Wrappers.<Device>lambdaQuery()
|
.eq(Device::getManagementNumber, examinePlanDetail.getDeviceNumber().trim()));
|
if (device == null) {
|
throw new ErrorException("设备编号" + examinePlanDetail.getDeviceNumber() + "未查询到设备, 请重新导入");
|
}
|
User user = userMapper.selectOne(Wrappers.<User>lambdaQuery()
|
.eq(User::getName, examinePlanDetail.getCheckChargerUser()));
|
if (user == null) {
|
throw new ErrorException("设备编号" + examinePlanDetail.getDeviceNumber() + "未查询到核查人");
|
}
|
examinePlanDetail.setDeviceId(device.getId());
|
examinePlanDetail.setCheckChargerUserId(user.getId());
|
}
|
|
deviceExaminePlanDetailsService.saveBatch(examinePlanDetails);
|
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
return true;
|
}
|
|
/**
|
* 设备核查计划批准
|
* @param deviceExaminePlan
|
* @return
|
*/
|
@Override
|
public boolean ratifyDeviceExaminePlan(DeviceExaminePlan deviceExaminePlan) {
|
// 当前登录用户
|
Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
|
baseMapper.update(null, Wrappers.<DeviceExaminePlan>lambdaUpdate()
|
.eq(DeviceExaminePlan::getPlanId, deviceExaminePlan.getPlanId())
|
.set(DeviceExaminePlan::getRatifyUserId, userId)
|
.set(DeviceExaminePlan::getRatifyRemark, deviceExaminePlan.getRatifyRemark())
|
.set(DeviceExaminePlan::getRatifyStatus, deviceExaminePlan.getRatifyStatus())
|
.set(DeviceExaminePlan::getRatifyTime, LocalDateTime.now())
|
);
|
return true;
|
}
|
|
/**
|
* 设备核查计划列表
|
* @param page
|
* @param deviceExaminePlan
|
* @return
|
*/
|
@Override
|
public IPage<DeviceExaminePlanDto> pageDeviceExaminePlan(Page page, DeviceExaminePlan deviceExaminePlan) {
|
return baseMapper.deviceExaminePlanDetailsMapper(page, QueryWrappers.queryWrappers(deviceExaminePlan));
|
}
|
|
/**
|
* 设备核查计划详情列表
|
* @param page
|
* @param deviceExaminePlanDetails
|
* @return
|
*/
|
@Override
|
public IPage<DeviceExaminePlanDetails> pageDeviceExaminePlanDetail(Page page, DeviceExaminePlanDetails deviceExaminePlanDetails) {
|
if (deviceExaminePlanDetails.getPlanId() == null) {
|
return new Page();
|
}
|
return deviceExaminePlanDetailsMapper.pageDeviceExaminePlanDetail(page, QueryWrappers.queryWrappers(deviceExaminePlanDetails));
|
}
|
|
/**
|
* 导出设备核查计划
|
* @param deviceExaminePlanId 设备核查计划id
|
* @param response 响应体
|
*/
|
@Override
|
public void exportDeviceExaminePlanDetail(Integer deviceExaminePlanId, HttpServletResponse response) {
|
// 查询设备核查计划
|
DeviceExaminePlanDto deviceExaminePlanDto = baseMapper.selectExamineExaminePlanDto(deviceExaminePlanId);
|
|
// 查询设备核查计划详情
|
List<DeviceExaminePlanDetails> deviceExaminePlanDetailsList = deviceExaminePlanDetailsMapper.selectList(Wrappers.<DeviceExaminePlanDetails>lambdaQuery().eq(DeviceExaminePlanDetails::getPlanId, deviceExaminePlanId));
|
// 设置序号
|
ArrayList<DeviceExaminePlanDetailsDto> deviceExaminePlanDetailsDtoList = new ArrayList<>();
|
deviceExaminePlanDetailsList.forEach(deviceExamineRecordContrastDetail -> {
|
DeviceExaminePlanDetailsDto deviceExaminePlanDetailsDto = new DeviceExaminePlanDetailsDto();
|
BeanUtils.copyProperties(deviceExamineRecordContrastDetail, deviceExaminePlanDetailsDto);
|
deviceExaminePlanDetailsDto.setIndex(deviceExaminePlanDetailsList.indexOf(deviceExamineRecordContrastDetail) + 1);
|
deviceExaminePlanDetailsDtoList.add(deviceExaminePlanDetailsDto);
|
});
|
|
// 获取路径
|
InputStream inputStream = this.getClass().getResourceAsStream("/static/word/examine-plan-detail.docx");
|
Configure configure = Configure.builder()
|
.bind("deviceExaminePlanDetailsDtoList", new HackLoopTableRenderPolicy())
|
.build();
|
XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
|
new HashMap<String, Object>() {{
|
put("deviceExaminePlan", deviceExaminePlanDto);
|
put("deviceExaminePlanDetailsDtoList", deviceExaminePlanDetailsDtoList);
|
//获取核查人的签名地址
|
put("writeUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExaminePlanDto.getWriteUserId()));
|
//获取审查人的签名地址
|
put("reviewUserUrl", UserUtils.getFinalUserSignatureUrl(deviceExaminePlanDto.getRatifyUserId()));
|
}});
|
|
try {
|
response.setContentType("application/msword");
|
String fileName = URLEncoder.encode(
|
"设备核查计划", "UTF-8");
|
response.setHeader("Content-disposition",
|
"attachment;filename=" + fileName + ".docx");
|
OutputStream os = response.getOutputStream();
|
template.write(os);
|
os.flush();
|
os.close();
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new RuntimeException("导出失败");
|
}
|
}
|
}
|