| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- 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.*;
- 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;
- import com.kingdee.bos.*;
- 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);
- @Override
- protected IObjectPK _save(Context ctx, IObjectValue model) throws BOSException, EASBizException {
- ESignTemplateInfo info = (ESignTemplateInfo) model;
- String eSignTemplateNum = info.getESignTemplateNum();
- if (StringUtils.isEmpty(eSignTemplateNum)) {
- throw new BOSException("e 签宝模板编码不能为空!");
- }
- BOSUuid id = info.getId();
- FilterInfo filter = new FilterInfo();
- FilterItemCollection filterItems = filter.getFilterItems();
- if (id != null) {
- filterItems.add(new FilterItemInfo("id", id.toString(), CompareType.NOTEQUALS));
- }
- filterItems.add(new FilterItemInfo("eSignTemplateNum", eSignTemplateNum));
- if (exists(ctx, filter)) {
- throw new BOSException(String.format("e 签宝模板编码[%s]已经存在!", eSignTemplateNum));
- }
- return super._save(ctx, model);
- }
- /**
- * 检查电子签名模板是否可以删除
- *
- * @param ctx 业务上下文对象
- * @param pk 电子签名模板主键
- * @param cn 数据库连接对象
- * @throws CanNotDeleteException 当数据处于启用状态时抛出此异常,表示不允许删除
- */
- @Override
- protected void _canDelete(Context ctx, IObjectPK pk, Connection cn) throws CanNotDeleteException {
- super._canDelete(ctx, pk, cn);
- try {
- // 获取电子签名模板信息并检查状态
- ESignTemplateInfo info = getESignTemplateInfo(ctx, pk);
- BaseItemStateEnum state = info.getState();
- if (BaseItemStateEnum.ENABLE.equals(state)) {
- throw new CanNotDeleteException("启用的数据,不允许删除!");
- }
- } catch (BOSException e) {
- logger.error(e.getMessage(), e);
- throw new CanNotDeleteException(e);
- } catch (EASBizException e) {
- logger.error(e.getMessage(), e);
- throw new CanNotDeleteException(e);
- }
- }
- /**
- * 同步模板字段
- *
- * @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 {
- 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);
- }
- if (org.apache.commons.lang3.StringUtils.isNotBlank(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.比较现有模板字段,如果新增字段则添加,删除字段就更新为失效
- 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);
- }
- }
|