Commit 62c9cc05 authored by 高宇's avatar 高宇

1.导入

parent 6ad18ff3
...@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiImplicitParams; ...@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto; import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto;
import org.rcisoft.bus.taskinfo.entity.TaskInfo; import org.rcisoft.bus.taskinfo.entity.TaskInfo;
import org.rcisoft.core.anno.CyEncryptSm4Anno;
import org.rcisoft.core.anno.CyOpeLogAnno; import org.rcisoft.core.anno.CyOpeLogAnno;
import org.rcisoft.core.operlog.enums.CyLogTypeEnum; import org.rcisoft.core.operlog.enums.CyLogTypeEnum;
import org.rcisoft.core.util.CyEpExcelUtil; import org.rcisoft.core.util.CyEpExcelUtil;
...@@ -30,6 +31,7 @@ import javax.validation.Valid; ...@@ -30,6 +31,7 @@ import javax.validation.Valid;
import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj; import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj;
import org.rcisoft.bus.jnsp7xtmdqsj.service.Jnsp7xtmDqsjService; import org.rcisoft.bus.jnsp7xtmdqsj.service.Jnsp7xtmDqsjService;
import org.springframework.web.multipart.MultipartFile;
import java.util.List; import java.util.List;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
...@@ -186,5 +188,25 @@ public class Jnsp7xtmDqsjController extends CyPaginationController<Jnsp7xtmDqsj> ...@@ -186,5 +188,25 @@ public class Jnsp7xtmDqsjController extends CyPaginationController<Jnsp7xtmDqsj>
CyMessCons.MESSAGE_ALERT_ERROR, CyMessCons.MESSAGE_ALERT_ERROR,
null); null);
} }
@CyOpeLogAnno(title = "system-Jnsp7xtmDqsj管理-下载空模板", businessType = CyLogTypeEnum.QUERY)
@ApiOperation(value = "下载空模板", notes = "下载空模板")
@GetMapping(value = "/jnsp7xtmDqsjDownEmptyTemplate")
public void jnsp7xtmDqsjDownEmptyTemplate(Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto,HttpServletResponse response) {
jnsp7xtmDqsjServiceImpl.jnsp7xtmDqsjDownEmptyTemplate(jnsp7xtmDqsjPageHandleDto,response);
}
/**
* 导入模板
* **/
@CyOpeLogAnno(title = "system-检查申请管理-jnsp7xtmdqsj导入", businessType = CyLogTypeEnum.IMPORT)
@ApiOperation(value = "jnsp7xtmdqsj导入", notes = "jnsp7xtmdqsj导入")
@PostMapping(value = "/Jnsp7xtmDqsjImportDtoExcel")
@CyEncryptSm4Anno
public CyResult Jnsp7xtmDqsjImportDtoExcel(MultipartFile file) {
return CyResultGenUtil.builder(new CyPersistModel(1),
CyMessCons.MESSAGE_ALERT_SUCCESS,
CyMessCons.MESSAGE_ALERT_ERROR,
jnsp7xtmDqsjServiceImpl.jnsp7xtmDqsjImportDtoExcel(file));
}
} }
...@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.*; ...@@ -4,6 +4,7 @@ import org.apache.ibatis.annotations.*;
import org.apache.ibatis.mapping.ResultSetType; import org.apache.ibatis.mapping.ResultSetType;
import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.ResultHandler;
import org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo; import org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjExportTemplateDto;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto; import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto;
import org.rcisoft.core.mapper.CyBaseMapper; import org.rcisoft.core.mapper.CyBaseMapper;
import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj; import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj;
...@@ -60,5 +61,15 @@ public interface Jnsp7xtmDqsjRepository extends CyBaseMapper<Jnsp7xtmDqsj> { ...@@ -60,5 +61,15 @@ public interface Jnsp7xtmDqsjRepository extends CyBaseMapper<Jnsp7xtmDqsj> {
* **/ * **/
int deleteJnsp7xtmDqs(@Param("entity") Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto); int deleteJnsp7xtmDqs(@Param("entity") Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto);
/**
* 根据cc 查询客户有关的信息
* **/
List<Jnsp7xtmDqsj> queryCustomer(@Param("cc") String cc);
/**
* 根据pn 查询sypn的值
* **/
List<String> querySypnByPn(@Param("pn") String pn);
} }
package org.rcisoft.bus.jnsp7xtmdqsj.dto;
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Author: gy
* @Date: 2024/5/20 13:15
* @Description:
*/
@Data
public class Jnsp7xtmDqsjExportTemplateDto {
/**
* term
* **/
@Excel(name = "term", orderNum = "0", width = 20)
private String term;
/**
* month
* **/
@Excel(name = "month", orderNum = "1", width = 20)
private String month;
/**
* cc
* **/
@Excel(name = "cc", orderNum = "2", width = 20)
private String cc;
@Excel(name = "route", orderNum = "4", width = 20)
private String route;
@Excel(name = "pc", orderNum = "5", width = 20)
private String pc;
@Excel(name = "factory", orderNum = "6", width = 20)
private String factory;
@Excel(name = "size", orderNum = "7", width = 20)
private String size;
@Excel(name = "pn", orderNum = "8", width = 20)
private String pn;
@Excel(name = "po", orderNum = "9", width = 20)
private String po;
@Excel(name = "fc", orderNum = "10", width = 20)
private String fc;
@Excel(name = "qty", orderNum = "11", width = 20)
private String qty;
@Excel(name = "currency", orderNum = "12", width = 20)
private String currency;
@Excel(name = "rate", orderNum = "13", width = 20)
private String rate;
@Excel(name = "amt", orderNum = "14", width = 20)
private String amt;
@Excel(name = "up", orderNum = "15", width = 20)
private String up;
}
package org.rcisoft.bus.jnsp7xtmdqsj.dto;
import lombok.Data;
import java.util.List;
/**
* @Author: gy
* @Date: 2024/5/21 13:23
* @Description: jnsp7xtmDqsj 导入类
*/
@Data
public class Jnsp7xtmDqsjImportDto {
private String filename;
/**
* 文件导入之后插入文件的数据
*/
private List<Jnsp7xtmDqsjExportTemplateDto> insert;
/**
* 成功之后返回的条数
* **/
private Integer rows;
/**
* 总共多少条数据
* **/
private Integer total;
}
...@@ -9,6 +9,7 @@ import lombok.*; ...@@ -9,6 +9,7 @@ import lombok.*;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.JdbcType;
import org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo; import org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjExportTemplateDto;
import org.rcisoft.core.entity.CyIdEntity; import org.rcisoft.core.entity.CyIdEntity;
import org.rcisoft.core.entity.CyIdIncreEntity; import org.rcisoft.core.entity.CyIdIncreEntity;
import org.rcisoft.core.entity.CyIdNotDataEntity; import org.rcisoft.core.entity.CyIdNotDataEntity;
...@@ -394,7 +395,7 @@ public class Jnsp7xtmDqsj extends CyIdIncreEntity { ...@@ -394,7 +395,7 @@ public class Jnsp7xtmDqsj extends CyIdIncreEntity {
if (jnsp7xtmVo.getXslj().equals("W0")) if (jnsp7xtmVo.getXslj().equals("W0"))
jnsp7xtmDqsj.setIo("I"); jnsp7xtmDqsj.setIo("I");
else else
jnsp7xtmDqsj.setIo("O"); jnsp7xtmDqsj.setIo("o");
} }
jnsp7xtmDqsj.setRoute(jnsp7xtmVo.getXslj()); jnsp7xtmDqsj.setRoute(jnsp7xtmVo.getXslj());
jnsp7xtmDqsj.setPc(jnsp7xtmVo.getZd()); jnsp7xtmDqsj.setPc(jnsp7xtmVo.getZd());
...@@ -420,5 +421,66 @@ public class Jnsp7xtmDqsj extends CyIdIncreEntity { ...@@ -420,5 +421,66 @@ public class Jnsp7xtmDqsj extends CyIdIncreEntity {
return jnsp7xtmDqsj; return jnsp7xtmDqsj;
} }
public static Jnsp7xtmDqsj generateJnsp7xtmDqsj(Jnsp7xtmDqsjExportTemplateDto jnsp7xtmDqsjExportTemplateDto,Jnsp7xtmDqsj jnsp7xtmDqsj) {
BeanUtil.copyProperties(jnsp7xtmDqsjExportTemplateDto,jnsp7xtmDqsj);
if (StringUtils.isEmpty(jnsp7xtmDqsjExportTemplateDto.getTerm()))
jnsp7xtmDqsj.setTerm(TERM_L);
String lastTwoNqy = "";
if (StringUtils.isNotEmpty(jnsp7xtmDqsjExportTemplateDto.getMonth()) &&jnsp7xtmDqsjExportTemplateDto.getMonth().length() > 2 ) {
lastTwoNqy = jnsp7xtmDqsjExportTemplateDto.getMonth().substring(jnsp7xtmDqsjExportTemplateDto.getMonth().length() - 2);
if (lastTwoNqy.equals("04") || lastTwoNqy.equals("05") || lastTwoNqy.equals("06") || lastTwoNqy.equals("07") || lastTwoNqy.equals("08") || lastTwoNqy.equals("09")) {
jnsp7xtmDqsj.setHalf("1H");
} else {
jnsp7xtmDqsj.setHalf("2H");
}
if (lastTwoNqy.equals("01") || lastTwoNqy.equals("02") || lastTwoNqy.equals("03")) {
jnsp7xtmDqsj.setQuarter("Q4");
} else if (lastTwoNqy.equals("04") || lastTwoNqy.equals("05") || lastTwoNqy.equals("06")) {
jnsp7xtmDqsj.setQuarter("Q1");
} else if (lastTwoNqy.equals("07") || lastTwoNqy.equals("08") || lastTwoNqy.equals("09")) {
jnsp7xtmDqsj.setQuarter("Q2");
} else if (lastTwoNqy.equals("10") || lastTwoNqy.equals("11") || lastTwoNqy.equals("12")) {
jnsp7xtmDqsj.setQuarter("Q3");
}
if (StringUtils.isNotBlank(jnsp7xtmDqsjExportTemplateDto.getRoute())) {
if (jnsp7xtmDqsjExportTemplateDto.getRoute().equals("W0"))
jnsp7xtmDqsj.setIo("I");
else
jnsp7xtmDqsj.setIo("o");
}
if (StringUtils.isNotBlank(jnsp7xtmDqsjExportTemplateDto.getPc())) {
if (jnsp7xtmDqsjExportTemplateDto.getPc().equals("CR") || jnsp7xtmDqsjExportTemplateDto.getPc().equals("WR") || jnsp7xtmDqsjExportTemplateDto.getPc().equals("MP"))
jnsp7xtmDqsj.setFactory("CC1");
else
jnsp7xtmDqsj.setFactory("CC2");
}
/**
* 将string 转换成 BigDecimal类型
* **/
if (StringUtils.isNotEmpty(jnsp7xtmDqsjExportTemplateDto.getAmt())) {
jnsp7xtmDqsj.setAmt(new BigDecimal(jnsp7xtmDqsjExportTemplateDto.getAmt()));
}
if (StringUtils.isNotEmpty(jnsp7xtmDqsjExportTemplateDto.getRate())) {
jnsp7xtmDqsj.setRate(new BigDecimal(jnsp7xtmDqsjExportTemplateDto.getRate()));
}
if (StringUtils.isNotEmpty(jnsp7xtmDqsjExportTemplateDto.getUp())) {
jnsp7xtmDqsj.setUp(new BigDecimal(jnsp7xtmDqsjExportTemplateDto.getUp()));
}
if (StringUtils.isNotEmpty(jnsp7xtmDqsjExportTemplateDto.getFc())) {
jnsp7xtmDqsj.setFc(new BigDecimal(jnsp7xtmDqsjExportTemplateDto.getFc()));
jnsp7xtmDqsj.setQty(jnsp7xtmDqsj.getFc());
}
if (StringUtils.isNotEmpty(jnsp7xtmDqsjExportTemplateDto.getPo())) {
jnsp7xtmDqsj.setPo(new BigDecimal(jnsp7xtmDqsjExportTemplateDto.getPo()));
jnsp7xtmDqsj.setQty(jnsp7xtmDqsj.getPo());
}
// y.qty = y.po + y.fc (BigDecimal)
if (StringUtils.isNotEmpty(jnsp7xtmDqsjExportTemplateDto.getPo()) && StringUtils.isNotEmpty(jnsp7xtmDqsjExportTemplateDto.getFc())) {
jnsp7xtmDqsj.setQty(new BigDecimal(jnsp7xtmDqsjExportTemplateDto.getPo()).add(new BigDecimal(jnsp7xtmDqsjExportTemplateDto.getFc())));
}
}
return jnsp7xtmDqsj;
}
} }
...@@ -3,6 +3,7 @@ package org.rcisoft.bus.jnsp7xtmdqsj.service; ...@@ -3,6 +3,7 @@ package org.rcisoft.bus.jnsp7xtmdqsj.service;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.rcisoft.bus.jnsp7xtm.dto.Jnsp7xtmOptionDto; import org.rcisoft.bus.jnsp7xtm.dto.Jnsp7xtmOptionDto;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjImportDto;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto; import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto;
import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj; import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj;
import org.rcisoft.bus.taskinfo.entity.TaskInfo; import org.rcisoft.bus.taskinfo.entity.TaskInfo;
...@@ -10,7 +11,9 @@ import org.rcisoft.core.model.CyPersistModel; ...@@ -10,7 +11,9 @@ import org.rcisoft.core.model.CyPersistModel;
import org.rcisoft.core.aop.CyPageUtilAsp; import org.rcisoft.core.aop.CyPageUtilAsp;
import org.rcisoft.core.model.CyPageInfo; import org.rcisoft.core.model.CyPageInfo;
import org.rcisoft.core.result.enums.CyResSvcExcEnum; import org.rcisoft.core.result.enums.CyResSvcExcEnum;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
/** /**
...@@ -96,4 +99,13 @@ public interface Jnsp7xtmDqsjService { ...@@ -96,4 +99,13 @@ public interface Jnsp7xtmDqsjService {
* 客户表重置 * 客户表重置
* **/ * **/
CyPersistModel clientReset(Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto); CyPersistModel clientReset(Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto);
/**下载空模板**/
void jnsp7xtmDqsjDownEmptyTemplate(Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto, HttpServletResponse response);
/**
* 导入月度度表数据
* **/
Jnsp7xtmDqsjImportDto jnsp7xtmDqsjImportDtoExcel(MultipartFile file);
} }
...@@ -16,6 +16,7 @@ import com.mongodb.client.model.Collation; ...@@ -16,6 +16,7 @@ import com.mongodb.client.model.Collation;
import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSession;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.tools.ant.taskdefs.Sleep; import org.apache.tools.ant.taskdefs.Sleep;
import org.rcisoft.bus.jnsp7xtm.dto.Jnsp7xtmDto; import org.rcisoft.bus.jnsp7xtm.dto.Jnsp7xtmDto;
...@@ -24,6 +25,8 @@ import org.rcisoft.bus.jnsp7xtm.entity.Jnsp7xtm; ...@@ -24,6 +25,8 @@ import org.rcisoft.bus.jnsp7xtm.entity.Jnsp7xtm;
import org.rcisoft.bus.jnsp7xtm.enums.ColTransitionEnum; import org.rcisoft.bus.jnsp7xtm.enums.ColTransitionEnum;
import org.rcisoft.bus.jnsp7xtm.enums.Jnsp7xtmDqsjType; import org.rcisoft.bus.jnsp7xtm.enums.Jnsp7xtmDqsjType;
import org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo; import org.rcisoft.bus.jnsp7xtm.vo.Jnsp7xtmVo;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjExportTemplateDto;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjImportDto;
import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto; import org.rcisoft.bus.jnsp7xtmdqsj.dto.Jnsp7xtmDqsjPageHandleDto;
import org.rcisoft.bus.taskinfo.dao.TaskInfoRepository; import org.rcisoft.bus.taskinfo.dao.TaskInfoRepository;
import org.rcisoft.bus.taskinfo.entity.TaskInfo; import org.rcisoft.bus.taskinfo.entity.TaskInfo;
...@@ -38,6 +41,7 @@ import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj; ...@@ -38,6 +41,7 @@ import org.rcisoft.bus.jnsp7xtmdqsj.entity.Jnsp7xtmDqsj;
import org.rcisoft.bus.jnsp7xtmdqsj.service.Jnsp7xtmDqsjService; import org.rcisoft.bus.jnsp7xtmdqsj.service.Jnsp7xtmDqsjService;
import org.rcisoft.core.service.CyBaseService; import org.rcisoft.core.service.CyBaseService;
import org.rcisoft.enums.CyImportErrCodeEnum;
import org.rcisoft.util.ExcelExportStatisticStyler; import org.rcisoft.util.ExcelExportStatisticStyler;
import org.rcisoft.util.ExportToExcelUtil; import org.rcisoft.util.ExportToExcelUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -49,14 +53,23 @@ import org.springframework.transaction.annotation.Propagation; ...@@ -49,14 +53,23 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.rcisoft.core.model.CyPageInfo; import org.rcisoft.core.model.CyPageInfo;
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/** /**
* Created by cy on 2024年5月14日 上午10:20:48. * Created by cy on 2024年5月14日 上午10:20:48.
...@@ -84,6 +97,9 @@ public class Jnsp7xtmDqsjServiceImpl extends ServiceImpl<Jnsp7xtmDqsjRepository, ...@@ -84,6 +97,9 @@ public class Jnsp7xtmDqsjServiceImpl extends ServiceImpl<Jnsp7xtmDqsjRepository,
@Value("${jnsp7xtmDqsj.shema}") @Value("${jnsp7xtmDqsj.shema}")
private String shema; private String shema;
@Value("${jnsp7xtmDqsj.importBatchAddSize}")
private Integer importBatchAddSize;
/** /**
* 保存 * 保存
* @param jnsp7xtmDqsj * @param jnsp7xtmDqsj
...@@ -342,10 +358,163 @@ public class Jnsp7xtmDqsjServiceImpl extends ServiceImpl<Jnsp7xtmDqsjRepository, ...@@ -342,10 +358,163 @@ public class Jnsp7xtmDqsjServiceImpl extends ServiceImpl<Jnsp7xtmDqsjRepository,
return new CyPersistModel(1); return new CyPersistModel(1);
} }
/**
* 下载空模板
* **/
@Override
public void jnsp7xtmDqsjDownEmptyTemplate(Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto, HttpServletResponse response) {
// 导出空模板
OutputStream outputStream = null;
Workbook workbook = null;
try {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("试题数据信息.xlsx", "UTF-8"));
ExportParams exportParams = new ExportParams();
exportParams.setType(ExcelType.XSSF);
List<Jnsp7xtmDqsjExportTemplateDto> exportList = new ArrayList<>();
workbook = ExcelExportUtil.exportExcel(exportParams, Jnsp7xtmDqsjExportTemplateDto.class, exportList);
Sheet sheet = workbook.getSheetAt(0);
String[] termList = new String[]{"L"};
ExportToExcelUtil.XSSFSetDropDownAndHidden(termList,workbook,sheet,1, 100000, 0, 0);
outputStream = response.getOutputStream();
workbook.write(outputStream);
} catch (IOException e) {
throw new CyServiceException(e.getMessage());
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
} catch (IOException var11) {
log.info("context:" + var11);
}
}
}
@Override
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT)
public Jnsp7xtmDqsjImportDto jnsp7xtmDqsjImportDtoExcel(MultipartFile file) {
Jnsp7xtmDqsjImportDto jnsp7xtmDqsjImportDto = new Jnsp7xtmDqsjImportDto();
try {
if (finallyButtonLockLock.tryLock(1000, TimeUnit.MILLISECONDS)) {
try {
// 要添加的数据行数据
int rows = 0;
// 要添加的list
List<Jnsp7xtmDqsj> jnsp7xtmDqsjList = new ArrayList<>();
List<Jnsp7xtmDqsjExportTemplateDto> dataList = ExportToExcelUtil.importExcelNotTitle(file, 1, 1, Jnsp7xtmDqsjExportTemplateDto.class);
for (int i = 0; i < dataList.size(); i++) {
/**
* 1.校验 month和cc和pn 必填
* **/
if (StringUtils.isNotBlank(dataList.get(i).getMonth()) && StringUtils.isNotBlank(dataList.get(i).getCc()) && StringUtils.isNotBlank(dataList.get(i).getPn())) {
/**
* 2.校验 amt,rate,up,qty,fc,po 格式是数据
* **/
if ((dataList.get(i).getMonth().length() != 6 && this.isValidDate(dataList.get(i).getMonth())))
throw new CyServiceException(CyImportErrCodeEnum.IMPORT_ERR.getCode(),"第"+i+1+"行month格式不对");
if (!StringUtils.isEmpty(dataList.get(i).getAmt())) {
if (!isValidIntegerOrLessThanNDecimal(dataList.get(i).getAmt(),7))
throw new CyServiceException(CyImportErrCodeEnum.IMPORT_ERR.getCode(),"第"+i+1+"行amt格式不对");
}
if (!StringUtils.isEmpty(dataList.get(i).getRate())) {
if (!isValidIntegerOrLessThanNDecimal(dataList.get(i).getRate(),6))
throw new CyServiceException(CyImportErrCodeEnum.IMPORT_ERR.getCode(),"第"+i+1+"行rate格式不对");
}
if (!StringUtils.isEmpty(dataList.get(i).getUp())) {
if (!isValidIntegerOrLessThanNDecimal(dataList.get(i).getUp(),5))
throw new CyServiceException(CyImportErrCodeEnum.IMPORT_ERR.getCode(),"第"+i+1+"行rate格式不对");
}
if (!StringUtils.isEmpty(dataList.get(i).getQty())) {
if (!isValidIntegerOrLessThanNDecimal(dataList.get(i).getQty(),2))
throw new CyServiceException(CyImportErrCodeEnum.IMPORT_ERR.getCode(),"第"+i+1+"行qty格式不对");
}
if (!StringUtils.isEmpty(dataList.get(i).getFc())) {
if (!isValidIntegerOrLessThanNDecimal(dataList.get(i).getFc(),2))
throw new CyServiceException(CyImportErrCodeEnum.IMPORT_ERR.getCode(),"第"+i+1+"行fc格式不对");
}
if (!StringUtils.isEmpty(dataList.get(i).getPo())) {
if (!isValidIntegerOrLessThanNDecimal(dataList.get(i).getPo(),2))
throw new CyServiceException(CyImportErrCodeEnum.IMPORT_ERR.getCode(),"第"+i+1+"行po格式不对");
}
/**
* 3.转换jnsp7xtmDqsj
* **/
Jnsp7xtmDqsj jnsp7xtmDqsj = new Jnsp7xtmDqsj();
if (StringUtils.isNotEmpty(dataList.get(i).getCc())) {
List<Jnsp7xtmDqsj> dqsjList = baseMapper.queryCustomer(dataList.get(i).getCc());
if (CollectionUtil.isNotEmpty(dqsjList)) {
jnsp7xtmDqsj = dqsjList.get(0);
}
}
Jnsp7xtmDqsj finallyJnsp7xtmDqsj = Jnsp7xtmDqsj.generateJnsp7xtmDqsj(dataList.get(i), jnsp7xtmDqsj);
if (StringUtils.isNotEmpty(dataList.get(i).getPn())) {
List<String> list = baseMapper.querySypnByPn(dataList.get(i).getPn());
if (CollectionUtil.isNotEmpty(list)) {
finallyJnsp7xtmDqsj.setSypn(list.get(0));
}
}
jnsp7xtmDqsjList.add(finallyJnsp7xtmDqsj);
rows = rows + 1;
if (jnsp7xtmDqsjList.size() == importBatchAddSize) {
this.importBatchAddList(jnsp7xtmDqsjList);
jnsp7xtmDqsjList.clear();
}
}
}
if (CollectionUtil.isNotEmpty(jnsp7xtmDqsjList)) {
baseMapper.batchAddJnsp7xtmDqsj(jnsp7xtmDqsjList);
}
jnsp7xtmDqsjImportDto.setTotal(dataList.size());
jnsp7xtmDqsjImportDto.setRows(rows);
return jnsp7xtmDqsjImportDto;
} catch (Exception e) {
e.printStackTrace();
throw new CyServiceException(CyImportErrCodeEnum.IMPORT_ERR.getCode(),e.getMessage());
} finally {
finallyButtonLockLock.unlock();
}
} else {
throw new CyServiceException(501,"该功能使用频繁,请稍后重试");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return jnsp7xtmDqsjImportDto;
}
private Jnsp7xtmDqsjPageHandleDto acquireRequestCondition(Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto) { private Jnsp7xtmDqsjPageHandleDto acquireRequestCondition(Jnsp7xtmDqsjPageHandleDto jnsp7xtmDqsjPageHandleDto) {
Jnsp7xtmDqsjPageHandleDto requestJnsp7xtmDqs = new Jnsp7xtmDqsjPageHandleDto(); Jnsp7xtmDqsjPageHandleDto requestJnsp7xtmDqs = new Jnsp7xtmDqsjPageHandleDto();
BeanUtil.copyProperties(jnsp7xtmDqsjPageHandleDto,requestJnsp7xtmDqs); BeanUtil.copyProperties(jnsp7xtmDqsjPageHandleDto,requestJnsp7xtmDqs);
return requestJnsp7xtmDqs; return requestJnsp7xtmDqs;
} }
private void importBatchAddList(List<Jnsp7xtmDqsj> list) {
baseMapper.batchAddJnsp7xtmDqsj(list);
}
/**校验月份的格式是否正确**/
public boolean isValidDate(String str) {
String pattern = "^\\d{4}\\d{2}$"; // 前四位是年,后两位是月份
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
return m.matches();
}
public static boolean isValidIntegerOrLessThanNDecimal(String str, int n) {
try {
BigDecimal bd = new BigDecimal(str);
if (bd.scale() <= n) {
return true;
}
} catch (NumberFormatException e) {
}
return false;
}
} }
package org.rcisoft.enums;
public enum CyImportErrCodeEnum {
IMPORT_ERR(7000);
private Integer code;
public Integer getCode() {
return code;
}
CyImportErrCodeEnum(Integer code) {
this.code = code;
}
public void setCode(Integer code) {
this.code = code;
}
}
package org.rcisoft.util; package org.rcisoft.util;
import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.export.ExcelExportService; import cn.afterturn.easypoi.excel.export.ExcelExportService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.usermodel.XSSFDataValidation;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.rcisoft.core.exception.CyServiceException; import org.rcisoft.core.exception.CyServiceException;
import org.rcisoft.core.util.CyEpExcelUtil; import org.rcisoft.core.util.CyEpExcelUtil;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -25,6 +32,109 @@ import java.util.Map; ...@@ -25,6 +32,109 @@ import java.util.Map;
*/ */
@Slf4j @Slf4j
public class ExportToExcelUtil extends CyEpExcelUtil { public class ExportToExcelUtil extends CyEpExcelUtil {
public static <T> List<T> importExcelNotTitle(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass) {
if (file == null) {
return null;
} else {
ImportParams params = new ImportParams();
List list = null;
try {
list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
return list;
} catch (Exception var7) {
throw new CyServiceException(502, "模板格式错误");
}
}
}
/**
* 为Excel表格添加下拉选项
* 解决单元格在某个时间点只能访问有限数据量而导致无法显示下拉选项的问题
* 适用于下拉选项总字节数大于 255 个字节的情况
* 缺点:会创建一个隐藏的sheet用于存放下拉选项
*
* @param formulaString 下拉选项数据
* @param workbook Excel工作簿
* @param sheet 设置下拉选项的工作表
* @param firstRow 起始行
* @param lastRow 终止行
* @param firstCol 起始列
* @param lastCol 终止列
*/
public static void XSSFSetDropDownAndHidden(String[] formulaString, Workbook workbook, Sheet sheet, int firstRow, int lastRow, int firstCol, int lastCol) {
// 计算下拉选项全部字节数
int totalBytes = Arrays.stream(formulaString)
.mapToInt(str -> str.getBytes(StandardCharsets.UTF_8).length)
.sum();
// 创建一个数据验证助手
DataValidationHelper dvHelper = sheet.getDataValidationHelper();
if (totalBytes > 255) {
// 当总选项字节数大于 255 时创建隐藏工作表用于存放下拉选项
// 创建sheet,写入枚举项
//判断当前sheet不存在则创建
Sheet hideSheet = workbook.getSheet("hiddenSheet");
if (workbook.getSheet("hiddenSheet") == null) {
hideSheet = workbook.createSheet("hiddenSheet");
}
for (int i = 0; i < formulaString.length; i++) {
// 将下拉选项值存放在目标工作表下拉项目相同列
hideSheet.createRow(i).createCell(firstCol).setCellValue(formulaString[i]);
}
// 创建名称,可被其他单元格引用
//判断当前名称不存在则创建
Name hiddenSheetName = workbook.getName("hidden");
if (workbook.getName("hidden") == null) {
hiddenSheetName = workbook.createName();
hiddenSheetName.setNameName("hidden");
}
// 设置名称引用的公式
// 使用像'A1:B1'这样的相对值会导致在Microsoft Excel中使用工作簿时名称所指向的单元格的意外移动,
// 通常使用绝对引用,例如'$A$1:$B$1'可以避免这种情况。
// 根据 firstCol 计算引用索引字母
StringBuilder columnLetter = new StringBuilder();
int columnIndex = firstCol;
while (columnIndex >= 0) {
int rem = columnIndex % 26;
columnLetter.append((char) ('A' + rem));
columnIndex = (columnIndex / 26) - 1;
}
columnLetter.reverse();
hiddenSheetName.setRefersToFormula("hiddenSheet!$" + columnLetter + "$1:$" + columnLetter + "$" + formulaString.length);
// 获取上文名称内数据
DataValidationConstraint constraint = dvHelper.createFormulaListConstraint("hidden");
// 设置下拉框位置
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
DataValidation dataValidation = dvHelper.createValidation(constraint, addressList);
// 处理Excel兼容性问题
if (dataValidation instanceof XSSFDataValidation) {
// 数据校验
dataValidation.setSuppressDropDownArrow(true);
dataValidation.setShowErrorBox(true);
} else {
dataValidation.setSuppressDropDownArrow(false);
}
// 作用在目标sheet上
sheet.addValidationData(dataValidation);
// 设置hiddenSheet隐藏
int hideSheetIndex = workbook.getSheetIndex(hideSheet);
workbook.setSheetHidden(hideSheetIndex, true);
} else {
// 当总选项字节数不大于 255 时使用传统方式创建下拉选项
// 创建下拉列表约束
DataValidationConstraint dvConstraint = dvHelper.createExplicitListConstraint(formulaString);
// 设置数据验证的单元格区域(从firstRow行firstCol列到lastRow行lastCol列)
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
// 创建数据验证对象并添加到工作表
DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
sheet.addValidationData(validation);
}
}
// 导出动态列 // 导出动态列
/** /**
* entityList 表头 * entityList 表头
......
...@@ -134,5 +134,7 @@ jnsp7xtmDqsj: ...@@ -134,5 +134,7 @@ jnsp7xtmDqsj:
pageQuestSize: 5000 pageQuestSize: 5000
# 每次添加到数据库的长度 # 每次添加到数据库的长度
batchAddPagesize: 30 batchAddPagesize: 30
# 导出时添加带数据库的数据长度
importBatchAddSize: 30
# service 要重置的数据库 # service 要重置的数据库
shema: 'demo.dbo' shema: 'demo.dbo'
...@@ -447,5 +447,44 @@ ...@@ -447,5 +447,44 @@
jnsp.khdm is not null jnsp.khdm is not null
and jnsp.pn is not null and jnsp.pn is not null
</select> </select>
<select id="queryCustomer" resultMap="BaseResultMap">
SELECT
cust_code AS cc,
cust_name AS cn,
cust_group,
cust_group2,
cust_rt1,
cust_io,
cust_newpic,
cust_group1,
cust_rout,
cust_rt2,
cust_addr,
cust_g0,
cust_g20,
cust_g30,
cust_g201,
cust_save,
cust_stype,
cust_g1,
cust_yj,
cust_yj2,
cust_yj3,
cust_gc
FROM
b_customer
WHERE
del_flag = '0'
AND cust_code = #{cc}
</select>
<select id="querySypnByPn" resultType="java.lang.String">
SELECT
sypn
FROM
b_pn_sypn
WHERE
del_flag = '0'
and pn = #{pn}
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment