package fi.er.opplugin; import com.alibaba.druid.util.StringUtils; import fi.cas.common.SettlementStatusEnum; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.entity.plugin.AbstractOperationServicePlugIn; import kd.bos.entity.plugin.args.BeginOperationTransactionArgs; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; 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()); 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); SaveServiceHelper.save(new DynamicObject[]{info}); } else if (StringUtils.equals(e.getOperationKey(),"save")) { List dynamicObjectList = new ArrayList<>(); //获取当前页面数据 DynamicObject info = dynamicObjects[i]; //获取当前单据数据库保存数据 DynamicObject saveInfo = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName()); if (saveInfo == null) { DynamicObject apfinapbill = info.getDynamicObject("nckd_apfinapbill"); if (apfinapbill != null) { //所选应付挂帐单更新标识 Long id = apfinapbill.getLong("id"); QFilter gzFilter = new QFilter("id", QCP.equals,id); DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {gzFilter}); DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[0].getPkValue(), gzDynamicObjects[0].getDynamicObjectType().getName()); gzInfo.set("nckd_selectflag","1"); SaveServiceHelper.save(new DynamicObject[]{gzInfo}); } }else { DynamicObject apfinapbill = info.getDynamicObject("nckd_apfinapbill"); DynamicObject saveApfinapbill = saveInfo.getDynamicObject("nckd_apfinapbill"); Long oldId = saveApfinapbill.getLong("id"); //释放原应付挂账单 QFilter oldFilter = new QFilter("id", QCP.equals,oldId); DynamicObject[] oldDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {oldFilter}); DynamicObject oldInfo = BusinessDataServiceHelper.loadSingle(oldDynamicObjects[0].getPkValue(), oldDynamicObjects[0].getDynamicObjectType().getName()); oldInfo.set("nckd_selectflag",""); SaveServiceHelper.save(new DynamicObject[]{oldInfo}); if (apfinapbill !=null) { Long id = apfinapbill.getLong("id"); QFilter gzFilter = new QFilter("id", QCP.equals,id); DynamicObject[] gzDynamicObjects = BusinessDataServiceHelper.load(ap_finapbill,"id",new QFilter[] {gzFilter}); DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(gzDynamicObjects[0].getPkValue(), gzDynamicObjects[0].getDynamicObjectType().getName()); gzInfo.set("nckd_selectflag","1"); SaveServiceHelper.save(new DynamicObject[]{gzInfo}); } } } } } }