Commit 224ed2bb authored by pchxue's avatar pchxue

迁移问题处理

parent 16eab8bb
package com.yonde.dcs.common.vo;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.ArrayList;
import cn.hutool.core.convert.Convert;
import com.yonde.dex.basedata.entity.annotation.XmlElementProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import lombok.ToString;
import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.math.BigInteger;
import org.springframework.data.annotation.Transient;
import lombok.experimental.Delegate;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.XmlAttribute;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.yonde.dex.basedata.entity.annotation.DexEmbedded;
import com.yonde.dex.basedata.entity.annotation.ReferenceProperty;
import com.yonde.dex.basedata.entity.annotation.RelationProperty;
import com.yonde.dex.basedata.entity.annotation.VersionProperty;
import com.yonde.dex.basedata.entity.xmladapters.LocalDateTimeXmlAdapter;
import lombok.Data;
import com.yonde.dex.basedata.entity.annotation.*;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import com.yonde.dex.basedata.entity.vo.IdOnlyVO;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference;
import com.yonde.dex.basedata.entity.data.VersionRelationType;
import com.yonde.dcs.common.vo.ExtInterfaceVO;
import com.yonde.dex.basedata.entity.vo.DxIdVOEmbeddable;
import com.yonde.dex.basedata.entity.vo.IdOnlyVO;
import com.yonde.dex.basedata.entity.vo.IdVO;
import com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOEmbeddable;
import com.yonde.dex.context.plugin.common.entity.DxContextVOEmbeddable;
import com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOHolder;
import com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOEmbeddable;
import com.yonde.dex.context.plugin.common.entity.DxContextVOHolder;
import com.yonde.dex.container.folder.plugin.common.entity.DxObjFolderVOEmbeddable;
import com.yonde.dex.version.plugin.common.entity.DxIterationVOEmbeddable;
import com.yonde.dex.basedata.entity.users.DxUserVO;
import com.yonde.dcs.common.vo.ExtApplicantLinkVO;
import com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOHolder;
import com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOEmbeddable;
import com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOEmbeddable;
import com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOHolder;
import com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOEmbeddable;
import com.yonde.dex.basedata.entity.vo.IdVO;
import com.yonde.dex.user.common.vo.DxOrganizationVO;
import com.yonde.dex.version.plugin.common.entity.DxIterationVOEmbeddable;
import com.yonde.dex.container.folder.plugin.common.entity.DxObjFolderVOHolder;
import com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOEmbeddable;
import com.yonde.dex.version.plugin.common.entity.DxIterationVOHolder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
import java.util.List;
/**
* @description: ExtApplicant-VO
* @author: dexadmin
* @version: V
* @date: 2024-7-15 15:32:39
**/
* @description: ExtApplicant-VO
* @author: dexadmin
* @version: V
* @date: 2024-8-15 16:14:30
**/
@JsonTypeInfo( use = JsonTypeInfo.Id.CLASS, property = "dxClassname", visible = true, defaultImpl = ExtApplicantVO.class)
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class ExtApplicantVO extends IdOnlyVO implements IdVO ,DxLifecycleManageBaseVOHolder ,DxObjFileLinkVOHolder ,DxIterationVOHolder<ExtApplicantVO> ,DxLogicDeleteVOHolder{
public class ExtApplicantVO extends IdOnlyVO implements IdVO ,DxContextVOHolder ,DxLifecycleManageBaseVOHolder ,DxObjFileLinkVOHolder ,DxObjFolderVOHolder ,DxIterationVOHolder<ExtApplicantVO> ,DxLogicDeleteVOHolder{
public static final String DX_CONTEXT_EMBEDDABLE_PROP_NAME = "dxContextEmbeddable";
public static final String DX_OBJ_FILE_LINK_EMBEDDABLE_PROP_NAME = "dxObjFileLinkEmbeddable";
public static final String DX_OBJ_FOLDER_EMBEDDABLE_PROP_NAME = "dxObjFolderEmbeddable";
public static final String DX_LIFECYCLE_MANAGE_BASE_EMBEDDABLE_PROP_NAME = "dxLifecycleManageBaseEmbeddable";
public static final String DX_ID_EMBEDDABLE_PROP_NAME = "dxIdEmbeddable";
public static final String DX_LOGIC_DELETE_EMBEDDABLE_PROP_NAME = "dxLogicDeleteEmbeddable";
......@@ -55,6 +80,13 @@ public class ExtApplicantVO extends IdOnlyVO implements IdVO ,DxLifecycleManageB
public static final String TARGET_EXT_APPLICANT_LINK_PROP_NAME = "targetExtApplicantLink";
public static final String TYPE_PROP_NAME = "type";
/**
* 扩展VO属性
*/
@DexEmbedded()
@JsonIgnore
private DxContextVOEmbeddable dxContextEmbeddable;
/**
* 扩展VO属性
*/
......@@ -62,6 +94,13 @@ public class ExtApplicantVO extends IdOnlyVO implements IdVO ,DxLifecycleManageB
@JsonIgnore
private DxObjFileLinkVOEmbeddable dxObjFileLinkEmbeddable;
/**
* 扩展VO属性
*/
@DexEmbedded()
@JsonIgnore
private DxObjFolderVOEmbeddable dxObjFolderEmbeddable;
/**
* 扩展VO属性
*/
......
package com.yonde.dcs.common.vo;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.ArrayList;
import cn.hutool.core.convert.Convert;
import com.yonde.dex.basedata.entity.annotation.XmlElementProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import lombok.ToString;
import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.math.BigInteger;
import org.springframework.data.annotation.Transient;
import lombok.experimental.Delegate;
import javax.xml.bind.annotation.*;
import javax.xml.bind.annotation.XmlAttribute;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotNull;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.yonde.dex.basedata.entity.annotation.DexEmbedded;
import com.yonde.dex.basedata.entity.annotation.ReferenceProperty;
import com.yonde.dex.basedata.entity.annotation.RelationProperty;
import com.yonde.dex.basedata.entity.annotation.VersionProperty;
import com.yonde.dex.basedata.entity.xmladapters.LocalDateTimeXmlAdapter;
import lombok.Data;
import com.yonde.dex.basedata.entity.annotation.*;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import com.yonde.dex.basedata.entity.vo.IdOnlyVO;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.TypeReference;
import com.yonde.dex.basedata.entity.data.VersionRelationType;
import com.yonde.dex.basedata.entity.vo.DxIdVOEmbeddable;
import com.yonde.dex.basedata.entity.vo.IdOnlyVO;
import com.yonde.dex.basedata.entity.vo.IdVO;
import com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOEmbeddable;
import com.yonde.dex.context.plugin.common.entity.DxContextVOEmbeddable;
import com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOHolder;
import com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOEmbeddable;
import com.yonde.dex.context.plugin.common.entity.DxContextVOHolder;
import com.yonde.dex.container.folder.plugin.common.entity.DxObjFolderVOEmbeddable;
import com.yonde.dex.version.plugin.common.entity.DxIterationVOEmbeddable;
import com.yonde.dex.basedata.entity.users.DxUserVO;
import com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOHolder;
import com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOEmbeddable;
import com.yonde.dcs.common.vo.ExtInterfaceDocLinkVO;
import com.yonde.dex.lcycle.plugin.common.entity.DxLifecycleManageBaseVOEmbeddable;
import com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOHolder;
import com.yonde.dex.logicdelete.plugin.common.entity.DxLogicDeleteVOEmbeddable;
import com.yonde.dex.basedata.entity.vo.IdVO;
import com.yonde.dcs.common.vo.ExtApplicantVO;
import com.yonde.dcs.common.vo.ExtAuditInterfLinkVO;
import com.yonde.dex.user.common.vo.DxOrganizationVO;
import com.yonde.dex.container.folder.plugin.common.entity.DxObjFolderVOHolder;
import com.yonde.dex.user.common.vo.DxUserInfoVO;
import com.yonde.dex.version.plugin.common.entity.DxIterationVOEmbeddable;
import com.yonde.dex.dfs.objfilelink.plugin.common.entity.DxObjFileLinkVOEmbeddable;
import com.yonde.dex.version.plugin.common.entity.DxIterationVOHolder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.time.LocalDateTime;
import java.util.List;
/**
* @description: ExtInterface-VO
* @author: dexadmin
* @version: V
* @date: 2024-7-15 15:32:39
**/
* @description: ExtInterface-VO
* @author: dexadmin
* @version: V
* @date: 2024-8-15 16:08:09
**/
@JsonTypeInfo( use = JsonTypeInfo.Id.CLASS, property = "dxClassname", visible = true, defaultImpl = ExtInterfaceVO.class)
@EqualsAndHashCode(callSuper = true)
@Data
@ToString(callSuper = true)
public class ExtInterfaceVO extends IdOnlyVO implements DxIterationVOHolder<ExtInterfaceVO> ,IdVO ,DxLifecycleManageBaseVOHolder ,DxObjFileLinkVOHolder ,DxLogicDeleteVOHolder{
public class ExtInterfaceVO extends IdOnlyVO implements DxIterationVOHolder<ExtInterfaceVO> ,IdVO ,DxContextVOHolder ,DxLifecycleManageBaseVOHolder ,DxObjFileLinkVOHolder ,DxObjFolderVOHolder ,DxLogicDeleteVOHolder{
public static final String DX_CONTEXT_EMBEDDABLE_PROP_NAME = "dxContextEmbeddable";
public static final String DX_OBJ_FILE_LINK_EMBEDDABLE_PROP_NAME = "dxObjFileLinkEmbeddable";
public static final String DX_OBJ_FOLDER_EMBEDDABLE_PROP_NAME = "dxObjFolderEmbeddable";
public static final String DX_LIFECYCLE_MANAGE_BASE_EMBEDDABLE_PROP_NAME = "dxLifecycleManageBaseEmbeddable";
public static final String DX_ID_EMBEDDABLE_PROP_NAME = "dxIdEmbeddable";
public static final String DX_LOGIC_DELETE_EMBEDDABLE_PROP_NAME = "dxLogicDeleteEmbeddable";
......@@ -66,6 +92,13 @@ public class ExtInterfaceVO extends IdOnlyVO implements DxIterationVOHolder<ExtI
public static final String PROVIDER_ORG_ID_TYPE_PROP_NAME = "providerOrgIdType";
public static final String TZRQ_PROP_NAME = "tzrq";
/**
* 扩展VO属性
*/
@DexEmbedded()
@JsonIgnore
private DxContextVOEmbeddable dxContextEmbeddable;
/**
* 扩展VO属性
*/
......@@ -73,6 +106,13 @@ public class ExtInterfaceVO extends IdOnlyVO implements DxIterationVOHolder<ExtI
@JsonIgnore
private DxObjFileLinkVOEmbeddable dxObjFileLinkEmbeddable;
/**
* 扩展VO属性
*/
@DexEmbedded()
@JsonIgnore
private DxObjFolderVOEmbeddable dxObjFolderEmbeddable;
/**
* 扩展VO属性
*/
......
......@@ -163,6 +163,11 @@
<groupId>com.yonde.dex</groupId>
<artifactId>dex-wfc-common</artifactId>
</dependency>
<dependency>
<groupId>com.luhuiguo</groupId>
<artifactId>aspose-words</artifactId>
<version>23.1</version>
</dependency>
</dependencies>
</project>
......@@ -10,12 +10,18 @@ import com.yonde.dcs.core.service.ExtSendFormLinkService;
import com.yonde.dcs.core.util.ExtDocUtil;
import com.yonde.dcs.core.util.ExtWfcUtil;
import com.yonde.dcs.document.common.entity.vo.DxDocumentVO;
import com.yonde.dcs.esign.plugin.message.WfcSignMessage;
import com.yonde.dcs.plan.common.vo.ExtPlanVO;
import com.yonde.dex.basedata.entity.api.ApiResult;
import com.yonde.dex.basedata.entity.vo.IdVO;
import com.yonde.dex.taskmonitor.api.data.TaskMessage;
import com.yonde.dex.taskmonitor.api.data.TaskMessageContext;
import com.yonde.dex.taskmonitor.api.data.TaskMessageStatus;
import com.yonde.dex.taskmonitor.api.interfaces.TaskMessageBuilder;
import com.yonde.dex.taskmonitor.api.interfaces.TaskMessagePusher;
import com.yonde.dex.wfc.common.vo.DxWfProcessSearchVO;
import com.yonde.dex.wfc.common.vo.DxWfProcessVO;
import com.yonde.dex.wfc.common.vo.DxWfTaskContext;
import com.yonde.dex.wfc.feign.api.WfcProcessFeign;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -26,8 +32,8 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.Date;
import java.util.Map;
import java.time.LocalDateTime;
import java.util.*;
/**
* @program: service
......@@ -70,14 +76,29 @@ public class ExtAutoTaskController {
pboKey = "doc";
signNode = "Activity_0st1yf8";
}
// DxWfTaskContext dxWfTaskContext = new DxWfTaskContext(dxWfProcessVO.getBusinessKey(), dxWfProcessVO.getId(), dxWfProcessVO.getProcessDef().getId(), signNode, null, (Map) null);
//todo 在4.1中未找到WfcSignMessage 注释了71-74行
// WfcSignMessage wfcSignMessage = new WfcSignMessage(new HashMap());
// wfcSignMessage.setWfTaskContext(dxWfTaskContext);
// TODO: WfcSignMessageBuilder不存在,根据2.1代码 new TaskMessage();
// WfTaskContext wfTaskContext = new WfTaskContext(wfProcessInstVO.getBusinessKey(), wfProcessInstVO.getId(), wfProcessInstVO.getProcessDef().getId(), signNode, null, (Map) null);
// WfcSignMessage wfcSignMessage = new WfcSignMessage(new HashMap());
// wfcSignMessage.setWfTaskContext(wfTaskContext);
// wfcSignMessage.setSignType(pboKey);
// TaskMessage taskMessage = (new WfcSignMessageBuilder()).newTasks(wfcSignMessage);
// this.taskMessagePusher.sendMessage(taskMessage);
this.taskMessagePusher.sendMessage(null);
DxWfTaskContext dxWfTaskContext = new DxWfTaskContext();
dxWfTaskContext.setPboKey(dxWfProcessVO.getBusinessKey());
dxWfTaskContext.setProcessId(dxWfProcessVO.getId());
dxWfTaskContext.setProcessDefId( dxWfProcessVO.getProcDefId());
dxWfTaskContext.setCurrentActivityId(signNode);
WfcSignMessage wfcSignMessage = new WfcSignMessage(new HashMap<>());
wfcSignMessage.setWfTaskContext(dxWfTaskContext);
wfcSignMessage.setSignType(pboKey);
TaskMessage taskMessage = new TaskMessage();
taskMessage.setStartTime(LocalDateTime.now());
taskMessage.setFunKey("sign");
taskMessage.setDetails((List<Map<String, Object>>) wfcSignMessage.getContext());
taskMessage.setProcessKey(TaskMessageStatus.START.name());
taskMessage.setStatus(TaskMessageStatus.START);
taskMessage.setUpdateTime(taskMessage.getStartTime());
this.taskMessagePusher.sendMessage(taskMessage);
return ApiResult.ok("重新发送电子签名请求成功!");
} else {
return ApiResult.ok("该对象未走签审流程!");
......
package com.yonde.dcs.core.factory;
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSONObject;
import com.yonde.dcs.core.constants.Constants;
import com.yonde.dcs.core.constants.SignConstants;
import com.yonde.dcs.core.service.ExtDocService;
import com.yonde.dcs.core.word.ImportWordService;
import com.yonde.dcs.document.common.entity.vo.DxDocumentVO;
import com.yonde.dex.dfs.vo.ObjFileLinkVO;
import com.yonde.dex.wfc.common.vo.DxWfActivityVO;
import com.yonde.dex.wfc.common.vo.DxWfProcessInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author xfchai
* @ClassName ContactListUtils.java
* @Description 技术联系单填充业务数据类
* @createTime 2021/11/22 14:20:00
*/
@Component
public class ContactListUtils {
@Autowired
private ExtDocService extDocService;
@Autowired
private ImportWordService importWordService;
/**
* 填充数据
*
* @param
* @return
*/
public void settingData(DxDocumentVO v, DxWfProcessInfoVO wfProcessInfoVO) {
String path = Constants.MTEMPLATE_ABSOLUTE_PATH;
String file = v.getSubTypeName();
String outFilePath = Constants.MERGER_FILE_ABSOLUTE_PATH + v.getSubTypeName() + "\\" + v.getNumber() + "\\";
//生成特定的文档目录,保存生成的word文件
FileUtil.mkdir(outFilePath);
//获取动态属性
Map<String, Object> dynamicAttrs = v.getDynamicAttrs();
String category = Objects.isNull(dynamicAttrs.get("category")) ? "" : (String) dynamicAttrs.get("category");
String content = Objects.isNull(dynamicAttrs.get("content")) ? "" : (String) dynamicAttrs.get("content");
String recipient = Objects.isNull(dynamicAttrs.get("recipient")) ? "" : (String) dynamicAttrs.get("recipient");
JSONObject jsonObject = new JSONObject();
//密级
String secretCode = v.getSecretCode();
jsonObject.put("SecretCode", extDocService.searchDictDataByDictCode(Constants.SECRET_CODE, secretCode));
//项目代号
String projectCode = ObjectUtils.isEmpty(v.getDxDocumentExpand().getProjectCode()) ? "" : v.getDxDocumentExpand().getProjectCode();
jsonObject.put("projectCode", projectCode);
//类别
jsonObject.put("category", extDocService.searchDictDataByDictCode(Constants.CATEGORY, category));
//技术联系单编号
jsonObject.put("number", ObjectUtils.isEmpty(v.getNumber()) ? "" : v.getNumber());
//技术联系单名称
jsonObject.put("name", ObjectUtils.isEmpty(v.getName()) ? "" : v.getName());
//页数
jsonObject.put("pages", v.getDxDocumentExpand().getAttachPages());
//判断类型为:内部外部
String type = (String) dynamicAttrs.get("type");
//拼接字符
if (Constants.INTER_CONTACT.equals(type)) {
List<String> proposingUnit = (ArrayList) dynamicAttrs.get("proposingUnit");
//内部-提出单位
jsonObject.put("proposingUnit", JoinUnitStr(proposingUnit));
List<String> interReceiveUnit = (ArrayList) dynamicAttrs.get("interReceiveUnit");
//内部-收件人单位
jsonObject.put("recipUnit", JoinUnitStr(interReceiveUnit));
} else {
//外部-提出单位
jsonObject.put("proposingUnit", "清华大学核研院");
//外部-收件人单位
jsonObject.put("recipUnit", this.generateProposer((String) dynamicAttrs.get("extReceiveUnit")));
}
//收件人
jsonObject.put("recipient", recipient);
//内容
jsonObject.put("content", content);
//备注
jsonObject.put("remark", ObjectUtils.isEmpty(v.getNote()) ? "" : v.getNote());
//校验技术联系单是否有内容附件
this.checkObjFileLinks(jsonObject, v.getObjFileLinks(), "");
//获取参与者
List<DxWfActivityVO> activities = wfProcessInfoVO.getActivityInfo();
if (!CollectionUtils.isEmpty(activities)) {
//写入签名数据
jsonObject.put("bz_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_PREPARED));
jsonObject.put("bz_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_PREPARED));
jsonObject.put("sh_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_SH));
jsonObject.put("sh_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_SH));
//分系统总师审核
jsonObject.put("fxtsh_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_FXTZSSH));
jsonObject.put("fxtsh_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_FXTZSSH));
jsonObject.put("pz_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_APPROVED));
jsonObject.put("pz_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_APPROVED));
//总体室审核
jsonObject.put("zts_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_ZTSSH));
jsonObject.put("zts_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_ZTSSH));
}
//模板名称
importWordService.getWordAllTable(jsonObject, path + file + ".docx", outFilePath + "outFile.docx");
}
/**
* 校验是否有内容附件
*
* @param jsonObject
* @param objFileLinks
* @param attach
*/
private void checkObjFileLinks(JSONObject jsonObject, List<ObjFileLinkVO> objFileLinks, String attach) {
if (CollectionUtils.isEmpty(objFileLinks)) {
//对号
jsonObject.put("noselect", "\u0052");
//方框
jsonObject.put("select", "\u00A3");
} else {
List<ObjFileLinkVO> collect = objFileLinks.stream().filter(item ->
Constants.CONTACT_CONTENT_ATTACH.equals(item.getContentType())
).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(collect)) {
jsonObject.put("noselect", "\u00A3");
jsonObject.put("select", "\u0052");
} else {
//对号
jsonObject.put("noselect", "\u0052");
//方框
jsonObject.put("select", "\u00A3");
}
}
}
/**
* 获取内部技术联系单类型
*
* @param proposingUnit
* @return
*/
private String JoinUnitStr(List<String> proposingUnit) {
StringJoiner joiner = new StringJoiner(",");
if (!CollectionUtils.isEmpty(proposingUnit)) {
proposingUnit.stream().forEach(item -> {
joiner.add(item);
});
}
return joiner.toString();
}
/**
* 获取外部收文单位
*
* @param proposer
* @return
*/
private String generateProposer(String proposer) {
if (StringUtils.isEmpty(proposer)) {
return "";
}
//根据提出方获取提出方单位
String[] split = proposer.split(",");
//拼接字符
StringJoiner joiner = new StringJoiner(",");
for (String proSplit : split) {
if (proSplit.length() > 0) {
//字典为外单位
String s = extDocService.searchDictDataByDictCode(Constants.NCR_SUPPLIER, proSplit);
joiner.add(s);
}
}
return joiner.toString();
}
}
package com.yonde.dcs.core.factory;
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSONObject;
import com.yonde.dcs.core.constants.Constants;
import com.yonde.dcs.core.constants.SignConstants;
import com.yonde.dcs.core.service.ExtDocService;
import com.yonde.dcs.core.word.ImportWordService;
import com.yonde.dcs.document.common.entity.vo.DxDocumentVO;
import com.yonde.dex.wfc.common.vo.DxWfActivityVO;
import com.yonde.dex.wfc.common.vo.DxWfProcessInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author xfchai
* @ClassName DesignInputUtils.java
* @Description 设计输入资料单
* @createTime 2021/11/24 14:35:00
*/
@Component
public class DesignEnterUtils {
@Autowired
private ExtDocService extDocService;
@Autowired
private ImportWordService importWordService;
/**
* 填充数据
*
* @param
* @return
*/
public Map<String, Object> settingData(DxDocumentVO v, DxWfProcessInfoVO wfProcessInfoVO) {
String path = Constants.MTEMPLATE_ABSOLUTE_PATH;
String file = v.getSubTypeName();
String outFilePath = Constants.MERGER_FILE_ABSOLUTE_PATH + v.getSubTypeName() + "\\" + v.getNumber() + "\\";
//生成特定的文档目录,保存生成的word文件
FileUtil.mkdir(outFilePath);
//获取动态属性
Map<String, Object> dynamicAttrs = v.getDynamicAttrs();
String content = Objects.isNull(dynamicAttrs.get("content")) ? "" : (String) dynamicAttrs.get("content");
String designPhase = Objects.isNull(dynamicAttrs.get("designPhase")) ? "" : (String) dynamicAttrs.get("designPhase");
JSONObject jsonObject = new JSONObject();
//项目代号
String projectCode = ObjectUtils.isEmpty(v.getDxDocumentExpand().getProjectCode()) ? "" : v.getDxDocumentExpand().getProjectCode();
// jsonObject.put("projectCode", extDocService.searchDictDataByDictCode(Constants.PROJECT_CODE, projectCode));
jsonObject.put("projectCode", projectCode);
//设计阶段
jsonObject.put("designPhase", extDocService.searchDictDataByDictCode(Constants.DESIGN_STAGE, designPhase));
//编号
jsonObject.put("number", ObjectUtils.isEmpty(v.getNumber()) ? "" : v.getNumber());
//设计输入名称
jsonObject.put("name", ObjectUtils.isEmpty(v.getName()) ? "" : v.getName());
//内容
jsonObject.put("content", content);
//备注
jsonObject.put("remark", ObjectUtils.isEmpty(v.getNote()) ? "" : v.getNote());
//页数
jsonObject.put("pages",v.getDxDocumentExpand().getAttachPages());
//获取参与者
List<DxWfActivityVO> activities = wfProcessInfoVO.getActivityInfo();
if (!CollectionUtils.isEmpty(activities)) {
//写入签名数据
jsonObject.put("bz_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_PREPARED));
jsonObject.put("bz_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_PREPARED));
jsonObject.put("sh_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_SH));
jsonObject.put("sh_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_SH));
//总体室审核
jsonObject.put("zts_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_ZTSSH));
jsonObject.put("zts_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_ZTSSH));
jsonObject.put("pz_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_APPROVED));
jsonObject.put("pz_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_APPROVED));
}
//模板名称
importWordService.getWordAllTable(jsonObject, path + file + ".docx", outFilePath + "outFile.docx");
return jsonObject;
}
}
package com.yonde.dcs.core.factory;
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSONObject;
import com.yonde.dcs.core.constants.Constants;
import com.yonde.dcs.core.constants.SignConstants;
import com.yonde.dcs.core.service.ExtDocService;
import com.yonde.dcs.core.util.DateUtils;
import com.yonde.dcs.core.word.ImportWordService;
import com.yonde.dcs.document.common.entity.vo.DxDocumentVO;
import com.yonde.dex.wfc.common.vo.DxWfActivityVO;
import com.yonde.dex.wfc.common.vo.DxWfProcessInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author xfchai
* @ClassName WorkContactListUtils.java
* @Description 工作联系单
* @createTime 2021/11/22 15:15:00
*/
@Component
public class WorkContactListUtils {
@Autowired
private ExtDocService extDocService;
@Autowired
private ImportWordService importWordService;
/**
* 填充数据
*
* @param
* @return
*/
public JSONObject settingData(DxDocumentVO v, DxWfProcessInfoVO wfProcessInfoVO) {
String path = Constants.MTEMPLATE_ABSOLUTE_PATH;
String file = v.getSubTypeName();
String outFilePath = Constants.MERGER_FILE_ABSOLUTE_PATH + v.getSubTypeName() + "\\" + v.getNumber() + "\\";
//生成特定的文档目录,保存生成的word文件
FileUtil.mkdir(outFilePath);
//获取动态属性
Map<String, Object> dynamicAttrs = v.getDynamicAttrs();
String recipientFaxNo = Objects.isNull(dynamicAttrs.get("recipientFaxNo")) ? "" : (String) dynamicAttrs.get("recipientFaxNo");
String sender = Objects.isNull(dynamicAttrs.get("sender")) ? "" : (String) dynamicAttrs.get("sender");
String senderPeople = Objects.isNull(dynamicAttrs.get("senderPeople")) ? "" : (String) dynamicAttrs.get("senderPeople");
String senderPhone = Objects.isNull(dynamicAttrs.get("senderPhone")) ? "" : (String) dynamicAttrs.get("senderPhone");
String faxNumber = Objects.isNull(dynamicAttrs.get("faxNumber")) ? "" : (String) dynamicAttrs.get("faxNumber");
String content = Objects.isNull(dynamicAttrs.get("content")) ? "" : (String) dynamicAttrs.get("content");
String recipient = Objects.isNull(dynamicAttrs.get("recipient")) ? "" : (String) dynamicAttrs.get("recipient");
String recipientPhone = Objects.isNull(dynamicAttrs.get("recipientPhone")) ? "" : (String) dynamicAttrs.get("recipientPhone");
String sendTo = Objects.isNull(dynamicAttrs.get("sentTo")) ? "" : (String) dynamicAttrs.get("sentTo");
//是否需要回复
String needReply = Objects.isNull(dynamicAttrs.get("needReply")) ? "" : (String) dynamicAttrs.get("needReply");
String secretCode = v.getSecretCode();
JSONObject jsonObject = new JSONObject();
if ("false".equals(needReply)) {
//对号
jsonObject.put("noselect", "\u0052");
//方框
jsonObject.put("select", "\u00A3");
jsonObject.put("urgent", "\u00A3");
} else if ("true".equals(needReply)) {
//对号
jsonObject.put("select", "\u0052");
//方框
jsonObject.put("noselect", "\u00A3");
jsonObject.put("urgent", "\u00A3");
} else {
//对号
jsonObject.put("urgent", "\u0052");
//方框
jsonObject.put("noselect", "\u00A3");
jsonObject.put("select", "\u00A3");
}
//密级
jsonObject.put("SecretCode", extDocService.searchDictDataByDictCode(Constants.SECRET_CODE, secretCode));
//发出方
jsonObject.put("sender", sender);
//发出人
jsonObject.put("senderPeople", senderPeople);
//发出人联系电话
jsonObject.put("senderPhone", senderPhone);
//传真号码
jsonObject.put("faxNumber", faxNumber);
//工作联系单编号
jsonObject.put("number", ObjectUtils.isEmpty(v.getNumber()) ? "" : v.getNumber());
//发至
jsonObject.put("sentToName", extDocService.searchDictDataByDictCode(Constants.NCR_SUPPLIER, sendTo));
//接收人、联系人
jsonObject.put("recipient", recipient);
//联系电话
jsonObject.put("recipientPhone", recipientPhone);
//发送时间
jsonObject.put("sendDate", DateUtils.converLocalDateToString(v.getCreateTime()));
//传真号
jsonObject.put("recipientFaxNo", recipientFaxNo);
//内容
jsonObject.put("content", content);
//备注
jsonObject.put("remark", ObjectUtils.isEmpty(v.getNote()) ? "" : v.getNote());
//页数
jsonObject.put("pages", v.getDxDocumentExpand().getAttachPages());
//获取参与者
List<DxWfActivityVO> activities = wfProcessInfoVO.getActivityInfo();
if (!CollectionUtils.isEmpty(activities)) {
//写入签名数据
jsonObject.put("bz_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_PREPARED));
jsonObject.put("bz_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_PREPARED));
jsonObject.put("sh_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_SH));
jsonObject.put("sh_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_SH));
jsonObject.put("qf_photo", extDocService.getSignImage(activities, SignConstants.SIGN_KEY_QF));
jsonObject.put("qf_date", extDocService.getEndDate(activities, SignConstants.SIGN_KEY_QF));
}
//模板名称
importWordService.getWordAllTable(jsonObject, path + file + ".docx", outFilePath + "outFile.docx");
return jsonObject;
}
}
......@@ -319,7 +319,7 @@ public class ExtDocServiceImpl implements ExtDocService {
newVersionVo.setMasterId(sourceDoc.getMasterId());
newVersionVo.setPredecessorId(sourceDoc.getId());
newVersionVo = (DxVersionVO) versionService.save((IdVO) newVersionVo, true);
// TODO: xpc DxIterationVO不存在,听同事说此方法已被弃用
// TODO: xpc DcsBuilder不存在,听同事说此方法已被弃用
// newViewDoc = DcsBuilder.of(newViewDoc).with(IdVO::setSubTypeName, sourceDoc.getSubTypeName())
// .with(DxIterationVO::setMaster, sourceDoc.getMaster())
// .with(DxIterationVO::setLatest, true)
......
......@@ -41,7 +41,7 @@ public class ExtDxDocumentServiceImpl<V extends DxDocumentVO> extends DocumentSe
super.beforeSave(target);
}
}
package com.yonde.dcs.document.core.util;
package com.yonde.dcs.core.util;
import com.aspose.words.*;
import com.aspose.words.ParagraphAlignment;
......
......@@ -7,10 +7,8 @@ import com.yonde.dex.user.common.vo.DxUserInfoVO;
import com.yonde.dex.user.feign.DxUserInfoFeign;
import com.yonde.dex.version.plugin.common.entity.DxIterationVOHolder;
import com.yonde.dex.wfc.common.enums.TaskStateEnum;
import com.yonde.dex.wfc.common.vo.DxWfActivityVO;
import com.yonde.dex.wfc.common.vo.DxWfProcessSearchVO;
import com.yonde.dex.wfc.common.vo.DxWfProcessTaskVO;
import com.yonde.dex.wfc.common.vo.DxWfProcessVO;
import com.yonde.dex.wfc.common.vo.*;
import com.yonde.dex.wfc.feign.api.WfcActivityFeign;
import com.yonde.dex.wfc.feign.api.WfcProcessFeign;
import com.yonde.dex.wfc.feign.api.WfcTaskFeign;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -18,6 +16,7 @@ import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.PathVariable;
import java.text.SimpleDateFormat;
import java.util.*;
......@@ -33,7 +32,9 @@ import java.util.stream.Collectors;
public class WorkFlowUtil {
@Autowired
private WfcProcessFeign instanceService;
private WfcProcessFeign wfcProcessFeign;
@Autowired
private WfcActivityFeign wfcActivityFeign;
@Autowired
private WfcTaskFeign wfcTaskFeign;
@Autowired
......@@ -55,7 +56,7 @@ public class WorkFlowUtil {
DxWfProcessSearchVO dxWfProcessSearchVO = new DxWfProcessSearchVO();
dxWfProcessSearchVO.setPboClass(iterationVO.getClass().getName());
dxWfProcessSearchVO.setPboId(iterationVO.getVersionId());
Page<DxWfProcessVO> processList = instanceService.getProcessList(dxWfProcessSearchVO, 1, 10);
Page<DxWfProcessVO> processList = wfcProcessFeign.getProcessList(dxWfProcessSearchVO, 1, 10);
if (!CollectionUtils.isEmpty(processList.getContent())) {
return processList.getContent().get(0);
}
......@@ -78,7 +79,7 @@ public class WorkFlowUtil {
DxWfProcessSearchVO dxWfProcessSearchVO = new DxWfProcessSearchVO();
dxWfProcessSearchVO.setPboClass(DxDocumentVO.class.getName());
dxWfProcessSearchVO.setPboId(doc.getVersionId());
Page<DxWfProcessVO> processList = instanceService.getProcessList(dxWfProcessSearchVO, 1, 10);
Page<DxWfProcessVO> processList = wfcProcessFeign.getProcessList(dxWfProcessSearchVO, 1, 10);
if (!CollectionUtils.isEmpty(processList.getContent())) {
return processList.getContent().get(0);
}
......@@ -213,4 +214,15 @@ public class WorkFlowUtil {
}
return date;
}
//根据流程实例id获取组装信息
public DxWfProcessInfoVO getProcessInstDetail(DxWfProcessVO dxWfProcessVO) {
DxWfProcessInfoVO processInfoVO = new DxWfProcessInfoVO();
processInfoVO.setProcessVO(wfcProcessFeign.getProcessDetail(dxWfProcessVO.getId()));
processInfoVO.setActivityInfo(wfcActivityFeign.getActivities(dxWfProcessVO.getId(),dxWfProcessVO.getProcDefId()));
processInfoVO.setHistoryInfo(wfcTaskFeign.getHisTaskList(dxWfProcessVO.getId(),null, 1, Integer.MAX_VALUE).getContent());
return processInfoVO;
}
}
......@@ -23,31 +23,41 @@ import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.yonde.dex.lcycle.plugin.entities.DxLifecycleManageBaseEmbeddable;
import com.yonde.dex.dao.entity.base.IdEntity;
import javax.persistence.Column;
import com.yonde.dex.container.folder.plugin.entities.DxObjFolderEmbeddable;
import com.yonde.dex.context.plugin.entities.DxContextHolder;
import com.yonde.dex.dfs.objfilelink.plugin.entities.DxObjFileLinkHolder;
import com.yonde.dex.dfs.objfilelink.plugin.entities.DxObjFileLinkEmbeddable;
import com.yonde.dex.lcycle.plugin.entities.DxLifecycleManageBaseHolder;
import com.yonde.dex.dao.entity.base.DxIdEntityEmbeddable;
import com.yonde.dex.context.plugin.entities.DxContextEmbeddable;
import com.yonde.dex.dao.entity.base.IdOnlyEntity;
import com.yonde.dex.version.plugin.entities.DxIterationHolder;
import com.yonde.dex.logicdelete.plugin.entities.DxLogicDeleteHolder;
import com.yonde.dex.container.folder.plugin.entities.DxObjFolderHolder;
import com.yonde.dex.dao.entity.base.IdEntity;
import javax.persistence.Column;
import com.yonde.dex.lcycle.plugin.entities.DxLifecycleManageBaseHolder;
import com.yonde.dex.dao.entity.base.DxIdEntityEmbeddable;
import com.yonde.dex.logicdelete.plugin.entities.DxLogicDeleteEmbeddable;
import com.yonde.dex.version.plugin.entities.DxIterationEmbeddable;
/**
* @description: ExtApplicant-PO实体
* @author: dexadmin
* @version: V
* @date: 2024-8-2 15:26:37
**/
* @description: ExtApplicant-PO实体
* @author: dexadmin
* @version: V
* @date: 2024-8-15 16:14:30
**/
@Entity
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@Data
@Table(name = "EXT_APPLICANT")
public class ExtApplicant extends IdOnlyEntity implements DxObjFileLinkHolder ,DxLifecycleManageBaseHolder ,IdEntity ,DxLogicDeleteHolder ,DxIterationHolder{
public class ExtApplicant extends IdOnlyEntity implements DxContextHolder ,DxObjFileLinkHolder ,DxObjFolderHolder ,DxLifecycleManageBaseHolder ,IdEntity ,DxLogicDeleteHolder ,DxIterationHolder{
/**
* 扩展PO属性
*/
@DexEmbedded()
@Embedded()
private DxContextEmbeddable dxContextEmbeddable;
/**
* 扩展PO属性
*/
......@@ -59,6 +69,12 @@ public class ExtApplicant extends IdOnlyEntity implements DxObjFileLinkHolder ,D
*/
@DexEmbedded()
@Embedded()
private DxObjFolderEmbeddable dxObjFolderEmbeddable;
/**
* 扩展PO属性
*/
@DexEmbedded()
@Embedded()
private DxLifecycleManageBaseEmbeddable dxLifecycleManageBaseEmbeddable;
/**
* dao扩展对象
......
......@@ -23,31 +23,41 @@ import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Table;
import com.yonde.dex.lcycle.plugin.entities.DxLifecycleManageBaseEmbeddable;
import com.yonde.dex.dao.entity.base.IdEntity;
import javax.persistence.Column;
import com.yonde.dex.container.folder.plugin.entities.DxObjFolderEmbeddable;
import com.yonde.dex.context.plugin.entities.DxContextHolder;
import com.yonde.dex.dfs.objfilelink.plugin.entities.DxObjFileLinkHolder;
import com.yonde.dex.dfs.objfilelink.plugin.entities.DxObjFileLinkEmbeddable;
import com.yonde.dex.lcycle.plugin.entities.DxLifecycleManageBaseHolder;
import com.yonde.dex.dao.entity.base.DxIdEntityEmbeddable;
import com.yonde.dex.context.plugin.entities.DxContextEmbeddable;
import com.yonde.dex.dao.entity.base.IdOnlyEntity;
import com.yonde.dex.version.plugin.entities.DxIterationHolder;
import com.yonde.dex.logicdelete.plugin.entities.DxLogicDeleteHolder;
import com.yonde.dex.container.folder.plugin.entities.DxObjFolderHolder;
import com.yonde.dex.dao.entity.base.IdEntity;
import javax.persistence.Column;
import com.yonde.dex.lcycle.plugin.entities.DxLifecycleManageBaseHolder;
import com.yonde.dex.dao.entity.base.DxIdEntityEmbeddable;
import com.yonde.dex.logicdelete.plugin.entities.DxLogicDeleteEmbeddable;
import com.yonde.dex.version.plugin.entities.DxIterationEmbeddable;
/**
* @description: ExtInterface-PO实体
* @author: dexadmin
* @version: V
* @date: 2024-8-2 15:26:37
**/
* @description: ExtInterface-PO实体
* @author: dexadmin
* @version: V
* @date: 2024-8-15 16:08:09
**/
@Entity
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
@Data
@Table(name = "EXT_INTERFACE")
public class ExtInterface extends IdOnlyEntity implements DxObjFileLinkHolder ,DxLifecycleManageBaseHolder ,IdEntity ,DxLogicDeleteHolder ,DxIterationHolder{
public class ExtInterface extends IdOnlyEntity implements DxContextHolder ,DxObjFileLinkHolder ,DxObjFolderHolder ,DxLifecycleManageBaseHolder ,IdEntity ,DxLogicDeleteHolder ,DxIterationHolder{
/**
* 扩展PO属性
*/
@DexEmbedded()
@Embedded()
private DxContextEmbeddable dxContextEmbeddable;
/**
* 扩展PO属性
*/
......@@ -59,6 +69,12 @@ public class ExtInterface extends IdOnlyEntity implements DxObjFileLinkHolder ,D
*/
@DexEmbedded()
@Embedded()
private DxObjFolderEmbeddable dxObjFolderEmbeddable;
/**
* 扩展PO属性
*/
@DexEmbedded()
@Embedded()
private DxLifecycleManageBaseEmbeddable dxLifecycleManageBaseEmbeddable;
/**
* dao扩展对象
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment