资金日表取数逻辑更新

This commit is contained in:
zengweihai 2024-08-19 15:02:58 +08:00
parent 4f17a17f37
commit 7222181761
1 changed files with 51 additions and 11 deletions

View File

@ -17,6 +17,7 @@ import kd.bos.servicehelper.org.OrgUnitServiceHelper;
import kd.sdk.plugin.Plugin;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@ -35,9 +36,9 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {
String[] fileNames = {"shkd_ordinal","shkd_company","shkd_init_original","shkd_income_original","shkd_expend_original",
"shkd_period_original","shkd_currencyfield"};//字段标识数组
"shkd_period_original","shkd_currencyfield","shkd_datatype"};//字段标识数组
DataType[] dataTypes = {DataType.StringType,DataType.StringType,DataType.BigDecimalType,DataType.BigDecimalType,DataType.BigDecimalType,
DataType.BigDecimalType,DataType.LongType};//字段类型数组
DataType.BigDecimalType,DataType.LongType,DataType.StringType};//字段类型数组
//获取过滤条件集合
Map<String, Object> paramMap = this.transQueryParam(reportQueryParam);
@ -49,6 +50,8 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
Date endDate = (Date)paramMap.get("shkd_enddate");//结束时间
DynamicObject orgcurrency = (DynamicObject) paramMap.get("shkd_orgcurrency");
DynamicObject exratetable = (DynamicObject) paramMap.get("shkd_exratetable");
String shkd_unit = paramMap.get("shkd_unit").toString();//单位
String groupName = null;
HashMap<Long, ArrayList<Long>> groupMap = new HashMap<>();//集团id集合
@ -76,9 +79,35 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
}
int i = 0;
if(firmParams != null && firmParams.size() > 0){
for (Object[] firmParam : firmParams) {
firmParam[0] = i+1;
i++;
if ("0".equals(shkd_unit)) {//当单位为万元时需进行单位换算
for (Object[] firmParam : firmParams) {
firmParam[0] = i+1;
if ("2".equals(firmParam[7]) || "3".equals(firmParam[7])){//当行数据为公司资金数据或合计资金数据时根据单位判断是否计算
BigDecimal value1 = (BigDecimal) firmParam[2];
BigDecimal value2 = (BigDecimal) firmParam[3];
BigDecimal value3 = (BigDecimal) firmParam[4];
BigDecimal value4 = (BigDecimal) firmParam[5];
BigDecimal divisor = new BigDecimal("10000.00");
if (value1 != null){
firmParam[2] = value1.divide(divisor ,2, RoundingMode.HALF_UP);
}
if (value2 != null){
firmParam[3] = value2.divide(divisor ,2, RoundingMode.HALF_UP);
}
if (value3 != null){
firmParam[4] = value3.divide(divisor ,2, RoundingMode.HALF_UP);
}
if (value4 != null){
firmParam[5] = value4.divide(divisor ,2, RoundingMode.HALF_UP);
}
}
i++;
}
}else {
for (Object[] firmParam : firmParams) {
firmParam[0] = i+1;
i++;
}
}
}
RowMeta row = RowMetaFactory.createRowMeta(fileNames, dataTypes);
@ -196,14 +225,17 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
firmParams = new ArrayList<Object[]>(cas_cashmgtinits.length);//多公司数据集合
BigDecimal payTotal = BigDecimal.ZERO; //总计 期间支出合计
BigDecimal recTotal = BigDecimal.ZERO; //总计 期间收入合计
BigDecimal startBalance = BigDecimal.ZERO;//总计 期初余额合计
BigDecimal endBalance = BigDecimal.ZERO;//总计 期间余额合计
BigDecimal payLB = BigDecimal.ZERO; //内部往来,支出合计
BigDecimal recLB = BigDecimal.ZERO; //内部往来 期间收入合计
BigDecimal payNet = BigDecimal.ZERO;//支出净额
BigDecimal recNet = BigDecimal.ZERO;//收入净额
//若是集团需要在第一行拼接第一行的数据
if("group".equals(shkd_queryorgtype)&& cas_cashmgtinits.length > 0){
Object[] firmParam = new Object[7];//存放公司数据
Object[] firmParam = new Object[8];//存放公司数据
firmParam[1] = groupName;//存放集团名称,先优先考虑单集团的凭借
firmParam[7] = "1";
firmParams.add(firmParam);
}
@ -215,7 +247,7 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
Date begindate = bd_period.getDate("begindate");//获取期初时间
DynamicObject org = cas_cashmgtinits[i].getDynamicObject("org");
if (org != null){//当前组织不为空时,查询对应付款单和收款单计算收入
Object[] firmParam = new Object[7];//存放公司数据
Object[] firmParam = new Object[8];//存放公司数据
String name = org.getString("name");
Object orgPkValue = org.getPkValue();
firmParam[1] = name;//存放公司名称
@ -273,6 +305,7 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
//期初余额 = 初始余额 + 期初前收入 - 期初前支出
BigDecimal startAmount = journalbalance_total.add(recAmountTotal).subtract(payAmountTotal);
startBalance = startBalance.add(startAmount);
firmParam[2] = startAmount;
if (endDate == null){
@ -292,7 +325,7 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
}
per_recQF.and("payeedate",QCP.large_equals,startDate);//收款日期payeedate 业务日期bizdate
per_recQF.and("payeedate",QCP.less_equals,overDate);
DynamicObject[] per_cas_recbills = BusinessDataServiceHelper.load("cas_recbill", "id,billno,org,org.id,org.number,actrecamt,currency,payertype,customerf7,customerf7,payer,receivingtype", per_recQF.toArray());
DynamicObject[] per_cas_recbills = BusinessDataServiceHelper.load("cas_recbill", "id,billno,org,org.id,org.number,actrecamt,currency,payertype,payer,receivingtype", per_recQF.toArray());
BigDecimal transactions = this.getTransactions(per_cas_recbills);
recLB =recLB.add(transactions); //内部往来收入合计
@ -330,7 +363,9 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
//期间余额 = 期初余额 +期间收入 -期间支出
BigDecimal endAmount = startAmount.add(perRecAmountTotal).subtract(perPayAmountTotal);
endBalance = endBalance.add(endAmount);
firmParam[5] = endAmount;
firmParam[7] = "2";
firmParams.add(firmParam);
payTotal = payTotal.add(perPayAmountTotal);
recTotal = recTotal.add(perRecAmountTotal);
@ -341,24 +376,29 @@ public class CapitalDayListDataPlugin extends AbstractReportListDataPlugin imple
}
if ("group".equals(shkd_queryorgtype)&& cas_cashmgtinits.length > 0){
//总计行的组装
Object[] firmParam = new Object[7];//存放公司数据
Object[] firmParam = new Object[8];//存放公司数据
firmParam[1] = "总计";
firmParam[2] = startBalance; // 期初余额总计
firmParam[3] = recTotal; //今日收入合计
firmParam[4] = payTotal; //今日收入合计
firmParam[5] = endBalance;// 期间余额总计
firmParam[7] = "3";
firmParams.add(firmParam);
Object[] firmParam2 = new Object[7];//存放内部往来数据
Object[] firmParam2 = new Object[8];//存放内部往来数据
firmParam2[1] = "内部往来";
firmParam2[3] = recLB; //收入内部往来合计
firmParam2[4] = payLB; //支出内部往来合计
firmParam2[7] = "3";
firmParams.add(firmParam2);
//内部收支净额的组装
Object[] firmParam3 = new Object[7];//存放内部往来数据
Object[] firmParam3 = new Object[8];//存放内部往来数据
firmParam3[1] = "收支净额";
recNet = recTotal.subtract(recLB);//收入净额
payNet = payTotal.subtract(payLB);//支出净额
firmParam3[3] = recNet; //收入内部往来合计
firmParam3[4] = payNet; //支出内部往来合计
firmParam3[7] = "3";
firmParams.add(firmParam3);
}
return firmParams;