FormulaUtils.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package com.mixsmart.utils;
  2. import org.springblade.manager.dto.Coords;
  3. import org.springblade.manager.dto.ElementData;
  4. import org.springblade.manager.dto.FormData;
  5. import org.springblade.manager.entity.Formula;
  6. import java.math.BigDecimal;
  7. import java.util.*;
  8. import java.util.regex.Matcher;
  9. import java.util.regex.Pattern;
  10. import java.util.stream.Collectors;
  11. /**
  12. * @author yangyj
  13. * @Date 2022/7/14 15:55
  14. * @description TODO
  15. */
  16. public class FormulaUtils {
  17. public static Map<String,Object> triangleSquare(Object ranges){
  18. Map<String,Object> map =new HashMap<>();
  19. if(StringUtils.isEmpty(ranges)){
  20. //z的默认取值范围
  21. ranges="(0,15)";
  22. }
  23. Matcher m = RegexUtils.matcher("(\\-?\\d+)(\\D)(\\+?\\d+)",ranges.toString());
  24. if(m.find()) {
  25. System.out.println();
  26. int min = StringUtils.handObj2Integer(m.group(1));
  27. int max = StringUtils.handObj2Integer(m.group(3));
  28. Integer[] r = pythagorean(min, max);
  29. map.put("X", String.valueOf(r[0]));
  30. map.put("Y", String.valueOf(r[1]));
  31. map.put("Z", String.valueOf(r[2]));
  32. }
  33. return map;
  34. }
  35. /**
  36. * result[0]^2+result[1]^2=result[2]^2 result[] 元素均为正整数
  37. */
  38. public static Integer[] pythagorean(Integer min,Integer max){
  39. Integer[] result = null;
  40. List<Integer[]> list = new ArrayList<>();
  41. for(int i=1;i<=max;i++){
  42. for(int j=1;j<=max;j++){
  43. double tmp = Math.sqrt(Math.pow(i,2)+Math.pow(j,2));
  44. int z= (int) Math.round(tmp);
  45. if(min<z&&z<=max){
  46. Integer[] arr = new Integer[]{ i,j,z};
  47. list.add(arr);
  48. }
  49. }
  50. }
  51. if(ListUtils.isNotEmpty(list)){
  52. Random rm = new Random();
  53. result = list.get(rm.nextInt(list.size()));
  54. }
  55. return result;
  56. }
  57. public static void write(FormData fd, Object data){
  58. if(data instanceof List){
  59. List<Object> values = (List<Object>) data;
  60. if(values.size()>fd.getValues().size()){
  61. /*当生成的数据超过实际容量的时候,会自动追加页数*/
  62. if(fd.getCoordsList().size()==1){
  63. fd.getValues().get(0).setValue(values.stream().map(StringUtils::handleNull).collect(Collectors.joining("、")));
  64. }else{
  65. // copy(fd,values);
  66. for(int n=0;n<fd.getValues().size();n++){
  67. fd.getValues().get(n).setValue(values.get(n));
  68. }
  69. List<Object> overList=values.stream().skip(fd.getValues().size()).collect(Collectors.toList());
  70. List<Coords> coordsList = fd.getCoordsList();
  71. int addPage=(int)Math.ceil((double)overList.size()/(double)coordsList.size());
  72. fd.setAddPages(addPage);
  73. ElementData last =fd.getValues().get(fd.getValues().size()-1);
  74. int indexBase=last.getIndex()+1;
  75. List<ElementData> addList= new ArrayList<>();
  76. for(int i=0;i<addPage;i++){
  77. for(int j=0;j<coordsList.size();j++){
  78. /*超页就尽管写进去,格式化阶段再加表*/
  79. Coords coords = coordsList.get(j);
  80. Object v=null;
  81. int st=i*coordsList.size()+j;
  82. if(st<overList.size()){
  83. v= overList.get(st);
  84. }
  85. addList.add(new ElementData(indexBase+i,last.getGroupId(),v,coords.getX(),coords.getY()));
  86. }
  87. }
  88. fd.getValues().addAll(addList);
  89. }
  90. }else{
  91. for(int n=0;n<values.size();n++){
  92. fd.getValues().get(n).setValue(values.get(n));
  93. }
  94. }
  95. }else{
  96. if(Formula.FULL.equals(fd.getFormula().getOutm())){
  97. /*填充策略*/
  98. fd.getValues().forEach(e->e.setValue(data));
  99. }else{
  100. fd.getValues().get(0).setValue(data);
  101. }
  102. }
  103. }
  104. }