Sfoglia il codice sorgente

动物样本附件审批信息电子签名显示

陈长荣 2 mesi fa
parent
commit
0b64bc8d31

+ 1 - 1
jfcloud-gene-biz/pom.xml

@@ -56,7 +56,7 @@
     <dependency>
       <groupId>com.github.jfcloud</groupId>
       <artifactId>jfcloud-aew-rich-text</artifactId>
-      <version>k6.7</version>
+      <version>k6.8</version>
     </dependency>
 
     <dependency>

+ 3 - 4
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/entity/SampleInfo.java

@@ -6,7 +6,6 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 @Accessors(chain = true)
@@ -66,13 +65,13 @@ public class SampleInfo extends BaseEntity {
     private String revisionNo;
 
     @Schema(description = "收件日期")
-    private LocalDate receiptDate;
+    private String receiptDate;
 
     @Schema(description = "批准日期")
-    private LocalDate approvalDate;
+    private String approvalDate;
 
     @Schema(description = "失效日期")
-    private LocalDate expiryDate;
+    private String expiryDate;
 
     @Schema(description = "科研Id")
     private Long kyId;

+ 73 - 13
jfcloud-gene-biz/src/main/java/com/github/jfcloud/gene/sample/service/impl/SampleAnimalServiceImpl.java

@@ -13,9 +13,14 @@ import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.jfcloud.gene.cache.UserIdNameCache;
+import com.github.jfcloud.gene.common.constant.StrConstant;
 import com.github.jfcloud.gene.common.constant.WhetherEnum;
 import com.github.jfcloud.gene.common.util.CustomIdGenerator;
+import com.github.jfcloud.gene.constants.GeneStatusEnum;
 import com.github.jfcloud.gene.file.service.FileInfoService;
+import com.github.jfcloud.gene.flow.entity.FlowAudit;
+import com.github.jfcloud.gene.flow.service.FlowAuditService;
 import com.github.jfcloud.gene.sample.entity.*;
 import com.github.jfcloud.gene.sample.mapper.InspectionCommissionMapper;
 import com.github.jfcloud.gene.sample.mapper.SampleAnimalMapper;
@@ -27,6 +32,8 @@ import com.github.jfcloud.gene.sample.service.SampleCheckItemService;
 import com.github.jfcloud.gene.sample.service.SampleEditService;
 import com.github.jfcloud.gene.sample.vo.*;
 import com.github.jfcloud.gene.util.WordDataService;
+import com.github.jfcloud.gene.util.WordUtil;
+import com.github.jfcloud.rich.vo.HtmlParseVo;
 import com.github.jfcloud.rich.word.WordNodeFactory;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -36,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.lang.reflect.Field;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -51,6 +59,8 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
     private final SampleCheckItemService sampleCheckItemService;
     private final WordDataService wordDataService;
     private final FileInfoService fileInfoService;
+    private final UserIdNameCache userIdNameCache;
+    private final FlowAuditService flowAuditService;
 
     @Override
     public void removeBySampleId(Long sampleId) {
@@ -142,7 +152,7 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
 
 
         log.info("保存动物样本送检信息成功");
-//        generate(sampleId);
+        generate(sampleId);
     }
 
     @SneakyThrows
@@ -165,9 +175,6 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
         JSONObject sampleAnimalObj = JSON.parseObject(JSON.toJSONStringWithDateFormat(sampleAnimal, DatePattern.NORM_DATETIME_PATTERN));
         dataMap.put("sampleAnimal", sampleAnimalObj);
 
-        //申请时间
-        sampleInfoObj.put("applyTime", DateUtil.format(sampleInfo.getApplyTime(), DatePattern.NORM_DATE_PATTERN));
-
         //检测人员
         if (StrUtil.isNotEmpty(sampleInfo.getInspector())) {
             String inspectorName = JSON.parseArray(sampleInfo.getInspector())
@@ -185,15 +192,68 @@ public class SampleAnimalServiceImpl extends ServiceImpl<SampleAnimalMapper, Sam
         dataMap.put("images", images);
 
         //富文本
-        String preliminaryNotes = WordNodeFactory.html2xml(sampleAnimal.getPreliminaryNotes());
-        images.addAll(WordNodeFactory.imageCache);
-        sampleAnimalObj.put("preliminaryNotes", preliminaryNotes);
-        String detectionParameters = WordNodeFactory.html2xml(sampleAnimal.getDetectionParameters());
-        images.addAll(WordNodeFactory.imageCache);
-        sampleAnimalObj.put("detectionParameters", detectionParameters);
-        String specialDetectionParameters = WordNodeFactory.html2xml(sampleAnimal.getSpecialDetectionParameters());
-        images.addAll(WordNodeFactory.imageCache);
-        sampleAnimalObj.put("specialDetectionParameters", specialDetectionParameters);
+        HtmlParseVo pnVo = WordNodeFactory.html2xml(sampleAnimal.getPreliminaryNotes());
+        sampleAnimalObj.put("preliminaryNotes", pnVo.getContent());
+        HtmlParseVo dpVo = WordNodeFactory.html2xml(sampleAnimal.getDetectionParameters());
+        sampleAnimalObj.put("detectionParameters", dpVo.getContent());
+        HtmlParseVo sdpVo = WordNodeFactory.html2xml(sampleAnimal.getSpecialDetectionParameters());
+        sampleAnimalObj.put("specialDetectionParameters", sdpVo.getContent());
+        images.fluentAddAll(pnVo.getImageCache())
+                .fluentAddAll(dpVo.getImageCache())
+                .fluentAddAll(sdpVo.getImageCache());
+
+        //申请时间
+        sampleInfoObj.put("applyTime", DateUtil.format(sampleInfo.getApplyTime(), DatePattern.NORM_DATE_PATTERN));
+        //待提交状态下不显示申请人和申请日期
+        if (!GeneStatusEnum.SUBMIT_STATUS.contains(sampleInfo.getStatus())) {
+            dataMap.put("createDateStr", DateUtil.format(sampleInfo.getApplyTime(), DatePattern.CHINESE_DATE_PATTERN));
+            String sign = userIdNameCache.getSignBase64(sampleInfo.getApplicantId());
+            if (StrUtil.isNotBlank(sign)) {
+                dataMap.put("createBySign", sign);
+            }
+        }
+
+        //查询审核记录
+        List<FlowAudit> flowAudits = flowAuditService.list(new LambdaQueryWrapper<>(FlowAudit.class)
+                .eq(FlowAudit::getFlowId, sampleId)
+                .eq(FlowAudit::getFlowType, "sample." + sampleInfo.getType())
+                .eq(FlowAudit::getDeleted, WhetherEnum.NO.getCode())
+                .orderByDesc(FlowAudit::getCreateTime));
+        //如果有驳回节点,只显示最后一次驳回后的流程审核信息
+        Optional<FlowAudit> opt = flowAudits.stream().filter(audit -> StrConstant.NO.equals(audit.getAuditResult())).findFirst();
+        if (opt.isPresent()) {
+            FlowAudit rejectedAudit = opt.get();
+            flowAudits = flowAudits.stream().filter(audit -> audit.getCreateTime().after(rejectedAudit.getCreateTime())).collect(Collectors.toList());
+        }
+        //项目管理部审核
+        flowAudits.stream()
+                .filter(audit -> GeneStatusEnum.PROJECT_MANAGEMENT.getStatus().equals(audit.getFlowStatus()) && StrConstant.YES.equals(audit.getAuditResult()))
+                .findFirst()
+                .ifPresent(audit -> {
+                    dataMap.put("projectManagementDateStr", DateUtil.format(audit.getCreateTime(), DatePattern.CHINESE_DATE_PATTERN));
+                    String base64 = wordDataService.getBase64(audit.getCreateSign());
+                    if (StrUtil.isNotBlank(base64)) {
+                        dataMap.put("projectManagementSign", base64);
+                    }
+                });
+        //部门负责人审核
+        flowAudits.stream()
+                .filter(audit -> GeneStatusEnum.DEPART_LEADER.getStatus().equals(audit.getFlowStatus()) && StrConstant.YES.equals(audit.getAuditResult()))
+                .findFirst()
+                .ifPresent(audit -> {
+                    dataMap.put("departLeaderDateStr", DateUtil.format(audit.getCreateTime(), DatePattern.CHINESE_DATE_PATTERN));
+                    String base64 = wordDataService.getBase64(audit.getCreateSign());
+                    if (StrUtil.isNotBlank(base64)) {
+                        dataMap.put("departLeaderSign", base64);
+                    }
+                });
+
+        //项目管理部填写字段
+        sampleInfoObj.put("approvalNo", WordUtil.padString(sampleInfo.getApprovalNo(), 16));
+        sampleInfoObj.put("revisionNo", WordUtil.padString(sampleInfo.getRevisionNo(), 16));
+        sampleInfoObj.put("receiptDate", WordUtil.padString(sampleInfo.getReceiptDate(), 12));
+        sampleInfoObj.put("approvalDate", WordUtil.padString(sampleInfo.getApprovalDate(), 12));
+        sampleInfoObj.put("expiryDate", WordUtil.padString(sampleInfo.getExpiryDate(), 12));
 
         String modelName = "animalSampleTesting.ftl";
         fileInfoService.uploadFileWithFileName(modelName, fileName, sampleInfo.getId(), sampleInfo.getStatus(), dataMap);

+ 96 - 215
jfcloud-gene-biz/src/main/resources/ftlTemplate/animalSampleTesting.ftl

@@ -108,7 +108,7 @@
 									</w:r>
 									<w:r w:rsidRPr="001B7387">
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:color w:val="C00000"/>
 											<w:kern w:val="0"/>
@@ -116,8 +116,9 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">                   </w:t>
+										<w:t xml:space="preserve"> ${sampleInfo.approvalNo!} </w:t>
 									</w:r>
+									<!--
 									<w:r w:rsidRPr="001B7387">
 										<w:rPr>
 											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
@@ -126,7 +127,7 @@
 											<w:szCs w:val="24"/>
 										</w:rPr>
 										<w:t xml:space="preserve">               </w:t>
-									</w:r>
+									</w:r> -->
 								</w:p>
 							</w:tc>
 							<w:tc>
@@ -157,7 +158,7 @@
 									</w:r>
 									<w:r w:rsidRPr="001B7387">
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:color w:val="C00000"/>
 											<w:kern w:val="0"/>
@@ -165,7 +166,7 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">                   </w:t>
+										<w:t xml:space="preserve"> ${sampleInfo.revisionNo!} </w:t>
 									</w:r>
 								</w:p>
 							</w:tc>
@@ -191,7 +192,7 @@
 									</w:pPr>
 									<w:r>
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:color w:val="C00000"/>
 											<w:kern w:val="0"/>
@@ -202,19 +203,7 @@
 									</w:r>
 									<w:r w:rsidRPr="001B7387">
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:b/>
-											<w:color w:val="C00000"/>
-											<w:kern w:val="0"/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">         </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:color w:val="C00000"/>
 											<w:kern w:val="0"/>
@@ -222,7 +211,7 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve"> </w:t>
+										<w:t xml:space="preserve"> ${sampleInfo.receiptDate!} </w:t>
 									</w:r>
 								</w:p>
 							</w:tc>
@@ -243,7 +232,7 @@
 									</w:pPr>
 									<w:r>
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:color w:val="C00000"/>
 											<w:kern w:val="0"/>
@@ -254,7 +243,7 @@
 									</w:r>
 									<w:r w:rsidRPr="001B7387">
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:color w:val="C00000"/>
 											<w:kern w:val="0"/>
@@ -262,7 +251,7 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">         </w:t>
+										<w:t xml:space="preserve"> ${sampleInfo.approvalDate!} </w:t>
 									</w:r>
 									<w:r>
 										<w:rPr>
@@ -294,7 +283,7 @@
 									</w:pPr>
 									<w:r>
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:color w:val="C00000"/>
 											<w:kern w:val="0"/>
@@ -305,7 +294,7 @@
 									</w:r>
 									<w:r w:rsidRPr="001B7387">
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:color w:val="C00000"/>
 											<w:kern w:val="0"/>
@@ -313,7 +302,7 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">         </w:t>
+										<w:t xml:space="preserve"> ${sampleInfo.expiryDate!} </w:t>
 									</w:r>
 									<w:r>
 										<w:rPr>
@@ -1442,43 +1431,27 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">   </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:b/>
-											<w:color w:val="000000"/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">         </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:color w:val="000000"/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">   </w:t>
-									</w:r>
-									<w:r w:rsidR="00224C45" w:rsidRPr="00224C45">
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:bCs/>
-											<w:color w:val="000000"/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-										</w:rPr>
-										<w:t xml:space="preserve"> </w:t>
+										<#if createBySign??>
+											<w:t xml:space="preserve">  </w:t>
+											<w:pict>
+												<v:shape o:spt="75" alt="" type="#_x0000_t75"
+														 style="height:20pt; width:40pt;" filled="f"
+														 o:preferrelative="t" stroked="f" coordsize="21600,21600">
+													<v:path/>
+													<v:fill on="f" focussize="0,0"/>
+													<v:stroke on="f"/>
+													<v:imagedata r:id="rIdCreateBySign" o:title=""/>
+													<o:lock v:ext="edit" aspectratio="t"/>
+												</v:shape>
+											</w:pict>
+											<w:t xml:space="preserve">  </w:t>
+										<#else >
+											<w:t xml:space="preserve">                </w:t>
+										</#if>
 									</w:r>
 									<w:r>
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:sz w:val="24"/>
 											<w:szCs w:val="24"/>
@@ -1487,33 +1460,13 @@
 									</w:r>
 									<w:r>
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">  </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">          </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:sz w:val="24"/>
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve"> </w:t>
+										<w:t xml:space="preserve"> ${createDateStr!'           '} </w:t>
 									</w:r>
 								</w:p>
 								<w:p w14:paraId="0D89C80F" w14:textId="77777777" w:rsidR="004E7E5D" w:rsidRDefault="004E7E5D">
@@ -1553,36 +1506,6 @@
 										</w:rPr>
 										<w:t>申请人部门负责人签字:</w:t>
 									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">  </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">    </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">      </w:t>
-									</w:r>
 									<w:r>
 										<w:rPr>
 											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
@@ -1591,36 +1514,33 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">   </w:t>
-									</w:r>
-									<w:r w:rsidRPr="00224C45">
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:bCs/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-										</w:rPr>
-										<w:t xml:space="preserve"> </w:t>
+										<#if departLeaderSign??>
+											<w:t xml:space="preserve">  </w:t>
+											<w:pict>
+												<v:shape o:spt="75" alt="" type="#_x0000_t75"
+														 style="height:20pt; width:40pt;" filled="f"
+														 o:preferrelative="t" stroked="f" coordsize="21600,21600">
+													<v:path/>
+													<v:fill on="f" focussize="0,0"/>
+													<v:stroke on="f"/>
+													<v:imagedata r:id="rIdDepartLeaderSign" o:title=""/>
+													<o:lock v:ext="edit" aspectratio="t"/>
+												</v:shape>
+											</w:pict>
+											<w:t xml:space="preserve">  </w:t>
+										<#else >
+											<w:t xml:space="preserve">                </w:t>
+										</#if>
 									</w:r>
 									<w:r>
 										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
+											<w:rFonts w:hint="default"/>
 											<w:b/>
 											<w:sz w:val="24"/>
 											<w:szCs w:val="24"/>
 										</w:rPr>
 										<w:t>签字日期:</w:t>
 									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve"> </w:t>
-									</w:r>
 									<w:r>
 										<w:rPr>
 											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
@@ -1629,17 +1549,7 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">        </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">    </w:t>
+										<w:t xml:space="preserve"> ${departLeaderDateStr!'           '} </w:t>
 									</w:r>
 								</w:p>
 								<w:p w14:paraId="1CB79D93" w14:textId="77777777" w:rsidR="004E7E5D" w:rsidRDefault="004E7E5D">
@@ -1699,56 +1609,23 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">  </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">    </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">      </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">    </w:t>
-									</w:r>
-									<w:r w:rsidR="00224C45">
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">  </w:t>
-									</w:r>
-									<w:r w:rsidR="00224C45" w:rsidRPr="00224C45">
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
-											<w:bCs/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-										</w:rPr>
-										<w:t xml:space="preserve"> </w:t>
+										<#if projectManagementSign??>
+											<w:t xml:space="preserve">  </w:t>
+											<w:pict>
+												<v:shape o:spt="75" alt="" type="#_x0000_t75"
+														 style="height:20pt; width:40pt;" filled="f"
+														 o:preferrelative="t" stroked="f" coordsize="21600,21600">
+													<v:path/>
+													<v:fill on="f" focussize="0,0"/>
+													<v:stroke on="f"/>
+													<v:imagedata r:id="rIdProjectManagementSign" o:title=""/>
+													<o:lock v:ext="edit" aspectratio="t"/>
+												</v:shape>
+											</w:pict>
+											<w:t xml:space="preserve">  </w:t>
+										<#else >
+											<w:t xml:space="preserve">                   </w:t>
+										</#if>
 									</w:r>
 									<w:r>
 										<w:rPr>
@@ -1759,16 +1636,6 @@
 										</w:rPr>
 										<w:t>签字日期:</w:t>
 									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve"> </w:t>
-									</w:r>
 									<w:r>
 										<w:rPr>
 											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman" w:hint="eastAsia"/>
@@ -1777,17 +1644,7 @@
 											<w:szCs w:val="24"/>
 											<w:u w:val="single"/>
 										</w:rPr>
-										<w:t xml:space="preserve">        </w:t>
-									</w:r>
-									<w:r>
-										<w:rPr>
-											<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
-											<w:b/>
-											<w:sz w:val="24"/>
-											<w:szCs w:val="24"/>
-											<w:u w:val="single"/>
-										</w:rPr>
-										<w:t xml:space="preserve">    </w:t>
+										<w:t xml:space="preserve"> ${projectManagementDateStr!'           '} </w:t>
 									</w:r>
 								</w:p>
 							</w:tc>
@@ -15168,6 +15025,15 @@
 				<#list images as img>
 					<Relationship Id="rImg${img.id}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/${img.name}"/>
 				</#list>
+				<#if createBySign??>
+					<Relationship Id="rIdCreateBySign" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/createBySign.png"/>
+				</#if>
+				<#if departLeaderSign??>
+					<Relationship Id="rIdDepartLeaderSign" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/departLeaderSign.png"/>
+				</#if>
+				<#if projectManagementSign??>
+					<Relationship Id="rIdProjectManagementSign" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/projectManagementSign.png"/>
+				</#if>
 			</Relationships>
 		</pkg:xmlData>
 	</pkg:part>
@@ -17270,4 +17136,19 @@
 			<pkg:binaryData>${img.base64}</pkg:binaryData>
 		</pkg:part>
 	</#list>
+	<#if createBySign??>
+		<pkg:part pkg:name="/word/media/createBySign.png" pkg:contentType="image/png">
+			<pkg:binaryData>${createBySign}</pkg:binaryData>
+		</pkg:part>
+	</#if>
+	<#if departLeaderSign??>
+		<pkg:part pkg:name="/word/media/departLeaderSign.png" pkg:contentType="image/png">
+			<pkg:binaryData>${departLeaderSign}</pkg:binaryData>
+		</pkg:part>
+	</#if>
+	<#if projectManagementSign??>
+		<pkg:part pkg:name="/word/media/projectManagementSign.png" pkg:contentType="image/png">
+			<pkg:binaryData>${projectManagementSign}</pkg:binaryData>
+		</pkg:part>
+	</#if>
 </pkg:package>