lc/lc123/cloud/app/plugin/operate/cas/PurOrderReversePayBillPlugi...

140 lines
8.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tqq9.lc123.cloud.app.plugin.operate.cas;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.AddValidatorsEventArgs;
import kd.bos.entity.plugin.args.AfterOperationArgs;
import kd.bos.entity.validate.AbstractValidator;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.newdevportal.domaindefine.sample.validator.MyValidator;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.sdk.plugin.Plugin;
import tqq9.lc123.cloud.app.plugin.form.sys.RegistBillFactoryPlugin;
import java.math.BigDecimal;
import java.util.HashMap;
/**
* 采购订单操作插件
* 1.校验器:校验本次结算金额
* 2.审核插件:反写本次结算金额
*/
public class PurOrderReversePayBillPlugin extends AbstractOperationServicePlugIn implements Plugin {
private final static Log logger = LogFactory.getLog(PurOrderReversePayBillPlugin.class);
@Override
public void onAddValidators(AddValidatorsEventArgs e) {
super.onAddValidators(e);
e.addValidator(new UnSettleAmountValidator());
}
/**
* 采购订单操作插件
* 1.校验器未结算金额大于0校验
* 2.审核插件:付款计划分录对应付款单的未结算金额转化为已结算金额
*/
class UnSettleAmountValidator extends AbstractValidator {
@Override
public void validate() {
HashMap<String, BigDecimal> paybillMap = new HashMap();
for (ExtendedDataEntity dataEntity : this.getDataEntities()) {
String billno = dataEntity.getDataEntity().getString("billno");//采购订单单据号
//查询采购订单
DynamicObject purorderbill = BusinessDataServiceHelper.loadSingle("pm_purorderbill", new QFilter[]{new QFilter("billno", QCP.equals, billno)});
//获取付款计划分录
DynamicObjectCollection purbillentry_pay = purorderbill.getDynamicObjectCollection("purbillentry_pay");
for (DynamicObject dynamicObject : purbillentry_pay) {
String tqq9_paybillno = dynamicObject.getString("tqq9_paybillno");//付款单单据编号
BigDecimal tqq9_settleamount = dynamicObject.getBigDecimal("tqq9_settleamount");//本次结算金额
BigDecimal payamount = dynamicObject.getBigDecimal("payamount");//付款金额
if (tqq9_settleamount.compareTo(payamount) > 0) {
this.addErrorMessage(dataEntity, "单据号:" + billno + "付款计划分录的付款单:" + tqq9_paybillno + "本次结算金额为大于付款金额,请修改");
}
//查询付款单
DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{new QFilter("billno", QCP.equals, tqq9_paybillno)});
if (paybill != null) {
BigDecimal unsettleamount = paybill.getBigDecimal("unsettleamount");//未结算金额
String paybillno = paybill.getString("billno");//未结算金额
if (!paybillMap.containsKey(paybillno)) {
if (unsettleamount.compareTo(tqq9_settleamount) < 0) {
this.addErrorMessage(dataEntity, "单据号:" + billno + "付款计划分录的付款单:" + tqq9_paybillno + "未结算金额为小于本次结算金额,请修改");
}
paybillMap.put(paybillno, tqq9_settleamount);
} else {
BigDecimal total_tqq9_settleamount = paybillMap.get(paybillno);
tqq9_settleamount=tqq9_settleamount.add(total_tqq9_settleamount);
if (unsettleamount.compareTo(tqq9_settleamount) < 0) {
this.addErrorMessage(dataEntity, "审核订单中付款计划针对付款单:"+paybillno+",本次结算金额总和为大于未结算金额,请修改");
}
paybillMap.put(paybillno, tqq9_settleamount);
}
}
}
}
}
}
@Override
public void afterExecuteOperationTransaction(AfterOperationArgs e) {
super.afterExecuteOperationTransaction(e);
DynamicObject[] dataEntities = e.getDataEntities();
for (DynamicObject dataEntity : dataEntities) {
String billno = dataEntity.getString("billno");
//查询采购订单
DynamicObject purorderbill = BusinessDataServiceHelper.loadSingle("pm_purorderbill", new QFilter[]{new QFilter("billno", QCP.equals, billno)});
//获取付款计划分录
DynamicObjectCollection purbillentry_pay = purorderbill.getDynamicObjectCollection("purbillentry_pay");
for (DynamicObject dynamicObject : purbillentry_pay) {
//付款单单据编号
String tqq9_paybillno = dynamicObject.getString("tqq9_paybillno");
BigDecimal tqq9_settleamount = dynamicObject.getBigDecimal("tqq9_settleamount");
//查询付款单
DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill", new QFilter[]{new QFilter("billno", QCP.equals, tqq9_paybillno)});
if (paybill != null) {
//获取付款明细分录
DynamicObjectCollection entries = paybill.getDynamicObjectCollection("entry");
BigDecimal unsettleamount = BigDecimal.ZERO;//未结算金额
BigDecimal unsettleamountbase = BigDecimal.ZERO;//未结算金额(本位币)
BigDecimal settleamount = BigDecimal.ZERO;//已结算金额
BigDecimal settleamountbase = BigDecimal.ZERO;//已结算金额(本位币)
for (DynamicObject entry : entries) {
BigDecimal e_unsettledamt = entry.getBigDecimal("e_unsettledamt");//未结算金额
BigDecimal e_unsettledlocalamt = entry.getBigDecimal("e_unsettledlocalamt");//未结算金额折本位币
BigDecimal e_settledamt = entry.getBigDecimal("e_settledamt");//已结算金额
BigDecimal e_settledlocalamt = entry.getBigDecimal("e_settledlocalamt");//已结算金额折本位币
//分录未结算金额转化为已结算金额
entry.set("e_unsettledamt", e_unsettledamt.subtract(tqq9_settleamount));//未结算金额
entry.set("e_unlockamt", e_unsettledamt.subtract(tqq9_settleamount));//未锁定金额
unsettleamount = unsettleamount.add(e_unsettledamt.subtract(tqq9_settleamount));
entry.set("e_unsettledlocalamt", e_unsettledlocalamt.subtract(tqq9_settleamount));//未结算金额(本位币)
unsettleamountbase = unsettleamountbase.add(e_unsettledlocalamt.subtract(tqq9_settleamount));
entry.set("e_settledamt", e_settledamt.add(tqq9_settleamount));//已结算金额
entry.set("e_lockamt", e_settledamt.add(tqq9_settleamount));//已锁定金额
settleamount = settleamount.add(e_settledamt.add(tqq9_settleamount));
entry.set("e_settledlocalamt", e_settledlocalamt.add(tqq9_settleamount));//已结算金额折本币
settleamountbase = settleamountbase.add(e_settledlocalamt.add(tqq9_settleamount));
}
//结合本次结算金额计算
paybill.set("unsettleamount", unsettleamount);//未结算金额
paybill.set("unsettleamountbase", unsettleamountbase);//未结算金额(本位币)
paybill.set("settleamount", settleamount);//已结算金额
paybill.set("settleamountbase", settleamountbase);//已结算金额(本位币)
paybill.set("entry", entries);
//保存
SaveServiceHelper.save(new DynamicObject[]{paybill});
}
}
}
}
}