许鹏程
2024-01-10 d2d7c2561ea9f8a7e909588a40920c7dc3064b3f
product-server-data-center/src/main/java/com/product/data/center/service/SNAssociatedItemService.java
@@ -10,6 +10,7 @@
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.date.DateTime;
import com.product.core.entity.SQLEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -280,28 +281,43 @@
   public void getReportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException {
      //获取机号查询信息
      FieldSetEntity fse = BaseUtil.getFieldSetEntity(request);
      DataTableEntity workCenterOperationInfomationSheet = this.dtSNItemInfo(fse);
      Boolean isAll = fse.getBoolean("is_all");
      if (isAll) {
         fse.setValue(CmnConst.CPAGE, 1);
         fse.setValue(CmnConst.PAGESIZE, 999);
      }
      //初始EXCEL信息
      response.setContentType("multipart/form-data");
      response.setCharacterEncoding("utf-8");
      //这里URLEncoder.encode可以防止中文乱码
      String fileName = URLEncoder.encode("SN关联物料" + DateUtil.format(new Date(), "yyyyMMddHHmmss") + ".xlsx", "UTF-8");
      response.setHeader("Content-disposition", "attachment;filename=" + fileName);
      List<SNAssociatedItemEntity> traceSNItemEntityList = new ArrayList<>();
      for (int i = 0; i < workCenterOperationInfomationSheet.getRows(); i++) {
         FieldSetEntity fieldSetEntity = workCenterOperationInfomationSheet.getFieldSetEntity(i);
         Map<Object, Object> values = fieldSetEntity.getValues();
         JSONObject jsonObject = new JSONObject((Map) values);
         SNAssociatedItemEntity manufacturingOrderEntity = jsonObject.toBean(SNAssociatedItemEntity.class);
         traceSNItemEntityList.add(manufacturingOrderEntity);
      }
      ServletOutputStream outputStream = response.getOutputStream();
      ExcelWriter excelWriter = EasyExcel.write(outputStream, SNAssociatedItemEntity.class).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
      DataTableEntity workCenterOperationInfomationSheet;
      try {
         WriteSheet writeSheet = EasyExcel.writerSheet(1, "data").build();
         excelWriter.write(traceSNItemEntityList, writeSheet);
         do {
            workCenterOperationInfomationSheet = this.dtSNItemInfo(fse);
            if (DataTableEntity.isEmpty(workCenterOperationInfomationSheet)) {
               continue;
            }
            List<SNAssociatedItemEntity> traceSNItemEntityList = new ArrayList<>();
            for (int i = 0; i < workCenterOperationInfomationSheet.getRows(); i++) {
               FieldSetEntity fieldSetEntity = workCenterOperationInfomationSheet.getFieldSetEntity(i);
               Map<Object, Object> values = fieldSetEntity.getValues();
               JSONObject jsonObject = new JSONObject((Map) values);
               SNAssociatedItemEntity manufacturingOrderEntity = jsonObject.toBean(SNAssociatedItemEntity.class);
               traceSNItemEntityList.add(manufacturingOrderEntity);
            }
            WriteSheet writeSheet = EasyExcel.writerSheet(1, "data").build();
            excelWriter.write(traceSNItemEntityList, writeSheet);
            fse.setValue(CmnConst.CPAGE, fse.getInteger(CmnConst.CPAGE) + 1);
         } while (
               isAll && workCenterOperationInfomationSheet != null && workCenterOperationInfomationSheet.getSqle().isCountLoad());
      } catch (Exception e) {
         throw e;
      } finally {
@@ -321,12 +337,15 @@
      boolean isRecentData = fse.getBoolean(CmnConst.IS_RECENT_DATA) == true;//是否近期数据
      Integer pageSize = fse.getInteger(CmnConst.PAGESIZE);    //页数大小
      Integer cpage = fse.getInteger(CmnConst.CPAGE);            //目标页
      SQLEntity sqle = new SQLEntity();
      sqle.setCountLoad(false);
      //创建tracking表SQL,并获取过滤的数据
      String parseTrackingSql = createTrackingSql(fse, isBakTable, isRecentData);
      DataTableEntity dtTracking = baseDao.listTable(parseTrackingSql, new Object[]{}, pageSize, cpage);
      if (!BaseUtil.dataTableIsEmpty(dtTracking)) {
         if (dtTracking.getRows() == pageSize) {
            sqle.setCountLoad(true);
         }
         //获取总条数
         String totalTrackingSql = "SELECT COUNT(*)count_total FROM (" + parseTrackingSql + ")t";
//         FieldSetEntity fseTotalTracking = baseDao.getFieldSetBySQL(totalTrackingSql, new Object[]{}, false);
@@ -335,16 +354,18 @@
         //Method1:使用OR查询
         Object[] serialNumbers = dtTracking.getUuids();
         String keypSql = createKeypSql(serialNumbers, isBakTable, isRecentData);
         System.out.println(keypSql);
         DataTableEntity dtKeyp = baseDao.listTable(keypSql, new Object[]{});
         if (!BaseUtil.dataTableIsEmpty(dtKeyp)) {
            //将tracking表的数据转为(key,value)形式存储
            JSONObject json = convertDataTableToJson(dtTracking);
            addKeypInfo(json, dtKeyp);
            dtKeyp.setSqle(sqle);
            return dtKeyp;
         }
      }
      return null;
      DataTableEntity dataTableEntity = new DataTableEntity();
      dataTableEntity.setSqle(sqle);
      return dataTableEntity;
   }
}