Browse Source

Merge remote-tracking branch 'origin/master'

liuyc 1 year ago
parent
commit
c5e5a7e6f9
18 changed files with 219 additions and 66 deletions
  1. 3 0
      blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveTaskPageVO.java
  2. 2 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/MileagexyDTO.java
  3. 3 3
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/BaseInfo.java
  4. 1 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/Material.java
  5. 3 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java
  6. 2 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ReportResult.java
  7. 1 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileTaskController.java
  8. 1 0
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java
  9. 9 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml
  10. 150 4
      blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java
  11. 27 1
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java
  12. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorCalc.java
  13. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java
  14. 0 44
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSort.java
  15. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java
  16. 7 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java
  17. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  18. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

+ 3 - 0
blade-service-api/blade-archive-api/src/main/java/org/springblade/archive/vo/ArchiveTaskPageVO.java

@@ -45,4 +45,7 @@ public class ArchiveTaskPageVO implements Serializable {
     @ApiModelProperty(value = "任务类型")
     private Integer type;
 
+    @ApiModelProperty(value = "档案附件url")
+    private String archiveAppUrl;
+
 }

+ 2 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/MileagexyDTO.java

@@ -13,7 +13,8 @@ public class MileagexyDTO {
     private Double value = 0.0;        // 里程
     private Double x = 0.0;        // x
     private Double y = 0.0;
-    private Double r = 0.0;         //半径
+    private Double r = 0.0;
+    private Double r2 = 0.0;    //半径
     private Integer orderNum = 0;     //顺序
     private Integer type = 0;     //类型 0 起点  1交点  2终点
     private Double angle = 0.0;     //方位角

+ 3 - 3
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/BaseInfo.java

@@ -49,13 +49,13 @@ public class BaseInfo  {
      * 开户银行
      * */
     @JSONField(name = "key_8",label="开户银行",ordinal = 8)
-    private String  bankName;
+    private String  bankName  ="未设置";
     /**对公账户*/
     @JSONField(name = "key_9",label="对公账户",ordinal = 9)
-    private String  bankAccount;
+    private String  bankAccount ="未设置";
     /**银行账户名称*/
     @JSONField(name = "key_10",label="银行账户名称",ordinal = 10)
-    private String  bankAccountName;
+    private String  bankAccountName = "未设置";
     /**合同总金额*/
     @JSONField(name = "key_11",label="合同总金额",ordinal = 11)
     private String  TotalAmount;

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/Material.java

@@ -30,7 +30,7 @@ public class Material {
     @JSONField(name = "key_5",label="数量",ordinal = 5)
     private String meterAmount;
     @JSONField(name = "key_6",label="材料合计价格",ordinal = 6)
-    private String sum;
+    private String sum="0";
     @JSONField(name = "key_7",label="预付款比例",ordinal = 7)
     private String ratio;
     @JSONField(name = "key_8",label="材料预付款",ordinal = 8)

+ 3 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java

@@ -32,5 +32,8 @@ public class MeterPeriodInfo {
     /**上期累计金额*/
     @JSONField(name = "key_4",label="上期累计金额",ordinal = 4)
     private String  preTotal;
+    /**请款理由*/
+    @JSONField(name = "key_5",label="请款理由",ordinal = 5)
+    private String  cause;
 
 }

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ReportResult.java

@@ -16,6 +16,8 @@ public class ReportResult {
     private String url;
     /**表编号*/
     private String initTableName;
+    /**表名*/
+    private String name;
     /**每一页的数据,格式{y_x:val,y1_x1:val1...}{...}...*/
     private List<Map<String,Object>> data;
 }

+ 1 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileTaskController.java

@@ -302,6 +302,7 @@ public class ArchiveFileTaskController extends BladeController {
                     vo.setType(task.getType());
                     vo.setTaskDesc(task.getTaskContent());
                     vo.setTaskReportUserName(nameMap.get(Long.parseLong(task.getReportUser())));
+                    vo.setArchiveAppUrl(task.getAttachmentPdfUrl());
                     List<TaskParallel> taskParallelList = finalTaskParallelGroupMap.get(task.getProcessInstanceId());
                     if (taskParallelList != null && taskParallelList.size() > 0) {
                         //如果是垂直签,且是待办页面,判断是否是当前用户审批轮次,不是当前用户审批轮次就不显示该任务

+ 1 - 0
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.java

@@ -187,4 +187,5 @@ public interface ArchivesAutoMapper extends BaseMapper<ArchivesAuto> {
 
     ArchiveConclusion getArchiveConclusion(@Param("projectId") Long projectId,@Param("userId") Long userId);
 
+    List<ArchivesAutoVO2> getAllArchive(@Param("ids") List<Long> longs);
 }

+ 9 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/mapper/ArchivesAutoMapper.xml

@@ -1054,7 +1054,15 @@
     <select id="getArchiveConclusion" resultType="org.springblade.archive.entity.ArchiveConclusion">
         select * from u_archive_conclusion where project_id = #{projectId} and expert_id = #{userId}
     </select>
-
+    <select id="getAllArchive" resultType="org.springblade.archive.vo.ArchivesAutoVO2">
+        select
+            uaa.id,uaa.name,uaa.page_n ,uaa.remark ,uaa.file_number,
+            (select bdb.dict_value  from blade_dict_biz bdb WHERE bdb.is_sealed = 0 and bdb.code = 'storage_period' and bdb.dict_key = uaa.storage_time limit 1 ) as storageTimeValue
+        from  u_archives_auto uaa where id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
 
 
     <update id="splitFiles">

+ 150 - 4
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -28,6 +28,11 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.itextpdf.text.*;
+import com.itextpdf.text.pdf.BaseFont;
+import com.itextpdf.text.pdf.PdfPCell;
+import com.itextpdf.text.pdf.PdfPTable;
+import com.itextpdf.text.pdf.PdfWriter;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
@@ -88,10 +93,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.math.BigDecimal;
 import java.net.URL;
 import java.nio.file.Files;
@@ -99,6 +101,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
@@ -140,6 +143,13 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 	private final ArchiveConclusionMapper conclusionMapper;
 
+	private final NewIOSSClient newIOSSClient;
+	//表格高度
+	private static int high = 20;
+	//表格宽度
+	private static int widthPercentage = 100;
+
+
 
 
 
@@ -2779,6 +2789,18 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		task.setStatus(1);
 		//档案id
 		task.setArchiveIds(dto.getArchiveIds());
+		//设置申请档案的预览PDF,如果附件存在则拼接到PDF后面
+		ProjectInfo project = projectClient.getById(dto.getProjectId() + "");
+		List<Long> longs = Func.toLongList(dto.getArchiveIds());
+		List<ArchivesAutoVO2> vo2s = baseMapper.getAllArchive(longs);
+		try {
+			String pdfUrl = createAppPdf(project.getProjectName(),vo2s);
+			task.setAttachmentPdfUrl(pdfUrl);
+		}catch (Exception e){
+			throw new ServiceException(e.getMessage());
+		}
+		//如果存在附件则拼接
+		//保存任务
 		taskClient.saveTask(task);
 		//根据任务人设置task_parallel
 		List<SaveApplyDTO.CustomUserTask> userTasks = dto.getUserTasks();
@@ -2798,6 +2820,101 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
 	}
 
+	//生成验收申请PDF
+	private String createAppPdf(String projectName, List<ArchivesAutoVO2> vo2s) throws Exception {
+		String fileUrl = "C:\\Users\\泓创研发01\\Desktop\\appPDF.pdf";
+		//新建一个pdf文档对象,前一个参数是纸张大小,后四个为边距
+		Document document = new Document(PageSize.A4, 5, 5, 30, 30);
+		//建立一个书写器
+		PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(fileUrl));
+		document.open();
+		//创建字体
+		BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
+		//字体对象,这里可以创建一个方法
+		Font size10font = new Font(baseFont, 10, Font.NORMAL); //大小为10的正常字体
+		Font size17font = new Font(baseFont, 17, Font.NORMAL);  //大小为17的正常字体
+		//该数组是每个表格的宽度
+		float[] floats = new float[6];
+		floats[0] = 0.1f;
+		floats[1] = 0.1f;
+		floats[2] = 0.5f;
+		floats[3] = 0.1f;
+		floats[4] = 0.1f;
+		floats[5] = 0.1f;
+		tableHeader(projectName,document,size10font,size17font,floats);
+
+		//将数据放入表格中
+		int total = 0;
+		for (int i = 0; i < vo2s.size(); i++) {
+			ArchivesAutoVO2 vo2 = vo2s.get(i);
+			PdfPTable dataTable = new PdfPTable(6);
+			dataTable.setWidthPercentage(widthPercentage);
+			dataTable.setTotalWidth(floats);
+			dataTable.addCell(pdfTableStyle(i+1+"", size10font, high, true, true));
+			dataTable.addCell(pdfTableStyle(vo2.getFileNumber(), size10font, high, true, true));
+			dataTable.addCell(pdfTableStyle("		"+vo2.getName(), size10font, high, false, false));
+			dataTable.addCell(pdfTableStyle(vo2.getPageN()+"", size10font, high, true, true));
+			dataTable.addCell(pdfTableStyle(vo2.getStorageTimeValue(), size10font, high, true, true));
+			dataTable.addCell(pdfTableStyle(vo2.getRemark(), size10font, high, true, true));
+			total += (int)Math.ceil(new Double(vo2.getName().length()+4) / 50);
+			//如果出现不相同,则合并之前的
+			document.add(dataTable);
+			if (total >= 35 && i !=  (vo2s.size()-1)) {
+				total = 0;
+				document.newPage();
+				tableHeader(projectName,document,size10font,size17font,floats);
+			}
+		}
+		document.close();
+		writer.close();
+        BladeFile bladeFile = newIOSSClient.uploadFile("ArchiveApp.pdf", fileUrl);
+        if (bladeFile == null || StringUtils.isBlank(bladeFile.getLink())) {
+			throw new ServiceException("上传PDF失败");
+		}
+		return bladeFile.getLink();
+	}
+
+	/**
+	 * 	表头
+	 * @param document	整个文档
+	 * @param size10font
+	 * @param size17font
+	 * @param floats	表头格式
+	 * @throws DocumentException
+	 */
+	void tableHeader(String projectName,Document document,Font size10font,Font size17font,float[] floats) throws DocumentException {
+		//添加标题
+		//创建第一行表格
+		PdfPTable tableName = new PdfPTable(1);
+		tableName.setWidthPercentage(widthPercentage);  //设置标题长度占纸张比例
+		PdfPCell cell = pdfTableStyle("单位科学技术档案归档目录", size17font, 50, true, true);
+		cell.disableBorderSide(15);
+		//给表格赋值
+		tableName.addCell(cell);
+		//将表格添加到文档对象中
+		document.add(tableName);
+		//项目名称
+		PdfPTable two = new PdfPTable(1);
+		two.setWidthPercentage(widthPercentage);
+		PdfPCell cell2 = pdfTableStyle("项目名称:"+projectName, size10font, 20, false, false);
+		cell2.disableBorderSide(15);
+		two.addCell(cell2);
+		document.add(two);
+		//表头文字
+		String[] name = new String[]{"序号", "档号", "案卷提名", "总页数","保管期限","备注"};
+		//创建第二行,并设置第二行中的表格数
+		PdfPTable twoTable = new PdfPTable(name.length);
+		twoTable.setWidthPercentage(widthPercentage);
+		//循环将表头数据添加到第二行表格中
+		for (int i = 0; i < name.length; i++) {
+			PdfPCell pdfPCell = pdfTableStyle(name[i], size10font, high, true, true);
+			twoTable.addCell(pdfPCell);
+		}
+		//设置表格的宽度
+		twoTable.setTotalWidth(floats);
+		document.add(twoTable);
+	}
+
 	@Override
 	public R<Boolean> batchUpdateIsApply(Integer isApply, List<Long> ids) {
 		this.update(new LambdaUpdateWrapper<ArchivesAuto>()
@@ -3257,4 +3374,33 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 		Process process = Runtime.getRuntime().exec(cmds);
 		process.waitFor();
 	}
+
+	/**
+	 * 表格的样式
+	 *
+	 * @param content 内容
+	 * @param font    字体对象
+	 * @param high    表格高度
+	 * @return
+	 * @Param isAlignCenter 是否水平居中
+	 * @Param isAlignMidde  是否垂直居中
+	 */
+	static PdfPCell pdfTableStyle(String content, Font font, int high, boolean isAlignCenter, boolean isAlignMiddle) {
+		Paragraph phrase = new Paragraph(content, font);
+//		phrase.setAlignment(Paragraph.ALIGN_LEFT);
+		PdfPCell pdfPCell = new PdfPCell(phrase);
+		pdfPCell.setMinimumHeight(high);
+		pdfPCell.setUseAscender(true); // 设置可以居中
+		if (isAlignCenter) {
+			pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); // 设置水平居中
+		}else {
+			pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_LEFT); // 设置首行
+		}
+		if (isAlignMiddle) {
+			pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中
+		}else {
+			pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_LEFT); // 设置垂直居中
+		}
+		return pdfPCell;
+	}
 }

