package fi.er.opplugin; import com.alibaba.druid.util.StringUtils; import fi.cas.common.SettlementStatusEnum; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; import kd.bos.dataentity.metadata.IDataEntityType; 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.DeleteServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; //报销单 public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn { private static String ap_finapbill = "ap_finapbill"; //应付挂账单字段 @Override public void beginOperationTransaction(BeginOperationTransactionArgs e) { //获取报销单据信息 DynamicObject[] dynamicObjects = e.getDataEntities(); for (int i = 0; i < dynamicObjects.length; i++) { if (StringUtils.equals(e.getOperationKey(),"audit")) { //当前单头数据包 DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName()); BigDecimal totalUnsettleamount = BigDecimal.ZERO; //循环收款信息分录 for (DynamicObject entryentity : info.getDynamicObjectCollection("accountentry")) { //取当前分录的收款金额 BigDecimal orireceiveamount = entryentity.getBigDecimal("orireceiveamount"); //未结算金额=收款金额 entryentity.set("nckd_unsettleamount_et",orireceiveamount); entryentity.set("nckd_settleamount_et",BigDecimal.ZERO); totalUnsettleamount = totalUnsettleamount.add(orireceiveamount); } info.set("nckd_unsettleamount",totalUnsettleamount); info.set("nckd_settleamount",BigDecimal.ZERO); info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue()); //反写实物卡片清单 if (info.getDynamicObjectCollection("nckd_realcard_list") != null ) { List codeList = new ArrayList<>(); for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_realcard_list")) { //取当前循环付款明细分录的源单分录id String cardCode = entryentity.getString("nckd_card_code"); //查询实物卡片分录数据,如果查询到数据则不能保存该报销单 QFilter filter = new QFilter("number", QCP.equals,cardCode); DynamicObject[] cardObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter}); for (int j = 0; j < cardObjects.length; j++) { DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[i].getPkValue(), cardObjects[i].getDynamicObjectType().getName()); //资产报账单审核通过后,实物卡片清单标记为1 cardInfo.set("nckd_flag", "1"); SaveServiceHelper.save(new DynamicObject[]{cardInfo}); } } } SaveServiceHelper.save(new DynamicObject[]{info}); } else if (StringUtils.equals(e.getOperationKey(),"unaudit")) { //当前单头数据包 DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName()); //循环收款信息分录 for (DynamicObject entryentity : info.getDynamicObjectCollection("accountentry")) { entryentity.set("nckd_unsettleamount_et",BigDecimal.ZERO); } info.set("nckd_unsettleamount",BigDecimal.ZERO); info.set("nckd_settlestatus", null); //反审核反写实物卡片清单 if (info.getDynamicObjectCollection("nckd_realcard_list") != null ) { List codeList = new ArrayList<>(); for (DynamicObject entryentity : info.getDynamicObjectCollection("nckd_realcard_list")) { //取当前循环付款明细分录的源单分录id String cardCode = entryentity.getString("nckd_card_code"); //查询实物卡片分录数据,如果查询到数据则不能保存该报销单 QFilter filter = new QFilter("number", QCP.equals,cardCode); DynamicObject[] cardObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter}); for (int j = 0; j < cardObjects.length; j++) { DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardObjects[i].getPkValue(), cardObjects[i].getDynamicObjectType().getName()); //资产报账单审核通过后,实物卡片清单标记为1 cardInfo.set("nckd_flag", "0"); //星瀚实物卡片三个字段回写为空 cardInfo.set("nckd_card_real_org", null); cardInfo.set("nckd_card_real_code", null); cardInfo.set("nckd_card_real_name", null); SaveServiceHelper.save(new DynamicObject[]{cardInfo}); } } } SaveServiceHelper.save(new DynamicObject[]{info}); //反审核需要删除资产报账单下推的物卡片清单 //查询实物卡片清单 QFilter cardFilter = new QFilter("nckd_bz_id", QCP.equals,info.getLong("id")); DynamicObject[] cardDynamicObjects = BusinessDataServiceHelper.load("fa_card_real","id",new QFilter[] {cardFilter}); if (cardDynamicObjects.length > 0) { for (int d=0;d cardList = new ArrayList<>(); List totalList = new ArrayList<>(); //获取当前页面数据 DynamicObject info = dynamicObjects[i]; Long fid = info.getLong("id"); for (DynamicObject entryentity : info.getDynamicObjectCollection("assetentry")) { DynamicObjectCollection dynamicObjectCollection = entryentity.getDynamicObjectCollection("nckd_real_card"); for(DynamicObject object : dynamicObjectCollection) { Long id = (Long) object.get(2); cardList.add(id); } } //查询报销单 QFilter bxFilter = new QFilter("id", QCP.not_equals,fid); bxFilter.and("nckd_card_list_str", QCP.equals, "1"); DynamicObject[] bxDynamicObjects = BusinessDataServiceHelper.load("er_publicreimbursebill","id",new QFilter[] {bxFilter}); for (int j = 0; j < bxDynamicObjects.length; j++) { DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[i].getPkValue(), bxDynamicObjects[i].getDynamicObjectType().getName()); for (DynamicObject entryentity : bxInfo.getDynamicObjectCollection("assetentry")) { DynamicObjectCollection dynamicObjectCollection = entryentity.getDynamicObjectCollection("nckd_real_card"); for(DynamicObject dynamicObject : dynamicObjectCollection) { Long id = (Long) dynamicObject.get(2); totalList.add(id); } } } boolean hasCommonElements = cardList.stream().anyMatch(totalList::contains); if (hasCommonElements) { throw new KDBizException("实物卡片清单已经生成资产清单,请重新选择!"); } } } } }