package fi.fa.opplugin; import com.alibaba.druid.util.StringUtils; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.entity.operate.result.OperationResult; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; import kd.bos.exception.KDBizException; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import org.apache.commons.lang3.ObjectUtils; import java.util.ArrayList; import java.util.List; public class AssetMidBillOpPlugin extends AbstractOperationServicePlugIn { @Override public void beginOperationTransaction(BeginOperationTransactionArgs e) { super.beginOperationTransaction(e); DynamicObject[] dynamicObjects = e.getDataEntities(); for (int i = 0; i < dynamicObjects.length; i++) { if (StringUtils.equals(e.getOperationKey(), "push")) { DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName()); String nckd_flag = info.getString("nckd_flag"); if ("1".equals(nckd_flag)) { throw new KDBizException("单据" + info.getString("number") + "已经下推生成了资产调拨单,不允许重复下推!"); }else { String dispatchType = info.getString("nckd_dispatch_type"); String direction = info.getString("nckd_direction"); String nckd_card_real_code = info.getString("nckd_card_number_tag"); String[] asset = nckd_card_real_code.split(","); // 存储键的数组 String[] keys = new String[asset.length]; List number = new ArrayList<>(); List cardNumber = new ArrayList<>(); // 遍历每个键值对并获取键 for (int j = 0; j < asset.length; j++) { String[] keyValue = asset[j].split(":"); if (keyValue.length > 0) { number.add(keyValue[0]); } } //查询e管家实物卡片清单 QFilter cardFilter = new QFilter("number", QCP.in,number); DynamicObject[] eCard = BusinessDataServiceHelper.load("nckd_fa_card_real_list","nckd_card_real_code",new QFilter[] {cardFilter}); for (DynamicObject object : eCard) { cardNumber.add(object.getString("nckd_card_real_code")); } if ("0".equals(dispatchType)) { List list = new ArrayList<>(); list.add("A00100101900240600002"); list.add("A00100101900240600008"); QFilter filter = new QFilter("number", QCP.in,"A00100101900240600002"); filter.and("isbak", QCP.equals, "0"); DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter}); // if (asset.length == card.length) { DynamicObject dispatch = BusinessDataServiceHelper.newDynamicObject("fa_dispatch"); //单据头 dispatch.set("dispatchdate", info.getDate("nckd_date_out"));//调出日期 dispatch.set("assetunit", getOrg(info.getString("nckd_org_out")));//调出组织 dispatch.set("inassetunit", getOrg(info.getString("nckd_org_in")));//调入组织 dispatch.set("org", getOrg(info.getString("nckd_org_out")));//调出核算组织 dispatch.set("inorg", getOrg(info.getString("nckd_org_in")));//调入核算组织 dispatch.set("reason", info.getString("nckd_reason"));//调出原因 dispatch.set("dispatchtype", "A");//调拨类型 A="平价调拨",B="非平价调拨" dispatch.set("changemode", 14);//减少方式默认"调出" dispatch.set("currency", 1);//币种 dispatch.set("currencyrate", 1);//结算汇率 //制单信息 dispatch.set("billstatus", "A");//暂存 //调出方向 if("0".equals(direction)){ dispatch.set("outuser", getUser(info.getString("nckd_user_out")));//调出申请人 dispatch.set("inuser", getUser(info.getString("nckd_user_in")));//调入负责人 dispatch.set("creator", getUser(info.getString("nckd_user_out")));//创建人 dispatch.set("modifier", getUser(info.getString("nckd_user_out")));//修改人 dispatch.set("auditor", getUser(info.getString("nckd_user_out")));//审核人 dispatch.set("appliant", getUser(info.getString("nckd_user_out")));//调拨申请人 }//调入方向 else if ("1".equals(direction)) { dispatch.set("outuser", getUser(info.getString("nckd_user_in")));//调出申请人 dispatch.set("inuser", getUser(info.getString("nckd_user_out")));//调入负责人 dispatch.set("creator", getUser(info.getString("nckd_user_in")));//创建人 dispatch.set("modifier", getUser(info.getString("nckd_user_in")));//修改人 dispatch.set("auditor", getUser(info.getString("nckd_user_in")));//审核人 dispatch.set("appliant", getUser(info.getString("nckd_user_in")));//调拨申请人 } for (int c = 0; c < card.length; c++) { DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName()); //创建调出单分录 DynamicObjectCollection entryEntity = dispatch.getDynamicObjectCollection("dispatchentry"); DynamicObject entry1 = entryEntity.addNew(); entry1.set("realcard", cardInfo);//资产编码 entry1.set("measurement", cardInfo.getDynamicObject("unit").getLong("id"));//计量单位 entry1.set("dispatchqty", cardInfo.getInt("assetamount"));//数量 entry1.set("inusedept", getOrg(info.getString("nckd_dept_in")));//调入使用部门 } //执行保存-提交-审核 OperationResult saveResult = SaveServiceHelper.saveOperate("fa_dispatch", new DynamicObject[]{dispatch}, OperateOption.create()); if (saveResult.isSuccess()){ info.set("nckd_flag", "1"); SaveServiceHelper.save(new DynamicObject[]{info}); this.operationResult.setSuccess(true); this.operationResult.setMessage("下推资产调出单成功"); this.operationResult.setShowMessage(true); OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "fa_dispatch",saveResult.getSuccessPkIds().toArray(),OperateOption.create()); OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "fa_dispatch",submitResult.getSuccessPkIds().toArray(),OperateOption.create()); }else { this.operationResult.setShowMessage(true); this.operationResult.setSuccess(false); this.operationResult.setMessage("下推资产调出单单失败"); } // }else { // throw new KDBizException("请先拆分实物卡片再下推生单!"); // } }else if ("1".equals(dispatchType)) { DynamicObject changeDept = BusinessDataServiceHelper.newDynamicObject("fa_change_dept"); //单据头 DynamicObject orgInfo = queryOrg(getOrg(info.getString("nckd_org_in"))); changeDept.set("org", orgInfo);//核算组织 changeDept.set("changedate", info.getDate("nckd_date_out"));//记账日期 changeDept.set("appliantid", getUser(info.getString("nckd_user_out")));//变更申请人 changeDept.set("remark", info.getString("nckd_reason"));//调出原因 changeDept.set("sourcetype", 2);//来源方式(5:API生成) changeDept.set("changetype", queryChangeType(Long.parseLong("733953285719123968")));//变更类型,默认部门变更 changeDept.set("chtypedetail", "1");//变更类型明细默认实物变更1 changeDept.set("voucherflag", "A");//记账标识默认无需记账A changeDept.set("billstatus", "A");//暂存 QFilter filter = new QFilter("number", QCP.in,"A00100101900240600007"); filter.and("isbak", QCP.equals, "0"); DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter}); for (int c = 0; c < card.length; c++) { DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName()); //查询财务卡片 DynamicObject fin = queryFinCard(cardInfo.getLong("id"));//财务卡片id //创建变更字段分录 DynamicObjectCollection fieldentry = changeDept.getDynamicObjectCollection("fieldentry"); if (!getOrg(info.getString("nckd_org_in")).equals(cardInfo.getDynamicObject("headusedept").getLong("id"))){ DynamicObject entry1 = fieldentry.addNew(); entry1.set("realcard1", cardInfo);//资产编码 entry1.set("depreuse1", queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认 entry1.set("currency1", 1);//币别 entry1.set("basecurrency1", 1);//本币位 entry1.set("assetnumber",cardInfo.getString("number"));//资产编码 entry1.set("bizdate1", info.getDate("nckd_date_out"));//业务日期 entry1.set("field", "fa_card_real.headusedept");//变更字段-部门 entry1.set("beforevalue", String.valueOf(cardInfo.getDynamicObject("headusedept").getLong("id")));//变更前值 entry1.set("aftervalue", getOrg(info.getString("nckd_dept_in")).toString());//变更后值 entry1.set("realcardmasterid", cardInfo);//实物卡片id entry1.set("fincard1", fin);//财务卡片 } if (ObjectUtils.isEmpty(cardInfo.getDynamicObject("headuseperson")) || ObjectUtils.isNotEmpty(cardInfo.getDynamicObject("headuseperson")) && !getUser(info.getString("nckd_used_user")).equals(cardInfo.getDynamicObject("headuseperson").getLong("id"))) { String beforevalue = cardInfo.getDynamicObject("headuseperson") == null ? "" : String.valueOf(cardInfo.getDynamicObject("headuseperson").getLong("id")); DynamicObject entry2 = fieldentry.addNew(); entry2.set("realcard1", cardInfo);//资产编码 entry2.set("depreuse1", queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认 entry2.set("currency1", 1);//币别 entry2.set("basecurrency1", 1);//本币位 entry2.set("assetnumber",cardInfo.getString("number"));//资产编码 entry2.set("bizdate1", info.getDate("nckd_date_out"));//业务日期 entry2.set("field", "fa_card_real.headuseperson");//变更字段-使用人 entry2.set("beforevalue", beforevalue);//变更前值 entry2.set("aftervalue", String.valueOf(getUser(info.getString("nckd_used_user")).getLong("id")));//变更后值 entry2.set("realcardmasterid", cardInfo);//实物卡片id entry2.set("fincard1", fin);//财务卡片 } //创建实物变更分录 DynamicObjectCollection realentry = changeDept.getDynamicObjectCollection("realentry"); DynamicObject realentry1 = realentry.addNew(); realentry1.set("realcard", cardInfo.getLong("id"));//资产编码 //创建财务变更分录 DynamicObjectCollection finentry = realentry1.getDynamicObjectCollection("finentry"); DynamicObject finentry1 = finentry.addNew(); finentry1.set("depreuse", queryDepreuse(Long.parseLong("418714318096331776")));//折旧用途默认 finentry1.set("fincard", fin); finentry1.set("bizdate", info.getDate("nckd_date_out")); } //执行保存-提交-审核 OperationResult saveResult = SaveServiceHelper.saveOperate("fa_change_dept", new DynamicObject[]{changeDept}, OperateOption.create()); if (saveResult.isSuccess()) { info.set("nckd_flag", "1"); SaveServiceHelper.save(new DynamicObject[]{info}); this.operationResult.setShowMessage(true); this.operationResult.setSuccess(true); this.operationResult.setMessage("下推资产变更单成功"); OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "fa_change_dept",saveResult.getSuccessPkIds().toArray(),OperateOption.create()); OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "fa_change_dept",submitResult.getSuccessPkIds().toArray(),OperateOption.create()); }else { this.operationResult.setShowMessage(true); this.operationResult.setSuccess(false); this.operationResult.setMessage("下推资产变更单失败"); } } else if ("2".equals(dispatchType)) { DynamicObject busProcess = BusinessDataServiceHelper.newDynamicObject("nckd_ywcld"); busProcess.set("nckd_bizdate", info.getDate("nckd_date_out"));//业务日期 busProcess.set("nckd_detailtype", "D");//业务类型 D:报废 busProcess.set("nckd_costcompany", getOrg(info.getString("nckd_org_in")));//资产组织 busProcess.set("nckd_textfield1", info.getString("nckd_reason"));//摘要事由 busProcess.set("nckd_applierv", getUser(info.getString("nckd_user_out")));//制单人 //制单信息 busProcess.set("creator", getUser(info.getString("nckd_user_out")));//创建人 busProcess.set("createtime", info.getDate("nckd_date_out"));//创建时间 busProcess.set("modifier", getUser(info.getString("nckd_user_out")));//修改人 busProcess.set("modifytime", info.getDate("nckd_date_out"));//修改时间 busProcess.set("auditor", getUser(info.getString("nckd_user_out")));//审核人 busProcess.set("auditdate", info.getDate("nckd_date_out"));//审核时间 busProcess.set("billstatus", "A");//状态 QFilter filter = new QFilter("number", QCP.equals,"A00100101900240700007"); cardFilter.and("isbak", QCP.equals, "0"); DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {filter}); for (int c = 0; c < card.length; c++) { DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName()); //创建报废明细分录 DynamicObjectCollection entryEntity = busProcess.getDynamicObjectCollection("nckd_entryentity6"); DynamicObject entry1 = entryEntity.addNew(); entry1.set("nckd_basedatafield", cardInfo);//资产编码 Integer count = Integer.valueOf(info.getString("nckd_count")); entry1.set("nckd_integerfield", count);//报废数量 } //执行保存-提交-审核 OperationResult saveResult = SaveServiceHelper.saveOperate("nckd_ywcld", new DynamicObject[]{busProcess}, OperateOption.create()); if (saveResult.isSuccess()){ info.set("nckd_flag", "1"); SaveServiceHelper.save(new DynamicObject[]{info}); this.operationResult.setShowMessage(true); this.operationResult.setSuccess(true); this.operationResult.setMessage("下推业务处理单成功"); OperationResult submitResult = OperationServiceHelper.executeOperate("submit", "nckd_ywcld",saveResult.getSuccessPkIds().toArray(),OperateOption.create()); OperationResult auditResult = OperationServiceHelper.executeOperate("audit", "nckd_ywcld",submitResult.getSuccessPkIds().toArray(),OperateOption.create()); }else { this.operationResult.setShowMessage(true); this.operationResult.setSuccess(false); this.operationResult.setMessage("下推业务处理单失败"); } } } } } } /** * @description 查询用户表获取用户 * @param eUser * @return Long */ private DynamicObject getUser(String eUser) { QFilter filter = new QFilter("number", QCP.in, eUser); DynamicObject[] user = BusinessDataServiceHelper.load("bos_user","id",new QFilter[] {filter}); if (user.length > 0) { DynamicObject userInfo = BusinessDataServiceHelper.loadSingle(user[0].getPkValue(), user[0].getDynamicObjectType().getName()); return userInfo; } return null; } /** * @description 查询组织对照表获取组织id * @param eOrgId * @return Long */ private Long getOrg(String eOrgId) { QFilter orgFilter = new QFilter("nckd_e_org", QCP.equals,eOrgId); DynamicObject[] orgControl = BusinessDataServiceHelper.load("nckd_base_org_ext","id",new QFilter[] {orgFilter}); if (orgControl.length > 0) { DynamicObject orgControlInfo = BusinessDataServiceHelper.loadSingle(orgControl[0].getPkValue(), orgControl[0].getDynamicObjectType().getName()); String number = orgControlInfo.getString("nckd_org_number"); QFilter filter = new QFilter("number", QCP.equals,number); DynamicObject[] org = BusinessDataServiceHelper.load("bos_org","id",new QFilter[] {filter}); if (org.length > 0) { DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(org[0].getPkValue(), org[0].getDynamicObjectType().getName()); return orgInfo.getLong("id"); } } return null; } /** * @description 查询财务卡片 * @param realCardId */ private DynamicObject queryFinCard(Long realCardId) { QFilter cardFilter = new QFilter("realcardmasterid", QCP.equals,realCardId); DynamicObject[] card = BusinessDataServiceHelper.load("fa_card_fin","id",new QFilter[] {cardFilter}); for (int c = 0; c < card.length; c++) { DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(card[c].getPkValue(), card[c].getDynamicObjectType().getName()); return cardInfo; } return null; } /** * @description 查询折旧用途 * @param id */ private DynamicObject queryDepreuse(Long id) { QFilter orgQFilter= new QFilter("id", QCP.equals,id); DynamicObject[] depreuse = BusinessDataServiceHelper.load("fa_depreuse","id",new QFilter[] {orgQFilter}); for (int c = 0; c < depreuse.length; c++) { DynamicObject depreuseInfo = BusinessDataServiceHelper.loadSingle(depreuse[c].getPkValue(), depreuse[c].getDynamicObjectType().getName()); return depreuseInfo; } return null; } /** * @description 查询变更类型 * @param id */ private DynamicObject queryChangeType(Long id) { QFilter orgQFilter= new QFilter("id", QCP.equals,id); DynamicObject[] changeType = BusinessDataServiceHelper.load("fa_change_type","id",new QFilter[] {orgQFilter}); for (int c = 0; c < changeType.length; c++) { DynamicObject changeInfo = BusinessDataServiceHelper.loadSingle(changeType[c].getPkValue(), changeType[c].getDynamicObjectType().getName()); return changeInfo; } return null; } /** * @description 查询组织 * @param orgId */ private DynamicObject queryOrg(Long orgId) { QFilter orgQFilter= new QFilter("id", QCP.equals,orgId); DynamicObject[] org = BusinessDataServiceHelper.load("bos_org","id",new QFilter[] {orgQFilter}); for (int c = 0; c < org.length; c++) { DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(org[c].getPkValue(), org[c].getDynamicObjectType().getName()); return orgInfo; } return null; } }