|
@@ -15,8 +15,12 @@ import com.ruoyi.ams.bionutrition.doc.domain.BionutritionDocHeader;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocBaseDTO;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocDetailsDTO;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.BionutritionDocHeaderDTO;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.dto.DocExcelQueryDTO;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.detail.BionutritionDocDetailsBaseDTO;
|
|
|
import com.ruoyi.ams.bionutrition.doc.dto.header.BionutritionDocHeaderBaseDTO;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.excel.BionutritionDocBaseExcel;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.excel.detail.BionutritionDocDetailsBaseExcel;
|
|
|
+import com.ruoyi.ams.bionutrition.doc.excel.header.BionutritionDocHeaderBaseExcel;
|
|
|
import com.ruoyi.ams.bionutrition.doc.mapper.BionutritionDocHeaderMapper;
|
|
|
import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocDetailsService;
|
|
|
import com.ruoyi.ams.bionutrition.doc.service.BionutritionDocHeaderService;
|
|
@@ -25,9 +29,19 @@ import com.ruoyi.common.utils.ConvertUtils;
|
|
|
import com.ruoyi.common.utils.PageUtil;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.framework.service.impl.CrudServiceImpl;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFCell;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFRow;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFSheet;
|
|
|
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.OutputStream;
|
|
|
+import java.lang.reflect.Field;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
@@ -36,6 +50,7 @@ import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<BionutritionDocHeaderMapper, BionutritionDocHeader, BionutritionDocHeaderDTO> implements BionutritionDocHeaderService {
|
|
|
|
|
|
@Autowired
|
|
@@ -68,9 +83,11 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public int insertDocHeader(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
+ public String insertDocHeader(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
Assert.notNull(docHeaderDTO, "不允许插入空数据");
|
|
|
- return baseDao.insert(ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class));
|
|
|
+ BionutritionDocHeader docHeader = ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class);
|
|
|
+ int result = baseDao.insert(docHeader);
|
|
|
+ return result > 0 ? docHeader.getId() : String.valueOf(result);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -81,8 +98,8 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
@Override
|
|
|
public int updateDoc(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
UpdateWrapper<BionutritionDocHeader> updateWrapper = new UpdateWrapper<>();
|
|
|
- updateWrapper.lambda().eq(StringUtils.isNotBlank(docHeaderDTO.getId()),BionutritionDocHeader::getId, docHeaderDTO.getId())
|
|
|
- .eq(StringUtils.isNotBlank(docHeaderDTO.getDocNo()), BionutritionDocHeader::getDocNo, docHeaderDTO.getDocNo());
|
|
|
+ updateWrapper.lambda().eq(StringUtils.isNotBlank(docHeaderDTO.getId()),BionutritionDocHeader::getId, docHeaderDTO.getId());
|
|
|
+// .eq(StringUtils.isNotBlank(docHeaderDTO.getDocNo()), BionutritionDocHeader::getDocNo, docHeaderDTO.getDocNo());
|
|
|
return baseDao.update(ConvertUtils.sourceToTarget(docHeaderDTO, BionutritionDocHeader.class), updateWrapper);
|
|
|
}
|
|
|
|
|
@@ -98,8 +115,8 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<BionutritionDocBaseDTO> getDocList(BionutritionDocHeaderDTO docHeaderDTO) {
|
|
|
- List<BionutritionDocHeaderDTO> docHeaderDTOList = getBionutritionDocHeaderDTOList(docHeaderDTO.getDocType());
|
|
|
+ public List<BionutritionDocBaseDTO> getDocList(DocExcelQueryDTO docExcelQueryDTO) {
|
|
|
+ List<BionutritionDocHeaderDTO> docHeaderDTOList = getBionutritionDocHeaderDTOList(docExcelQueryDTO.getDocType());
|
|
|
return buildBionutritionDocSameTypeList(docHeaderDTOList);
|
|
|
// return buildBionutritionDocDifferentTypeList(docHeaderDTOList);
|
|
|
}
|
|
@@ -117,6 +134,88 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
return buildBionutritionDocDifferentTypeList(docHeaderDTOList);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 导出单据excel
|
|
|
+ * @param response
|
|
|
+ * @param docExcelQueryDTO
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void exportExcel(HttpServletResponse response, DocExcelQueryDTO docExcelQueryDTO) {
|
|
|
+ List<BionutritionDocBaseDTO> list = StringUtils.isNotBlank(docExcelQueryDTO.getDocType()) ?
|
|
|
+ getDocList(docExcelQueryDTO) : getDicListByIds(docExcelQueryDTO.getIds());
|
|
|
+ List<BionutritionDocBaseExcel> docBaseExcels = list.stream()
|
|
|
+ .map(item -> BionutritionDocUtil.buildBionutritionDocBaseExcel(item.getBionutritionDocHeaderBaseDTO().getDocType(), item))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 创建工作簿对象
|
|
|
+ SXSSFWorkbook workbook = new SXSSFWorkbook();
|
|
|
+ SXSSFSheet sheet = workbook.createSheet();
|
|
|
+ Integer startRow = 0;
|
|
|
+ // 总列数
|
|
|
+ Integer collLength = 0;
|
|
|
+ //是同一类型的单据
|
|
|
+ if (StringUtils.isNotBlank(docExcelQueryDTO.getDocType())){
|
|
|
+
|
|
|
+ BionutritionDocBaseExcel bionutritionDocBaseExcel = docBaseExcels.get(0);
|
|
|
+ Class<? extends BionutritionDocHeaderBaseExcel> aClass = bionutritionDocBaseExcel.getBionutritionDocHeaderBaseExcelDTO().getClass();
|
|
|
+ Field[] headerSonFields = aClass.getDeclaredFields();
|
|
|
+ Field[] headerFatherFields = aClass.getSuperclass().getDeclaredFields();
|
|
|
+ //1.设置列数,长度为单头和明细的字段数和
|
|
|
+ // 单头字段数
|
|
|
+ collLength = headerSonFields.length + headerFatherFields.length;
|
|
|
+ log.info("=====单头字段长度:{}",collLength);
|
|
|
+
|
|
|
+ List<BionutritionDocDetailsBaseExcel> detailsBaseExcelList = bionutritionDocBaseExcel.getBionutritionDocDetailsBaseExcelList();
|
|
|
+ Class<? extends BionutritionDocDetailsBaseExcel> bClass = detailsBaseExcelList.get(0).getClass();
|
|
|
+ Field[] detailSonField = bClass.getDeclaredFields();
|
|
|
+ Field[] detailFatherFields = bClass.getSuperclass().getDeclaredFields();
|
|
|
+ // 加上明细字段数
|
|
|
+ collLength = collLength + detailSonField.length +detailFatherFields.length;
|
|
|
+
|
|
|
+ // 获取所有字段
|
|
|
+ Field[] totalFields = new Field[collLength];
|
|
|
+ System.arraycopy(headerSonFields,0,totalFields,0,headerSonFields.length);
|
|
|
+ System.arraycopy(headerFatherFields,0,totalFields,headerSonFields.length,headerFatherFields.length);
|
|
|
+ System.arraycopy(detailSonField,0,totalFields,headerSonFields.length + headerFatherFields.length,detailSonField.length);
|
|
|
+ System.arraycopy(detailFatherFields,0,totalFields,headerSonFields.length + headerFatherFields.length + detailSonField.length,detailFatherFields.length);
|
|
|
+ log.info("==所有字段:{}",totalFields);
|
|
|
+
|
|
|
+ //2.创建第一行标题
|
|
|
+ SXSSFRow row0 = sheet.createRow(0);
|
|
|
+ SXSSFCell cell1 = row0.createCell(0);
|
|
|
+ cell1.setCellValue("单头");
|
|
|
+ SXSSFCell cell2 = row0.createCell(headerSonFields.length + headerFatherFields.length+1);
|
|
|
+ cell2.setCellValue("明细");
|
|
|
+ // ‘单头’标题所占的列合并
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(0,0,0,headerSonFields.length + headerFatherFields.length));
|
|
|
+ // ‘明细’标题所占的列合并
|
|
|
+ sheet.addMergedRegion(new CellRangeAddress(0,0,headerSonFields.length + headerFatherFields.length+1,collLength));
|
|
|
+
|
|
|
+ //3.创建第二行标题
|
|
|
+ SXSSFRow row1 = sheet.createRow(1);
|
|
|
+ for (int i = 0; i < collLength; i++) {
|
|
|
+ SXSSFCell cell = row1.createCell(i);
|
|
|
+ cell.setCellValue(totalFields[i].getName());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4.设置数据
|
|
|
+
|
|
|
+ // 5.响应到客户端
|
|
|
+ OutputStream out = null;
|
|
|
+ try {
|
|
|
+ out = response.getOutputStream();
|
|
|
+ response.setContentType("application/x-msdownload");
|
|
|
+ response.setHeader("Content-Disposition","attachment;filename=test1");
|
|
|
+ workbook.write(out);
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 构建类型单据内容(单个)
|
|
|
* @param docNo
|
|
@@ -186,7 +285,7 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
private List<BionutritionDocBaseDTO> buildBionutritionDocSameTypeList(List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList){
|
|
|
List<BionutritionDocHeaderBaseDTO> bionutritionDocHeaderBaseDTOList = BionutritionDocUtil.buildBionutritionDocHeaderDTOList(bionutritionDocHeaderDTOList);
|
|
|
List<BionutritionDocDetailsDTO> bionutritionDocDetailsDTOList = bionutritionDocDetailsService.getBionutritionDocDetailsDTOList(
|
|
|
- bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getDocNo).distinct().collect(Collectors.toList()));
|
|
|
+ bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getId).distinct().collect(Collectors.toList()));
|
|
|
List<BionutritionDocDetailsBaseDTO> bionutritionDocDetailsBaseDTOList = BionutritionDocUtil.buildBionutritionDocDetailsDTOList(
|
|
|
bionutritionDocHeaderDTOList.stream().findFirst().get().getDocType(), bionutritionDocDetailsDTOList);
|
|
|
return getBionutritionDocBaseDTOList(bionutritionDocDetailsBaseDTOList, bionutritionDocHeaderBaseDTOList);
|
|
@@ -200,7 +299,7 @@ public class BionutritionDocHeaderServiceImpl extends CrudServiceImpl<Bionutriti
|
|
|
private List<BionutritionDocBaseDTO> buildBionutritionDocDifferentTypeList(List<BionutritionDocHeaderDTO> bionutritionDocHeaderDTOList){
|
|
|
Map<String, List<BionutritionDocHeaderBaseDTO>> bionutritionDocHeaderMap = BionutritionDocUtil.buildBionutritionDocHeaderDTOByDocTypeMap(bionutritionDocHeaderDTOList);
|
|
|
List<BionutritionDocDetailsDTO> bionutritionDocDetailsDTOList = bionutritionDocDetailsService.getBionutritionDocDetailsDTOList(
|
|
|
- bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getDocNo).distinct().collect(Collectors.toList()));
|
|
|
+ bionutritionDocHeaderDTOList.stream().map(BionutritionDocHeaderDTO::getId).distinct().collect(Collectors.toList()));
|
|
|
Map<String, List<BionutritionDocDetailsDTO>> bionutritionDocDetailsMap = bionutritionDocHeaderMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey,
|
|
|
item -> bionutritionDocDetailsDTOList.stream().filter(detail -> item.getValue().stream().anyMatch(header ->
|
|
|
StringUtils.equals(header.getId(), detail.getDocHeaderId()))).collect(Collectors.toList())));
|