借款单优化备用金逻辑
This commit is contained in:
parent
b0364d4ca4
commit
ab6914de83
|
|
@ -8,8 +8,12 @@ import kd.bos.form.control.EntryGrid;
|
||||||
import kd.bos.form.events.HyperLinkClickEvent;
|
import kd.bos.form.events.HyperLinkClickEvent;
|
||||||
import kd.bos.form.events.HyperLinkClickListener;
|
import kd.bos.form.events.HyperLinkClickListener;
|
||||||
import kd.bos.list.ListShowParameter;
|
import kd.bos.list.ListShowParameter;
|
||||||
|
import kd.bos.orm.query.QCP;
|
||||||
|
import kd.bos.orm.query.QFilter;
|
||||||
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.EventObject;
|
import java.util.EventObject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -26,6 +30,34 @@ public class QuotaImprestLedgerBillPlugin extends AbstractBillPlugIn implements
|
||||||
entryGrid.addHyperClickListener(this);
|
entryGrid.addHyperClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterBindData(EventObject e) {
|
||||||
|
super.afterBindData(e);
|
||||||
|
DynamicObjectCollection entryEntityCollection = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_entryentity");//分录
|
||||||
|
for (DynamicObject entryEntity : entryEntityCollection) {
|
||||||
|
DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//被引用的借款单数据
|
||||||
|
BigDecimal totalRemainingAmount = BigDecimal.ZERO;//初始化已使用金额
|
||||||
|
for (DynamicObject zcgj_dailyloanbilldata : zcgj_dailyloanbilldatas) {
|
||||||
|
Object zcgj_dailyLoanBillDataId = zcgj_dailyloanbilldata.getDynamicObject("fbasedataid").getPkValue();//借款单id
|
||||||
|
QFilter[] qFilters = new QFilter[]{new QFilter("id", QCP.equals, zcgj_dailyLoanBillDataId)};
|
||||||
|
DynamicObject er_dailyloanbill = BusinessDataServiceHelper.loadSingle("er_dailyloanbill", "id,loanamount,returnedamount", qFilters);//借款单
|
||||||
|
if (er_dailyloanbill == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BigDecimal loanAmount = er_dailyloanbill.getBigDecimal("loanamount");//借款金额
|
||||||
|
BigDecimal returnedAmount = er_dailyloanbill.getBigDecimal("returnedamount");//还款金额
|
||||||
|
BigDecimal usedamount = er_dailyloanbill.getBigDecimal("usedamount");//已报销金额
|
||||||
|
BigDecimal remainingAmount = loanAmount.subtract(returnedAmount.add(usedamount));
|
||||||
|
if (remainingAmount.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
totalRemainingAmount = totalRemainingAmount.add(remainingAmount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
entryEntity.set("zcgj_usedquota", totalRemainingAmount);//已使用金额
|
||||||
|
entryEntity.set("zcgj_remainingquota", entryEntity.getBigDecimal("zcgj_quota").subtract(totalRemainingAmount));//剩余额度
|
||||||
|
}
|
||||||
|
this.getView().updateView("zcgj_entryentity");
|
||||||
|
}
|
||||||
|
|
||||||
public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) {
|
public void hyperLinkClick(HyperLinkClickEvent hyperLinkClickEvent) {
|
||||||
String fieldName = hyperLinkClickEvent.getFieldName();
|
String fieldName = hyperLinkClickEvent.getFieldName();
|
||||||
if (StringUtils.equals(fieldName, "zcgj_usedquota")) {
|
if (StringUtils.equals(fieldName, "zcgj_usedquota")) {
|
||||||
|
|
@ -36,8 +68,19 @@ public class QuotaImprestLedgerBillPlugin extends AbstractBillPlugIn implements
|
||||||
DynamicObject entryEntity = entryEntityCollection.get(rowIndex);
|
DynamicObject entryEntity = entryEntityCollection.get(rowIndex);
|
||||||
DynamicObjectCollection zcgj_dailyLoanBillDataIds = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//被引用的借款单数据
|
DynamicObjectCollection zcgj_dailyLoanBillDataIds = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//被引用的借款单数据
|
||||||
for (DynamicObject zcgj_dailyLoanBillDataId : zcgj_dailyLoanBillDataIds) {
|
for (DynamicObject zcgj_dailyLoanBillDataId : zcgj_dailyLoanBillDataIds) {
|
||||||
|
QFilter[] qFilters = new QFilter[]{new QFilter("id", QCP.equals, zcgj_dailyLoanBillDataId.getDynamicObject("fbasedataid").getPkValue())};
|
||||||
|
DynamicObject er_dailyloanbill = BusinessDataServiceHelper.loadSingle("er_dailyloanbill", "id,loanamount,returnedamount", qFilters);//借款单
|
||||||
|
if (er_dailyloanbill == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BigDecimal loanAmount = er_dailyloanbill.getBigDecimal("loanamount");//借款金额
|
||||||
|
BigDecimal returnedAmount = er_dailyloanbill.getBigDecimal("returnedamount");//还款金额
|
||||||
|
BigDecimal usedamount = er_dailyloanbill.getBigDecimal("usedamount");//已报销金额
|
||||||
|
BigDecimal remainingAmount = loanAmount.subtract(returnedAmount.add(usedamount));
|
||||||
|
if (remainingAmount.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
dailyLoanBillDataIds.add((Long) zcgj_dailyLoanBillDataId.getDynamicObject("fbasedataid").getPkValue());
|
dailyLoanBillDataIds.add((Long) zcgj_dailyLoanBillDataId.getDynamicObject("fbasedataid").getPkValue());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ListShowParameter listShowParameter = new ListShowParameter();
|
ListShowParameter listShowParameter = new ListShowParameter();
|
||||||
listShowParameter.setFormId("bos_list"); //列表界面
|
listShowParameter.setFormId("bos_list"); //列表界面
|
||||||
listShowParameter.setBillFormId("er_dailyloanbill"); //单据的标识
|
listShowParameter.setBillFormId("er_dailyloanbill"); //单据的标识
|
||||||
|
|
|
||||||
|
|
@ -77,8 +77,17 @@ public class DailyLoanBillSubValidatorOp extends AbstractOperationServicePlugIn
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (person.getPkValue().equals(applier.getPkValue())) {
|
if (person.getPkValue().equals(applier.getPkValue())) {
|
||||||
BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_remainingquota");//剩余额度
|
// BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_remainingquota");//剩余额度
|
||||||
if (zcgj_remainingquota.compareTo(loanAmount) < 0) {
|
// if (zcgj_remainingquota.compareTo(loanAmount) < 0) {
|
||||||
|
// this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
BigDecimal zcgj_remainingquota = calculateRemainingQuota(entryEntity);//剩余额度
|
||||||
|
if (zcgj_remainingquota.compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
// 当剩余额度为零时的处理逻辑
|
||||||
|
this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + 0);
|
||||||
|
return;
|
||||||
|
} else if (zcgj_remainingquota.compareTo(loanAmount) < 0) {
|
||||||
this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota);
|
this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -130,8 +139,17 @@ public class DailyLoanBillSubValidatorOp extends AbstractOperationServicePlugIn
|
||||||
DynamicObject zcgj_personType = entryEntity.getDynamicObject("zcgj_persontype");//人员类型
|
DynamicObject zcgj_personType = entryEntity.getDynamicObject("zcgj_persontype");//人员类型
|
||||||
if (zcgj_personType != null && "项目筹备".equals(zcgj_personType.getString("number"))) {
|
if (zcgj_personType != null && "项目筹备".equals(zcgj_personType.getString("number"))) {
|
||||||
hasProjectPreparation = true;
|
hasProjectPreparation = true;
|
||||||
BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_remainingquota");//剩余额度
|
// BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_remainingquota");//剩余额度
|
||||||
if (zcgj_remainingquota.compareTo(loanAmount) < 0) {
|
// if (zcgj_remainingquota.compareTo(loanAmount) < 0) {
|
||||||
|
// this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
BigDecimal zcgj_remainingquota = calculateRemainingQuota(entryEntity);//剩余额度
|
||||||
|
if (zcgj_remainingquota.compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
// 当剩余额度为零时的处理逻辑
|
||||||
|
this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + 0);
|
||||||
|
return;
|
||||||
|
} else if (zcgj_remainingquota.compareTo(loanAmount) < 0) {
|
||||||
this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota);
|
this.addFatalErrorMessage(dataEnt, "借款金额超过剩余额度!剩余额度为:" + zcgj_remainingquota);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -149,4 +167,31 @@ public class DailyLoanBillSubValidatorOp extends AbstractOperationServicePlugIn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计算剩余额度
|
||||||
|
*
|
||||||
|
* @param entryEntity 分录实体
|
||||||
|
* @return 剩余额度
|
||||||
|
*/
|
||||||
|
private BigDecimal calculateRemainingQuota(DynamicObject entryEntity) {
|
||||||
|
DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//被引用的借款单数据
|
||||||
|
BigDecimal totalRemainingAmount = BigDecimal.ZERO;//初始化已使用金额
|
||||||
|
for (DynamicObject zcgj_dailyloanbilldata : zcgj_dailyloanbilldatas) {
|
||||||
|
Object zcgj_dailyLoanBillDataId = zcgj_dailyloanbilldata.getDynamicObject("fbasedataid").getPkValue();//借款单id
|
||||||
|
QFilter[] qFilters = new QFilter[]{new QFilter("id", QCP.equals, zcgj_dailyLoanBillDataId)};
|
||||||
|
DynamicObject er_dailyloanbill = BusinessDataServiceHelper.loadSingle("er_dailyloanbill", "id,loanamount,returnedamount", qFilters);//借款单
|
||||||
|
if (er_dailyloanbill == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
BigDecimal loanAmount = er_dailyloanbill.getBigDecimal("loanamount");//借款金额
|
||||||
|
BigDecimal returnedAmount = er_dailyloanbill.getBigDecimal("returnedamount");//还款金额
|
||||||
|
BigDecimal usedamount = er_dailyloanbill.getBigDecimal("usedamount");//已报销金额
|
||||||
|
BigDecimal remainingAmount = loanAmount.subtract(returnedAmount.add(usedamount));
|
||||||
|
if (remainingAmount.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
totalRemainingAmount = totalRemainingAmount.add(remainingAmount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return entryEntity.getBigDecimal("zcgj_quota").subtract(totalRemainingAmount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,21 +66,21 @@ public class LoanSlipReserveFundReverserOp extends AbstractOperationServicePlugI
|
||||||
if (person.getPkValue().equals(applier.getPkValue())) {
|
if (person.getPkValue().equals(applier.getPkValue())) {
|
||||||
if (operationKey.equals("submit")) {
|
if (operationKey.equals("submit")) {
|
||||||
//提交
|
//提交
|
||||||
BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额
|
// BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额
|
||||||
entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用
|
// entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用
|
||||||
BigDecimal zcgj_quota = entryEntity.getBigDecimal("zcgj_quota");//额度
|
// BigDecimal zcgj_quota = entryEntity.getBigDecimal("zcgj_quota");//额度
|
||||||
BigDecimal zcgj_remainingquota = zcgj_quota.subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用
|
// BigDecimal zcgj_remainingquota = zcgj_quota.subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用
|
||||||
entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度
|
// entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度
|
||||||
DynamicObject newCurrency = new DynamicObject(zcgj_dailyloanbilldatas.getDynamicObjectType());
|
DynamicObject newCurrency = new DynamicObject(zcgj_dailyloanbilldatas.getDynamicObjectType());
|
||||||
newCurrency.set("fbasedataId", er_dailyLoanBill);
|
newCurrency.set("fbasedataId", er_dailyLoanBill);
|
||||||
zcgj_dailyloanbilldatas.add(newCurrency);
|
zcgj_dailyloanbilldatas.add(newCurrency);
|
||||||
entryEntity.set("zcgj_dailyloanbilldatas", zcgj_dailyloanbilldatas);//借款单
|
entryEntity.set("zcgj_dailyloanbilldatas", zcgj_dailyloanbilldatas);//借款单
|
||||||
} else if (operationKey.equals("unsubmit") || operationKey.equals("unaudit")) {
|
} else if (operationKey.equals("unsubmit") || operationKey.equals("unaudit")) {
|
||||||
//撤销、反审核
|
//撤销、反审核
|
||||||
BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").subtract(er_dailyLoanBill.getBigDecimal("loanamount"));//已使用+借款金额
|
// BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").subtract(er_dailyLoanBill.getBigDecimal("loanamount"));//已使用+借款金额
|
||||||
entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用
|
// entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用
|
||||||
BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_quota").subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用
|
// BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_quota").subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用
|
||||||
entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度
|
// entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度
|
||||||
Iterator<DynamicObject> iterator = zcgj_dailyloanbilldatas.iterator();
|
Iterator<DynamicObject> iterator = zcgj_dailyloanbilldatas.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
DynamicObject dynamicObject = iterator.next();
|
DynamicObject dynamicObject = iterator.next();
|
||||||
|
|
@ -116,21 +116,21 @@ public class LoanSlipReserveFundReverserOp extends AbstractOperationServicePlugI
|
||||||
DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//借款单
|
DynamicObjectCollection zcgj_dailyloanbilldatas = entryEntity.getDynamicObjectCollection("zcgj_dailyloanbilldatas");//借款单
|
||||||
if (operationKey.equals("submit")) {
|
if (operationKey.equals("submit")) {
|
||||||
//提交
|
//提交
|
||||||
BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额
|
// BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").add(loanAmount);//已使用+借款金额
|
||||||
entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用
|
// entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用
|
||||||
BigDecimal zcgj_quota = entryEntity.getBigDecimal("zcgj_quota");//额度
|
// BigDecimal zcgj_quota = entryEntity.getBigDecimal("zcgj_quota");//额度
|
||||||
BigDecimal zcgj_remainingquota = zcgj_quota.subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用
|
// BigDecimal zcgj_remainingquota = zcgj_quota.subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用
|
||||||
entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度
|
// entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度
|
||||||
DynamicObject newCurrency = new DynamicObject(zcgj_dailyloanbilldatas.getDynamicObjectType());
|
DynamicObject newCurrency = new DynamicObject(zcgj_dailyloanbilldatas.getDynamicObjectType());
|
||||||
newCurrency.set("fbasedataId", er_dailyLoanBill);
|
newCurrency.set("fbasedataId", er_dailyLoanBill);
|
||||||
zcgj_dailyloanbilldatas.add(newCurrency);
|
zcgj_dailyloanbilldatas.add(newCurrency);
|
||||||
entryEntity.set("zcgj_dailyloanbilldatas", zcgj_dailyloanbilldatas);//借款单
|
entryEntity.set("zcgj_dailyloanbilldatas", zcgj_dailyloanbilldatas);//借款单
|
||||||
} else if (operationKey.equals("unsubmit") || operationKey.equals("unaudit")) {
|
} else if (operationKey.equals("unsubmit") || operationKey.equals("unaudit")) {
|
||||||
//撤销、反审核
|
//撤销、反审核
|
||||||
BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").subtract(er_dailyLoanBill.getBigDecimal("loanamount"));//已使用+借款金额
|
// BigDecimal zcgj_usedquota = entryEntity.getBigDecimal("zcgj_usedquota").subtract(er_dailyLoanBill.getBigDecimal("loanamount"));//已使用+借款金额
|
||||||
entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用
|
// entryEntity.set("zcgj_usedquota", zcgj_usedquota);//已使用
|
||||||
BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_quota").subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用
|
// BigDecimal zcgj_remainingquota = entryEntity.getBigDecimal("zcgj_quota").subtract(entryEntity.getBigDecimal("zcgj_usedquota"));//额度-已使用
|
||||||
entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度
|
// entryEntity.set("zcgj_remainingquota", zcgj_remainingquota);//剩余额度
|
||||||
Iterator<DynamicObject> iterator = zcgj_dailyloanbilldatas.iterator();
|
Iterator<DynamicObject> iterator = zcgj_dailyloanbilldatas.iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
DynamicObject dynamicObject = iterator.next();
|
DynamicObject dynamicObject = iterator.next();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue