收款单分录客户清账状态更新;科目接口优化

This commit is contained in:
yuxueliang0813 2025-05-22 15:16:50 +08:00
parent 4c4ad1e7e4
commit 67048086ba
3 changed files with 80 additions and 15 deletions

View File

@ -105,16 +105,17 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme
/*
* 1.收款入账中心按规则生单,收款单保存时触发
* 2.匹配的规则分录行中"取规则得映射表客户"为true,按照收款入账中心的对方户名去映射表过滤客户
* 3若没有,"4000042_不明确客户"为默认值,携带到收款单的收款人名称,id字段,
* 3若没有,"1042086_不明确客户"为默认值,携带到收款单的收款人名称,id字段,
* 4.并且将对方户名携带到收款单备注字段中
*/
long payer = bill.getLong("payer");//付款人id
if (payer == 0) {
boolean shjhEGetcustomer = entry.getBoolean("shjh_e_getcustomer");
boolean shjhEGetcustomer = entry.getBoolean("shjh_e_getcustomer");//取规则得映射表客户标记
if (shjhEGetcustomer) {
String oppunit = beiIntelpay.getString("oppunit");//收款入账中心的对方户名
bill.set("shjh_dfhm", oppunit);//收款单备注字段
QFilter qFilter = new QFilter("shjh_dfhm", QCP.equals, oppunit);
//对方户名与客户名称映射表 shjh_dfhmcust
DynamicObject shjhDfhmcust = BusinessDataServiceHelper.loadSingle("shjh_dfhmcust", qFilter.toArray());
if (null != shjhDfhmcust) {
DynamicObject shjhCustomer = shjhDfhmcust.getDynamicObject("shjh_customer");
@ -132,32 +133,43 @@ public class RecBillSaveOperation extends AbstractOperationServicePlugIn impleme
}
}
}
DynamicObject shjhBizbig = (DynamicObject) bill.get("shjh_bizebig");
DynamicObject shjhBizbig = (DynamicObject) bill.get("shjh_bizebig");//收款单的业务大类
if (null == shjhBizbig) {
bill.set("shjh_bizebig", entry.getDynamicObject("shjh_e_bizbig"));
}
DynamicObject shjhBizsmall = (DynamicObject) bill.get("shjh_bizsmall");
DynamicObject shjhBizsmall = (DynamicObject) bill.get("shjh_bizsmall");//收款单的业务小类
if (null == shjhBizsmall) {
bill.set("shjh_bizsmall", entry.getDynamicObject("shjh_e_bizsmall"));
DynamicObject shjhEBizsmall = entry.getDynamicObject("shjh_e_bizsmall");//规则--业务小类
bill.set("shjh_bizsmall", shjhEBizsmall);
DynamicObjectCollection entrys = bill.getDynamicObjectCollection("entry");//收款单分录
if (null != entrys) {
DynamicObject entryss = entrys.get(0);//首行(被动)
DynamicObject shjhYym = entryss.getDynamicObject("shjh_yym");//若原因码为空
if (null == shjhYym) {
DynamicObject shjhEBizsmall = entry.getDynamicObject("shjh_e_bizsmall");//规则--业务小类
if (null != shjhEBizsmall) {
shjhEBizsmall = BusinessDataServiceHelper.loadSingle(shjhEBizsmall.getPkValue(),"shjh_bizsmalltype");
DynamicObject shjhYym = entryss.getDynamicObject("shjh_yym");//若收款单分录原因码为空则从业务小类中携带
if (null != shjhEBizsmall) {
shjhEBizsmall = BusinessDataServiceHelper.loadSingle(shjhEBizsmall.getPkValue(),"shjh_bizsmalltype");
if (null == shjhYym) {
entryss.set("shjh_yym", shjhEBizsmall.getDynamicObject("shjh_yym"));//规则--小类--原因码
}
//根据业务小类的清账方式设置分录和表头的清账方式以及分录下推清账单标记
if ("qbjdqz".equals(shjhEBizsmall.getString("shjh_qzfs"))) {
//业务小类清账方式字段=全部金蝶清账
entryss.set("shjh_needpushbill", true);//需要下推清账单
entryss.set("shjh_closingstatus", "B");//待清账
bill.set("shjh_qzzt", "B");//待清账
}else{
entryss.set("shjh_needpushbill", false);//不需要下推清账单
entryss.set("shjh_closingstatus", "A");//无需金蝶清账
bill.set("shjh_qzzt", "A");//无需金蝶清账
}
}
}
}
DynamicObject shjhCostcenter = (DynamicObject) bill.get("shjh_costcenter");
DynamicObject shjhCostcenter = (DynamicObject) bill.get("shjh_costcenter");//成本中心
if (null == shjhCostcenter) {
bill.set("shjh_costcenter", entry.getDynamicObject("shjh_e_cc"));
}
DynamicObject shjhPc = (DynamicObject) bill.get("shjh_profitcenter");
DynamicObject shjhPc = (DynamicObject) bill.get("shjh_profitcenter");//利润中心
if (null == shjhPc) {
bill.set("shjh_profitcenter", entry.getDynamicObject("shjh_e_pc"));
}

View File

@ -1,5 +1,6 @@
package shjh.jhzj7.fi.fi.plugin.operate;
import com.sap.db.jdbc.packet.ErrorLevel;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.operate.OperateOptionConst;
@ -50,6 +51,7 @@ public class VoucherAuditOperation extends AbstractOperationServicePlugIn implem
operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, String.valueOf(true));
OperationResult operResult;//操作执行结果
List<OperateErrorInfo> allErrorInfo;
OperateErrorInfo operateErrorInfo;
for (DynamicObject pzinfo : dos) {
//重新加载凭证对象
pzinfo = BusinessDataServiceHelper.loadSingle(pzinfo.getPkValue(), pzinfo.getDataEntityType().getName(), "id,billno,sourcebill,sourcebilltype");
@ -63,12 +65,24 @@ public class VoucherAuditOperation extends AbstractOperationServicePlugIn implem
operResult = OperationServiceHelper.executeOperate("pushvoucher", recbillName, new DynamicObject[]{bizbillinfo}, operateOption);
if (operResult.isSuccess()) {
logger.info("执行收款单 pushvoucher 成功,单据编号:" + bizbillinfo.getString("billno"));
bizbillinfo = BusinessDataServiceHelper.loadSingle(sourcebillid,sourcebilltype,"id,shjh_vouchernum");
operateErrorInfo = new OperateErrorInfo();
operateErrorInfo.setMessage("SAP凭证号:" + bizbillinfo.getString("shjh_vouchernum"));
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
operateErrorInfo.setPkValue(bizbillinfo.getPkValue());
this.operationResult.addErrorInfo(operateErrorInfo);
}
}else{
//收款金额为负数 红冲 redpunch
operResult = OperationServiceHelper.executeOperate("redpunch", recbillName, new DynamicObject[]{bizbillinfo}, operateOption);
if (operResult.isSuccess()) {
logger.info("执行收款单 redpunch 成功,单据编号:" + bizbillinfo.getString("billno"));
bizbillinfo = BusinessDataServiceHelper.loadSingle(sourcebillid,sourcebilltype,"id,shjh_vouchernum");
operateErrorInfo = new OperateErrorInfo();
operateErrorInfo.setMessage("SAP凭证号:" + bizbillinfo.getString("shjh_vouchernum"));
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
operateErrorInfo.setPkValue(bizbillinfo.getPkValue());
this.operationResult.addErrorInfo(operateErrorInfo);
}
}
@ -87,6 +101,12 @@ public class VoucherAuditOperation extends AbstractOperationServicePlugIn implem
// 可以根据需要处理 operationResult例如检查是否成功获取返回值等
if (operResult.isSuccess()) {
logger.info("执行付款单 pushsap 成功,单据编号:" + bizbillinfo.getString("billno"));
bizbillinfo = BusinessDataServiceHelper.loadSingle(sourcebillid,sourcebilltype,"id,shjh_credentialnum");
operateErrorInfo = new OperateErrorInfo();
operateErrorInfo.setMessage("SAP凭证号:" + bizbillinfo.getString("shjh_credentialnum"));
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
operateErrorInfo.setPkValue(bizbillinfo.getPkValue());
this.operationResult.addErrorInfo(operateErrorInfo);
} else {
logger.error(operResult.getMessage());
allErrorInfo = operResult.getAllErrorInfo();
@ -101,6 +121,12 @@ public class VoucherAuditOperation extends AbstractOperationServicePlugIn implem
// 可以根据需要处理 operationResult例如检查是否成功获取返回值等
if (operResult.isSuccess()) {
logger.info("执行理财或定期预提记账处理单 sendvoucher 成功,单据编号:" + bizbillinfo.getString("billno"));
bizbillinfo = BusinessDataServiceHelper.loadSingle(sourcebillid,sourcebilltype,"id,shjh_sappzh");
operateErrorInfo = new OperateErrorInfo();
operateErrorInfo.setMessage("SAP凭证号:" + bizbillinfo.getString("shjh_sappzh"));
operateErrorInfo.setErrorLevel(ErrorLevel.Error.name());
operateErrorInfo.setPkValue(bizbillinfo.getPkValue());
this.operationResult.addErrorInfo(operateErrorInfo);
} else {
logger.error(operResult.getMessage());
allErrorInfo = operResult.getAllErrorInfo();

View File

@ -12,6 +12,7 @@ import kd.bos.context.RequestContext;
import kd.bos.dataentity.OperateOption;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.operate.result.OperationResult;
import kd.bos.id.ID;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
@ -86,6 +87,7 @@ public class AspAccountControler {
DynamicObject parentAcctInfo;
JSONObject json_body;
OperateOption oop = OperateOption.create();
OperationResult operResult;
Map<String, Long> acctids = new HashMap<>();//科目编号和ID对应关系
Map<String, DynamicObject> accountMaps = new HashMap<>();//将科目编号与对象关联
//先根据基础信息在集团层面生成科目不考虑核算维度使用逐级分配
@ -143,6 +145,13 @@ public class AspAccountControler {
acctInfo.set("name", name);
//处理父级科目
parentAcctInfo = getParentAcct(number,name,acctType,acctTypeInfo);
if(parentAcctInfo == null){
itemInfo = new JSONObject();
itemInfo.put("code",number);
itemInfo.put("error","父级科目在金蝶中找不到");
itemsJson.add(itemInfo);
continue;
}
acctInfo.set("longnumber", number);
acctInfo.set("fullname", name);
acctInfo.set("parent", parentAcctInfo);
@ -181,7 +190,14 @@ public class AspAccountControler {
acctInfo.set("masterid", kmId);//主数据内码系统不会根据id自动生成需要手动设置
//保存数据直接保存入库不走操作校验
// SaveServiceHelper.save(new DynamicObject[]{acctInfo});
OperationServiceHelper.executeOperate("save", entityName, new DynamicObject[]{acctInfo}, oop);
operResult = OperationServiceHelper.executeOperate("save", entityName, new DynamicObject[]{acctInfo}, oop);
if(!operResult.isSuccess()){
log.error(String.format("科目保存失败:%s", json_body.toJSONString()));
itemInfo = new JSONObject();
itemInfo.put("code",number);
itemInfo.put("error","科目保存失败"+operResult.getMessage());
itemsJson.add(itemInfo);
}
//处理科目使用范围
// DB.update(DBRoute.of("fi"), insertSql, new Object[]{kmId,JhzjUtils.GROUPID});
}
@ -251,7 +267,14 @@ public class AspAccountControler {
}
acctInfo.set("isassist", true);//主表的isassist是否包含核算项目为是
// SaveServiceHelper.save(new DynamicObject[]{acctInfo});
OperationServiceHelper.executeOperate("save", entityName, new DynamicObject[]{acctInfo}, oop);
operResult = OperationServiceHelper.executeOperate("save", entityName, new DynamicObject[]{acctInfo}, oop);
if(!operResult.isSuccess()){
log.error(String.format("科目保存失败:%s", json_body.toJSONString()));
itemInfo = new JSONObject();
itemInfo.put("code",number);
itemInfo.put("error","科目保存失败"+operResult.getMessage());
itemsJson.add(itemInfo);
}
companyAcctMaps.put(number+companynum,acctInfo);
}
}
@ -479,7 +502,11 @@ public class AspAccountControler {
acctInfo.set("masterid", kmId);//主数据内码系统不会根据id自动生成需要手动设置
//保存数据直接保存入库不走操作校验
// SaveServiceHelper.save(new DynamicObject[]{acctInfo});
OperationServiceHelper.executeOperate("save", entityName, new DynamicObject[]{acctInfo}, OperateOption.create());
OperationResult operResult = OperationServiceHelper.executeOperate("save", entityName, new DynamicObject[]{acctInfo}, OperateOption.create());
if(!operResult.isSuccess()){
log.error(String.format(number+"父级科目保存失败:%s", operResult.getMessage()));
return null;
}
//处理科目使用范围
// DB.update(DBRoute.of("fi"), insertSql, new Object[]{kmId,JhzjUtils.GROUPID});
}