Compare commits

...

3 Commits

Author SHA1 Message Date
zzs01@yunemao.com
6db339b94f fix:贷记单提交报错 2024-09-10 14:36:51 +08:00
ljw
75850fd0e1 外销合同:提交效验附件面板是否有值 2024-09-10 14:29:02 +08:00
ljw
e524223637 销售出库审核效验 2024-09-10 14:29:02 +08:00
4 changed files with 209 additions and 42 deletions

View File

@ -6,6 +6,7 @@ package com.yem.wm.es.salesorder.op;/*
*/
import com.yem.wm.es.salesorder.utils.SalesOrderUtils;
import com.yem.wm.es.salesorder.validator.NewSalesOrderSubmitAnnexValidator;
import com.yem.wm.es.salesorder.validator.NewSalesOrderSubmitValidator;
import com.yem.wm.es.salesorder.validator.SalesOrderSubmitValidator;
import kd.bos.dataentity.entity.DynamicObject;
@ -72,6 +73,7 @@ public class SalesOrderSubmitOp extends AbstractOperationServicePlugIn {
fieldKeys.add("yem_color");
fieldKeys.add("yem_marketraiseprice");
fieldKeys.add("yem_currency");
fieldKeys.add("yem_attsum");
fieldKeys.add("yem_cnperson");
fieldKeys.add("yem_suminsured");
fieldKeys.add("yem_internationalrate");
@ -85,6 +87,7 @@ public class SalesOrderSubmitOp extends AbstractOperationServicePlugIn {
super.onAddValidators(e);
e.addValidator(new SalesOrderSubmitValidator());
e.addValidator(new NewSalesOrderSubmitValidator());
e.addValidator(new NewSalesOrderSubmitAnnexValidator());
}
@Override

View File

@ -0,0 +1,24 @@
package com.yem.wm.es.salesorder.validator;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.validate.AbstractValidator;
/**
* @author ljw
* @date 2024/9/9 16:57
* @description NewSalesOrderSubmitAnnexValidator
*/
public class NewSalesOrderSubmitAnnexValidator extends AbstractValidator {
@Override
public void validate() {
ExtendedDataEntity[] dataEntities = this.getDataEntities();
for (ExtendedDataEntity dataEntitie : dataEntities) {
DynamicObject mechanical = dataEntitie.getDataEntity();
String attachments = mechanical.getString("yem_attsum");
if ("0".equals(attachments)){
this.addErrorMessage(dataEntitie, "附件未上传或未保存!!!");
}
}
}
}

View File

@ -150,6 +150,7 @@ public class SalesOrderSubmitValidator extends AbstractValidator {
/**
* 信保合同提交时消息提醒请确认信保通中该客户的信保额度是否有效如果点击是继续下一步点击否取消操作
*
* @param dataEntity
* @param dataEntitie
*/
@ -163,6 +164,7 @@ public class SalesOrderSubmitValidator extends AbstractValidator {
/**
* 根据信保明细检查是否信保合同
*
* @param dataEntity
* @param dataEntitie
*/
@ -204,6 +206,7 @@ public class SalesOrderSubmitValidator extends AbstractValidator {
/**
* 是否是变更合同
*
* @param dataEntity 外销合同
*/
private boolean isChangeContract(DynamicObject dataEntity) {
@ -217,11 +220,16 @@ public class SalesOrderSubmitValidator extends AbstractValidator {
/**
* 根据贷记单使用币别+贷记单类型+借贷业务类型+集团客户匹配对应配件资金池
* 贷记单使用金额不能超过其对应分录实际来源金额-预计去向金额
* <p>
* 2024-09-09增加 通过配置进行判断允许超额
*
* @param dataEntity
* @param dataEntitie
*/
private void checkUsedAmount(DynamicObject dataEntity, ExtendedDataEntity dataEntitie) {
if (isChangeContract(dataEntity)) {return;}
if (isChangeContract(dataEntity)) {
return;
}
// 资金使用类型
String fundusetype = dataEntity.getString("yem_fundusetype");
if (!"B".equals(fundusetype)) return;
@ -262,6 +270,45 @@ public class SalesOrderSubmitValidator extends AbstractValidator {
entryCreditype == debcredtype &&
groupcustomers == entryCustomer
) {
// // 实际来源总金额
// BigDecimal sumtotalamount = object.getBigDecimal("yem_sumtotalamount");
// // 预计去向总金额
// BigDecimal sumtowardamt = object.getBigDecimal("yem_sumtowardamt");
// if (debcuseamt.compareTo(sumtotalamount.subtract(sumtowardamt)) > 0) {
// sb.append(String.format("配件资金使用明细第 [ %s ] 行,贷记单使用金额 [ %s ] 超过其对应配件资金池 [ %s ] 分录第 [ %s ] 行,实际来源金额 [ %s ] - 预计去向金额 [ %s ] = [ %s ] !!\r\n",
// index + 1,
// debcuseamt.setScale(2, RoundingMode.HALF_UP),
// single.getString("billno"),
// subIdx + 1,
// sumtotalamount.setScale(2, RoundingMode.HALF_UP),
// sumtowardamt.setScale(2, RoundingMode.HALF_UP),
// sumtotalamount.subtract(sumtowardamt).setScale(2, RoundingMode.HALF_UP)
// ));
// }
String yem_billtype = dataEntity.getString("yem_billtype.number");//单据类型
QFilter qFilter1 = new QFilter("yem_contracttype", QCP.equals, yem_billtype);//合同类型
String yem_accamtusetype = dataEntity.getString("yem_accamtusetype");//配件资金使用方式
String yem_billbusstype = dataEntity.getString("yem_billbusstype.number");//单据业务类型
qFilter1.and(new QFilter("yem_accamtusetype", QCP.equals, yem_accamtusetype));
qFilter1.and(new QFilter("yem_billbusstype.number", QCP.equals, yem_billbusstype));
qFilter1.and(new QFilter("enable", QCP.equals, "1"));
String selectfield = DynamicObjectUtil.getSelectfields("yem_bd_credittypeconfig", false);
String selectfields = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_bd_credittypeconfig", "yem_credittypeentry", false);
Map<Long, Boolean> map = new HashMap<>();
DynamicObjectCollection data = QueryServiceHelper.query("yem_bd_credittypeconfig",
selectfields, new QFilter[]{qFilter1}, null);
if (data.size() > 0) {
for (int i = 0; i < data.size(); i++) {
DynamicObject object1 = data.get(i);
long aLong = object1.getLong("yem_credittypeentry.yem_credittype");
if (!map.containsKey(aLong)) {
map.put(aLong, object1.getBoolean("yem_credittypeentry.yem_isoverage"));
}
}
}
if (map.containsKey(debcredtype)) {
Boolean aBoolean = map.get(debcredtype);
if (!aBoolean) {
// 实际来源总金额
BigDecimal sumtotalamount = object.getBigDecimal("yem_sumtotalamount");
// 预计去向总金额
@ -277,6 +324,24 @@ public class SalesOrderSubmitValidator extends AbstractValidator {
sumtotalamount.subtract(sumtowardamt).setScale(2, RoundingMode.HALF_UP)
));
}
} else {
// 实际来源总金额
BigDecimal sumtotalamount = object.getBigDecimal("yem_sumtotalamount");
// 预计去向总金额
BigDecimal sumtowardamt = object.getBigDecimal("yem_sumtowardamt");
if (debcuseamt.compareTo(sumtotalamount.subtract(sumtowardamt)) < 0) {
sb.append(String.format("配件资金使用明细第 [ %s ] 行,贷记单使用金额 [ %s ] 超过其对应配件资金池 [ %s ] 分录第 [ %s ] 行,实际来源金额 [ %s ] - 预计去向金额 [ %s ] = [ %s ] !!\r\n",
index + 1,
debcuseamt.setScale(2, RoundingMode.HALF_UP),
single.getString("billno"),
subIdx + 1,
sumtotalamount.setScale(2, RoundingMode.HALF_UP),
sumtowardamt.setScale(2, RoundingMode.HALF_UP),
sumtotalamount.subtract(sumtowardamt).setScale(2, RoundingMode.HALF_UP)
));
}
}
}
}
}
}

View File

@ -128,6 +128,35 @@ public class DebCredNewAuditValidatorOp extends AbstractValidator {
"未获取到满足条件的配件资金池,无法生成《转换贷记单》,请修改后重试");
}
}
DynamicObject getaccamtusetype = getaccamtusetype(dataEntity);
Map<Long, Boolean> isoveragemap = new HashMap<>();
DynamicObjectCollection data11 = null;
if (YEM.isNotEmpty(getaccamtusetype)) {
QFilter qFilter1 = new QFilter("yem_contracttype", QCP.equals, getaccamtusetype.getString("yem_billtype.number"));//合同类型
qFilter1.and(new QFilter("yem_accamtusetype", QCP.equals, getaccamtusetype.getString("yem_fundusetype")));
qFilter1.and(new QFilter("yem_billbusstype.number", QCP.equals, getaccamtusetype.getString("yem_billbusstype.number")));
qFilter1.and(new QFilter("enable", QCP.equals, "1"));
String selectfield1 = DynamicObjectUtil.getSelectfields("yem_bd_credittypeconfig", false);
String selectfields1 = DynamicObjectUtil.getEntrySelectfields(selectfield1, "yem_bd_credittypeconfig", "yem_credittypeentry", false);
data11 = QueryServiceHelper.query("yem_bd_credittypeconfig",
selectfields1, new QFilter[]{qFilter1}, null);
}
if (YEM.isNotEmpty(data11)) {
for (int i = 0; i < data11.size(); i++) {
DynamicObject object1 = data11.get(i);
long aLong = object1.getLong("yem_credittypeentry.yem_credittype");
if (!isoveragemap.containsKey(aLong)) {
isoveragemap.put(aLong, object1.getBoolean("yem_credittypeentry.yem_isoverage"));
}
}
}
Boolean isoverage = false;
long credittypeid = yem_credittype.getLong("id");
if (isoveragemap.containsKey(credittypeid)) {
isoverage = true;
}
//贷记单
if (yem_billtype.equals("yem_debcrednote_d")) {
DynamicObjectCollection data = quespcapitalpool(dataEntity);
@ -150,12 +179,12 @@ public class DebCredNewAuditValidatorOp extends AbstractValidator {
BigDecimal yem_amount = dataEntity.getBigDecimal("yem_amount");//配件资金池增加金额
BigDecimal yem_amount_sub = dataEntity.getBigDecimal("yem_amount_sub");//配件资金池扣减金额
if (yem_currency.equals("CNY")) {
BigDecimal bigDecimal = BigDecimal.ZERO;
if (map1.containsKey(currency)) {
bigDecimal = map1.get(currency);
}
BigDecimal sumamount = yem_amount.add(bigDecimal);
if (!isoverage) {
if (sumamount.compareTo(yem_amount_sub) == -1) {
this.addErrorMessage(dataEntitie, "根据客户【" + customername + "】、" +
"产品类型【" + productsname + "】、借/贷类型【" + debcredtype + "】、" +
@ -165,6 +194,17 @@ public class DebCredNewAuditValidatorOp extends AbstractValidator {
"小于去向汇总金额【" + yem_amount_sub.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
",请修改后重试");
}
} else {
if (sumamount.compareTo(yem_amount_sub) == 1) {
this.addErrorMessage(dataEntitie, "根据客户【" + customername + "】、" +
"产品类型【" + productsname + "】、借/贷类型【" + debcredtype + "】、" +
"借贷业务类型【" + yem_credittype.getString("name") + "" +
"查询到【人民币】预计剩余金额【" + bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
"加上本次来源金额汇总【" + yem_amount.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
"小于去向汇总金额【" + yem_amount_sub.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
",请修改后重试");
}
}
}
if (yem_currency.equals("USD")) {
BigDecimal bigDecimal = BigDecimal.ZERO;
@ -172,6 +212,7 @@ public class DebCredNewAuditValidatorOp extends AbstractValidator {
bigDecimal = map1.get(currency);
}
BigDecimal sumamount = yem_amount.add(bigDecimal);
if (!isoverage) {
if (sumamount.compareTo(yem_amount_sub) == -1) {
this.addErrorMessage(dataEntitie, "根据客户【" + customername + "】、" +
"产品类型【" + productsname + "】、借/贷类型【" + debcredtype + "】、" +
@ -181,6 +222,17 @@ public class DebCredNewAuditValidatorOp extends AbstractValidator {
"小于去向汇总金额【" + yem_amount_sub.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
",请修改后重试");
}
} else {
if (sumamount.compareTo(yem_amount_sub) == 1) {
this.addErrorMessage(dataEntitie, "根据客户【" + customername + "】、" +
"产品类型【" + productsname + "】、借/贷类型【" + debcredtype + "】、" +
"借贷业务类型【" + yem_credittype.getString("name") + "" +
"查询到【美元】预计剩余金额【" + bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
"加上本次来源金额汇总【" + yem_amount.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
"小于去向汇总金额【" + yem_amount_sub.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
",请修改后重试");
}
}
}
}
}
@ -207,19 +259,19 @@ public class DebCredNewAuditValidatorOp extends AbstractValidator {
QFilter qFilter = new QFilter("id", QCP.in, list);//
String selectfield = DynamicObjectUtil.getSelectfields("yem_debcrednote", false);
String selectfields = DynamicObjectUtil.getEntrySelectfields(selectfield, "yem_debcrednote", "yem_creditnotedes", false);
DynamicObjectCollection Object = QueryServiceHelper.query("yem_debcrednote", "id,"+selectfields, qFilter.toArray());
DynamicObjectCollection Object = QueryServiceHelper.query("yem_debcrednote", "id," + selectfields, qFilter.toArray());
if (Object.size() > 0) {
for(DynamicObject dynamicObject:Object){
for (DynamicObject dynamicObject : Object) {
String billno = dynamicObject.getString("billno");
long id = dynamicObject.getLong("id");
if(map.containsKey(id)){
if (map.containsKey(id)) {
BigDecimal yem_amount = dynamicObject.getBigDecimal("yem_amount");//配件资金池增加金额
BigDecimal yem_towardwriteamt = dynamicObject.getBigDecimal("yem_towardwriteamt");//预计核销金额
BigDecimal add = yem_towardwriteamt.add(map.get(id));
if(yem_amount.subtract(add).compareTo(BigDecimal.ZERO) == -1){
this.addErrorMessage(dataEntitie, "选择借记单【"+billno+"】,来源总金额为【"+yem_amount.setScale(2, BigDecimal.ROUND_HALF_UP)+"" +
",已核销【"+yem_towardwriteamt.setScale(2, BigDecimal.ROUND_HALF_UP)+"】," +
"加上本次核销【"+map.get(id).setScale(2, BigDecimal.ROUND_HALF_UP)+"】,小于零,请修改后重试!l");
if (yem_amount.subtract(add).compareTo(BigDecimal.ZERO) == -1) {
this.addErrorMessage(dataEntitie, "选择借记单【" + billno + "】,来源总金额为【" + yem_amount.setScale(2, BigDecimal.ROUND_HALF_UP) + "" +
",已核销【" + yem_towardwriteamt.setScale(2, BigDecimal.ROUND_HALF_UP) + "】," +
"加上本次核销【" + map.get(id).setScale(2, BigDecimal.ROUND_HALF_UP) + "】,小于零,请修改后重试!l");
}
}
@ -228,6 +280,12 @@ public class DebCredNewAuditValidatorOp extends AbstractValidator {
}
}
/**
* 获取配件资金池额度
*
* @param dataEntity
* @return
*/
public DynamicObjectCollection quespcapitalpool(DynamicObject dataEntity) {
//组织
DynamicObject org = dataEntity.getDynamicObject("org");
@ -265,4 +323,21 @@ public class DebCredNewAuditValidatorOp extends AbstractValidator {
DynamicObjectCollection data = QueryServiceHelper.query("yem_spcapitalpool", selectfields, new QFilter[]{qFilter}, "billno");
return data;
}
/**
* 获取合同配件资金使用方式
*
* @param dataEntity
* @return
*/
public DynamicObject getaccamtusetype(DynamicObject dataEntity) {
DynamicObject value = null;
String yem_sourcebillno = dataEntity.getString("yem_sourcebillno");
QFilter qFilter = new QFilter("billno", QCP.equals, yem_sourcebillno);
DynamicObject billType = BusinessDataServiceHelper.loadSingle("yem_es_salesorder", "id,yem_fundusetype", qFilter.toArray());
if (billType != null) {
value = BusinessDataServiceHelper.loadSingle(billType.getString("id"), "yem_es_salesorder");
}
return value;
}
}