| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430 |
- package com.kingdee.eas.custom.webbeisen.test;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.kingdee.bos.BOSException;
- import com.kingdee.bos.BOSObjectFactory;
- import com.kingdee.bos.Context;
- import com.kingdee.bos.bsf.service.app.IHRMsfService;
- import com.kingdee.bos.dao.IObjectPK;
- import com.kingdee.bos.dao.IObjectValue;
- import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
- import com.kingdee.bos.metadata.entity.*;
- import com.kingdee.bos.metadata.query.util.CompareType;
- import com.kingdee.bos.util.BOSUuid;
- import com.kingdee.eas.base.attachment.AttachmentFactory;
- import com.kingdee.eas.base.attachment.AttachmentInfo;
- import com.kingdee.eas.base.attachment.BoAttchAssoFactory;
- import com.kingdee.eas.base.attachment.BoAttchAssoInfo;
- import com.kingdee.eas.base.codingrule.CodingRuleManagerFactory;
- import com.kingdee.eas.base.codingrule.ICodingRuleManager;
- import com.kingdee.eas.base.permission.UserFactory;
- import com.kingdee.eas.base.permission.UserInfo;
- import com.kingdee.eas.basedata.org.*;
- import com.kingdee.eas.basedata.person.PersonCollection;
- import com.kingdee.eas.basedata.person.PersonInfo;
- import com.kingdee.eas.common.EASBizException;
- import com.kingdee.eas.custom.beisenconfig.*;
- import com.kingdee.eas.custom.enumerations.ViewTypeEnum;
- import com.kingdee.eas.custom.webbeisen.utils.Helper;
- import com.kingdee.eas.framework.CoreBaseCollection;
- import com.kingdee.eas.framework.CoreBaseInfo;
- import com.kingdee.eas.framework.ICoreBase;
- import com.kingdee.eas.hr.affair.*;
- import com.kingdee.eas.hr.base.ApproveTypeEnum;
- import com.kingdee.eas.hr.base.HRBillStateEnum;
- import com.kingdee.eas.hr.emp.PersonPhotoFactory;
- import com.kingdee.eas.hr.emp.PersonPhotoInfo;
- import com.kingdee.shr.ats.web.util.NumberCodeRule;
- import com.kingdee.shr.attachment.AttachmentState;
- import com.kingdee.shr.attachment.AttachmentTypeEnum;
- import com.kingdee.shr.attachment.SHRAttachmentExtFactory;
- import com.kingdee.shr.attachment.SHRAttachmentExtInfo;
- import com.kingdee.shr.base.syssetting.MSFServiceFacadeFactory;
- import com.kingdee.shr.base.syssetting.UIType;
- import com.kingdee.shr.base.syssetting.UIViewFactory;
- import com.kingdee.shr.base.syssetting.UIViewInfo;
- import com.kingdee.shr.base.syssetting.app.util.XMLUtil;
- import com.kingdee.shr.base.syssetting.exception.SHRWebException;
- import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
- import com.kingdee.shr.base.syssetting.ml.SHRWebResource;
- import com.kingdee.shr.base.syssetting.util.MetaDataUtil;
- import com.kingdee.shr.base.syssetting.util.SysSettingUIViewUtil;
- import com.kingdee.shr.base.syssetting.web.dynamic.model.FieldInfo;
- import com.kingdee.shr.base.syssetting.web.dynamic.view.converter.IUIViewConverter;
- import com.kingdee.shr.base.syssetting.web.dynamic.view.converter.UIViewConverterFactory;
- import com.kingdee.shr.ml.MLServiceFactory;
- import com.kingdee.shr.ml.ResourceType;
- import com.kingdee.util.LocaleUtils;
- import com.kingdee.util.StringUtils;
- import org.apache.log4j.Logger;
- import org.jdom.Document;
- import org.jdom.Element;
- import org.jdom.output.XMLOutputter;
- import org.jdom.xpath.XPath;
- import org.json.JSONException;
- import java.io.IOException;
- import java.text.MessageFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.*;
- public class BeiSenSysTest implements IHRMsfService {
- Helper helper = null;
- Context context = null;
- private static Logger logger =
- Logger.getLogger("com.kingdee.eas.custom.beisen.synchronousorg.SynchronousEmpBillControllerBean");
- @Override
- public Object process(Context context, Map map) throws EASBizException, BOSException {
- String param = map.get("param") == null ? "" : map.get("param").toString();
- String number = map.get("number") == null ? "" : map.get("number").toString();
- empBill(context, param, number);
- return null;
- }
- public void empBill(Context ctx, String param, String viewConfigId) throws BOSException {
- helper = new Helper(ctx);
- this.context = ctx;
- EntityViewInfo entityViewInfo = new EntityViewInfo();
- FilterInfo filterInfo = new FilterInfo();
- filterInfo.getFilterItems().add(new FilterItemInfo("isEnabled", true, CompareType.EQUALS));
- filterInfo.getFilterItems().add(new FilterItemInfo("number", viewConfigId, CompareType.EQUALS));
- entityViewInfo.setFilter(filterInfo);
- //获取北森视图配置信息
- BSViewConfigCollection bsViewConfigCollection = BSViewConfigFactory.getLocalInstance(ctx).getBSViewConfigCollection(entityViewInfo);
- if (bsViewConfigCollection.size() <= 0) {
- throw new RuntimeException("配置未启用或者不存在");
- }
- BSViewConfigInfo bsViewConfigInfo = bsViewConfigCollection.get(0);
- String osfParam = bsViewConfigInfo.getOsfParam();
- String osfSericeName = bsViewConfigInfo.getOsfSericeName();
- Map<String, Object> serviceParam = new HashMap<String, Object>();
- if (param != null && !param.equals("")) {
- JSONObject jsonObject = JSONObject.parseObject(osfParam);
- jsonObject.put("staffId", param);
- osfParam = jsonObject.toJSONString();
- }
- serviceParam.put("param", osfParam);
- JSONArray beiSenData = null;
- try {
- SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
- selectorItemCollection.add("*");
- selectorItemCollection.add("view.*");
- Object o = MSFServiceFacadeFactory.getLocalInstance(ctx).processService(osfSericeName, serviceParam);
- beiSenData = JSONArray.parseArray(o.toString());
- //查询头部视图配置 头部视图配置只能有一个
- EntityViewInfo entryHeadEntityViewInfo = new EntityViewInfo();
- FilterInfo entryHeadFilterInfo = new FilterInfo();
- entryHeadFilterInfo.getFilterItems().add(new FilterItemInfo("parent", bsViewConfigInfo.getId().toString(), CompareType.EQUALS));
- entryHeadFilterInfo.getFilterItems().add(new FilterItemInfo("boy", ViewTypeEnum.HEAD_VALUE, CompareType.EQUALS));
- entryHeadEntityViewInfo.setSelector(selectorItemCollection);
- entryHeadEntityViewInfo.setFilter(entryHeadFilterInfo);
- BSViewConfigEntryCollection headBsViewConfigEntryCollection = BSViewConfigEntryFactory
- .getLocalInstance(ctx).getBSViewConfigEntryCollection(entryHeadEntityViewInfo);
- if (headBsViewConfigEntryCollection.size() != 1) {
- throw new RuntimeException("头部配置有且只能有一个");
- }
- BSViewConfigEntryInfo bsViewConfigEntryInfo = headBsViewConfigEntryCollection.get(0);
- UIViewInfo view = bsViewConfigEntryInfo.getView();
- String file = bsViewConfigEntryInfo.getFile();
- for (int i = 0; i < beiSenData.size(); i++) {
- JSONObject jsonObject1 = beiSenData.getJSONObject(i);
- JSONArray fileArray = jsonObject1.getJSONArray(file);
- boolean isCreateData = bsViewConfigEntryInfo.isIsCreateData();
- String headId = null;
- if (isCreateData) {
- String headDataEntry = bsViewConfigEntryInfo.getHeadDataEntry();
- if (headDataEntry!=null&&!headDataEntry.equals("")){
- Class objectValueClass = MetaDataUtil.getObjectValueClass(headDataEntry);
- // 创建对应的实体对象
- CoreBaseInfo coreBaseInfo = (CoreBaseInfo) MetaDataUtil.newInstance(objectValueClass, headDataEntry);
- if (coreBaseInfo instanceof EmpEnrollBizBillInfo) {
- System.out.println("针对入职单处理");
- String string = jsonObject1.getJSONObject("staffInfos").getString("id");
- EmpEnrollBizBillCollection collection = EmpEnrollBizBillFactory.getLocalInstance(ctx)
- .getEmpEnrollBizBillCollection("select *,entrys.*,entrys.person.* where beisenid='" + string + "'");
- if (collection.size() > 0) {
- System.out.println("=======入职单已存在=============");//0044610
- continue;
- }
- }
- }
- headId = headProcessing(view, jsonObject1, fileArray, file);
- } else {
- String headDataEntry = bsViewConfigEntryInfo.getHeadDataEntry();
- Class objectValueClass = MetaDataUtil.getObjectValueClass(headDataEntry);
- // 创建对应的实体对象
- CoreBaseInfo coreBaseInfo = (CoreBaseInfo) MetaDataUtil.newInstance(objectValueClass, headDataEntry);
- if (coreBaseInfo instanceof EmpEnrollBizBillInfo) {
- System.out.println("针对入职单处理");
- String string = jsonObject1.getJSONObject("staffInfos").getString("id");
- EmpEnrollBizBillCollection collection = EmpEnrollBizBillFactory.getLocalInstance(ctx)
- .getEmpEnrollBizBillCollection("select *,entrys.*,entrys.person.* where beisenid='" + string + "'");
- if (collection.size() > 0) {
- EmpEnrollBizBillInfo empEnrollBizBillInfo = collection.get(0);
- EmpEnrollBizBillEntryCollection entrys = empEnrollBizBillInfo.getEntrys();
- if (entrys.size() > 0) {
- PersonInfo person = entrys.get(0).getPerson();
- if (view != null) {
- System.out.println("======修改信息=========");
- headProcessing(view, jsonObject1, person, fileArray, file);
- }
- headId = person.getId().toString();
- }
- }
- } else {
- //其他处理 还没想好怎么做 暂时满足需求 后续有想法在填入
- }
- }
- if (headId == null) {
- continue;
- }
- EntityViewInfo entryBoyEntityViewInfo = new EntityViewInfo();
- FilterInfo entryBoyFilterInfo = new FilterInfo();
- entryBoyFilterInfo.getFilterItems().add(new FilterItemInfo("parent", bsViewConfigInfo.getId().toString(), CompareType.EQUALS));
- entryBoyFilterInfo.getFilterItems().add(new FilterItemInfo("boy", ViewTypeEnum.BOY_VALUE, CompareType.EQUALS));
- entryBoyEntityViewInfo.setSelector(selectorItemCollection);
- entryBoyEntityViewInfo.setFilter(entryBoyFilterInfo);
- BSViewConfigEntryCollection boyBsViewConfigEntryCollection = BSViewConfigEntryFactory
- .getLocalInstance(ctx).getBSViewConfigEntryCollection(entryBoyEntityViewInfo);
- for (int j = 0; j < boyBsViewConfigEntryCollection.size(); j++) {
- BSViewConfigEntryInfo boybsViewConfigEntryInfo = boyBsViewConfigEntryCollection.get(j);
- UIViewInfo view1 = boybsViewConfigEntryInfo.getView();
- String beiSenData1 = boybsViewConfigEntryInfo.getBeiSenData();
- UIType type = view1.getType();
- boolean isCreateData1 = boybsViewConfigEntryInfo.isIsCreateData();
- if (type.getValue().equals("list")) {
- boyProcessing(view1, headId, jsonObject1.getJSONArray(beiSenData1), null, "fileInfos", beiSenData1);
- } else {
- boyProcessing(view1, isCreateData1, headId, jsonObject1.getJSONObject(beiSenData1), null, "fileInfos", beiSenData1);
- }
- }
- }
- } catch (EASBizException e) {
- //获取北森数据失败
- throw new RuntimeException(e);
- } catch (JSONException e) {
- throw new RuntimeException(e);
- } catch (ParseException e) {
- throw new RuntimeException(e);
- } catch (IOException e) {
- throw new RuntimeException(e);
- } catch (SHRWebException e) {
- throw new RuntimeException(e);
- }
- }
- /**
- * 处理表单类型的主体信息
- *
- * @param id 关联的 ID
- * @param jsonObject 主体信息的 JSON 对象
- * @param fileJSON 文件信息的 JSON 数组
- * @return 保存后的对象主键
- * @throws JSONException JSON 处理异常
- * @throws SHRWebException SHR 网页异常
- * @throws BOSException BOS 异常
- * @throws EASBizException EAS 业务异常
- * @throws ParseException 解析异常
- * @throws IOException 输入输出异常
- */
- public String boyProcessing(UIViewInfo uiViewInfo, boolean isCreateData1, String id, JSONObject jsonObject, JSONArray fileJSON, String fileName, String beiSenData1)
- throws JSONException, SHRWebException, BOSException, EASBizException, ParseException, IOException {
- // 根据 UI 视图的主键生成动态 UI 视图信息
- com.kingdee.shr.base.syssetting.web.dynamic.model.UIViewInfo uiViewInfo1 =
- generateUIView(context, uiViewInfo.getUipk());
- // 获取实体名称
- String entityName = uiViewInfo1.getEntityName();
- // 获取字段列表
- List<FieldInfo> fields = uiViewInfo1.getFields();
- // 根据实体名称获取对应的对象值类
- Class objectValueClass = MetaDataUtil.getObjectValueClass(entityName);
- // 创建对应的实体对象
- CoreBaseInfo coreBaseInfo = (CoreBaseInfo) MetaDataUtil.newInstance(objectValueClass, entityName);
- // 处理字段信息
- JSONObject jsonObject2 = new JSONObject();
- jsonObject2.put(beiSenData1, jsonObject);
- // 创建对应的业务对象
- ICoreBase bosObject = (ICoreBase) (BOSObjectFactory.createBOSObject(context, coreBaseInfo.getBOSType()));
- // 获取关联字段
- String relateField = uiViewInfo1.getRelatedField();
- if (!isCreateData1) {
- System.out.println("=============查询不需要同步数据============"+"where " + relateField + " = '" + id+"'");
- CoreBaseCollection collection = bosObject.getCollection("where " + relateField + " = '" + id+"'");
- if (collection.size()>0){
- coreBaseInfo = collection.get(0);
- System.out.println("=========同步修改数据ID======="+coreBaseInfo.getId());
- }
- }
- JSONArray jsonArray = this.fieldProcessing(fields, coreBaseInfo, jsonObject2, fileName);
- // 根据 ID 获取对应的实体对象信息
- EntityObjectInfo entityObject = MetaDataUtil.getEntityObject(id);
- // 获取实体对象的全名称
- String fullName = entityObject.getFullName();
- // 根据全名称获取对应的对象值类
- Class objectValueClass1 = MetaDataUtil.getObjectValueClass(fullName);
- // 创建对应的实体对象
- CoreBaseInfo coreBaseInfo1 = (CoreBaseInfo) MetaDataUtil.newInstance(objectValueClass1, fullName);
- // 设置实体对象的 ID
- coreBaseInfo1.setId(BOSUuid.read(id));
- // 将关联的实体对象设置到当前实体对象中
- coreBaseInfo.put(relateField, coreBaseInfo1);
- IObjectPK save=null;
- // 保存实体对象
- if (coreBaseInfo instanceof EmpEnrollBizBillInfo){
- System.out.println("========submit===========");
- coreBaseInfo.put("billState", HRBillStateEnum.SUBMITED );
- coreBaseInfo.put("approveType",ApproveTypeEnum.WORKFLOW);
- coreBaseInfo.setExtendedProperty("isAddNew", "isAddNew");
- save = bosObject.submit(coreBaseInfo);
- }else {
- System.out.println("========save===========");
- save = bosObject.save(coreBaseInfo);
- }
- // 处理文件信息
- fileProcessor(save.toString(), null, jsonArray);
- if (fileJSON != null) {
- // 获取文件信息的第一个 JSON 对象
- JSONObject jsonObject1 = fileJSON.getJSONObject(0);
- if (!save.toString().equals("")) {
- // 遍历字段列表
- for (int i = 0; i < fields.size(); i++) {
- // 获取单个字段信息
- FieldInfo fieldInfo = fields.get(i);
- // 获取字段的别名
- String alias = fieldInfo.getAlias();//CertificateNu
- // 获取字段的名称
- String name = fieldInfo.getName();//idCardNO
- if (!name.equals("attachments")) {
- continue;
- }
- // 分割字段别名
- String[] split = alias.split("#");
- // 获取字段的属性
- Map<String, String> attributes = fieldInfo.getAttributes();
- // 获取数据的 UI 主键
- String dataUipk = attributes.get("data-uipk");
- // 获取文件信息
- JSONObject data = jsonObject1.getJSONObject(split[1]);
- if (data != null) {
- // 获取下载链接
- String downloadUrl = data.getString("downloadUrl");
- // 分割下载链接
- String[] split1 = downloadUrl.split(",");
- // 获取文件名
- String text = data.getString("text");
- // 分割文件名
- String[] split2 = text.split(",");
- for (int k = 0; k < split1.length; k++) {
- byte[] dataImg = new byte[0];
- // 拼接完整的下载链接
- String URL = "http:" + split1[k];
- System.out.println("===========" + URL + "==========");
- // 从网络下载文件数据
- dataImg = helper.getBytesByNetURL(URL);
- // 插入人员附件信息
- insertPersonAttachment(split2[k], dataUipk, save.toString(), dataImg);
- }
- }
- }
- }
- }
- // 返回保存后的对象主键
- return save.toString();
- }
- /**
- * 处理列表类型的主体信息
- *
- * @param id 关联的 ID
- * @param jsonArray 主体信息的 JSON 数组
- * @param fileJSON 文件信息的 JSON 数组
- * @return 保存后的对象主键
- * @throws JSONException JSON 处理异常
- * @throws SHRWebException SHR 网页异常
- * @throws BOSException BOS 异常
- * @throws EASBizException EAS 业务异常
- * @throws ParseException 解析异常
- * @throws IOException 输入输出异常
- */
- public String boyProcessing(UIViewInfo uiViewInfo, String id, JSONArray jsonArray, JSONArray fileJSON, String fileName, String beiSenData1)
- throws JSONException, SHRWebException, BOSException, EASBizException, ParseException, IOException {
- // 根据 UI 视图的主键生成动态 UI 视图信息
- com.kingdee.shr.base.syssetting.web.dynamic.model.UIViewInfo uiViewInfo1 =
- generateUIView(context, uiViewInfo.getUipk());
- String fileId = "";
- // 获取实体名称
- String entityName = uiViewInfo1.getEntityName();
- // 获取字段列表
- List<FieldInfo> fields = uiViewInfo1.getFields();
- // 获取关联字段
- String relateField = uiViewInfo1.getRelatedField();
- // 根据 ID 获取对应的实体对象信息
- EntityObjectInfo entityObject = MetaDataUtil.getEntityObject(id);
- // 获取实体对象的全名称
- String fullName = entityObject.getFullName();
- // 根据全名称获取对应的对象值类
- Class objectValueClass1 = MetaDataUtil.getObjectValueClass(fullName);
- // 创建对应的实体对象
- CoreBaseInfo coreBaseInfo1 = (CoreBaseInfo) MetaDataUtil.newInstance(objectValueClass1, fullName);
- // 设置实体对象的 ID
- coreBaseInfo1.setId(BOSUuid.read(id));
- // 获取排序方法
- String sorterMethod = uiViewInfo1.getOrderBy();
- // 遍历主体信息的 JSON 数组
- for (int i = 0; i < jsonArray.size(); i++) {
- // 根据实体名称获取对应的对象值类
- Class objectValueClass = MetaDataUtil.getObjectValueClass(entityName);
- // 创建对应的实体对象
- CoreBaseInfo coreBaseInfo = (CoreBaseInfo) MetaDataUtil.newInstance(objectValueClass, entityName);
- // 处理字段信息
- JSONObject jsonObject = new JSONObject();
- jsonObject.put(beiSenData1, jsonArray.getJSONObject(i));
- JSONArray jsonArray1 = this.fieldProcessing(fields, coreBaseInfo, jsonObject, fileName);
- // 创建对应的业务对象
- ICoreBase bosObject = (ICoreBase) (BOSObjectFactory.createBOSObject(context, coreBaseInfo.getBOSType()));
- // 将关联的实体对象设置到当前实体对象中
- coreBaseInfo.put(relateField, coreBaseInfo1);
- // 设置是否最高的标志
- coreBaseInfo.put("IsHighest", "1");
- // 设置是否单个的标志
- coreBaseInfo.put("isSingle", "1");
- IObjectPK save=null;
- // 保存实体对象
- if (coreBaseInfo instanceof EmpEnrollBizBillInfo){
- System.out.println("=======submit=======");
- coreBaseInfo.put("billState", HRBillStateEnum.SUBMITED );
- coreBaseInfo.put("approveType",ApproveTypeEnum.WORKFLOW);
- coreBaseInfo.setExtendedProperty("isAddNew", "isAddNew");
- save = bosObject.submit(coreBaseInfo);
- }else {
- System.out.println("=======save=======");
- save = bosObject.save(coreBaseInfo);
- }
- if (sorterMethod != null && !sorterMethod.equals("")) {
- // 根据关联字段和排序方法查询实体对象集合
- CoreBaseCollection collection = bosObject.getCollection(" where " + relateField + " = '" + id + "' order by " + sorterMethod);
- if (collection.size() > 1) {
- // 获取第一个实体对象
- CoreBaseInfo coreBaseInfo2 = collection.get(0);
- // 设置是否最高的标志
- coreBaseInfo2.put("IsHighest", "1");
- // 设置是否单个的标志
- coreBaseInfo2.put("isSingle", "1");
- // 保存实体对象
- IObjectPK save1 = bosObject.save(coreBaseInfo2);
- // 获取保存后的对象主键
- fileId = save1.toString();
- for (int j = 1; j < collection.size(); j++) {
- // 获取其他实体对象
- CoreBaseInfo coreBaseInfo3 = collection.get(j);
- // 设置是否最高的标志
- coreBaseInfo3.put("IsHighest", "0");
- // 设置是否单个的标志
- coreBaseInfo3.put("isSingle", "0");
- // 保存实体对象
- bosObject.save(coreBaseInfo3);
- }
- }
- }
- // 处理文件信息
- fileProcessor(save.toString(), null, jsonArray1);
- }
- if (fileJSON != null) {
- // 获取文件信息的第一个 JSON 对象
- JSONObject jsonObject = fileJSON.getJSONObject(0);
- if (!fileId.equals("")) {
- // 遍历字段列表
- for (int i = 0; i < fields.size(); i++) {
- // 获取单个字段信息
- FieldInfo fieldInfo = fields.get(i);
- // 获取字段的别名
- String alias = fieldInfo.getAlias();//CertificateNu
- // 获取字段的名称
- String name = fieldInfo.getName();//idCardNO
- if (!name.equals("attachments")) {
- continue;
- }
- // 分割字段别名
- String[] split = alias.split("#");
- // 获取字段的属性
- Map<String, String> attributes = fieldInfo.getAttributes();
- // 获取数据的 UI 主键
- String dataUipk = attributes.get("data-uipk");
- // 获取文件信息
- JSONObject data = jsonObject.getJSONObject(split[1]);
- if (data != null) {
- // 获取下载链接
- String downloadUrl = data.getString("downloadUrl");
- // 分割下载链接
- String[] split1 = downloadUrl.split(",");
- // 获取文件名
- String text = data.getString("text");
- // 分割文件名
- String[] split2 = text.split(",");
- for (int k = 0; k < split1.length; k++) {
- byte[] dataImg = new byte[0];
- // 拼接完整的下载链接
- String URL = "http:" + split1[k];
- System.out.println("===========" + URL + "==========");
- // 从网络下载文件数据
- dataImg = helper.getBytesByNetURL(URL);
- // 插入人员附件信息
- insertPersonAttachment(split2[k], dataUipk, fileId, dataImg);
- }
- }
- }
- }
- }
- return null;
- }
- /**
- * 处理字段信息
- *
- * @param fields 字段列表
- * @param coreBaseInfo 实体对象
- * @param jsonObject 数据的 JSON 对象
- * @return 处理后的文件信息的 JSON 数组
- * @throws JSONException JSON 处理异常
- * @throws ShrWebBizException SHR 网页业务异常
- * @throws BOSException BOS 异常
- * @throws ParseException 解析异常
- */
- public JSONArray fieldProcessing(List<FieldInfo> fields, CoreBaseInfo coreBaseInfo, JSONObject jsonObject, String fileName) throws JSONException, ShrWebBizException, BOSException, ParseException {
- System.out.println("===============+" + jsonObject);
- // 用于存储处理后的文件信息的 JSON 数组
- JSONArray files = new JSONArray();
- // 用于存储单个文件信息的 JSON 对象
- JSONObject file = null;
- // 遍历字段列表
- for (int i = 0; i < fields.size(); i++) {
- // 获取单个字段信息
- FieldInfo fieldInfo = fields.get(i);
- // 获取字段的属性信息
- PropertyInfo property = fieldInfo.getProperty();
- // 获取字段的数据类型
- DataType dataType = fieldInfo.getDataType();
- // 获取字段的别名
- String alias = fieldInfo.getAlias();//CertificateNumber.value
- // 获取字段的名称
- String name = fieldInfo.getName();//idCardNO
- // 分割字段别名
- String[] split = alias.split("#");
- Object value = null;
- // 获取字段的属性
- Map<String, String> attributes = fieldInfo.getAttributes();
- System.out.println("===============alias:" + alias);
- Object dataObject = jsonObject.get(split[0]);
- String s1 = attributes.get("data-valueType");
- if (s1 != null && s1.equals("url")) {
- if (dataObject instanceof JSONObject) {
- JSONObject data = jsonObject.getJSONObject(split[0]);
- if (data != null) {
- value = data.get(split[1]);
- if (value instanceof JSONObject) {
- value = data.getJSONObject(split[1]).get(split[2]);
- if (value instanceof JSONArray) {
- JSONArray jsonArray = data.getJSONObject(split[1]).getJSONArray(split[2]);
- String tempValue = "";
- for (int j = 0; j < jsonArray.size(); j++) {
- file = new JSONObject();
- String string = jsonArray.getString(j);
- // 将数据的 UI 主键、下载链接和文件名添加到文件信息的 JSON 对象中
- file.put("uipk", attributes.get("data-uipk"));
- file.put("url", string);
- file.put("name", data.getString("text"));
- // 将文件信息的 JSON 对象添加到文件信息的 JSON 数组中
- files.add(file);
- }
- continue;
- }
- }
- if (value == null || value.equals("null") || value.equals("{}") || value.equals("")) {
- continue;
- }
- // // 将数据的 UI 主键、下载链接和文件名添加到文件信息的 JSON 对象中
- // file.put("uipk", attributes.get("data-uipk"));
- // file.put("url", value);
- // file.put("name", data.getString("text"));
- // // 将文件信息的 JSON 对象添加到文件信息的 JSON 数组中
- // files.add(file);
- }
- } else if (dataObject instanceof JSONArray) {
- JSONArray jsonArray1 = jsonObject.getJSONArray(split[0]);
- for (int j = 0; j < jsonArray1.size(); j++) {
- JSONObject data = jsonArray1.getJSONObject(j);
- if (data != null) {
- value = data.get(split[1]);
- if (value instanceof JSONObject) {
- value = data.getJSONObject(split[1]).get(split[2]);
- if (value instanceof JSONArray) {
- JSONArray jsonArray = data.getJSONObject(split[1]).getJSONArray(split[2]);
- System.out.println("===========" + jsonArray);
- String tempValue = "";
- for (int k = 0; k < jsonArray.size(); k++) {
- file = new JSONObject();
- String string = jsonArray.getString(k);
- // 将数据的 UI 主键、下载链接和文件名添加到文件信息的 JSON 对象中
- file.put("uipk", attributes.get("data-uipk"));
- file.put("url", string);
- file.put("name", data.getString("text"));
- // 将文件信息的 JSON 对象添加到文件信息的 JSON 数组中
- files.add(file);
- }
- //continue;
- }
- }
- // if (value == null || value.equals("null") || value.equals("{}") || value.equals("")) {
- // continue;
- // }
- // // 将数据的 UI 主键、下载链接和文件名添加到文件信息的 JSON 对象中
- // file.put("uipk", attributes.get("data-uipk"));
- // file.put("url", value);
- // file.put("name", data.getString("text"));
- // // 将文件信息的 JSON 对象添加到文件信息的 JSON 数组中
- // files.add(file);
- }
- }
- continue;
- }
- }
- Object data = jsonObject.get(split[0]);
- // 获取数据的 JSON 对象
- if (data == null) {
- // 如果数据为空,获取默认值
- value = attributes.get("data-defaultValue");
- } else {
- JSONObject data1 = null;
- // 获取数据的值
- if (data instanceof JSONArray) {
- if (jsonObject.getJSONArray(split[0]).size() == 0) {
- value = attributes.get("data-defaultValue");
- } else {
- JSONArray jsonArray = jsonObject.getJSONArray(split[0]);
- data1 = jsonArray.getJSONObject(0);
- }
- } else {
- data1 = jsonObject.getJSONObject(split[0]);
- }
- value = data1.get(split[1]);
- if (value == null) {
- // 如果值为空,获取默认值
- value = attributes.get("data-defaultValue");
- } else {
- value = data1.get(split[1]);
- if (value instanceof JSONObject) {
- value = data1.getJSONObject(split[1]).get(split[2]);
- } else if (value instanceof JSONArray) {
- JSONArray jsonArray = data1.getJSONArray(split[1]);
- if (jsonArray.size() > 0) {
- Object o = jsonArray.get(0);
- if (o instanceof JSONObject) {
- Object string = jsonArray.getJSONObject(0).get(split[2]);
- if (string instanceof Integer) {
- value = jsonArray.getJSONObject(0).getInteger(split[2]);
- } else if (o instanceof String) {
- value = jsonArray.getJSONObject(0).getString(split[2]);
- }
- }
- }
- } else {
- value = data1.getString(split[1]);
- }
- // 获取自定义映射值
- String s = attributes.get("data-mappingValue");
- if (s != null && !s.equals("")) {
- // 解析自定义映射值的 JSON 对象
- JSONObject jsonObject1 = JSONObject.parseObject(s);
- if (jsonObject1 != null) {
- // 根据值获取映射后的值
- String string = jsonObject1.getString(value.toString());
- if (string != null) {
- value = string;
- }
- }
- }
- if (value == null || value.equals("")){
- value = attributes.get("data-defaultValue");
- }
- }
- }
- System.out.println("=========attributes.get(\"data-defaultValue\")"+attributes.get("data-defaultValue"));
- if (value == null || value.equals("")) {
- // 如果值为空,打印日志并跳过处理
- System.out.println("+++++++++" + value);
- continue;
- }
- if (dataType != null && dataType.getName().equals("ObjectValue")) {
- if (property instanceof LinkPropertyInfo) {
- // 获取关联对象的全名称
- String businessImplName = ((LinkPropertyInfo) property).getRelationship().getSupplierObject().getFullName();
- // 根据全名称获取对应的对象值类
- Class objectValueClass1 = MetaDataUtil.getObjectValueClass(businessImplName);
- // 创建对应的实体对象
- CoreBaseInfo coreBaseInfo1 = (CoreBaseInfo) MetaDataUtil.newInstance(objectValueClass1, businessImplName);
- // 创建对应的业务对象
- ICoreBase bosObject = (ICoreBase) (BOSObjectFactory.createBOSObject(context, coreBaseInfo1.getBOSType()));
- String where = "where name like '%" + value + "%' or number = '" + value + "'";
- if (coreBaseInfo1 instanceof PersonInfo) {
- where += " or beisenid = '" + value + "'";
- } else if (coreBaseInfo1 instanceof AdminOrgUnitInfo) {
- where += " or originalId = '" + value + "'";
- } else if (coreBaseInfo1 instanceof PositionInfo) {
- where += " or OriginalId = '" + value + "'";
- }
- // 根据名称或编号查询实体对象集合
- CoreBaseCollection dataBaseCollection = bosObject.getCollection(where);
- if (dataBaseCollection.size() <= 0) {
- // 如果值为空,获取默认值
- value = attributes.get("data-defaultValue");
- System.out.println("=========默认值重新查询==="+value);
- // 如果集合为空,将字段的值设置为 null
- // coreBaseInfo.put(name, null);
- bosObject = (ICoreBase) (BOSObjectFactory.createBOSObject(context, coreBaseInfo1.getBOSType()));
- where = "where name like '%" + value + "%' or number = '" + value + "'";
- if (coreBaseInfo1 instanceof PersonInfo) {
- where += " or beisenid = '" + value + "'";
- } else if (coreBaseInfo1 instanceof AdminOrgUnitInfo) {
- where += " or originalId = '" + value + "'";
- } else if (coreBaseInfo1 instanceof PositionInfo) {
- where += " or OriginalId = '" + value + "'";
- }
- dataBaseCollection = bosObject.getCollection(where);
- if (dataBaseCollection.size() > 0) {
- setCoreBaseInfo(coreBaseInfo, name, dataBaseCollection.get(0));
- }
- } else {
- // 将查询到的第一个实体对象设置到当前实体对象中
- //coreBaseInfo.put(name, dataBaseCollection.get(0));
- setCoreBaseInfo(coreBaseInfo, name, dataBaseCollection.get(0));
- }
- }
- } else if (dataType != null && dataType.getName().equals("Enum")) {
- // 如果数据类型为枚举,将值设置到当前实体对象中
- //coreBaseInfo.put(name, value);
- setCoreBaseInfo(coreBaseInfo, name, value);
- } else if (dataType != null && dataType.getName().equals("Date")) {
- // 创建日期格式化对象
- SimpleDateFormat f = new SimpleDateFormat(attributes.get("dateFormat"));
- if (!value.equals("") || !value.equals("未知") || !value.equals("9999/12")) {
- // 将日期字符串解析为日期对象并设置到当前实体对象中
- //coreBaseInfo.put(name, f.parse(value));
- setCoreBaseInfo(coreBaseInfo, name, f.parse(value.toString()));
- }
- } else {
- if (name.equals("entrys.IDCardNo")) {
- // 获取证件类型的值
- String string1 = jsonObject.getJSONObject("staffInfos").getString("idCardType");
- if ("1".equals(string1)) {
- // 如果证件类型为 1,将值设置到身份证号码字段中
- //coreBaseInfo.put(name, value);
- setCoreBaseInfo(coreBaseInfo, name, value);
- } else {
- // 否则,将值设置到护照号码字段中
- //coreBaseInfo.put("passportNO", value);
- setCoreBaseInfo(coreBaseInfo, "entrys.passportNO", value);
- }
- } else {
- setCoreBaseInfo(coreBaseInfo, name, value);
- // 将值设置到当前实体对象中
- //coreBaseInfo.put(name, value);
- }
- }
- }
- // 返回处理后的文件信息的 JSON 数组
- return files;
- }
- public void setCoreBaseInfo(CoreBaseInfo coreBaseInfo, String name, Object value) {
- System.out.println("+++++++++++++++" + name + ":" + value);
- if (name.indexOf(".") >= 0) {
- String[] split = name.split("\\.");
- Object o = coreBaseInfo.get(split[0]);
- if (o instanceof EmpEnrollBizBillEntryInfo) {
- ((CoreBaseInfo) o).put(split[1], value);
- } else if (o instanceof EmpEnrollBizBillEntryCollection) {
- EmpEnrollBizBillEntryCollection collection = ((EmpEnrollBizBillEntryCollection) o);
- EmpEnrollBizBillEntryInfo objectValue = null;
- if (collection.size() == 0) {
- objectValue = new EmpEnrollBizBillEntryInfo();
- //objectValue.setBizDate(new Date());
- collection.add(objectValue);
- } else {
- objectValue = collection.get(0);
- Date bizDate = objectValue.getBizDate();
- if (bizDate == null) {
- //objectValue.setBizDate(new Date());
- }
- String empNumber = objectValue.getEmpNumber();
- if (empNumber==null||empNumber.equals("")){
- try {
- String billNumber = readCodeRuleNumber(context, new PersonInfo(), getMainOrgByCu(context));
- System.out.println("billNumber:"+billNumber);
- objectValue.setEmpNumber(billNumber);
- } catch (SHRWebException e) {
- throw new RuntimeException(e);
- }
- }
- }
- objectValue.put(split[1], value);
- }
- } else {
- coreBaseInfo.put(name, value);
- }
- }
- public static String getMainOrgByCu(Context ctx) {
- OrgUnitInfo mainOrg = (OrgUnitInfo)ctx.get(OrgType.HRO);
- String orgId = mainOrg == null ? "" : mainOrg.getString("id");
- if (orgId == null || orgId.trim().length() == 0) {
- orgId = "00000000-0000-0000-0000-000000000000CCE7AED4";
- }
- return orgId;
- }
- public static String readCodeRuleNumber(Context ctx, IObjectValue model, String mainOrgID) throws SHRWebException {
- boolean hasCodingRule = hasCodingRule(ctx, model, mainOrgID);
- if (hasCodingRule) {
- try {
- ICodingRuleManager iCodingRuleManager = CodingRuleManagerFactory.getLocalInstance(ctx);
- return iCodingRuleManager.readNumber(model, mainOrgID);
- } catch (BOSException var5) {
- throw new SHRWebException(var5);
- } catch (EASBizException var6) {
- throw new SHRWebException(var6);
- }
- } else {
- return null;
- }
- }
- public static boolean hasCodingRule(Context ctx, IObjectValue model, String orgId) {
- try {
- ICodingRuleManager iCodingRuleManager = CodingRuleManagerFactory.getLocalInstance(ctx);
- if (orgId != null && orgId.trim().length() > 0 && iCodingRuleManager.isExist(model, orgId)) {
- return true;
- } else {
- String companyId = getNextCompanyId(ctx);
- return companyId != null && companyId.trim().length() > 0 && iCodingRuleManager.isExist(model, companyId);
- }
- } catch (Exception var5) {
- var5.printStackTrace();
- return false;
- }
- }
- public static String getNextCompanyId(Context ctx) throws Exception {
- ICtrlUnit iCtrlUnit = CtrlUnitFactory.getRemoteInstance();
- IObjectPK pk = new ObjectUuidPK("00000000-0000-0000-0000-000000000000CCE7AED4");
- OrgUnitInfo rootCU = iCtrlUnit.getCtrlUnitInfo(pk);
- return rootCU != null ? rootCU.getId().toString() : null;
- }
- public String headProcessing(UIViewInfo uiViewInfo, JSONObject jsonObject
- , CoreBaseInfo coreBaseInfo, JSONArray fileJSON, String fileName) throws BOSException, SHRWebException,
- EASBizException, JSONException, ParseException, IOException {
- // 根据 UI 视图的主键生成动态 UI 视图信息
- com.kingdee.shr.base.syssetting.web.dynamic.model.UIViewInfo uiViewInfo1 =
- generateUIView(context, uiViewInfo.getUipk());
- // 获取实体名称
- String entityName = uiViewInfo1.getEntityName();
- // 获取字段列表
- List<FieldInfo> fields = uiViewInfo1.getFields();
- // 处理字段信息
- JSONArray jsonArray = this.fieldProcessing(fields, coreBaseInfo, jsonObject, fileName);
- // 创建对应的业务对象
- ICoreBase bosObject = (ICoreBase) (BOSObjectFactory.createBOSObject(context, coreBaseInfo.getBOSType()));
- IObjectPK save=null;
- // 保存实体对象
- if (coreBaseInfo instanceof EmpEnrollBizBillInfo){
- System.out.println("===========submit==============");
- coreBaseInfo.put("billState", HRBillStateEnum.SUBMITED );
- coreBaseInfo.put("approveType",ApproveTypeEnum.WORKFLOW);
- coreBaseInfo.setExtendedProperty("isAddNew", "isAddNew");
- save = bosObject.submit(coreBaseInfo);
- }else {
- System.out.println("===========save==============");
- save = bosObject.save(coreBaseInfo);
- }
- PersonInfo personInfo = null;
- if (coreBaseInfo instanceof PersonInfo) {
- personInfo = (PersonInfo) coreBaseInfo;
- } else {
- personInfo = (PersonInfo) (coreBaseInfo.get("person"));
- }
- // 处理文件信息
- fileProcessor(save.toString(), personInfo, jsonArray);
- // 获取文件信息的第一个 JSON 对象
- if (fileJSON != null) {
- JSONObject jsonObject1 = fileJSON.getJSONObject(0);
- if (!save.toString().equals("")) {
- // 遍历字段列表
- for (int i = 0; i < fields.size(); i++) {
- // 获取单个字段信息
- FieldInfo fieldInfo = fields.get(i);
- // 获取字段的别名
- String alias = fieldInfo.getAlias();//CertificateNu
- // 获取字段的名称
- String name = fieldInfo.getName();//idCardNO
- if (!name.equals(fileName)) {
- continue;
- }
- // 分割字段别名
- String[] split = alias.split("#");
- // 获取字段的属性
- Map<String, String> attributes = fieldInfo.getAttributes();
- // 获取数据的 UI 主键
- String uipk = attributes.get("data-uipk");
- // 获取文件信息
- JSONObject data = jsonObject1.getJSONObject(split[1]);
- if (data != null) {
- // 获取下载链接
- JSONArray downloadUrl = data.getJSONArray("downloadUrls");
- // 分割下载链接
- // 获取文件名
- //String text = data.getString("text");
- // 分割文件名
- //String[] split2 = text.split(",");
- for (int k = 0; k < downloadUrl.size(); k++) {
- byte[] dataImg = new byte[0];
- // 拼接完整的下载链接
- String URL = "http:" + downloadUrl.get(k);
- System.out.println("===========" + URL + "==========");
- // 从网络下载文件数据
- dataImg = helper.getBytesByNetURL(URL);
- // 插入人员附件信息
- //insertPersonAttachment(split2[k], uipk, save.toString(), dataImg);
- }
- }
- }
- }
- }
- // 返回保存后的人员信息实体对象的主键
- return save.toString();
- }
- /**
- * 处理头部信息
- *
- * @param uiViewInfo 头部 UI 视图信息
- * @param jsonObject 人员信息的 JSON 对象
- * @param fileJSON 文件信息的 JSON 数组
- * @return 保存后的对象主键
- * @throws BOSException BOS 异常
- * @throws SHRWebException SHR 网页异常
- * @throws EASBizException EAS 业务异常
- * @throws JSONException JSON 处理异常
- * @throws ParseException 解析异常
- * @throws IOException 输入输出异常
- */
- public String headProcessing(UIViewInfo uiViewInfo, JSONObject jsonObject
- , JSONArray fileJSON, String fileName) throws BOSException, SHRWebException,
- EASBizException, JSONException, ParseException, IOException {
- // 根据 UI 视图的主键生成动态 UI 视图信息
- com.kingdee.shr.base.syssetting.web.dynamic.model.UIViewInfo uiViewInfo1 =
- generateUIView(context, uiViewInfo.getUipk());
- // 获取实体名称
- String entityName = uiViewInfo1.getEntityName();
- // 获取字段列表
- List<FieldInfo> fields = uiViewInfo1.getFields();
- // 根据实体名称获取对应的对象值类
- Class objectValueClass = MetaDataUtil.getObjectValueClass(entityName);
- // 创建对应的实体对象
- CoreBaseInfo coreBaseInfo = (CoreBaseInfo) MetaDataUtil.newInstance(objectValueClass, entityName);
- coreBaseInfo.getBOSType();
- // 处理字段信息
- JSONArray jsonArray = this.fieldProcessing(fields, coreBaseInfo, jsonObject, fileName);
- // 创建对应的业务对象
- ICoreBase bosObject = (ICoreBase) (BOSObjectFactory.createBOSObject(context, coreBaseInfo.getBOSType()));
- IObjectPK save=null;
- // 保存实体对象
- if (coreBaseInfo instanceof EmpEnrollBizBillInfo){
- System.out.println("=====submit=========");
- coreBaseInfo.put("billState", HRBillStateEnum.SUBMITED );
- coreBaseInfo.put("approveType",ApproveTypeEnum.WORKFLOW);
- coreBaseInfo.setExtendedProperty("isAddNew", "isAddNew");
- save = bosObject.submit(coreBaseInfo);
- }else {
- System.out.println("=====save=========");
- save = bosObject.save(coreBaseInfo);
- }
- PersonInfo personInfo = (PersonInfo) coreBaseInfo.get("person");
- // 处理文件信息
- fileProcessor(save.toString(), personInfo, jsonArray);
- // 获取文件信息的第一个 JSON 对象
- if (fileJSON != null) {
- JSONObject jsonObject1 = fileJSON.getJSONObject(0);
- if (!save.toString().equals("")) {
- // 遍历字段列表
- for (int i = 0; i < fields.size(); i++) {
- // 获取单个字段信息
- FieldInfo fieldInfo = fields.get(i);
- // 获取字段的别名
- String alias = fieldInfo.getAlias();//CertificateNu
- // 获取字段的名称
- String name = fieldInfo.getName();//idCardNO
- if (!name.equals(fileName)) {
- continue;
- }
- // 分割字段别名
- String[] split = alias.split("#");
- // 获取字段的属性
- Map<String, String> attributes = fieldInfo.getAttributes();
- // 获取数据的 UI 主键
- String uipk = attributes.get("data-uipk");
- // 获取文件信息
- JSONObject data = jsonObject1.getJSONObject(split[1]);
- if (data != null) {
- // 获取下载链接
- JSONArray downloadUrl = data.getJSONArray("downloadUrls");
- // 分割下载链接
- // 获取文件名
- //String text = data.getString("text");
- // 分割文件名
- //String[] split2 = text.split(",");
- for (int k = 0; k < downloadUrl.size(); k++) {
- byte[] dataImg = new byte[0];
- // 拼接完整的下载链接
- String URL = "http:" + downloadUrl.get(k);
- System.out.println("===========" + URL + "==========");
- // 从网络下载文件数据
- dataImg = helper.getBytesByNetURL(URL);
- // 插入人员附件信息
- //insertPersonAttachment(split2[k], uipk, save.toString(), dataImg);
- }
- }
- }
- }
- }
- // 返回保存后的人员信息实体对象的主键
- return save.toString();
- }
- /**
- * 处理文件信息
- *
- * @param id 关联的 ID
- * @param personInfo 人员信息对象
- * @param jsonArray 文件信息的 JSON 数组
- * @throws JSONException JSON 处理异常
- */
- public void fileProcessor(String id, PersonInfo personInfo, JSONArray jsonArray) throws JSONException {
- // 遍历文件信息的 JSON 数组
- for (int i = 0; i < jsonArray.size(); i++) {
- // 获取单个文件信息
- JSONObject jsonObject1 = jsonArray.getJSONObject(i);
- // 获取数据的 UI 主键
- String uipk = jsonObject1.getString("uipk");
- // 获取文件的下载链接
- String url = jsonObject1.getString("url");
- // 获取文件的名称
- String name = jsonObject1.getString("name");
- if (url == null || url.toString().equals("") || url.toString().equals("[]")) {
- continue;
- }
- if (uipk.equals("PersonPhoto")) {
- try {
- if (personInfo != null) {
- // 保存人员照片信息
- savePersonPhoto(personInfo, url);
- }
- } catch (IOException e) {
- // 抛出运行时异常,表示保存人员照片信息失败
- throw new RuntimeException(e);
- }
- } else {
- try {
- // 从网络下载文件数据
- byte[] dataImg = null;
- if (url.indexOf("http:") >= 0 || url.indexOf("https:") >= 0) {
- dataImg = helper.getBytesByNetURL(url);
- } else {
- dataImg = helper.getBytesByNetURL("http:" + url);
- }
- // 插入人员附件信息
- if (name == null) {
- name = extractFileNameFromUrl(url);
- }
- insertPersonAttachment(name, uipk, id, dataImg);
- } catch (IOException e) {
- // 抛出运行时异常,表示下载文件数据失败
- throw new RuntimeException(e);
- } catch (BOSException e) {
- // 抛出运行时异常,表示插入人员附件信息失败
- throw new RuntimeException(e);
- } catch (EASBizException e) {
- // 抛出运行时异常,表示插入人员附件信息失败
- throw new RuntimeException(e);
- }
- }
- }
- }
- public static void main(String[] args) {
- String name = extractFileNameFromUrl("https://dfiles.italent.cn/download/recruitonboardingfile/433107/1753067254/3/66304e3e5cb7431f9fb1900ba675cee3.jpg?sig_t=1753070295&sig_exp=2592000&sig_a=recruitonboarding&sig_pm=8&sig_npm=2&sig_v=1&sig=41d7e3c49cef36421ff8c4c4bd4ff6b145810ca3");
- System.out.println(name);
- }
- // 从URL中提取文件名
- private static String extractFileNameFromUrl(String url) {
- if (url == null || url.isEmpty()) {
- return null;
- }
- int lastSlash = url.lastIndexOf('/');
- if (lastSlash != -1 && lastSlash < url.length() - 1) {
- String fileName = url.substring(lastSlash + 1);
- // 去除查询参数
- int queryIndex = fileName.indexOf('?');
- if (queryIndex != -1) {
- fileName = fileName.substring(0, queryIndex);
- }
- return fileName;
- }
- return null;
- }
- /**
- * 保存人员照片信息
- *
- * @param personInfo 人员信息对象
- * @param iDPhotoDownloadUrl 照片下载链接
- * @throws IOException 输入输出异常
- */
- private void savePersonPhoto(PersonInfo personInfo, String iDPhotoDownloadUrl) throws IOException {
- if (!StringUtils.isEmpty(iDPhotoDownloadUrl)) {
- // 打印照片下载链接
- System.out.println("iDPhotoDownloadUrl" + iDPhotoDownloadUrl);
- // 从网络下载照片数据
- byte[] dataImg = helper.getBytesByNetURL("http:" + iDPhotoDownloadUrl);
- // 创建人员照片信息对象
- PersonPhotoInfo personPhotoInfo = new PersonPhotoInfo();
- // 设置照片数据
- personPhotoInfo.setImageData(dataImg);
- // 设置关联的人员信息对象
- personPhotoInfo.setPerson(personInfo);
- try {
- // 保存人员照片信息
- PersonPhotoFactory.getLocalInstance(context)
- .save(personPhotoInfo);
- } catch (EASBizException e) {
- e.printStackTrace();
- } catch (BOSException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * 插入人员附件信息
- *
- * @param filename 文件名
- * @param uipk 数据的 UI 主键
- * @param boId 业务对象的 ID
- * @param data 文件数据
- * @return 附件的 ID
- * @throws BOSException BOS 异常
- * @throws EASBizException EAS 业务异常
- */
- public String insertPersonAttachment(String filename, String uipk, String boId, byte[] data) throws BOSException, EASBizException {
- if (data.length > 20971520) {
- // 如果文件大小超过 20MB,抛出 BOS 异常
- throw new BOSException("文件上传失败,文件大小超过20MB!");
- } else if (!org.apache.commons.lang3.StringUtils.isBlank(filename) && !org.apache.commons.lang3.StringUtils.isBlank(boId) && data.length > 0) {
- // 创建 SHR 附件扩展信息对象
- SHRAttachmentExtInfo attchExt = new SHRAttachmentExtInfo();
- // 创建附件信息对象
- AttachmentInfo ai = new AttachmentInfo();
- // 获取管理员用户信息
- UserInfo userInfo = UserFactory.getLocalInstance(context).getUserInfo("where number = 'administrator'");
- // 获取用户 ID
- String userId = userInfo.getId().toString();
- // 设置附件名称
- ai.setName(filename.substring(0, filename.lastIndexOf(46)));
- // 设置附件简单名称
- ai.setSimpleName(filename.substring(filename.lastIndexOf(".") + 1));
- // 设置附件描述
- ai.setDescription("");
- // 设置附件文件数据
- ai.setFile(data);
- // 设置附件是否共享
- ai.setIsShared(false);
- // 设置附件共享描述
- ai.setSharedDesc("否");
- // 设置附件 ID
- ai.setAttachID("" + System.currentTimeMillis());
- // 设置附件类型
- ai.setType(this.getFileType(filename));
- // 将附件信息对象设置到 SHR 附件扩展信息对象中
- attchExt.setAttachment(ai);
- // 设置 SHR 附件扩展信息对象的名称
- attchExt.setName(filename);
- // 设置 SHR 附件扩展信息对象的属性名称
- attchExt.setPropertyName("null0");
- // 设置 SHR 附件扩展信息对象的类型
- attchExt.setType(AttachmentTypeEnum.FORM);
- // 设置 SHR 附件扩展信息对象的状态
- attchExt.setState(AttachmentState.UNSAVE);
- // 设置 SHR 附件扩展信息对象的绑定信息
- attchExt.setBunding(userId + "#" + uipk);
- // 设置 SHR 附件扩展信息对象关联的业务对象 ID
- attchExt.setBoID(boId);
- // 设置 SHR 附件扩展信息对象的状态
- attchExt.setState(AttachmentState.SAVE);
- // 保存附件信息对象
- AttachmentFactory.getLocalInstance(context).save(ai);
- // 设置 SHR 附件扩展信息对象的状态
- attchExt.setState(AttachmentState.SAVE);
- // 创建业务对象与附件关联信息对象
- BoAttchAssoInfo boAttchAssoInfo = new BoAttchAssoInfo();
- // 设置业务对象与附件关联信息对象关联的业务对象 ID
- boAttchAssoInfo.setBoID(boId);
- // 设置业务对象与附件关联信息对象关联的业务对象类型
- boAttchAssoInfo.setAssoBusObjType(String.valueOf(BOSUuid.getBOSObjectType(boId, true)));
- // 设置业务对象与附件关联信息对象的关联类型
- boAttchAssoInfo.setAssoType("Added Accessories");
- // 将附件信息对象设置到业务对象与附件关联信息对象中
- boAttchAssoInfo.setAttachment(ai);
- // 保存业务对象与附件关联信息对象
- BoAttchAssoFactory.getLocalInstance(context).save(boAttchAssoInfo);
- // 保存 SHR 附件扩展信息对象
- SHRAttachmentExtFactory.getLocalInstance(context).save(attchExt);
- // 返回附件的 ID
- return ai.getId().toString();
- } else {
- // 如果文件名、业务对象 ID 或文件数据为空,抛出 BOS 异常
- throw new BOSException("文件上传失败,请确认信息无误!");
- }
- }
- /**
- * 根据文件名获取文件类型
- *
- * @param fullname 文件名
- * @return 文件类型
- */
- private String getFileType(String fullname) {
- // 获取文件扩展名
- String extname = fullname.substring(fullname.lastIndexOf(".") + 1, fullname.length());
- if (!"doc".equalsIgnoreCase(extname) && !"docx".equalsIgnoreCase(extname)) {
- if (!"xls".equalsIgnoreCase(extname) && !"xlsx".equalsIgnoreCase(extname) && !"xlsm".equalsIgnoreCase(extname) && !"xlsb".equalsIgnoreCase(extname)) {
- if (!"ppt".equalsIgnoreCase(extname) && !"pptx".equalsIgnoreCase(extname) && !"pptm".equalsIgnoreCase(extname)) {
- return "txt".equalsIgnoreCase(extname) ? "TEXT 文本文件" : "未知文件类型(." + extname + ")";
- } else {
- return "Microsoft PowerPoint 幻灯片";
- }
- } else {
- return "Microsoft Excel 表格";
- }
- } else {
- return "Microsoft Word 文档";
- }
- }
- /**
- * 根据 UI 视图的主键生成动态 UI 视图信息
- *
- * @param ctx 上下文对象
- * @param uipk UI 视图的主键
- * @return 动态 UI 视图信息
- * @throws SHRWebException SHR 网页异常
- */
- private com.kingdee.shr.base.syssetting.web.dynamic.model.UIViewInfo generateUIView(Context ctx, String uipk) throws SHRWebException {
- // 从数据库中获取 UI 视图信息
- com.kingdee.shr.base.syssetting.UIViewInfo dbUIViewInfo = getUIViewFromDB(ctx, uipk);
- if (dbUIViewInfo == null) {
- if (uipk.contains(" ")) {
- // 如果 UI 视图主键包含空格,抛出 SHR 网页业务异常
- throw new ShrWebBizException(MessageFormat.format(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "view_contain_blank"), uipk));
- } else {
- // 如果 UI 视图信息为空,抛出 SHR 网页业务异常
- throw new ShrWebBizException(SHRWebResource.getString("com.kingdee.shr.base.syssetting.SHRSyssettingResource", "view_not_found"));
- }
- } else {
- // 处理树导航元素
- dealTreeNavigationElement(dbUIViewInfo);
- // 获取 UI 视图转换器
- IUIViewConverter converter = UIViewConverterFactory.getUIViewConverter(dbUIViewInfo, ctx);
- // 执行转换操作
- return converter.exec();
- }
- }
- /**
- * 处理树导航元素
- *
- * @param dbUIViewInfo UI 视图信息
- */
- private void dealTreeNavigationElement(com.kingdee.shr.base.syssetting.UIViewInfo dbUIViewInfo) {
- // 处理配置信息
- String content = dealConfig(dbUIViewInfo.getContent());
- // 处理扩展配置信息
- String extend = dealConfig(dbUIViewInfo.getExtend());
- if (!StringUtils.isEmpty(content)) {
- // 如果处理后的配置信息不为空,设置到 UI 视图信息中
- dbUIViewInfo.setContent(content);
- }
- if (!StringUtils.isEmpty(extend)) {
- // 如果处理后的扩展配置信息不为空,设置到 UI 视图信息中
- dbUIViewInfo.setExtend(extend);
- }
- }
- /**
- * 从数据库中获取 UI 视图信息
- *
- * @param ctx 上下文对象
- * @param uipk UI 视图的主键
- * @return UI 视图信息
- * @throws SHRWebException SHR 网页异常
- */
- public com.kingdee.shr.base.syssetting.UIViewInfo getUIViewFromDB(Context ctx, String uipk) throws SHRWebException {
- try {
- if (LocaleUtils.locale_zh_CN.toString().equals(LocaleUtils.getLocaleString(LocaleUtils.getFirstOriginLocale(ctx.getLocale())))) {
- // 如果是中文环境,根据 UI 视图主键和选择器从数据库中获取 UI 视图信息
- return UIViewFactory.getLocalInstance(ctx).getValueByUipk(uipk, SysSettingUIViewUtil.getUIViewSelector());
- } else {
- // 如果不是中文环境,使用多语言服务进行转换
- Map<String, Object> params = new HashMap();
- params.put("uipks", uipk);
- params.put("isConvert", true);
- Object obj = MLServiceFactory.getLocalInstance(ctx).convert(ResourceType.UIView, params);
- return null == obj ? null : (com.kingdee.shr.base.syssetting.UIViewInfo) obj;
- }
- } catch (BOSException var4) {
- // 抛出 SHR 网页业务异常
- throw new ShrWebBizException(var4.getMessage(), var4);
- } catch (EASBizException var5) {
- // 抛出 SHR 网页业务异常
- throw new ShrWebBizException(var5.getMessage(), var5);
- }
- }
- /**
- * 处理配置信息
- *
- * @param text 配置信息文本
- * @return 处理后的配置信息
- */
- private String dealConfig(String text) {
- if (StringUtils.isEmpty(text)) {
- return null;
- } else {
- try {
- // 获取 XML 输出器
- XMLOutputter output = XMLUtil.getXMLOutputter();
- // 解析 XML 文本
- Document doc = XMLUtil.parseXML(text);
- // 获取根元素
- Element rootElement = doc.getRootElement();
- // 创建树导航 XPath 对象
- XPath xPathTreeNavigation = XPath.newInstance("//treeNavigation");
- // 创建过滤器项 XPath 对象
- XPath xPathFilterItem = XPath.newInstance("//filterItem[@isAdminOrg='true']");
- // 获取树导航元素列表
- List<Element> treeNavigations = xPathTreeNavigation.selectNodes(rootElement);
- // 获取过滤器项元素列表
- List<Element> filterItems = xPathFilterItem.selectNodes(rootElement);
- if (null != treeNavigations && treeNavigations.size() > 0) {
- if (null != filterItems && filterItems.size() > 0) {
- // 遍历树导航元素列表
- Iterator i$ = treeNavigations.iterator();
- while (i$.hasNext()) {
- // 获取单个树导航元素
- Element e = (Element) i$.next();
- // 获取父元素
- Element parent = e.getParent();
- // 从父元素中移除树导航元素
- parent.removeContent(e);
- }
- // 输出处理后的 XML 文本
- String r = output.outputString(doc);
- return r;
- } else {
- return null;
- }
- } else {
- return null;
- }
- } catch (Exception var11) {
- return null;
- }
- }
- }
- }
|