Compare commits

...

5 Commits

Author SHA1 Message Date
zhangzhiguo ad57e7f501 差旅报销单发票日期和行程期间校验 2025-10-10 16:41:47 +08:00
zhangzhiguo c7ede42470 核算维度余额表取数逻辑调整 2025-10-10 16:41:36 +08:00
zhangzhiguo fb5c5d88f5 付款申请单关联单据校验 2025-10-10 16:40:53 +08:00
zhangzhiguo cb86da5995 资金计划申请插件默认值为零 2025-10-10 16:40:41 +08:00
zhangzhiguo c670a6d56d 资金计划申请获取科目余额 2025-10-10 16:40:13 +08:00
7 changed files with 593 additions and 16 deletions

View File

@ -152,6 +152,7 @@ public class SubjectbalanceAutoData {
assistbalance.set("zcgj_account", record.getAccount());
assistbalance.set("zcgj_period", curperiod);
assistbalance.set("zcgj_isnew", true);
assistbalance.set("zcgj_sourcetype", asseestype);
Map<String, AccountRecord.AssGrpItem> assgrp = record.getAssgrp();
if (assgrp.containsKey("0032")) {
@ -176,7 +177,9 @@ public class SubjectbalanceAutoData {
Long periodId = curperiod.getLong("id");
QFilter orgFilter = new QFilter("zcgj_org", QCP.equals, orgId);
QFilter periodFilter = new QFilter("zcgj_period", QCP.equals, periodId);
DeleteServiceHelper.delete("zcgj_rpt_assistbalancegx", new QFilter[]{orgFilter.and(periodFilter)});
QFilter sourcetypeFilter = new QFilter("zcgj_sourcetype", QCP.equals, asseestype);
QFilter isnewFilter = new QFilter("zcgj_isnew", QCP.equals, false);
DeleteServiceHelper.delete("zcgj_rpt_assistbalancegx", new QFilter[]{orgFilter.and(periodFilter).and(sourcetypeFilter).and(isnewFilter)});
// 保存新数据
SaveServiceHelper.save(addEntities.toArray(new DynamicObject[0]));
} catch (Exception ex) {

View File

@ -76,15 +76,15 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ
//发票明细
DynamicObjectCollection invoiceentry = dataEntity.getDynamicObjectCollection("invoiceentry");
DynamicObjectCollection writeoffapply = dataEntity.getDynamicObjectCollection("writeoffapply");//关联的出差申请
Date earliestAuditDate = null;
LocalDate earliestAuditDate = null;
for (DynamicObject dynamicObject : writeoffapply) {
//er_tripreqbill
long sourceapplybillid = dynamicObject.getLong("sourceapplybillid");
DynamicObject tripreqbill = BusinessDataServiceHelper.loadSingle(sourceapplybillid, "er_tripreqbill");
boolean ischange = tripreqbill.getBoolean("ischange");//出差申请单发生过变更后不进行校验
Date auditDate = dynamicObject.getDate("zcgj_glsq_auditdate");
LocalDate auditDate = dateToLocalDate(dynamicObject.getDate("zcgj_glsq_auditdate"));
if (auditDate != null && !ischange) {
if (earliestAuditDate == null || auditDate.before(earliestAuditDate)) {
if (earliestAuditDate == null || auditDate.isBefore(earliestAuditDate)) {
earliestAuditDate = auditDate; // 保留最小审批日期
}
}
@ -95,15 +95,15 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ
for (DynamicObject invoice : invoiceentry) {
i++;
String invoicetype = invoice.getString("invoicetype");
Date carrierDate = invoice.getDate("carrierdate"); // 乘车日期
LocalDate carrierDate = dateToLocalDate(invoice.getDate("carrierdate")); // 乘车日期
if(carrierDate != null){
// 校验1: 是否在行程时间范围内
boolean inTripRange = false;
for (DynamicObject trip : tripentry) {
Date startDate = trip.getDate("startdate");
Date endDate = trip.getDate("enddate");
LocalDate startDate = dateToLocalDate(trip.getDate("startdate"));
LocalDate endDate = dateToLocalDate(trip.getDate("enddate"));
if (carrierDate != null && startDate != null && endDate != null) {
if (!carrierDate.before(startDate) && !carrierDate.after(endDate)) {
if (!carrierDate.isBefore(startDate) && !carrierDate.isAfter(endDate)) {
inTripRange = true;
break;
}
@ -117,7 +117,7 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ
// 校验2: 必须在最早审批日期之后
if (earliestAuditDate != null && carrierDate != null && StringUtils.isEmpty(zcgjInvoiceremark)) {
if (carrierDate.compareTo(earliestAuditDate) != 0 && carrierDate.before(earliestAuditDate)) {
if (!carrierDate.isEqual(earliestAuditDate) && carrierDate.isBefore(earliestAuditDate)) {
this.addFatalErrorMessage(extendedDataEntity, String.format("发票信息中的第%d行乘车/机日期早于关联申请最早审批日期,请填写特殊说明!",i));
//throw new RuntimeException("乘车日期【" + carrierDate + "】早于出差申请最早审批日期【" + earliestAuditDate + "】!");
}
@ -136,9 +136,14 @@ public class TripreimbursebillIsInvoiceDateCheckOp extends AbstractOperationServ
* @return java.time.LocalDate
*/
public static LocalDate dateToLocalDate(Date date) {
return date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
if(date!=null){
return date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
}
else{
return null;
}
}

View File

@ -0,0 +1,402 @@
package zcgj.zcdev.zcdev.pr.plugin.form;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.bill.BillShowParameter;
import kd.bos.bill.OperationStatus;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.entity.MulBasedataDynamicObjectCollection;
import kd.bos.entity.datamodel.events.ChangeData;
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
import kd.bos.openapi.common.result.OpenApiResult;
import kd.bos.openapi.common.util.OpenApiSdkUtil;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.user.UserServiceHelper;
import kd.bos.util.StringUtils;
import kd.fi.bcm.business.model.BalanceQueryParamApi;
import kd.sdk.plugin.Plugin;
import zcgj.zcdev.zcdev.pr.plugin.utils.AccountRecord;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;
/**
* 资金计划申请科目余额取数插件
*/
public class FundingplanapplyAccountBalancePlugin extends AbstractBillPlugIn implements Plugin {
String[] selectorsArray = new String[]{"beginlocal", "endlocal", "yeardebitfor", "yearcreditfor", "debitlocal", "creditlocal"};
@Override
public void afterBindData(EventObject e) {
super.afterBindData(e);
BillShowParameter bsp=(BillShowParameter)this.getView().getFormShowParameter();
if(bsp.getStatus()== OperationStatus.ADDNEW ){
fundplyentry();
}
}
@Override
public void propertyChanged(PropertyChangedArgs e) {
super.propertyChanged(e);
String name = e.getProperty().getName();
ChangeData changeData = e.getChangeSet()[0];
if(name.equals("zcgj_in_custom") ){
int rowIndex = changeData.getRowIndex();
MulBasedataDynamicObjectCollection customs = (MulBasedataDynamicObjectCollection ) changeData.getNewValue();
if(customs!=null && !customs.isEmpty()){
customerBalance(rowIndex,customs);
}
}else if(name.equals("zcgj_out_supplier") ){
int rowIndex = changeData.getRowIndex();
MulBasedataDynamicObjectCollection suppliers = (MulBasedataDynamicObjectCollection ) changeData.getNewValue();
if(suppliers!=null && !suppliers.isEmpty()){
supplierBalance(rowIndex,suppliers);
}
}else if(name.equals("zcgj_period") ){
DynamicObjectCollection infundproject = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_infundproject_entry");
for (int i = 0; i < infundproject.size(); i++) {
MulBasedataDynamicObjectCollection dynamicObjectCollection = (MulBasedataDynamicObjectCollection)infundproject.get(i).getDynamicObjectCollection("zcgj_in_custom");
if(dynamicObjectCollection!=null && !dynamicObjectCollection.isEmpty()){
customerBalance(i,dynamicObjectCollection);
}
}
DynamicObjectCollection outfundproject = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_outfundproject_entry");
for (int i = 0; i < outfundproject.size(); i++) {
MulBasedataDynamicObjectCollection dynamicObjectCollection = (MulBasedataDynamicObjectCollection)outfundproject.get(i).getDynamicObjectCollection("zcgj_out_supplier");
if(dynamicObjectCollection!=null && !dynamicObjectCollection.isEmpty()){
supplierBalance(i,dynamicObjectCollection);
}
}
}
}
public void customerBalance(int rowIndex, MulBasedataDynamicObjectCollection customs){
if(customs!=null){
DynamicObject org = (DynamicObject)this.getModel().getValue("zcgj_org");
if(org == null){
this.getView().showErrorNotification("请选择所属组织!");
}
BalanceQueryParamApi balanceQueryParamApi = new BalanceQueryParamApi();
balanceQueryParamApi.setSelectors(Arrays.asList(selectorsArray));
balanceQueryParamApi.setOrgNumber(org.getString("number"));
balanceQueryParamApi.setBookTypeNumber("100002"); //账簿类型
balanceQueryParamApi.setAccountTableNumber("0003");//科目表
DynamicObject period = (DynamicObject)this.getModel().getValue("zcgj_period");
if(period == null){
//this.getView().showErrMessage("请选择期间!");
this.getView().showErrorNotification("请选择期间!");
}
balanceQueryParamApi.setPeriodNumber(period.getString("number")); //
List<String> groupBy = new ArrayList<>();
Map<String, List<Map<String, String>>> accountAssgrp = new HashMap<>();
List<Map<String, String>> li = new ArrayList<>();
for (DynamicObject custom : customs) {
Map<String, String> map1 = new HashMap<>();
DynamicObject basedataObj = custom.getDynamicObject("fbasedataid");
DynamicObject customer = BusinessDataServiceHelper.loadSingle( basedataObj.getPkValue(), "bd_customer");
map1.put("0001", customer.getString("number"));
li.add(map1);
}
accountAssgrp.put("1122", li);
balanceQueryParamApi.setAccountAssgrp(accountAssgrp);
groupBy.add("0001");
groupBy.add("account");
Gson gson = new Gson();
String json = gson.toJson(balanceQueryParamApi);
Map<String, Object> params = gson.fromJson(json,
new TypeToken<Map<String, Object>>() {
}.getType());
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/gl/getBalanceApi", params);
if (balanceData.isStatus()) {
String data = (String) balanceData.getData();
Type listType = new TypeToken<List<AccountRecord>>() {
}.getType();
List<AccountRecord> records = gson.fromJson(data, listType);
BigDecimal totalbeginlocal = BigDecimal.ZERO;
BigDecimal totayeardebitfor = BigDecimal.ZERO;
BigDecimal totalyearcreditfor = BigDecimal.ZERO;
for (AccountRecord record : records) {
totalbeginlocal = totalbeginlocal.add(record.getBeginlocal());//期初本位币金额
totayeardebitfor = totayeardebitfor.add(record.getYeardebitfor());//yeardebitfor
totalyearcreditfor = totalyearcreditfor.add(record.getYearcreditfor());//yearcreditfor
}
DynamicObjectCollection zcgjFinApprovedAmount = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_infundproject_entry");
DynamicObject dynamicObject = zcgjFinApprovedAmount.get(rowIndex);
dynamicObject.set("zcgj_iinitialreceivable",totalbeginlocal);//年初余额取科目余额表年初数
dynamicObject.set("zcgj_ytdoutputvalue",totayeardebitfor);//本年累计结算-借方
dynamicObject.set("zcgj_ytdpaymentreceived",totalyearcreditfor);//本年累计回款-贷方
this.getView().updateView("zcgj_infundproject_entry");
}
}else{
DynamicObjectCollection zcgjFinApprovedAmount = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_infundproject_entry");
DynamicObject dynamicObject = zcgjFinApprovedAmount.get(rowIndex);
dynamicObject.set("zcgj_iinitialreceivable",BigDecimal.ZERO);//年初余额取科目余额表年初数
dynamicObject.set("zcgj_ytdoutputvalue",BigDecimal.ZERO);//本年累计结算-借方
dynamicObject.set("zcgj_ytdpaymentreceived",BigDecimal.ZERO);//本年累计回款-贷方
this.getView().updateView("zcgj_infundproject_entry");
}
}
public void supplierBalance(int rowIndex, MulBasedataDynamicObjectCollection suppliers){
if(suppliers!=null){
DynamicObject org = (DynamicObject)this.getModel().getValue("zcgj_org");
if(org == null){
this.getView().showErrorNotification("请选择所属组织!");
}
BalanceQueryParamApi balanceQueryParamApi = new BalanceQueryParamApi();
balanceQueryParamApi.setSelectors(Arrays.asList(selectorsArray));
balanceQueryParamApi.setOrgNumber(org.getString("number"));
balanceQueryParamApi.setBookTypeNumber("100002"); //账簿类型
balanceQueryParamApi.setAccountTableNumber("0003");//科目表
DynamicObject period = (DynamicObject)this.getModel().getValue("zcgj_period");
if(period == null){
//this.getView().showErrMessage("请选择期间!");
this.getView().showErrorNotification("请选择期间!");
}
balanceQueryParamApi.setPeriodNumber(period.getString("number")); //
List<String> groupBy = new ArrayList<>();
Map<String, List<Map<String, String>>> accountAssgrp = new HashMap<>();
List<Map<String, String>> li = new ArrayList<>();
for (DynamicObject supplier : suppliers) {
Map<String, String> map1 = new HashMap<>();
DynamicObject basedataObj = supplier.getDynamicObject("fbasedataid");
DynamicObject customer = BusinessDataServiceHelper.loadSingle( basedataObj.getPkValue(), "bd_supplier");
map1.put("0005", customer.getString("number"));
li.add(map1);
}
accountAssgrp.put("2202", li);
balanceQueryParamApi.setAccountAssgrp(accountAssgrp);
groupBy.add("0005");
groupBy.add("account");
Gson gson = new Gson();
String json = gson.toJson(balanceQueryParamApi);
Map<String, Object> params = gson.fromJson(json,
new TypeToken<Map<String, Object>>() {
}.getType());
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/gl/getBalanceApi", params);
if (balanceData.isStatus()) {
String data = (String) balanceData.getData();
Type listType = new TypeToken<List<AccountRecord>>() {
}.getType();
List<AccountRecord> records = gson.fromJson(data, listType);
BigDecimal totalbeginlocal = BigDecimal.ZERO;
BigDecimal totayeardebitfor = BigDecimal.ZERO;
BigDecimal totalyearcreditfor = BigDecimal.ZERO;
for (AccountRecord record : records) {
totalbeginlocal = totalbeginlocal.add(record.getBeginlocal());//期初本位币金额
totayeardebitfor = totayeardebitfor.add(record.getYeardebitfor());//yeardebitfor
totalyearcreditfor = totalyearcreditfor.add(record.getYearcreditfor());//yearcreditfor
}
DynamicObjectCollection zcgjFinApprovedAmount = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_outfundproject_entry");
DynamicObject dynamicObject = zcgjFinApprovedAmount.get(rowIndex);
dynamicObject.set("zcgj_openingpayable",totalbeginlocal);//年初余额取科目余额表年初数
dynamicObject.set("zcgj_ytdnetsettlement",totayeardebitfor);//本年累计结算-借方
dynamicObject.set("zcgj_ytdtotalpayment",totalyearcreditfor);//本年累计付款-贷方
this.getView().updateView("zcgj_outfundproject_entry");
}
}else{
DynamicObjectCollection zcgjFinApprovedAmount = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_outfundproject_entry");
DynamicObject dynamicObject = zcgjFinApprovedAmount.get(rowIndex);
dynamicObject.set("zcgj_openingpayable",BigDecimal.ZERO);//年初余额取科目余额表年初数
dynamicObject.set("zcgj_ytdnetsettlement",BigDecimal.ZERO);//本年累计结算-借方
dynamicObject.set("zcgj_ytdtotalpayment",BigDecimal.ZERO);//本年累计付款-贷方
this.getView().updateView("zcgj_outfundproject_entry");
}
}
//公司资金往来
public void fundplyentry(){
fundplyentryXJ();//现金
fundplyentryYHCD();//银行承兑
fundplyentryGYL();//供应链
}
public void fundplyentryXJ(){
DynamicObject org = (DynamicObject)this.getModel().getValue("zcgj_org");
if(org == null){
this.getView().showErrorNotification("请选择所属组织!");
}
BalanceQueryParamApi balanceQueryParamApi = new BalanceQueryParamApi();
balanceQueryParamApi.setSelectors(Arrays.asList(selectorsArray));
balanceQueryParamApi.setOrgNumber(org.getString("number"));
balanceQueryParamApi.setBookTypeNumber("100002"); //账簿类型
balanceQueryParamApi.setAccountTableNumber("0003");//科目表
DynamicObject period = (DynamicObject)this.getModel().getValue("zcgj_period");
if(period == null){
//this.getView().showErrMessage("请选择期间!");
this.getView().showErrorNotification("请选择期间!");
}
balanceQueryParamApi.setPeriodNumber(period.getString("number")); //
List<String> groupBy = new ArrayList<>();
Map<String, List<Map<String, String>>> accountAssgrp = new HashMap<>();
List<Map<String, String>> li = new ArrayList<>();
accountAssgrp.put("1001", li); //现金
accountAssgrp.put("1002", li); //现金
// accountAssgrp.put("11260101", li); //银行承兑
//accountAssgrp.put("11260301", li); //供应链
balanceQueryParamApi.setAccountAssgrp(accountAssgrp);
//groupBy.add("0005");
groupBy.add("account");
Gson gson = new Gson();
String json = gson.toJson(balanceQueryParamApi);
Map<String, Object> params = gson.fromJson(json,
new TypeToken<Map<String, Object>>() {
}.getType());
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/gl/getBalanceApi", params);
if (balanceData.isStatus()) {
String data = (String) balanceData.getData();
Type listType = new TypeToken<List<AccountRecord>>() {
}.getType();
List<AccountRecord> records = gson.fromJson(data, listType);
BigDecimal totalbeginlocal = BigDecimal.ZERO;
for (AccountRecord record : records) {
totalbeginlocal = totalbeginlocal.add(record.getBeginlocal());//期初本位币金额
}
DynamicObjectCollection fundplyentry = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_fundplyentry");
DynamicObject dynamicObject = fundplyentry.get(0);
dynamicObject.set("zcgj_cashamt",totalbeginlocal);//现金
this.getView().updateView("zcgj_fundplyentry");
}else{
DynamicObjectCollection fundplyentry = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_fundplyentry");
DynamicObject dynamicObject = fundplyentry.get(0);
dynamicObject.set("zcgj_cashamt",BigDecimal.ZERO);//现金
this.getView().updateView("zcgj_fundplyentry");
}
}
public void fundplyentryYHCD(){
DynamicObject org = (DynamicObject)this.getModel().getValue("zcgj_org");
if(org == null){
this.getView().showErrorNotification("请选择所属组织!");
}
BalanceQueryParamApi balanceQueryParamApi = new BalanceQueryParamApi();
balanceQueryParamApi.setSelectors(Arrays.asList(selectorsArray));
balanceQueryParamApi.setOrgNumber(org.getString("number"));
balanceQueryParamApi.setBookTypeNumber("100002"); //账簿类型
balanceQueryParamApi.setAccountTableNumber("0003");//科目表
DynamicObject period = (DynamicObject)this.getModel().getValue("zcgj_period");
if(period == null){
//this.getView().showErrMessage("请选择期间!");
this.getView().showErrorNotification("请选择期间!");
}
balanceQueryParamApi.setPeriodNumber(period.getString("number")); //
List<String> groupBy = new ArrayList<>();
Map<String, List<Map<String, String>>> accountAssgrp = new HashMap<>();
List<Map<String, String>> li = new ArrayList<>();
//accountAssgrp.put("1001", li); //现金
//accountAssgrp.put("1002", li); //现金
accountAssgrp.put("11260101", li); //银行承兑
//accountAssgrp.put("11260301", li); //供应链
balanceQueryParamApi.setAccountAssgrp(accountAssgrp);
//groupBy.add("0005");
groupBy.add("account");
Gson gson = new Gson();
String json = gson.toJson(balanceQueryParamApi);
Map<String, Object> params = gson.fromJson(json,
new TypeToken<Map<String, Object>>() {
}.getType());
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/gl/getBalanceApi", params);
if (balanceData.isStatus()) {
String data = (String) balanceData.getData();
Type listType = new TypeToken<List<AccountRecord>>() {
}.getType();
List<AccountRecord> records = gson.fromJson(data, listType);
BigDecimal totalbeginlocal = BigDecimal.ZERO;
for (AccountRecord record : records) {
totalbeginlocal = totalbeginlocal.add(record.getBeginlocal());//期初本位币金额
}
DynamicObjectCollection fundplyentry = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_fundplyentry");
DynamicObject dynamicObject = fundplyentry.get(0);
dynamicObject.set("zcgj_bankamt",totalbeginlocal);//银行承兑
}else{
DynamicObjectCollection fundplyentry = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_fundplyentry");
DynamicObject dynamicObject = fundplyentry.get(0);
dynamicObject.set("zcgj_bankamt",BigDecimal.ZERO);//银行承兑
this.getView().updateView("zcgj_fundplyentry");
}
}
public void fundplyentryGYL(){
DynamicObject org = (DynamicObject)this.getModel().getValue("zcgj_org");
if(org == null){
this.getView().showErrorNotification("请选择所属组织!");
}
BalanceQueryParamApi balanceQueryParamApi = new BalanceQueryParamApi();
balanceQueryParamApi.setSelectors(Arrays.asList(selectorsArray));
balanceQueryParamApi.setOrgNumber(org.getString("number"));
balanceQueryParamApi.setBookTypeNumber("100002"); //账簿类型
balanceQueryParamApi.setAccountTableNumber("0003");//科目表
DynamicObject period = (DynamicObject)this.getModel().getValue("zcgj_period");
if(period == null){
//this.getView().showErrMessage("请选择期间!");
this.getView().showErrorNotification("请选择期间!");
}
balanceQueryParamApi.setPeriodNumber(period.getString("number")); //
List<String> groupBy = new ArrayList<>();
Map<String, List<Map<String, String>>> accountAssgrp = new HashMap<>();
List<Map<String, String>> li = new ArrayList<>();
//accountAssgrp.put("1001", li); //现金
//accountAssgrp.put("1002", li); //现金
//accountAssgrp.put("11260101", li); //银行承兑
accountAssgrp.put("11260301", li); //供应链
balanceQueryParamApi.setAccountAssgrp(accountAssgrp);
//groupBy.add("0005");
groupBy.add("account");
Gson gson = new Gson();
String json = gson.toJson(balanceQueryParamApi);
Map<String, Object> params = gson.fromJson(json,
new TypeToken<Map<String, Object>>() {
}.getType());
OpenApiResult balanceData = OpenApiSdkUtil.invoke("/v2/gl/getBalanceApi", params);
if (balanceData.isStatus()) {
String data = (String) balanceData.getData();
Type listType = new TypeToken<List<AccountRecord>>() {
}.getType();
List<AccountRecord> records = gson.fromJson(data, listType);
BigDecimal totalbeginlocal = BigDecimal.ZERO;
for (AccountRecord record : records) {
totalbeginlocal = totalbeginlocal.add(record.getBeginlocal());//期初本位币金额
}
DynamicObjectCollection fundplyentry = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_fundplyentry");
DynamicObject dynamicObject = fundplyentry.get(0);
dynamicObject.set("zcgj_supplyamt",totalbeginlocal);//供应链
}else{
DynamicObjectCollection fundplyentry = this.getModel().getDataEntity(true).getDynamicObjectCollection("zcgj_fundplyentry");
DynamicObject dynamicObject = fundplyentry.get(0);
dynamicObject.set("zcgj_supplyamt",BigDecimal.ZERO);//供应链
this.getView().updateView("zcgj_fundplyentry");
}
}
}

View File

@ -414,27 +414,33 @@ public class FundingplanapplyPlugin extends AbstractBillPlugIn implements Plugin
dynamicObject.set("zcgj_applymonthamt",zcgjCashamt2);
dynamicObject.set("zcgj_amountfield",zcgjCashamt2);//财务核定总金额
dynamicObject.set("zcgj_hdamount",zcgjCashamt2);
dynamicObject.set("zcgj_proxyamount",BigDecimal.ZERO);//其中:公司代付金额
dynamicObject.set("zcgj_hdproxyamount",BigDecimal.ZERO);//财务核定金额代付
dynamicObject.set("zcgj_amount_remaining",zcgjCashamt2);
}else if("YHCD".equals(zcgjSetttype)){
dynamicObject.set("zcgj_applymonthamt",zcgjBankamt2);
dynamicObject.set("zcgj_amountfield",zcgjBankamt2);//财务核定总金额
dynamicObject.set("zcgj_hdamount",zcgjBankamt2);
dynamicObject.set("zcgj_proxyamount",BigDecimal.ZERO);//其中:公司代付金额
dynamicObject.set("zcgj_hdproxyamount",BigDecimal.ZERO);//财务核定金额代付
dynamicObject.set("zcgj_amount_remaining",zcgjBankamt2);
}else if("SYCD".equals(zcgjSetttype)){
dynamicObject.set("zcgj_applymonthamt",zcgjBusinessamt2);
dynamicObject.set("zcgj_amountfield",zcgjBusinessamt2);//财务核定总金额
dynamicObject.set("zcgj_hdamount",zcgjBusinessamt2);
dynamicObject.set("zcgj_proxyamount",BigDecimal.ZERO);//其中:公司代付金额
dynamicObject.set("zcgj_hdproxyamount",BigDecimal.ZERO);//财务核定金额代付
dynamicObject.set("zcgj_amount_remaining",zcgjBusinessamt2);
}else if("GYL".equals(zcgjSetttype)){
dynamicObject.set("zcgj_applymonthamt",zcgjSupplyamt2);
//dynamicObject.set("zcgj_hdamount",zcgjSupplyamt2);
dynamicObject.set("zcgj_hdamount",BigDecimal.ZERO);
dynamicObject.set("zcgj_proxyamount",zcgjSupplyamt2);//其中:公司代付金额
dynamicObject.set("zcgj_amountfield",zcgjSupplyamt2);//财务核定总金额
dynamicObject.set("zcgj_hdproxyamount",zcgjSupplyamt2);//财务核定金额代付
dynamicObject.set("zcgj_amount_remaining",zcgjSupplyamt2);
}else if("QTJRCP".equals(zcgjSetttype)){
dynamicObject.set("zcgj_applymonthamt",zcgjOtheramt2);
//dynamicObject.set("zcgj_hdamount",zcgjOtheramt2);
dynamicObject.set("zcgj_hdamount",BigDecimal.ZERO);
dynamicObject.set("zcgj_proxyamount",zcgjOtheramt2);//其中:公司代付金额
dynamicObject.set("zcgj_amountfield",zcgjOtheramt2);//财务核定总金额
dynamicObject.set("zcgj_hdproxyamount",zcgjOtheramt2);//财务核定金额代付

View File

@ -58,14 +58,16 @@ public class PaymentapplyRelationalCkOp extends AbstractOperationServicePlugIn {
if(isshowwxsq){
DynamicObjectCollection maintenance = dataEntity.getDynamicObjectCollection("zcgj_maintenance");
if((maintenance == null || maintenance.isEmpty())){
this.addFatalErrorMessage(extendedDataEntity, String.format("设备维修申请单分录不能为空!"));
// this.addFatalErrorMessage(extendedDataEntity, String.format("设备维修申请单分录不能为空!"));
this.addWarningMessage(extendedDataEntity, String.format("请注意:设备维修申请单分录为空!"));
}
}
if(isshowcgsq){
DynamicObjectCollection purchaseapply = dataEntity.getDynamicObjectCollection("zcgj_purchaseapply");
if((purchaseapply == null || purchaseapply.isEmpty())){
this.addFatalErrorMessage(extendedDataEntity, String.format("设备维修申请单分录不能为空!"));
//this.addFatalErrorMessage(extendedDataEntity, String.format("采购申请单分录不能为空!"));
this.addWarningMessage(extendedDataEntity, String.format("请注意:采购申请单分录为空!"));
}
}
}

View File

@ -0,0 +1,57 @@
package zcgj.zcdev.zcdev.pr.plugin.other;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.utils.OrmUtils;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.botp.plugin.AbstractConvertPlugIn;
import kd.bos.entity.botp.plugin.args.AfterConvertEventArgs;
import java.util.ArrayList;
import java.util.List;
/**
* 入库单下推支出合同结算单botp插件
*/
public class MaterialinbillToOutContractSettleBotpPlugin extends AbstractConvertPlugIn {
private final static String FAREALCARD_ENTITYNAME = "fa_card_real";
@Override
public void afterConvert(AfterConvertEventArgs e) {
super.afterConvert(e);
// 获取已生成的资产卡片
ExtendedDataEntity[] billDataEntitys = e.getTargetExtDataEntitySet().FindByEntityKey(FAREALCARD_ENTITYNAME);
// 构造 ExtendedDataEntity 时需要的索引值
int dataIndex = billDataEntitys.length;
List<ExtendedDataEntity> copyDataEntitys = new ArrayList<>();
for(ExtendedDataEntity billDataEntity : billDataEntitys){
// 如下代码演示如何取本次下推关联的源单行数据包本示例无需用到关联的源单行代码注释掉
//List<DynamicObject> sourceRows = (List<DynamicObject>)billDataEntity.getValue(ConvertConst.ConvExtDataKey_SourceRows);
//boolean isNewEntity = (boolean)billDataEntity.getValue(ConvertConst.ConvExtDataKey_IsNewEntity);
// 原始的资产数量
int qty = (int) billDataEntity.getValue("assetamount");
// 将资产数量改为1
billDataEntity.setValue("assetamount", 1);
// 来源分录拆分序号 从1开始
int splitSeq = 1;
billDataEntity.setValue("sourceentrysplitseq", splitSeq++);
// 复制 原始的资产数量 - 1个卡片对象
for(int i = 1; i < qty; i++){
DynamicObject copyObj = (DynamicObject) OrmUtils.clone(billDataEntity.getDataEntity(), false, true);
copyObj.set("sourceentrysplitseq", splitSeq++);
copyDataEntitys.add(new ExtendedDataEntity(copyObj, dataIndex++, 0));
}
}
// 将复制出的单据放入 targetExtDataEntitySet 最终就会生成那么多的卡片
e.getTargetExtDataEntitySet().AddExtendedDataEntities(FAREALCARD_ENTITYNAME, copyDataEntitys);
}
}

View File

@ -0,0 +1,102 @@
package zcgj.zcdev.zcdev.pr.plugin.utils;
import java.math.BigDecimal;
import java.util.Map;
public class AccountRecord {
private Map<String, AssGrpItem> assgrp;
private BigDecimal debitlocal;//本期借方本位币金额
private BigDecimal creditlocal;//本期贷方本位币金额
private BigDecimal yeardebitfor;//本年借方原币金额
private BigDecimal yearcreditfor;//本年贷方原币金额
private BigDecimal beginlocal;//期初本位币金额
private BigDecimal endlocal;//期末本位币金额
private long account;
// getters and setters
public BigDecimal getCreditlocal() {
return creditlocal;
}
public void setCreditlocal(BigDecimal creditlocal) {
this.creditlocal = creditlocal;
}
public Map<String, AssGrpItem> getAssgrp() {
return assgrp;
}
public void setAssgrp(Map<String, AssGrpItem> assgrp) {
this.assgrp = assgrp;
}
public BigDecimal getYearcreditfor() {
return yearcreditfor;
}
public void setYearcreditfor(BigDecimal yearcreditfor) {
this.yearcreditfor = yearcreditfor;
}
public BigDecimal getDebitlocal() {
return debitlocal;
}
public void setDebitlocal(BigDecimal debitlocal) {
this.debitlocal = debitlocal;
}
public BigDecimal getYeardebitfor() {
return yeardebitfor;
}
public void setYeardebitfor(BigDecimal yeardebitfor) {
this.yeardebitfor = yeardebitfor;
}
public BigDecimal getBeginlocal() {
return beginlocal;
}
public void setBeginlocal(BigDecimal beginlocal) {
this.beginlocal = beginlocal;
}
public long getAccount() {
return account;
}
public void setAccount(long account) {
this.account = account;
}
public BigDecimal getEndlocal() {
return endlocal;
}
public void setEndlocal(BigDecimal endlocal) {
this.endlocal = endlocal;
}
// 嵌套类
public static class AssGrpItem {
private String number;
private String name;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}