package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.ManageRecordTotalMapper;
import com.yuanchu.mom.pojo.ManageRecordTotal;
import com.yuanchu.mom.pojo.ManageRecordVerify;
import com.yuanchu.mom.mapper.ManageRecordVerifyMapper;
import com.yuanchu.mom.service.ManageRecordVerifyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.utils.QueryWrappers;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
* 外来文件确认记录 服务实现类
*
*
* @author
* @since 2024-11-12 10:29:44
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class ManageRecordVerifyServiceImpl extends ServiceImpl implements ManageRecordVerifyService {
@Resource
private ManageRecordVerifyMapper manageRecordVerifyMapper;
@Resource
private ManageRecordTotalMapper manageRecordTotalMapper;
@Override
public Map pageManageRecordVerify(Page page, ManageRecordVerify manageRecordVerify) {
Map map = new HashMap<>();
map.put("head", PrintChina.printChina(ManageRecordVerify.class));
if (ObjectUtils.isEmpty(manageRecordVerify.getManageRecordTotalId())) {
//获取当前年份
LocalDate currentDate = LocalDate.now();
// 定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
// 格式化当前日期
String currentMonth = currentDate.format(formatter);
//查询历史
ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
}
map.put("body", manageRecordVerifyMapper.pageManageRecordVerify(page, QueryWrappers.queryWrappers(manageRecordVerify)));
return map;
}
@Override
public int addManageRecordVerify(ManageRecordVerify manageRecordVerify) {
//获取当前年份
LocalDate currentDate = LocalDate.now();
// 定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
// 格式化当前日期
String currentMonth = currentDate.format(formatter);
ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
manageRecordVerifyMapper.insert(manageRecordVerify);
manageRecordTotal.setTotalNum(1 + manageRecordTotal.getTotalNum());
return manageRecordTotalMapper.updateById(manageRecordTotal);
}
@Override
public int delManageRecordVerify(Integer id) {
ManageRecordVerify manageRecordVerify = manageRecordVerifyMapper.selectById(id);
manageRecordVerifyMapper.deleteById(id);
ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectById(manageRecordVerify.getManageRecordTotalId());
manageRecordTotal.setTotalNum(manageRecordTotal.getTotalNum() - 1);
return manageRecordTotalMapper.updateById(manageRecordTotal);
}
@Override
public int exportManageRecordVerify(MultipartFile file) {
List manageRecordVerifyList = new ArrayList<>();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//获取当前年份
LocalDate currentDate = LocalDate.now();
// 定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy");
// 格式化当前日期
String currentMonth = currentDate.format(formatter);
ManageRecordTotal manageRecordTotal = manageRecordTotalMapper.selectOne(Wrappers.lambdaQuery().eq(ManageRecordTotal::getYear, currentMonth));
try {
InputStream inputStream = file.getInputStream();
XWPFDocument document = new XWPFDocument(inputStream);
List tables = document.getTables();
if (tables.isEmpty()) {
throw new ErrorException("文档中没有表格");
}
for (XWPFTable table : tables) {
List rows = table.getRows();
if (rows.size() <= 1) {
throw new ErrorException("表格没有数据行");
}
for (int i = 1; i < rows.size(); i++) { // 从第二行开始,跳过表头
XWPFTableRow row = rows.get(i);
if (row.getTableCells().size() != 8) {
System.out.println("行 " + (i + 1) + " 的列数不匹配,跳过该行");
continue;
}
if (ObjectUtils.isNotEmpty(row.getCell(1).getText())) {
ManageRecordVerify manageRecordVerify = new ManageRecordVerify();
manageRecordVerify.setDocumentName(row.getCell(1).getText());
manageRecordVerify.setDocumentCode(row.getCell(2).getText());
manageRecordVerify.setStandardName(row.getCell(3).getText());
manageRecordVerify.setStandardCode(row.getCell(4).getText());
try {
manageRecordVerify.setEffectiveDate(LocalDate.parse(row.getCell(5).getText(), dateTimeFormatter));
} catch (Exception e) {
manageRecordVerify.setEffectiveDate(null);
}
try {
manageRecordVerify.setCancelDate(LocalDate.parse(row.getCell(6).getText(), dateTimeFormatter));
} catch (Exception e) {
manageRecordVerify.setCancelDate(null);
}
manageRecordVerify.setNote(row.getCell(7).getText());
manageRecordVerify.setManageRecordTotalId(manageRecordTotal.getId());
if (manageRecordVerifyMapper.selectCount(Wrappers.lambdaQuery()
.eq(ManageRecordVerify::getDocumentCode, manageRecordVerify.getDocumentCode())
.eq(ManageRecordVerify::getDocumentName, manageRecordVerify.getDocumentName())
.eq(ManageRecordVerify::getStandardName, manageRecordVerify.getStandardName())
.eq(ManageRecordVerify::getStandardCode, manageRecordVerify.getStandardCode())
.eq(ManageRecordVerify::getManageRecordTotalId, manageRecordVerify.getManageRecordTotalId())) <= 0) {
manageRecordVerifyList.add(manageRecordVerify);
}
}
}
}
saveBatch(manageRecordVerifyList);
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
}