+ 27 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -338,7 +338,7 @@ public class FormulaUtils {
         }
     }
 
-
+/*把模型类转换成共识配置选项*/
     public static List<WbsFormElementVO> toElementVos(Class<?> clazz)  {
         List<WbsFormElementVO> vos =new ArrayList<>();
         try {
@@ -361,6 +361,32 @@ public class FormulaUtils {
         return vos;
     }
 
+    public static <T> Map<String,FormData> toFormDataMap(T bean){
+        Map<String,FormData> result = new HashMap<>();
+        if(bean!=null){
+            try {
+                @SuppressWarnings("unchecked")
+                Map<String,String> map= JSON.parseObject(JSON.toJSONString(bean),Map.class);
+                Class<?> clazz=bean.getClass();
+                String TBN = (String)  clazz.getField("TBN").get(null);
+                for (Field field : clazz.getDeclaredFields()) {
+                    JSONField jf = field.getAnnotation(JSONField.class);
+                    if (jf != null) {
+                      FormData fd = new FormData();
+                      fd.setCode(TBN+ StringPool.COLON +jf.name());
+                      fd.setEName(jf.label());
+                      fd.getValues().add(new ElementData(0,0,map.get(fd.getKey()),0,0));
+                      fd.getCoordsList().add(new Coords("0","0"));
+                        result.put(fd.getCode(),fd);
+                    }
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+
+        }
+        return result;
+    }
 
 
     /**从元素名称中解析项目名称,细化项目匹配用*/

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorCalc.java

@@ -61,6 +61,7 @@ public class ExecutorCalc extends FormulaExecutor {
                                     ele.add(formData);
                                 }
                             });
+                            /*并不是所有依赖都用FormData表示*/
                             if(ele.size()<relyList.size()){
                                 tec.getLog().put(FormulaLog.RELY,fd.getCode()+"@"+fd.getEName()+"@"+fd.getFormula().getFormula().replaceAll("'", ""));
                                 continue;

+ 4 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -1,13 +1,11 @@
 package org.springblade.manager.formula.impl;
 
+import com.mixsmart.utils.FormulaUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.manager.formula.FormulaExecutor;
 import org.springblade.manager.vo.BaseInfo;
 import org.springblade.manager.vo.MeterPeriodInfo;
-
-import java.util.Map;
 import java.util.function.Function;
 
 /**
@@ -29,9 +27,11 @@ public class ExecutorInit extends FormulaExecutor {
         /*加载合同数据*/
         BaseInfo baseInfo = this.baseInfoFc.apply(tec.getContractId());
         tec.getConstantMap().put(BaseInfo.TBN,baseInfo);
+        tec.formDataMap.putAll(FormulaUtils.toFormDataMap(baseInfo));
         /*加载计量期信息*/
         MeterPeriodInfo meterPeriod=meterPeriodFc.apply(tec.getPeriodId());
-        tec.getConstantMap().put(MeterPeriodInfo.TBN, meterPeriod);
+        tec.formDataMap.putAll(FormulaUtils.toFormDataMap(meterPeriod));
+        tec.getConstantMap().put(MeterPeriodInfo.TBN,meterPeriod);
     }
 
 

+ 0 - 44
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSort.java

@@ -62,53 +62,9 @@ public class ExecutorSort extends FormulaExecutor {
             /*初始化排序值,每个点间隔1000,方便插入*/
             AtomicInteger sort = new AtomicInteger();
             tec.formDataList.forEach(e -> e.setSort(sort.getAndAdd(1000)));
-            /*收集汇总阶段执行的公式*/
-            if(!tec.isNew) {
-                summaryPre(tec);
-            }
         }catch (Exception e){
             e.printStackTrace();
         }
     }
-    public void summaryPre(TableElementConverter tec){
-        tec.formDataList.stream().filter(FormData::executable).filter(e-> StringUtils.isEquals("CKI",e.getFormula().getNumber())||StringUtils.isEquals("CKD",e.getFormula().getNumber())).forEach(t->tec.summary.add(t));
-        tec.formDataList.removeAll(tec.summary);
-        /*监表的处理*/
-        Optional<NodeTable> aop=tec.getTableAll().stream().filter(e->e.getTableType().equals(4)).findAny();
-        if(aop.isPresent()){
-            /*存在监表,则需要收集检查项目和检查时间等元素*/
-            List<String> wop=tec.getTableAll().stream().filter(e->e.getTableType().equals(1)&&!e.getNodeName().contains("附表")).map(NodeTable::getInitTableName).distinct().collect(Collectors.toList());
-            if(wop.size()>0){
-                /*存在检验表*/
-                tec.getKeyMappers().stream().filter(e->wop.contains(e.getTableName())&&tec.formDataMap.containsKey(e.getCode())).forEach(k->{
-                    /*包含的单元格超过三个就算实测项目部分实测值元素只有一个单元格,拼接写入全部数据*/
-                    /*k.getEName().contains("实测值")&&k.getEName().contains("偏差值")*/
-                    FormData ft=tec.formDataMap.get(k.getCode());
-                    if(ft.getCoordsList().size()>5||(k.getEName().contains("实测值")&&!k.getEName().contains("设计值")&&!k.getEName().contains("合格率"))){
-                        tec.checkItems.add(ft);
-                    }else if(k.getEName().contains("检验日期")){
-                        tec.checkDate.add(ft);
-                    }
-                });
-            }else{
-                /*不存在检验表的的情况则获取记录表*/
-                List<String> recordTable=tec.getTableAll().stream().filter(e->StringUtils.isEquals(2,e.getTableType())).map(NodeTable::getInitTableName).distinct().collect(Collectors.toList());
-                tec.getKeyMappers().stream().filter(k->recordTable.contains(k.getTableName())).map(k->k.getCode()+"@"+k.getEName()).distinct().forEach(k->{
-                    String[] ka=k.split("@");
-                    if(ka[1].contains("实测值")){
-                        tec.checkItems.add(tec.formDataMap.get(ka[0]));
-                    }else if(ka[1].contains("日期")||ka[1].contains("年月日")){
-                        tec.checkDate.add(tec.formDataMap.get(ka[0]));
-                    }
-                });
-
-            }
-        }
-        if(tec.checkItems.size()>0){
-            /*排序*/
-            List<String> iniTableNames=tec.getTableAll().stream().map(NodeTable::getInitTableName).distinct().collect(Collectors.toList());
-            tec.checkItems= tec.checkItems.stream().sorted(Comparator.comparingInt((FormData i)->iniTableNames.indexOf(i.getTableName())).thenComparingInt(FormData::getMaxRow)).collect(Collectors.toList());
-        }
 
-    }
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -449,6 +449,7 @@ public class TableElementConverter implements ITableElementConverter {
                    ReportResult rt = new ReportResult();
                    rt.setUrl(report.getHtmlUrl());
                    rt.setInitTableName(report.getInitTableName());
+                   rt.setName(report.getNodeName());
                    reportResults.add(rt);
                    List<FormData> fds =group.get(report.getInitTableName());
                    if(fds.size()>0){

+ 7 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java

@@ -50,14 +50,17 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long,MeterPeriodInfo> getMeterPeriod(){
         return id-> {
-           List<MeterPeriodInfo> beans = this.jdbcTemplate.query("select period_number periodNumber,period_name periodName,form_print_date formPrintDate from s_meter_period where id= "+id, new BeanPropertyRowMapper<>(MeterPeriodInfo.class));
-
+           List<MeterPeriodInfo> beans = this.jdbcTemplate.query("select b.period_number periodNumber,b.period_name periodName,a.print_date formPrintDate ,a.repayment_cause cause from s_material_start_statement a join  s_meter_period b on a.meter_period_id=b.id where a.id="+id, new BeanPropertyRowMapper<>(MeterPeriodInfo.class));
             if(beans.size()>0){
                 MeterPeriodInfo bean = beans.get(0);
                 List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList("select sum(b.current_amount) currentAmount from s_meter_period a join s_meter_period b on (a.contract_id=b.contract_id and a.type=b.type) where a.id="+id+" and b.id<>"+id);
                 if(listMap.size()>0) {
-                    bean.setPreTotal(StringUtils.number2String(listMap.get(0).get("currentAmount").toString(),2));
+                    String str=StringUtils.handleNull(listMap.get(0).get("currentAmount"));
+                    if(StringUtils.isNumber(str)) {
+                        bean.setPreTotal(StringUtils.number2String(str, 2));
+                    }
                 }
+                return bean;
             }
             return new MeterPeriodInfo();
         };
@@ -66,7 +69,7 @@ public class FormulaDaoImpl implements IFormulaDao {
     @Override
     public Function<Long, List<Material>> getMaterialForm() {
         return id->{
-            List<Map<String,Object>> mapList = this.jdbcTemplate.queryForList("select  b.material_name name,b.unit,b.price,a.meter_amount amount,a.material_source source,material_conform  materialConform,a.storage_place storagePlace,a.storage_status storageStatus,a.storage_conform storageConform,a.remark from s_material_meter_form a left join s_contract_material b on a.contract_material_id = b.id where a.meter_period_id="+id+"  and a.is_deleted=0");
+            List<Map<String,Object>> mapList = this.jdbcTemplate.queryForList("select  b.material_name name,b.unit,b.price,a.meter_amount amount,meter_money sum,a.material_source source,material_conform  materialConform,a.storage_place storagePlace,a.storage_status storageStatus,a.storage_conform storageConform,a.remark from s_material_meter_form a left join s_contract_material b on a.contract_material_id = b.id where a.meter_period_id="+id+"  and a.is_deleted=0");
             if(Func.isNotEmpty(mapList)){
                return mapList.stream().map(m->BeanUtil.toBean(m,Material.class)).collect(Collectors.toList());
             }

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -2532,16 +2532,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     String[] tabArr=new String[]{"计量报表","动员预付款报表","材料预付款报表"};
     @Override
     public  List<ReportResult> execute3(Long contractId,Long periodId ,Integer type) {
-        /*封面、支付申请单、付款申请表*/
         ContractInfo contractInfo = this.contractInfoService.getById(contractId);
         Map<String,String> parent=  this.getSqlOne("select id,wbs_id wbsId,CONCAT(ancestors,',',id) path from  m_wbs_tree_private a  where a.node_name=? and a.project_id=?",Map.class,tabArr[type],contractInfo.getPId());
         List<NodeTable> tableList=  this.getSqlList("select p_key_id pkeyId, node_name nodeName ,init_table_name initTableName,html_url htmlUrl  from  m_wbs_tree_private where ancestors like ? and LENGTH(html_url)>0 and is_deleted=0 and project_id=? and wbs_id=?",NodeTable.class,parent.get("path")+"%",contractInfo.getPId(),parent.get("wbsId"));
         Map<String,Map<String,String>> coordinateMap=tableList.stream().collect(Collectors.toMap(NodeTable::getInitTableName,m->FormulaUtils.getElementCell(m.getHtmlUrl()),(v1,v2)->v2));
-        List<FormData> processFds = this.createFormDataByTableName(String.join(",", ""));
+        List<FormData> processFds = this.createFormDataByTableName(tableList.stream().map(NodeTable::getInitTableName).collect(Collectors.joining("','")));
         listForMeter(processFds,contractInfo.getPId(),parent.get("id"));
         TableElementConverter tec = new TableElementConverter(processFds,coordinateMap,tableList);
         tec.setProjectId(Long.parseLong(contractInfo.getPId()));
         tec.setContractId(contractInfo.getId());
+        tec.setPeriodId(periodId);
+        tec.setLog(new FormulaLog());
         tec.before();
         List<FormulaHandleChain> formulaHandleChains = new ArrayList<>();
         ExecutorInit init= new ExecutorInit(tec);

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -727,7 +727,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 sqlTmp = "select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id where a.id in(" + elementIds + ") and b.wbs_id=" + wbsTree.getWbsId() + " and b.scope=" + scopeA;
             } else if (com.mixsmart.utils.StringUtils.isEquals(type, 0)) {
                 treePrivate = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, id));
-                sqlTmp = "select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id join m_wbs_tree_private c on c.parent_id=b.node_id where a.id in(" + elementIds + ") and c.project_id=" + treePrivate.getProjectId() + " and b.scope=" + scopeA;
+                sqlTmp = "select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id join m_wbs_tree_private c on (c.parent_id=b.node_id and c.project_id=b.project_id) where a.id in(" + elementIds + ") and c.project_id=" + treePrivate.getProjectId() + " and b.scope=" + scopeA;
             } else {
                 sqlTmp = "select a.id from m_wbs_form_element a inner join m_element_formula_mapping b on a.id=b.element_id where a.id in(" + elementIds + ") and b.scope=" + scopeA;
             }