This commit is contained in:
parent
21bf67c0ff
commit
dd9d816ef8
|
|
@ -1,9 +1,13 @@
|
|||
package shjh.jhzj7.fi.fi.plugin.form;
|
||||
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.dataentity.resource.ResManager;
|
||||
import kd.bos.entity.datamodel.events.PropertyChangedArgs;
|
||||
import kd.bos.logging.Log;
|
||||
import kd.bos.logging.LogFactory;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.tmc.cim.common.enums.CimEntityEnum;
|
||||
import kd.tmc.cim.common.enums.RedeemWayEnum;
|
||||
import kd.tmc.cim.common.helper.RevenueCalcHelper;
|
||||
|
|
@ -15,15 +19,17 @@ import kd.tmc.fbp.common.util.DateUtils;
|
|||
import kd.tmc.fbp.common.util.EmptyUtil;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Date;
|
||||
|
||||
public class RedeemBillExtendEditPlugin extends RedeemBillEdit {
|
||||
private final static Log logger = LogFactory.getLog(RedeemBillExtendEditPlugin.class);
|
||||
|
||||
|
||||
@Override
|
||||
public void propertyChanged(PropertyChangedArgs args) {
|
||||
// 如果不是 "copies" 属性,才调用父类逻辑
|
||||
if (!"copies".equals(args.getProperty().getName())) {
|
||||
if (!"copies".equals(args.getProperty().getName()) && !"redeemdate".equals(args.getProperty().getName())) {
|
||||
super.propertyChanged(args);
|
||||
}
|
||||
|
||||
|
|
@ -32,6 +38,8 @@ public class RedeemBillExtendEditPlugin extends RedeemBillEdit {
|
|||
this.checkCopies();
|
||||
this.calAmount();
|
||||
this.calRealRevenue();
|
||||
}else if ("redeemdate".equals(args.getProperty().getName())){
|
||||
this.calRealRevenue();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -70,7 +78,7 @@ public class RedeemBillExtendEditPlugin extends RedeemBillEdit {
|
|||
DynamicObject finBillNoF7 = (DynamicObject)this.getModel().getValue("finbillno");
|
||||
if (!EmptyUtil.isEmpty(finBillNoF7)) {
|
||||
Long finBillId = (Long)finBillNoF7.getPkValue();
|
||||
DynamicObject finBill = TmcDataServiceHelper.loadSingle(CimEntityEnum.cim_finsubscribe.getValue(), "endinstdate,iopv", new QFilter[]{new QFilter("id", "=", finBillId)});
|
||||
DynamicObject finBill = TmcDataServiceHelper.loadSingle(CimEntityEnum.cim_finsubscribe.getValue(), new QFilter[]{new QFilter("id", "=", finBillId)});
|
||||
if (RedeemWayEnum.amount_redeem.getValue().equals(redeemWay)) {
|
||||
boolean isRevenue = (Boolean)this.getModel().getValue("isrevenue");
|
||||
if (isRevenue) {
|
||||
|
|
@ -82,18 +90,36 @@ public class RedeemBillExtendEditPlugin extends RedeemBillEdit {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
BigDecimal redeemAmount = (BigDecimal)this.getModel().getValue("amount");
|
||||
BigDecimal copies = (BigDecimal)this.getModel().getValue("copies");
|
||||
BigDecimal redeemAmount = (BigDecimal) this.getModel().getValue("amount");
|
||||
BigDecimal copies = (BigDecimal) this.getModel().getValue("copies");
|
||||
BigDecimal iopv = finBill.getBigDecimal("iopv");
|
||||
BigDecimal realRevenue = redeemAmount.subtract(iopv.multiply(copies));
|
||||
String value = (String) this.getModel().getValue("shjh_xjglcp");
|
||||
//非现金管理类:计提日期前所有赎回单上的实际收益
|
||||
//赎回单实际收益:赎回份数*(赎回日净值-购买时净值)
|
||||
if ("0".equals(value)) {
|
||||
BigDecimal shrjz = (BigDecimal) this.getModel().getValue("shjh_shrjz");
|
||||
realRevenue=copies.multiply(shrjz.subtract(iopv));
|
||||
BigDecimal shrsyfe = (BigDecimal) this.getView().getModel().getValue("shjh_shrsyfe");//赎回日剩余份数
|
||||
DynamicObjectCollection collection = finBill.getDynamicObjectCollection("valuationentry");
|
||||
BigDecimal realRevenue = BigDecimal.ZERO;
|
||||
if (collection != null && collection.size() != 0) {
|
||||
//判断现金管理类
|
||||
String value = (String) this.getModel().getValue("shjh_xjglcp");
|
||||
//现金管理类:计提日期前所有赎回单的现金管理类收益
|
||||
//赎回单理财实际收益:赎回金额一购买金额*(赎回比之积)
|
||||
if ("1".equals(value)) {
|
||||
Date redeemDate = (Date) this.getModel().getValue("redeemdate");
|
||||
if (redeemDate != null) {
|
||||
//自身比
|
||||
//BigDecimal selfRat = copies.divide(shrsyfe, 10, RoundingMode.HALF_UP);
|
||||
BigDecimal amount = finBill.getBigDecimal("amount");
|
||||
//赎回比之积
|
||||
BigDecimal redProductAmount = this.getRedProductAmount(collection, redeemDate);
|
||||
realRevenue = redeemAmount.subtract(copies.divide(shrsyfe,8, RoundingMode.HALF_UP).multiply(redProductAmount).multiply(amount));
|
||||
}else {
|
||||
//非现金管理类:计提日期前所有赎回单上的实际收益
|
||||
//赎回单实际收益:赎回份数*(赎回日净值-购买时净值)
|
||||
BigDecimal shrjz = (BigDecimal) this.getModel().getValue("shjh_shrjz");
|
||||
realRevenue = copies.multiply(shrjz.subtract(iopv));
|
||||
}
|
||||
}
|
||||
|
||||
TmcViewInputHelper.setValWithoutDataChanged(this.getModel(), "realrevenue", realRevenue);
|
||||
}
|
||||
TmcViewInputHelper.setValWithoutDataChanged(this.getModel(), "realrevenue", realRevenue);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -115,4 +141,75 @@ public class RedeemBillExtendEditPlugin extends RedeemBillEdit {
|
|||
|
||||
return intBill;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计提日最近估值记录获取——(赎回份额/赎回日剩余份额)* 所有赎回单
|
||||
*
|
||||
* @param entry 输入数据集合
|
||||
* @param date 目标日期
|
||||
* @return 所有符合条件的赎回单的(赎回份额 / 剩余份额)的乘积
|
||||
*/
|
||||
private BigDecimal getRedProductAmount(DynamicObjectCollection entry, Date date) {
|
||||
// 1. 按估值日期和赎回日期排序
|
||||
DynamicObjectCollection sortedEntries = new DynamicObjectCollection();
|
||||
sortedEntries.addAll(entry);
|
||||
|
||||
sortedEntries.sort((o1, o2) -> {
|
||||
// 优先按估值日期排序(从小到大)
|
||||
Date valDate1 = o1.getDate("e_valuationdate");
|
||||
Date valDate2 = o2.getDate("e_valuationdate");
|
||||
int compareValDate = valDate1.compareTo(valDate2);
|
||||
if (compareValDate != 0) {
|
||||
return compareValDate;
|
||||
}
|
||||
|
||||
// 估值日期相同时,按赎回日期排序
|
||||
Date redDate1 = o1.getDate("shjh_shrq");
|
||||
Date redDate2 = o2.getDate("shjh_shrq");
|
||||
if (redDate1 == null && redDate2 == null) return 0;
|
||||
if (redDate1 == null) return -1; // null视为较小值
|
||||
if (redDate2 == null) return 1;
|
||||
return redDate1.compareTo(redDate2);
|
||||
});
|
||||
|
||||
// 2. 累乘符合条件的差额,初始值设为1
|
||||
BigDecimal product = BigDecimal.ONE;
|
||||
|
||||
for (DynamicObject item : sortedEntries) {
|
||||
try {
|
||||
// 检查是否为赎回单(跳过非赎回条目)
|
||||
DynamicObject shdh = item.getDynamicObject("shjh_shdh");
|
||||
if (shdh == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 检查估值日期是否 ≤ 目标日期
|
||||
Date valDate = item.getDate("e_valuationdate");
|
||||
if (valDate == null || valDate.compareTo(date) > 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Object pkValue = shdh.getPkValue();
|
||||
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkValue, "cim_redeem");
|
||||
|
||||
// 安全获取数值字段
|
||||
BigDecimal copies = dynamicObject.getBigDecimal("copies"); // 赎回份额
|
||||
BigDecimal remainderCopies = dynamicObject.getBigDecimal("shjh_shrsyfe"); // 赎回日剩余份额
|
||||
|
||||
if (copies == null || remainderCopies == null || remainderCopies.compareTo(BigDecimal.ZERO) == 0) {
|
||||
continue; // 跳过无效数据
|
||||
}
|
||||
|
||||
// 计算 (赎回份额/剩余日份额)
|
||||
BigDecimal ratio = copies.divide(remainderCopies, 10, RoundingMode.HALF_UP);
|
||||
// 累乘
|
||||
product = product.multiply(ratio).setScale(10, RoundingMode.HALF_UP);
|
||||
|
||||
} catch (Exception e) {
|
||||
// 记录错误并跳过当前条目
|
||||
logger.error("处理赎回单数据出错: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
return product;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import kd.bos.logging.LogFactory;
|
|||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.tmc.fbp.common.helper.TmcViewInputHelper;
|
||||
import shjh.jhzj7.fi.fi.plugin.report.FinancialFormReport;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -68,9 +69,11 @@ public class RedeemFormPlugin extends AbstractFormPlugin {
|
|||
this.getView().updateView("shjh_shrjz");
|
||||
this.getView().getModel().setValue("shjh_shrsyfe", shrsyfe);
|
||||
this.getView().updateView("shjh_shrsyfe");
|
||||
this.getView().getModel().setValue("iopv", shrjz);
|
||||
this.getView().updateView("iopv");
|
||||
}
|
||||
}
|
||||
updateRevenue(cimFinsubscribe);
|
||||
//updateRevenue(cimFinsubscribe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -83,16 +86,17 @@ public class RedeemFormPlugin extends AbstractFormPlugin {
|
|||
this.getView().showErrorNotification("【赎回日剩余份数】—【赎回份数】(大于等于0)");
|
||||
this.getView().getModel().setValue("copies", BigDecimal.ZERO);
|
||||
this.getView().updateView("copies");
|
||||
} else {
|
||||
//获取申购单
|
||||
DynamicObject finSubscribeF7 = (DynamicObject) this.getModel().getValue("finbillno");
|
||||
if (finSubscribeF7 != null) {
|
||||
DynamicObject finSubscribe = BusinessDataServiceHelper.loadSingle(finSubscribeF7.getPkValue(), "cim_finsubscribe");
|
||||
if (finSubscribe != null) {
|
||||
updateRevenue(finSubscribe);
|
||||
}
|
||||
}
|
||||
}
|
||||
// else {
|
||||
// //获取申购单
|
||||
// DynamicObject finSubscribeF7 = (DynamicObject) this.getModel().getValue("finbillno");
|
||||
// if (finSubscribeF7 != null) {
|
||||
// DynamicObject finSubscribe = BusinessDataServiceHelper.loadSingle(finSubscribeF7.getPkValue(), "cim_finsubscribe");
|
||||
// if (finSubscribe != null) {
|
||||
// updateRevenue(finSubscribe);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -118,7 +122,10 @@ public class RedeemFormPlugin extends AbstractFormPlugin {
|
|||
|
||||
private void updateRevenue(DynamicObject finSubscribe) {
|
||||
BigDecimal copies = (BigDecimal) this.getView().getModel().getValue("copies");//赎回份数
|
||||
BigDecimal shrsyfe = (BigDecimal) this.getView().getModel().getValue("copies");//赎回日剩余份数
|
||||
if (copies.compareTo(BigDecimal.ZERO)==0){
|
||||
return;
|
||||
}
|
||||
BigDecimal shrsyfe = (BigDecimal) this.getView().getModel().getValue("shjh_shrsyfe");//赎回日剩余份数
|
||||
|
||||
DynamicObjectCollection collection = finSubscribe.getDynamicObjectCollection("valuationentry");
|
||||
if (collection != null && collection.size() != 0) {
|
||||
|
|
@ -134,8 +141,8 @@ public class RedeemFormPlugin extends AbstractFormPlugin {
|
|||
//赎回比之积
|
||||
BigDecimal redProductAmount = this.getRedProductAmount(collection, redeemDate);
|
||||
BigDecimal amount = (BigDecimal) this.getModel().getValue("amount");
|
||||
this.getModel().setValue("shjh_realrevenue2", amount.subtract(finSubscribe.getBigDecimal("amount").multiply(redProductAmount).multiply(selfRat)));
|
||||
this.getView().updateView("shjh_realrevenue2");
|
||||
BigDecimal realRevenue = amount.subtract(copies.divide(shrsyfe,8, RoundingMode.HALF_UP).multiply(redProductAmount).multiply(selfRat));
|
||||
TmcViewInputHelper.setValWithoutDataChanged(this.getModel(), "realrevenue", realRevenue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -634,6 +634,7 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme
|
|||
} else {
|
||||
//3.规则生单未配置客户——>取收款入账中心客户
|
||||
QFilter customerFilter = new QFilter("name", QCP.equals, oppunit);
|
||||
customerFilter.and(new QFilter("group.name",QCP.not_equals,"员工"));
|
||||
//可用状态
|
||||
customerFilter.and(new QFilter("enable", QCP.equals, "1"));
|
||||
DynamicObject[] bd_customer = BusinessDataServiceHelper.load("bd_customer", "id,name", customerFilter.toArray());
|
||||
|
|
|
|||
|
|
@ -498,9 +498,12 @@ public class FinancialFormReport extends AbstractReportFormPlugin implements Plu
|
|||
Object pkValue = shdh.getPkValue();
|
||||
DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(pkValue, "cim_redeem");
|
||||
BigDecimal amount = dynamicObject.getBigDecimal("amount"); // 赎回金额字段名
|
||||
BigDecimal realrevenue = dynamicObject.getBigDecimal("realrevenue"); // 实际收益字段名
|
||||
//BigDecimal realrevenue = dynamicObject.getBigDecimal("realrevenue"); // 实际收益字段名
|
||||
// if (amount != null) {
|
||||
// sum = sum.add(amount).add(realrevenue);
|
||||
// }
|
||||
if (amount != null) {
|
||||
sum = sum.add(amount).add(realrevenue);
|
||||
sum = amount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,18 +8,28 @@ import kd.bos.orm.query.QCP;
|
|||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.schedule.executor.AbstractTask;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.botp.BFTrackerServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import kd.bos.util.StringUtils;
|
||||
import kd.sdk.plugin.Plugin;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 定时从付款单携带SAP付凭证单号至被动付款入账中心(主要处理sap主动付款场景)
|
||||
*/
|
||||
public class BeiIntelpayBillTask extends AbstractTask implements Plugin {
|
||||
|
||||
//付款处理
|
||||
private static final String KEY_PAY="cas_paybill";
|
||||
//下拨处理
|
||||
private static final String KEY_TRANS="fca_transdownbill";
|
||||
//收款处理
|
||||
private static final String KEY_REC="cas_recbill";
|
||||
|
||||
@Override
|
||||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||
|
||||
|
|
@ -32,26 +42,64 @@ public class BeiIntelpayBillTask extends AbstractTask implements Plugin {
|
|||
DynamicObject[] beiIntelpays = BusinessDataServiceHelper.load("bei_intelpay", "id," +
|
||||
"billno,shjh_credentialnums,recedbillentry,recedbillentry.e_recedbillnumber", new QFilter[]{q1, q2});
|
||||
for (DynamicObject beiIntelpay : beiIntelpays) {
|
||||
//接收单据信息:recedbillentry
|
||||
DynamicObjectCollection recedbillentry = beiIntelpay.getDynamicObjectCollection("recedbillentry");
|
||||
if (!recedbillentry.isEmpty()) {
|
||||
DynamicObject object = recedbillentry.get(0);
|
||||
if (null != object) {
|
||||
String recedbillnumber = object.getString("e_recedbillnumber");//接收单据编号
|
||||
if (null != recedbillnumber && !recedbillnumber.isEmpty()) {
|
||||
//获取付款单
|
||||
QFilter q3 = new QFilter("billno", QCP.equals, recedbillnumber);//单据编号
|
||||
DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill",
|
||||
"id,shjh_credentialnum", new QFilter[]{q3});
|
||||
if (null != paybill) {
|
||||
if (StringUtils.isNotEmpty(paybill.getString("shjh_credentialnum"))) {
|
||||
beiIntelpay.set("shjh_credentialnums",paybill.getString("shjh_credentialnum"));//SAP付款凭证号
|
||||
SaveServiceHelper.save(new DynamicObject[]{beiIntelpay});
|
||||
}
|
||||
//下查
|
||||
Map<String, HashSet<Long>> intelPayMap = BFTrackerServiceHelper.findTargetBills("bei_intelpay", new Long[]{(Long) beiIntelpay.getPkValue()});
|
||||
//付款单
|
||||
if (intelPayMap.containsKey(KEY_PAY)){
|
||||
Set<Long> billIds = intelPayMap.get(KEY_PAY);
|
||||
for (Long billId : billIds) {
|
||||
DynamicObject payBill = BusinessDataServiceHelper.loadSingle(billId, KEY_PAY);
|
||||
if (null != payBill) {
|
||||
if (StringUtils.isNotEmpty(payBill.getString("shjh_credentialnum"))) {
|
||||
beiIntelpay.set("shjh_credentialnums",payBill.getString("shjh_credentialnum"));//SAP付款凭证号
|
||||
SaveServiceHelper.save(new DynamicObject[]{beiIntelpay});
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if (intelPayMap.containsKey(KEY_TRANS)){
|
||||
Set<Long> billIds = intelPayMap.get(KEY_TRANS);
|
||||
for (Long billId : billIds) {
|
||||
DynamicObject payBill = BusinessDataServiceHelper.loadSingle(billId, KEY_TRANS);
|
||||
if (null != payBill) {
|
||||
if (StringUtils.isNotEmpty(payBill.getString("shjh_sappzh"))) {
|
||||
beiIntelpay.set("shjh_credentialnums",payBill.getString("shjh_sappzh"));//SAP付款凭证号
|
||||
SaveServiceHelper.save(new DynamicObject[]{beiIntelpay});
|
||||
}
|
||||
}
|
||||
}
|
||||
}else if (intelPayMap.containsKey(KEY_REC)){
|
||||
Set<Long> billIds = intelPayMap.get(KEY_REC);
|
||||
for (Long billId : billIds) {
|
||||
DynamicObject payBill = BusinessDataServiceHelper.loadSingle(billId, KEY_REC);
|
||||
if (null != payBill) {
|
||||
if (StringUtils.isNotEmpty(payBill.getString("shjh_vouchernum"))) {
|
||||
beiIntelpay.set("shjh_credentialnums",payBill.getString("shjh_vouchernum"));//SAP付款凭证号
|
||||
SaveServiceHelper.save(new DynamicObject[]{beiIntelpay});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//接收单据信息:recedbillentry
|
||||
// DynamicObjectCollection recedbillentry = beiIntelpay.getDynamicObjectCollection("recedbillentry");
|
||||
// if (!recedbillentry.isEmpty()) {
|
||||
// DynamicObject object = recedbillentry.get(0);
|
||||
// if (null != object) {
|
||||
// String recedbillnumber = object.getString("e_recedbillnumber");//接收单据编号
|
||||
// if (null != recedbillnumber && !recedbillnumber.isEmpty()) {
|
||||
// //获取付款单
|
||||
// QFilter q3 = new QFilter("billno", QCP.equals, recedbillnumber);//单据编号
|
||||
// DynamicObject paybill = BusinessDataServiceHelper.loadSingle("cas_paybill",
|
||||
// "id,shjh_credentialnum", new QFilter[]{q3});
|
||||
// if (null != paybill) {
|
||||
// if (StringUtils.isNotEmpty(paybill.getString("shjh_credentialnum"))) {
|
||||
// beiIntelpay.set("shjh_credentialnums",paybill.getString("shjh_credentialnum"));//SAP付款凭证号
|
||||
// SaveServiceHelper.save(new DynamicObject[]{beiIntelpay});
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,12 +42,12 @@ public class UnclaimedNoticeTask extends AbstractTask implements Plugin {
|
|||
logger.info("昨天"+yesterdayStr);
|
||||
QFilter qFilter = new QFilter("businesstype", QCP.equals, "rec");//业务类型-收款
|
||||
qFilter.and("claimstatus", QCP.equals, "0");//认领通知单状态-待认领
|
||||
try {
|
||||
qFilter.and("createtime", QCP.less_equals, new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(yesterdayStr+" 23:59:59"));//截至到昨天之前的
|
||||
} catch (ParseException e) {
|
||||
logger.info("日期格式化异常"+e.getMessage());
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
// try {
|
||||
// qFilter.and("createtime", QCP.less_equals, new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(yesterdayStr+" 23:59:59"));//截至到昨天之前的
|
||||
// } catch (ParseException e) {
|
||||
// logger.info("日期格式化异常"+e.getMessage());
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
DynamicObject[] colls = BusinessDataServiceHelper.load(entityName, "id", qFilter.toArray());
|
||||
DynamicObjectCollection usercolls;
|
||||
Map<String, List<DynamicObject>> userBills = new HashMap<>();//缓存用户和认领单的关系
|
||||
|
|
|
|||
Loading…
Reference in New Issue