123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- 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<String > 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<String > 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<cardDynamicObjects.length;d++) {
- DynamicObject cardInfo = BusinessDataServiceHelper.loadSingle(cardDynamicObjects[i].getPkValue(), cardDynamicObjects[i].getDynamicObjectType().getName());
- String billno = cardInfo.getString("billno");
- //删除实物卡片
- IDataEntityType dataEntityType = cardInfo.getDataEntityType();
- Object[] pks = new Object[]{cardInfo.getLong("id")};
- DeleteServiceHelper.delete(dataEntityType, pks);
- //查询财务卡片
- QFilter cwFilter = new QFilter("billno", QCP.equals,cardInfo.getString("billno"));
- DynamicObject[] cwDynamicObjects = BusinessDataServiceHelper.load("fa_card_fin","id",new QFilter[] {cwFilter});
- for (int f=0;f<cwDynamicObjects.length;f++) {
- DynamicObject cwInfo = BusinessDataServiceHelper.loadSingle(cwDynamicObjects[i].getPkValue(), cwDynamicObjects[i].getDynamicObjectType().getName());
- //删除财务卡片
- IDataEntityType cwdataEntityType = cwInfo.getDataEntityType();
- Object[] ids = new Object[]{cwInfo.getLong("id")};
- DeleteServiceHelper.delete(cwdataEntityType, ids);
- }
- }
- }
- } else if (StringUtils.equals(e.getOperationKey(),"save")) {
- List<Long> cardList = new ArrayList<>();
- List<Long> 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("实物卡片清单已经生成资产清单,请重新选择!");
- }
- }
- }
- }
- }
|