支出合同结算冲销单生成收入合同结算冲销单功能开发

This commit is contained in:
zhangzhiguo 2025-06-04 16:15:02 +08:00 committed by xuhaihui
parent b867001265
commit 8d14b23087
2 changed files with 146 additions and 0 deletions

View File

@ -0,0 +1,57 @@
package zcgj.zcdev.zcdev.pr.plugin.operate;
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.PreparePropertysEventArgs;
import kd.bos.entity.validate.AbstractValidator;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import java.math.BigDecimal;
/**
* 支出合同结算冲销单反审核校验是否生成收入合同冲销单
*/
public class OutContractSettleUnauditCheckOp extends AbstractOperationServicePlugIn {
@Override
public void onPreparePropertys(PreparePropertysEventArgs e) {
super.onPreparePropertys(e);
e.getFieldKeys().add("zcgj_is_reversabillid");
e.getFieldKeys().add("billno");
//e.getFieldKeys().add("contract.zcgj_pricetype");
}
@Override
public void onAddValidators(AddValidatorsEventArgs e) {
super.onAddValidators(e);
//当前所在的组织是属于矿山下的
e.getValidators().add(new ValidatorExt());
}
class ValidatorExt extends AbstractValidator {
@Override
public void validate() {
ExtendedDataEntity[] extendedDataEntities = this.getDataEntities();
for (ExtendedDataEntity extendedDataEntity : extendedDataEntities) {
DynamicObject dataEntity = extendedDataEntity.getDataEntity();
String billId = dataEntity.getString("id");
String billno = dataEntity.getString("billno");
//冲销单据
boolean isReversabillid = dataEntity.getBoolean("zcgj_is_reversabillid");
if (isReversabillid) {
DynamicObject[] load = BusinessDataServiceHelper.load("ec_in_contract_settle", "id,zcgj_reversabillid", new QFilter[]{new QFilter("zcgj_ec_outsettleid", QCP.equals, billId)});
if (load != null && load.length > 0) {
this.addFatalErrorMessage(extendedDataEntity, "支出合同结算冲销单【"+billno+"】存在收入合同结算冲销单,请删除收入合同结算冲销单后再进行反审核操作。");
}
}
}
}
}
}

View File

@ -0,0 +1,89 @@
package zcgj.zcdev.zcdev.pr.plugin.workflow;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import kd.bos.workflow.api.AgentExecution;
import kd.bos.workflow.engine.extitf.IWorkflowPlugin;
import java.math.BigDecimal;
/**
* 支出合同结算单-冲销审核通过工作流插件
*/
public class OutContractSettleReversalWorkFlowPlugin implements IWorkflowPlugin {
@Override
public void notify(AgentExecution execution) {
String eventName = execution.getEventName();
String businessKey = execution.getBusinessKey();
String entityNumber = execution.getEntityNumber();
DynamicObject outContractSettle = BusinessDataServiceHelper.loadSingle(businessKey, entityNumber);
//如果时冲销单据
boolean isReversabillid = outContractSettle.getBoolean("zcgj_is_reversabillid");
if(isReversabillid) {
//收入合同
DynamicObject contractInfo = outContractSettle.getDynamicObject("zcgj_in_contract");
//收入合同结算
DynamicObject inContractSettle =BusinessDataServiceHelper.newDynamicObject("ec_in_contract_settle");
inContractSettle.set("contract",contractInfo);
inContractSettle.set("org", outContractSettle.getDynamicObject("org"));
inContractSettle.set("billstatus","C");
inContractSettle.set("begindate",outContractSettle.getDate("begindate"));
inContractSettle.set("enddate",outContractSettle.getDate("enddate"));
inContractSettle.set("period",outContractSettle.getDynamicObject("period"));
inContractSettle.set("zcgj_jscustomer",contractInfo.getDynamicObject("parta"));
inContractSettle.set("contattr",outContractSettle.getDynamicObject("contattr"));
inContractSettle.set("project",outContractSettle.getDynamicObject("project"));
inContractSettle.set("conttotaloftaxamount",outContractSettle.getBigDecimal("conttotaloftaxamount"));
inContractSettle.set("description",outContractSettle.getString("description"));
inContractSettle.set("currency",outContractSettle.getString("currency"));
String number = CodeRuleServiceHelper.getNumber("ec_in_contract_settle", inContractSettle, null);
inContractSettle.set("paydirection","in");
inContractSettle.set("billno",number);
inContractSettle.set("billname", outContractSettle.getString("billname"));
inContractSettle.set("zcgj_ec_outsettleid", outContractSettle.getLong("id"));
inContractSettle.set("taxrate", outContractSettle.getDynamicObject("taxrate"));
inContractSettle.set("isonlist", outContractSettle.getBoolean("isonlist"));
inContractSettle.set("conttotaloftaxamount", outContractSettle.getBoolean("conttotaloftaxamount"));
inContractSettle.set("zcgj_is_reversabillid", true);
DynamicObject payitem = BusinessDataServiceHelper.loadSingle("ec_payitem", new QFilter[]{new QFilter("number", QCP.equals,"HTCX")});
DynamicObjectCollection itementry = outContractSettle.getDynamicObjectCollection("itementry");
DynamicObjectCollection entryEntity = inContractSettle.getDynamicObjectCollection("itementry");
BigDecimal settleamount = BigDecimal.ZERO;
BigDecimal taxamount = BigDecimal.ZERO;
BigDecimal settleoftaxamount = BigDecimal.ZERO;
for (DynamicObject dynamicObject : itementry) {
DynamicObject item = entryEntity.addNew();
item.set("payitem",payitem);
BigDecimal oftaxamount = dynamicObject.getBigDecimal("oftaxamount");
item.set("oftaxamount",oftaxamount);
BigDecimal amount = dynamicObject.getBigDecimal("amount");
item.set("amount",amount);
item.set("rate",dynamicObject.getBigDecimal("rate"));
BigDecimal taxamt = dynamicObject.getBigDecimal("taxamt");
item.set("taxamt",taxamt);
item.set("remark",dynamicObject.getString("remark"));
settleamount = settleamount.add(amount);
taxamount = taxamount.add(taxamt);
settleoftaxamount = settleoftaxamount.add(oftaxamount);
}
inContractSettle.set("settleamount",settleamount);
inContractSettle.set("taxamount",taxamount);
inContractSettle.set("settleoftaxamount",settleoftaxamount);
OperationResult ecInContractSettle = SaveServiceHelper.saveOperate("ec_in_contract_settle", new DynamicObject[]{inContractSettle}, null);//支出合同实体
}
IWorkflowPlugin.super.notify(execution);
}
}