wanghaiwu 1 viikko sitten
vanhempi
säilyke
c21bb4227b

+ 105 - 0
code/jyyy/nckd-jimin-jyyy-bd/src/main/java/nckd/jimin/jyyy/bd/plugin/workflow/WFUserSignaturePrintPlugin.java

@@ -0,0 +1,105 @@
+package nckd.jimin.jyyy.bd.plugin.workflow;
+
+import com.kingdee.util.StringUtils;
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.fileservice.extension.FileServiceExtFactory;
+import kd.bos.orm.query.QCP;
+import kd.bos.orm.query.QFilter;
+import kd.bos.print.core.data.DataRowSet;
+import kd.bos.print.core.data.datasource.PrtDataSource;
+import kd.bos.print.core.data.field.Field;
+import kd.bos.print.core.data.field.ImageField;
+import kd.bos.print.core.plugin.AbstractPrintPlugin;
+import kd.bos.print.core.plugin.event.AfterLoadDataEvent;
+import kd.bos.print.core.plugin.event.BeforeOutputGridEvent;
+import kd.bos.print.core.plugin.event.BeforeOutputWidgetEvent;
+import kd.bos.print.core.plugin.event.bo.PWGridBo;
+import kd.bos.print.core.plugin.event.bo.PWGridCellBo;
+import kd.bos.print.core.plugin.event.bo.PWGridRowBo;
+import kd.bos.servicehelper.BusinessDataServiceHelper;
+import java.util.List;
+
+/**
+ *
+ */
+public class WFUserSignaturePrintPlugin extends AbstractPrintPlugin {
+    //工作流-审批线路数据源=formId+.workflow.approveline
+//    private static final String wfsDs = "";
+    /**
+     * 数据加载后事件,根据工作流-审批线路数据,查询对应的人员签章信息,再填充入审批线路集合
+     * @param evt
+     */
+    @Override
+    public void afterLoadData(AfterLoadDataEvent evt) {
+        super.afterLoadData(evt);
+        PrtDataSource dataSource = evt.getDataSource();
+        if(dataSource == null){
+            return;
+        }
+        String wfsDs = dataSource.getDsName();
+        //非工作流直接返回
+        if(!wfsDs.contains("workflow.approveline")){
+            return;
+        }
+        //数据源集合
+        List<DataRowSet> dataRowSets = evt.getDataRowSets();
+        for (DataRowSet dataRowSet : dataRowSets) {
+            //获取任务ID
+            Field taskIdField = dataRowSet.getField("taskId");
+            if(taskIdField==null || "".equals(taskIdField.getValue())){
+                continue;
+            }
+            long taskId = Long.parseLong(String.valueOf(taskIdField));
+            //通过任务ID查询工作流的历史参与人基础资料对应记录,其中含有参与人ID
+            DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingleFromCache("wf_hiparticipant", "userid",
+                    new QFilter[]{new QFilter("taskid", QFilter.equals, taskId)});
+            if(dynamicObject==null){
+                continue;
+            }
+            //获取参与人ID
+            Object userid = dynamicObject.get("userid");
+            //通过参与人ID查询该用户签章信息
+            QFilter qFilter = new QFilter("user.id", QCP.equals, userid);
+            DynamicObject signInfo = BusinessDataServiceHelper.loadSingleFromCache("bos_handwritten_sign", qFilter.toArray());
+            if(signInfo==null){
+                continue;
+            }
+            //将签章信息设置进数据集合
+            String extPictureUrl = signInfo.getString("handwrittensign");
+            extPictureUrl = kd.bos.fileservice.extension.FileServiceExtFactory.getImageFileServiceExt().getRealPath(extPictureUrl);
+//            extPictureUrl = kd.bos.url.UrlService.getImageFullUrl(extPictureUrl);
+
+            Field picField = new ImageField(extPictureUrl);
+            dataRowSet.put("signature",picField);
+        }
+    }
+
+    /**
+     * 控件输出前事件-数据表格输出前-设置数据行签章单元格绑定工作流审批线路中新填充的签章字段
+     * @param evt
+     */
+    @Override
+    public void beforeOutputWidget(BeforeOutputWidgetEvent evt) {
+        super.beforeOutputWidget(evt);
+        if(!(evt instanceof BeforeOutputGridEvent)){
+            return;
+        }
+        BeforeOutputGridEvent gridEvent = (BeforeOutputGridEvent) evt;
+        PWGridBo pwGridBo = gridEvent.getGrid();
+
+        String wfsDs = pwGridBo.getDataSource();
+        //非工作流直接返回
+        if(wfsDs == null || !wfsDs.contains("workflow.approveline")){
+            return;
+        }
+
+        for(int i = 0; i < pwGridBo.getRowCount(); i++) {
+            //获取数据行
+            PWGridRowBo row = pwGridBo.getRow(i);
+            //获取签章单元格
+            PWGridCellBo cell = row.getCell(3);
+            //设置单元格绑定工作流数据源中的签章
+            cell.setCellValue(wfsDs, "signature");
+        }
+    }
+}