Showing
3 changed files
with
72 additions
and
10 deletions
xingyun-sc/src/main/java/com/lframework/xingyun/sc/controller/order/PurchaseOrderInfoController.java
| ... | ... | @@ -18,6 +18,7 @@ import com.lframework.xingyun.sc.entity.PurchaseOrderInfo; |
| 18 | 18 | import com.lframework.xingyun.sc.entity.PurchaseOrderLine; |
| 19 | 19 | import com.lframework.xingyun.sc.service.order.PurchaseOrderInfoService; |
| 20 | 20 | import com.lframework.xingyun.sc.service.order.PurchaseOrderLineService; |
| 21 | +import com.lframework.xingyun.sc.utils.LatexFormulaExcelExporterUtil; | |
| 21 | 22 | import com.lframework.xingyun.sc.vo.order.CreatePurchaseOrderInfoVo; |
| 22 | 23 | import com.lframework.xingyun.sc.vo.order.QueryPurchaseOrderInfoVo; |
| 23 | 24 | import com.lframework.xingyun.sc.vo.order.QueryPurchaseOrderLineVo; |
| ... | ... | @@ -27,6 +28,7 @@ import io.swagger.annotations.ApiImplicitParam; |
| 27 | 28 | import io.swagger.annotations.ApiOperation; |
| 28 | 29 | import lombok.extern.slf4j.Slf4j; |
| 29 | 30 | import org.apache.commons.collections4.CollectionUtils; |
| 31 | +import org.apache.commons.lang3.StringUtils; | |
| 30 | 32 | import org.apache.poi.hssf.usermodel.HSSFWorkbook; |
| 31 | 33 | import org.apache.poi.ss.usermodel.*; |
| 32 | 34 | import org.apache.poi.ss.util.CellRangeAddress; |
| ... | ... | @@ -213,7 +215,36 @@ public class PurchaseOrderInfoController extends DefaultBaseController { |
| 213 | 215 | setCellValue(sheet, startRow, 2, currentOrderLine.getQuality()); |
| 214 | 216 | setCellValue(sheet, startRow, 3, currentOrderLine.getBrand()); |
| 215 | 217 | |
| 216 | - //todo 规格 | |
| 218 | + List<LatexFormulaExcelExporterUtil.FormulaComponent> formulaComponentList = new ArrayList<>(3); | |
| 219 | + if (currentOrderLine.getThickness() != null) { | |
| 220 | + LatexFormulaExcelExporterUtil.FormulaComponent formulaComponent = new LatexFormulaExcelExporterUtil.FormulaComponent(); | |
| 221 | + formulaComponent.setBase(currentOrderLine.getThickness()); | |
| 222 | + formulaComponent.setSup(currentOrderLine.getThicknessTolPos()); | |
| 223 | + formulaComponent.setSub(currentOrderLine.getThicknessTolNeg()); | |
| 224 | + formulaComponentList.add(formulaComponent); | |
| 225 | + } | |
| 226 | + | |
| 227 | + if (currentOrderLine.getWidth() != null) { | |
| 228 | + LatexFormulaExcelExporterUtil.FormulaComponent formulaComponent = new LatexFormulaExcelExporterUtil.FormulaComponent(); | |
| 229 | + formulaComponent.setBase(currentOrderLine.getWidth()); | |
| 230 | + formulaComponent.setSup(currentOrderLine.getWidthTolPos()); | |
| 231 | + formulaComponent.setSub(currentOrderLine.getWidthTolNeg()); | |
| 232 | + formulaComponentList.add(formulaComponent); | |
| 233 | + } | |
| 234 | + | |
| 235 | + if (currentOrderLine.getLength() != null) { | |
| 236 | + LatexFormulaExcelExporterUtil.FormulaComponent formulaComponent = new LatexFormulaExcelExporterUtil.FormulaComponent(); | |
| 237 | + formulaComponent.setBase(currentOrderLine.getLength()); | |
| 238 | + formulaComponent.setSup(currentOrderLine.getLengthTolPos()); | |
| 239 | + formulaComponent.setSub(currentOrderLine.getLengthTolNeg()); | |
| 240 | + formulaComponentList.add(formulaComponent); | |
| 241 | + } | |
| 242 | + | |
| 243 | + String latex = LatexFormulaExcelExporterUtil.convertToLatex(formulaComponentList); | |
| 244 | + if (StringUtils.isNotBlank(latex)) { | |
| 245 | + LatexFormulaExcelExporterUtil.insertLatexImageToCell(workbook, sheet, latex, startRow, 4, 1, 7); | |
| 246 | + } | |
| 247 | + | |
| 217 | 248 | setCellValue(sheet, startRow, 11, currentOrderLine.getStatus()); |
| 218 | 249 | setCellValue(sheet, startRow, 13, currentOrderLine.getQuantity()); |
| 219 | 250 | setCellValue(sheet, startRow, 14, currentOrderLine.getSalesPrice()); |
| ... | ... | @@ -242,6 +273,7 @@ public class PurchaseOrderInfoController extends DefaultBaseController { |
| 242 | 273 | dataMap.put("shippingCost", data.getShippingCost()); |
| 243 | 274 | dataMap.put("remarks", data.getRemarks()); |
| 244 | 275 | dataMap.put("createUser", data.getCreateBy()); |
| 276 | + dataMap.put("element", data.getElement()); | |
| 245 | 277 | |
| 246 | 278 | |
| 247 | 279 | |
| ... | ... | @@ -382,21 +414,17 @@ public class PurchaseOrderInfoController extends DefaultBaseController { |
| 382 | 414 | newCell.setCellStyle(oldCell.getCellStyle()); |
| 383 | 415 | } |
| 384 | 416 | |
| 385 | - switch (oldCell.getCellType()) { | |
| 386 | - case 1: | |
| 387 | - //STRING | |
| 417 | + switch (oldCell.getCellTypeEnum()) { | |
| 418 | + case STRING: | |
| 388 | 419 | newCell.setCellValue(oldCell.getStringCellValue()); |
| 389 | 420 | break; |
| 390 | - case 0: | |
| 391 | - //NUMERIC | |
| 421 | + case NUMERIC: | |
| 392 | 422 | newCell.setCellValue(oldCell.getNumericCellValue()); |
| 393 | 423 | break; |
| 394 | - case 4: | |
| 395 | - //BOOLEAN | |
| 424 | + case BOOLEAN: | |
| 396 | 425 | newCell.setCellValue(oldCell.getBooleanCellValue()); |
| 397 | 426 | break; |
| 398 | - case 2: | |
| 399 | - //FORMULA | |
| 427 | + case FORMULA: | |
| 400 | 428 | newCell.setCellFormula(oldCell.getCellFormula()); |
| 401 | 429 | break; |
| 402 | 430 | default: | ... | ... |
| ... | ... | @@ -168,6 +168,40 @@ public class LatexFormulaExcelExporterUtil { |
| 168 | 168 | // pict.resize(0.95); // 缩小到90%,自然产生边距 |
| 169 | 169 | } |
| 170 | 170 | |
| 171 | + /** | |
| 172 | + * 将LaTeX公式作为图片插入到指定单元格 | |
| 173 | + */ | |
| 174 | + public static void insertLatexImageToCell(Workbook workbook, Sheet sheet, String latex, int rowIndex, int colIndex, int rowRange, int colRange) throws IOException { | |
| 175 | + // 1. 将LaTeX渲染为图片字节 | |
| 176 | + byte[] imageBytes = latexToImageBytes(latex, 36); | |
| 177 | + | |
| 178 | + // 2. 将图片添加到工作簿 | |
| 179 | + int pictureIdx = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_PNG); | |
| 180 | + | |
| 181 | + // 3. 创建绘图对象 | |
| 182 | + Drawing<?> drawing = sheet.createDrawingPatriarch(); | |
| 183 | + | |
| 184 | + // 4. 创建锚点,确定图片位置 | |
| 185 | + ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor(); | |
| 186 | + anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE); | |
| 187 | + anchor.setCol1(colIndex); // C列 (从0开始计数) | |
| 188 | + anchor.setRow1(rowIndex); // 当前数据行 (表头在第0行) | |
| 189 | + anchor.setCol2(colIndex + colRange); // 结束于D列 | |
| 190 | + anchor.setRow2(rowIndex + rowRange); // 结束于下一行 | |
| 191 | + | |
| 192 | + // 设置较小的起始偏移 | |
| 193 | + anchor.setDx1(50); // 水平偏移(建议值:10-100) | |
| 194 | + anchor.setDy1(25); // 垂直偏移(建议值:10-50) | |
| 195 | + | |
| 196 | + | |
| 197 | + // 5. 创建图片并插入 | |
| 198 | + Picture pict = drawing.createPicture(anchor, pictureIdx); | |
| 199 | + | |
| 200 | + // 6. 自动调整图片大小以适应单元格 (可选) | |
| 201 | + // 取消注释此行使图片自动适应锚点区域 | |
| 202 | +// pict.resize(0.95); // 缩小到90%,自然产生边距 | |
| 203 | + } | |
| 204 | + | |
| 171 | 205 | @Data |
| 172 | 206 | public static class FormulaComponent { |
| 173 | 207 | BigDecimal base; | ... | ... |
No preview for this file type