|
|
@@ -1,13 +1,21 @@
|
|
|
package com.kingdee.eas.custom.esign.app;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.kingdee.bos.dao.IObjectValue;
|
|
|
import com.kingdee.bos.dao.ormapping.CanNotDeleteException;
|
|
|
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
|
|
|
import com.kingdee.bos.metadata.entity.FilterInfo;
|
|
|
import com.kingdee.bos.metadata.entity.FilterItemCollection;
|
|
|
import com.kingdee.bos.metadata.entity.FilterItemInfo;
|
|
|
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
|
|
|
import com.kingdee.bos.metadata.query.util.CompareType;
|
|
|
import com.kingdee.bos.util.BOSUuid;
|
|
|
-import com.kingdee.eas.custom.esign.ESignTemplateInfo;
|
|
|
+import com.kingdee.eas.custom.esign.*;
|
|
|
+import com.kingdee.eas.custom.esign.bizEnum.SyncStatusEnum;
|
|
|
+import com.kingdee.eas.custom.esign.tsign.hz.comm.EsignHttpResponse;
|
|
|
+import com.kingdee.eas.custom.esign.tsign.hz.exception.EsignException;
|
|
|
+import com.kingdee.eas.custom.esign.util.EsignHttpUtil;
|
|
|
import com.kingdee.shr.base.syssetting.BaseItemStateEnum;
|
|
|
import com.kingdee.util.StringUtils;
|
|
|
import org.apache.log4j.Logger;
|
|
|
@@ -17,6 +25,9 @@ import com.kingdee.bos.dao.IObjectPK;
|
|
|
import com.kingdee.eas.common.EASBizException;
|
|
|
|
|
|
import java.sql.Connection;
|
|
|
+import java.sql.Time;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
public class ESignTemplateControllerBean extends AbstractESignTemplateControllerBean {
|
|
|
private static Logger logger = Logger.getLogger(ESignTemplateControllerBean.class);
|
|
|
@@ -68,4 +79,105 @@ public class ESignTemplateControllerBean extends AbstractESignTemplateController
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 同步模板字段
|
|
|
+ *
|
|
|
+ * @param ctx
|
|
|
+ * @param billId
|
|
|
+ * @throws BOSException
|
|
|
+ * @throws EASBizException
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ protected void _syncTemplateFields(Context ctx, String billId)
|
|
|
+ throws BOSException, EASBizException {
|
|
|
+ super._syncTemplateFields(ctx, billId);
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isBlank(billId)) {
|
|
|
+ throw new EASBizException(EASBizException.CHECKBLANK, new Object[]{"单据id不能为空!"});
|
|
|
+ }
|
|
|
+ SelectorItemCollection sic = new SelectorItemCollection();
|
|
|
+ sic.add("entrys.*");
|
|
|
+ sic.add("entrys.fields.*");
|
|
|
+ ESignTemplateInfo info = getESignTemplateInfo(ctx, new ObjectUuidPK(billId), sic);
|
|
|
+ ESignTemplateFileEntryCollection entrys = info.getEntrys();
|
|
|
+ for (int i = 0; i < entrys.size(); i++) {
|
|
|
+ ESignTemplateFileEntryInfo entryInfo = entrys.get(i);
|
|
|
+ String eSignTemplateId = entryInfo.getESignTemplateId();
|
|
|
+ try {
|
|
|
+ if (org.apache.commons.lang3.StringUtils.isBlank(eSignTemplateId)) {
|
|
|
+ throw new BOSException("e 签宝模板 id为空!");
|
|
|
+ }
|
|
|
+ //1.调用接口获取模板字段
|
|
|
+ EsignHttpResponse response = null;
|
|
|
+ try {
|
|
|
+ response = EsignHttpUtil.getDocTemplatesDetailById(eSignTemplateId);
|
|
|
+ } catch (EsignException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new BOSException("调用e签宝接口报错: " + e.getMessage());
|
|
|
+ }
|
|
|
+ String body = response.getBody();
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(body);
|
|
|
+ if (0 != jsonObject.getInteger("code")) {
|
|
|
+ throw new BOSException(jsonObject.getString("message"));
|
|
|
+ }
|
|
|
+ JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ //附件下载地址
|
|
|
+ String fileDownloadUrl = data.getString("fileDownloadUrl");
|
|
|
+ JSONArray components = data.getJSONArray("components");
|
|
|
+ //2.比较现有模板字段,如果新增字段则添加,删除字段就更新为失效
|
|
|
+ ESignTemplateFileEntryFieldCollection fields = entryInfo.getFields();
|
|
|
+ Map<String, ESignTemplateFileEntryFieldInfo> fieldMap = new HashMap<String, ESignTemplateFileEntryFieldInfo>();
|
|
|
+ for (int j = 0; j < fields.size(); j++) {
|
|
|
+ ESignTemplateFileEntryFieldInfo fieldInfo = fields.get(j);
|
|
|
+ fieldMap.put(fieldInfo.getTemplateFieldId(), fieldInfo);
|
|
|
+ }
|
|
|
+ for (int j = 0; j < components.size(); j++) {
|
|
|
+ JSONObject component = components.getJSONObject(j);
|
|
|
+ //组件id
|
|
|
+ String componentId = component.getString("componentId");
|
|
|
+ //组件编码(可以为空)
|
|
|
+ String componentKey = component.getString("componentKey");
|
|
|
+ //组件名称
|
|
|
+ String componentName = component.getString("componentName");
|
|
|
+ //是否必填
|
|
|
+ boolean isRrequired = component.getBoolean("required");
|
|
|
+ //组件排序,从1开始
|
|
|
+ int componentOrder = component.getInteger("componentOrder");
|
|
|
+ ESignTemplateFileEntryFieldInfo fieldInfo = fieldMap.get(componentId);
|
|
|
+ if (fieldInfo != null) {
|
|
|
+ fieldMap.remove(componentId);
|
|
|
+ } else {
|
|
|
+ fieldInfo = new ESignTemplateFileEntryFieldInfo();
|
|
|
+ fieldInfo.setTemplateFieldId(componentId);
|
|
|
+ fields.add(fieldInfo);
|
|
|
+ }
|
|
|
+ //修改字段名称
|
|
|
+ fieldInfo.setTemplateFieldName(componentName);
|
|
|
+ //修改字段排序
|
|
|
+ fieldInfo.setSeq(componentOrder);
|
|
|
+ //修改是否必填
|
|
|
+ fieldInfo.setRequired(isRrequired);
|
|
|
+ //组件编码
|
|
|
+ fieldInfo.setTemplateFieldKey(componentKey);
|
|
|
+ }
|
|
|
+ if (!fieldMap.isEmpty()) {
|
|
|
+ //已经失效的字段
|
|
|
+ for (String componentId : fieldMap.keySet()) {
|
|
|
+ fieldMap.get(componentId).setInvalid(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ entryInfo.setSyncStatus(SyncStatusEnum.SYNCED);
|
|
|
+ entryInfo.setSyncResult("同步成功");
|
|
|
+ } catch (BOSException e) {
|
|
|
+ logger.error(e.getMessage(), e);
|
|
|
+ entryInfo.setSyncStatus(SyncStatusEnum.SYNC_FAILED);
|
|
|
+ entryInfo.setSyncResult(e.getMessage());
|
|
|
+// throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ entryInfo.setSyncTime(new Time(System.currentTimeMillis()));
|
|
|
+ }
|
|
|
+ //更新
|
|
|
+ update(ctx, new ObjectUuidPK(billId), info);
|
|
|
+ //3.同步模板附件
|
|
|
+ //syncTemplateAttachments(ctx, billId);
|
|
|
+ }
|
|
|
}
|