|
@@ -4,18 +4,13 @@ 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.Arrays;
|
|
|
import java.util.List;
|
|
|
|
|
@@ -43,23 +38,6 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
info.set("nckd_unsettleamount",totalUnsettleamount);
|
|
|
info.set("nckd_settleamount",BigDecimal.ZERO);
|
|
|
info.set("nckd_settlestatus", SettlementStatusEnum.未结算.getValue());
|
|
|
-
|
|
|
- //反写实物卡片清单
|
|
|
- for (DynamicObject entryentity : info.getDynamicObjectCollection("assetentry")) {
|
|
|
- DynamicObjectCollection nckd_real_card = entryentity.getDynamicObjectCollection("nckd_real_card");
|
|
|
- for (DynamicObject object : nckd_real_card) {
|
|
|
- Long id = (Long) object.get(2);
|
|
|
- //查询实物卡片分录数据,如果查询到数据则不能保存该报销单
|
|
|
- QFilter filter = new QFilter("id", QCP.equals,id);
|
|
|
- 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")) {
|
|
|
//当前单头数据包
|
|
@@ -70,54 +48,8 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
}
|
|
|
info.set("nckd_unsettleamount",BigDecimal.ZERO);
|
|
|
info.set("nckd_settlestatus", null);
|
|
|
-
|
|
|
- //反审核反写实物卡片清单
|
|
|
- for (DynamicObject entryentity : info.getDynamicObjectCollection("assetentry")) {
|
|
|
- DynamicObjectCollection nckd_real_card = entryentity.getDynamicObjectCollection("nckd_real_card");
|
|
|
- for (DynamicObject object : nckd_real_card) {
|
|
|
- Long id = (Long) object.get(2);
|
|
|
- //查询实物卡片分录数据,如果查询到数据则不能保存该报销单
|
|
|
- QFilter filter = new QFilter("id", QCP.equals,id);
|
|
|
- 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
|
|
|
- //资产报账单审核通过后,实物卡片清单标记为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")) {
|
|
|
DynamicObject info = dynamicObjects[i];
|
|
|
List<String> list = Arrays.asList("3", "4", "5", "7", "8", "9", "10", "11", "12", "13", "14", "15","16", "17", "18", "19", "20", "21", "24", "30");
|
|
@@ -131,7 +63,126 @@ public class PublicreimburOpPlugin extends AbstractOperationServicePlugIn {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ //反写预付借款单
|
|
|
+ DynamicObjectCollection writeoffmoneys = info.getDynamicObjectCollection("writeoffmoney");
|
|
|
+ DynamicObject saveInfo = BusinessDataServiceHelper.loadSingle(info.getPkValue(), info.getDynamicObjectType().getName());
|
|
|
+ if (saveInfo != null) {
|
|
|
+ DynamicObjectCollection saveWriteoffmoneys = saveInfo.getDynamicObjectCollection("writeoffmoney");
|
|
|
+ // 处理在 saveWriteoffmoneys 中但不在 writeoffmoneys 中的元素
|
|
|
+ DynamicObjectCollection toDelete = getDifference(saveWriteoffmoneys, writeoffmoneys);
|
|
|
+ if (toDelete.size() != 0) {
|
|
|
+ deleteBackFinarbill(toDelete);
|
|
|
+ }
|
|
|
+ // 处理在 writeoffmoneys 中但不在 saveWriteoffmoneys 中的元素
|
|
|
+ DynamicObjectCollection toWriteBack = getDifference(writeoffmoneys, saveWriteoffmoneys);
|
|
|
+ if (toWriteBack.size() != 0) {
|
|
|
+ writeBackFinarbill(toWriteBack);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 如果没有保存的信息,直接反写
|
|
|
+ writeBackFinarbill(writeoffmoneys);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void writeBackFinarbill(DynamicObjectCollection writeoffmoneys) {
|
|
|
+ //报销单冲预付借款分录
|
|
|
+ for (DynamicObject writeoffmoney : writeoffmoneys) {
|
|
|
+ //预付借款单id
|
|
|
+ String sourcebillid = writeoffmoney.getString("sourcebillid");
|
|
|
+ //预付借款单预付借款信息分录id
|
|
|
+ Long srcofsrcentryid = writeoffmoney.getLong("srcofsrcentryid");
|
|
|
+ //冲销金额
|
|
|
+ BigDecimal accloanamount = writeoffmoney.getBigDecimal("accloanamount");
|
|
|
+ //查询应收挂账单
|
|
|
+ QFilter filter = new QFilter("sourcebillid", QCP.equals, sourcebillid);
|
|
|
+ DynamicObject[] finarbills = BusinessDataServiceHelper.load("ar_finarbill","id",new QFilter[] {filter});
|
|
|
+ for (DynamicObject finarbill : finarbills) {
|
|
|
+ DynamicObject finarbillInfo = BusinessDataServiceHelper.loadSingle(finarbill.getPkValue(), finarbill.getDynamicObjectType().getName());
|
|
|
+ //应收挂账单明细分录
|
|
|
+ DynamicObjectCollection entrys = finarbillInfo.getDynamicObjectCollection("entry");
|
|
|
+ for (DynamicObject entry : entrys) {
|
|
|
+ //预付借款单预付借款信息分录id
|
|
|
+ Long e_srcentryid = entry.getLong("e_srcentryid");
|
|
|
+ //销账金额
|
|
|
+ BigDecimal nckd_e_settledamt = entry.getBigDecimal("nckd_e_settledamt");
|
|
|
+ //已结算金额
|
|
|
+ BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");
|
|
|
+ //未结算金额
|
|
|
+ BigDecimal e_unsettleamt = entry.getBigDecimal("e_unsettleamt");
|
|
|
+ //已结算金额(本位币)
|
|
|
+ BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");
|
|
|
+ //未结算金额(本位币)
|
|
|
+ BigDecimal e_unsettlelocalamt = entry.getBigDecimal("e_unsettlelocalamt");
|
|
|
+ if (e_srcentryid != 0 && e_srcentryid.equals(srcofsrcentryid)) {
|
|
|
+ entry.set("nckd_e_settledamt", nckd_e_settledamt.add(accloanamount));
|
|
|
+ entry.set("e_settledamt", e_settledamt.add(accloanamount));
|
|
|
+ entry.set("e_unsettleamt", e_unsettleamt.subtract(accloanamount));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{finarbillInfo});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void deleteBackFinarbill(DynamicObjectCollection writeoffmoneys) {
|
|
|
+ //报销单冲预付借款分录
|
|
|
+ for (DynamicObject writeoffmoney : writeoffmoneys) {
|
|
|
+ //预付借款单id
|
|
|
+ String sourcebillid = writeoffmoney.getString("sourcebillid");
|
|
|
+ //预付借款单预付借款信息分录id
|
|
|
+ Long srcofsrcentryid = writeoffmoney.getLong("srcofsrcentryid");
|
|
|
+ //冲销金额
|
|
|
+ BigDecimal accloanamount = writeoffmoney.getBigDecimal("accloanamount");
|
|
|
+ //查询应收挂账单
|
|
|
+ QFilter filter = new QFilter("sourcebillid", QCP.equals, sourcebillid);
|
|
|
+ DynamicObject[] finarbills = BusinessDataServiceHelper.load("ar_finarbill","id",new QFilter[] {filter});
|
|
|
+ for (DynamicObject finarbill : finarbills) {
|
|
|
+ DynamicObject finarbillInfo = BusinessDataServiceHelper.loadSingle(finarbill.getPkValue(), finarbill.getDynamicObjectType().getName());
|
|
|
+ //应收挂账单明细分录
|
|
|
+ DynamicObjectCollection entrys = finarbillInfo.getDynamicObjectCollection("entry");
|
|
|
+ for (DynamicObject entry : entrys) {
|
|
|
+ //预付借款单预付借款信息分录id
|
|
|
+ Long e_srcentryid = entry.getLong("e_srcentryid");
|
|
|
+ //销账金额
|
|
|
+ BigDecimal nckd_e_settledamt = entry.getBigDecimal("nckd_e_settledamt");
|
|
|
+ //已结算金额
|
|
|
+ BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");
|
|
|
+ //未结算金额
|
|
|
+ BigDecimal e_unsettleamt = entry.getBigDecimal("e_unsettleamt");
|
|
|
+ //已结算金额(本位币)
|
|
|
+ BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");
|
|
|
+ //未结算金额(本位币)
|
|
|
+ BigDecimal e_unsettlelocalamt = entry.getBigDecimal("e_unsettlelocalamt");
|
|
|
+ if (e_srcentryid != 0 && e_srcentryid.equals(srcofsrcentryid)) {
|
|
|
+ entry.set("nckd_e_settledamt", nckd_e_settledamt.subtract(accloanamount));
|
|
|
+ entry.set("e_settledamt", e_settledamt.subtract(accloanamount));
|
|
|
+ entry.set("e_unsettleamt", e_unsettleamt.add(accloanamount));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SaveServiceHelper.save(new DynamicObject[]{finarbillInfo});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取在 source 中但不在 target 中的元素集合
|
|
|
+ private DynamicObjectCollection getDifference(DynamicObjectCollection source, DynamicObjectCollection target) {
|
|
|
+ DynamicObjectCollection difference = new DynamicObjectCollection();
|
|
|
+ for (DynamicObject sourceItem : source) {
|
|
|
+ boolean existsInTarget = false;
|
|
|
+ for (DynamicObject targetItem : target) {
|
|
|
+ // 根据某个唯一标识符判断是否存在
|
|
|
+ if (sourceItem.getPkValue().equals(targetItem.getPkValue())) {
|
|
|
+ existsInTarget = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!existsInTarget) {
|
|
|
+ difference.add(sourceItem);
|
|
|
}
|
|
|
}
|
|
|
+ return difference;
|
|
|
}
|
|
|
}
|