Compare commits
22 Commits
main
...
dev-1217-r
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a807a3476d | ||
![]() |
d48973e46f | ||
![]() |
6814db3516 | ||
![]() |
632d9e21c2 | ||
![]() |
4f39e70dbc | ||
![]() |
e3de4132ff | ||
![]() |
89cc1bca4e | ||
![]() |
3432942a58 | ||
![]() |
91bb471d10 | ||
![]() |
9bc2063f98 | ||
![]() |
eae969ce9b | ||
![]() |
a0d082a2cc | ||
![]() |
7a3638ca84 | ||
![]() |
cd747987eb | ||
![]() |
f47b4a70a7 | ||
![]() |
3abdb3bb3f | ||
![]() |
330509aed2 | ||
![]() |
871005c558 | ||
![]() |
e599288765 | ||
![]() |
a996973e01 | ||
![]() |
1f2b2b9799 | ||
![]() |
d255d994a6 |
@ -293,7 +293,10 @@ public class TotalUtil {
|
||||
if (YEM.isNotEmpty(customer) && YEM.isNotEmpty(method) && YEM.isNotEmpty(company)) {
|
||||
String selectfields = DynamicObjectUtil.getSelectfields("yem_im_csrcreditline", false);
|
||||
selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_im_csrcreditline", "yem_im_info", false);
|
||||
QFilter qFilter = new QFilter("yem_customer", QCP.equals, customer.getPkValue());
|
||||
if (!customer.containsProperty("yem_customer")) {
|
||||
customer = BusinessDataServiceHelper.loadSingleFromCache(customer.getPkValue(), customer.getDynamicObjectType().getName());
|
||||
}
|
||||
QFilter qFilter = new QFilter("yem_customer.yem_customer", QCP.equals, customer.getString("yem_customer"));
|
||||
qFilter.and(new QFilter("yem_payment.id", QCP.equals, method.getPkValue()));
|
||||
// qFilter.and(new QFilter("org", QCP.equals, company.getPkValue()));
|
||||
qFilter.and(new QFilter("billstatus", QCP.equals, "C"));
|
||||
|
@ -0,0 +1,170 @@
|
||||
package com.yem.wm.es.exportpresent.task;
|
||||
|
||||
import com.yem.rf.utils.RFUtils;
|
||||
import com.yem.tws.common1.DateUtils;
|
||||
import com.yem.wm.es.shippingdetails.util.PaymentControlUtil;
|
||||
import com.yem.wm.utils.DynamicObjectUtil;
|
||||
import com.yem.wm.utils.YEM;
|
||||
import kd.bos.context.RequestContext;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.exception.KDException;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.schedule.executor.AbstractTask;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Description: 寄单放单申请收汇方式,增加销售员(根据携带当前行合同上的销售员)、应回款日期(提单日+收款天数),应回款日期不为空时,每10天给销售员发送一次消息提醒:合同:***,寄单放单单号:***,应回款日期为:***,请知悉!
|
||||
* @Date: 2024/12/19 10:24
|
||||
* @Created: by ZZSLL
|
||||
*/
|
||||
|
||||
public class ExportPresentWarningTask extends AbstractTask {
|
||||
@Override
|
||||
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
||||
|
||||
// boolean isSendMessage = isTenDaysAfter();
|
||||
|
||||
QFilter qFilter = RFUtils.getBaseQFilter();
|
||||
qFilter.and(new QFilter("yem_isladingbill", "=", "A"));
|
||||
String selectfields = DynamicObjectUtil.getSelectfields("yem_es_exportpresent");
|
||||
selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_exportpresent", "yem_es_exportpre_erw");
|
||||
DynamicObject[] load = BusinessDataServiceHelper.load("yem_es_exportpresent", selectfields, qFilter.toArray());
|
||||
// 订舱单号-提单日期
|
||||
Map<String, Date> ladingDateMap = new HashMap<>();
|
||||
// 合同号-是否合同回款完成
|
||||
Map<String, Boolean> isClaimFinishedMap = new HashMap<>();
|
||||
for (DynamicObject d : load) {
|
||||
DynamicObjectCollection c = d.getDynamicObjectCollection("yem_es_exportpre_erw");
|
||||
for (DynamicObject subD : c) {
|
||||
String shipmentnum = subD.getString("yem_shipmentnum_c");
|
||||
ladingDateMap.put(shipmentnum, null);
|
||||
String contractnum = subD.getString("yem_contractnum_c");
|
||||
|
||||
isClaimFinishedMap.put(contractnum, true);
|
||||
}
|
||||
}
|
||||
|
||||
Map<Object, DynamicObject> salesorders = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", "id, billno", new QFilter[]{new QFilter("billno", "in", isClaimFinishedMap.keySet())});
|
||||
Map<String, Long> salesorderNo = new HashMap<>();
|
||||
for (Map.Entry<Object, DynamicObject> salesorderEntry : salesorders.entrySet()) {
|
||||
Long orderId = (Long) salesorderEntry.getKey();
|
||||
DynamicObject order = salesorderEntry.getValue();
|
||||
salesorderNo.put(order.getString("billno"), orderId);
|
||||
}
|
||||
Map<Object, DynamicObject> stOrder = BusinessDataServiceHelper.loadFromCache("yem_es_storagetrans", "id, billno, yem_es_salescontrac_s.yem_rapamt, yem_es_salescontrac_s.yem_contractnumbers_p, yem_es_salescontrac_s.yem_ispre", new QFilter[]{new QFilter("yem_es_salescontrac_s.yem_contractnumbers_p", "in", salesorderNo.keySet())});
|
||||
// 合同号-收汇金额合计
|
||||
Map<String, BigDecimal> receiveAmt = new HashMap<>();
|
||||
for (DynamicObject stBill : stOrder.values()) {
|
||||
DynamicObjectCollection collection = stBill.getDynamicObjectCollection("yem_es_salescontrac_s");
|
||||
for (DynamicObject d : collection) {
|
||||
boolean ispre = d.getBoolean("yem_ispre");
|
||||
if (ispre) {
|
||||
BigDecimal rapamt = d.getBigDecimal("yem_rapamt");
|
||||
String contractnumbers = d.getString("yem_contractnumbers_p");
|
||||
BigDecimal calc;
|
||||
if (receiveAmt.containsKey(contractnumbers)) {
|
||||
calc = receiveAmt.get(contractnumbers).add(rapamt);
|
||||
} else {
|
||||
calc = rapamt;
|
||||
}
|
||||
receiveAmt.put(contractnumbers, calc);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Map.Entry<String, Long> salesorderEntry : salesorderNo.entrySet()) {
|
||||
String billno = salesorderEntry.getKey();
|
||||
DynamicObject salesorder = salesorders.get(salesorderEntry.getValue());
|
||||
if (salesorder == null) continue;
|
||||
BigDecimal climeAmt = PaymentControlUtil.getContractClimeAmt(salesorder, "F");
|
||||
if (receiveAmt.containsKey(billno)) {
|
||||
BigDecimal receive = receiveAmt.get(billno);
|
||||
if (receive.compareTo(climeAmt) < 0 && isClaimFinishedMap.containsKey(billno)) {
|
||||
isClaimFinishedMap.put(billno, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 查询提单日期
|
||||
Map<Object, DynamicObject> st = BusinessDataServiceHelper.loadFromCache("yem_es_storagetrans", "id, billno, yem_tddate", new QFilter[]{new QFilter("billno", "in", ladingDateMap.keySet())});
|
||||
for (DynamicObject value : st.values()) {
|
||||
String billno = value.getString("billno");
|
||||
Date tddate = value.getDate("yem_tddate");
|
||||
ladingDateMap.put(billno, tddate);
|
||||
}
|
||||
|
||||
Map<Long, List<String>> message = new HashMap<>();
|
||||
for (DynamicObject d : load) {
|
||||
DynamicObjectCollection c = d.getDynamicObjectCollection("yem_es_exportpre_erw");
|
||||
for (DynamicObject subD : c) {
|
||||
String stno = subD.getString("yem_shipmentnum_c");
|
||||
if (ladingDateMap.containsKey(stno)) {
|
||||
Date date = ladingDateMap.get(stno);
|
||||
if (YEM.isEmpty(date)) continue;
|
||||
// 计算应回款日期 = 天数 + 提单日期
|
||||
int forward = subD.getInt("yem_forward");
|
||||
Date added = DateUtils.addDays(date, forward);
|
||||
subD.set("yem_shdreceivedate", added);
|
||||
String contractnum = subD.getString("yem_contractnum_c");
|
||||
// if (isSendMessage) {
|
||||
// 以认领完成
|
||||
if (isClaimFinishedMap.containsKey(contractnum) && isClaimFinishedMap.get(contractnum)) {
|
||||
continue;
|
||||
}
|
||||
DynamicObject operator = subD.getDynamicObject("yem_operator_e");
|
||||
if (operator == null) continue;
|
||||
long sendUser = operator.getLong("id");
|
||||
List<String> list;
|
||||
if (message.containsKey(sendUser)) {
|
||||
list = message.get(sendUser);
|
||||
} else {
|
||||
list = new ArrayList<>();
|
||||
}
|
||||
list.add(String.format("合同:%s,寄单放单单号:%s,应回款日期为:%s,请知悉!\n\r", contractnum, d.getString("billno"), DateUtils.getData(added, "yyyy-MM-dd")));
|
||||
message.put(sendUser, list);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Set<String> phone = new HashSet<>();
|
||||
phone.add("15771670073");
|
||||
ArrayList<Long> devUserIds = Lists.newArrayList();
|
||||
// 发给开发测试
|
||||
DynamicObject[] users = BusinessDataServiceHelper.load("bos_user", "id, name, phone", new QFilter[]{new QFilter("phone", "in", phone)});
|
||||
for (DynamicObject user : users) {
|
||||
devUserIds.add(user.getLong("id"));
|
||||
}
|
||||
|
||||
for (Map.Entry<Long, List<String>> sendMsg : message.entrySet()) {
|
||||
Long userid = sendMsg.getKey();
|
||||
List<String> messageContent = sendMsg.getValue();
|
||||
ArrayList<Long> sendUserId = Lists.newArrayList();
|
||||
sendUserId.add(userid);//销售员
|
||||
sendUserId.addAll(devUserIds);
|
||||
|
||||
YEM.sendMessage(sendUserId, "预警消息", "回款预警", String.join("", messageContent), "预警消息");
|
||||
}
|
||||
|
||||
SaveServiceHelper.save(load);
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前日期是否是给定日期的十天后
|
||||
*
|
||||
* @return Boolean
|
||||
*/
|
||||
public static boolean isTenDaysAfter() {
|
||||
// 起始日期
|
||||
LocalDate startDate = LocalDate.of(2024, 12, 1);
|
||||
long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(startDate, LocalDate.now());
|
||||
// 是否是起始日期10天后或,10*n天后
|
||||
return daysBetween >= 0 && daysBetween % 10 == 0;
|
||||
}
|
||||
}
|
@ -1,15 +1,21 @@
|
||||
package com.yem.wm.es.exportpresent.validator;
|
||||
|
||||
import com.yem.wm.es.shippingdetails.util.PaymentControlUtil;
|
||||
import com.yem.wm.utils.DynamicObjectUtil;
|
||||
import com.yem.wm.utils.YEM;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.entity.ExtendedDataEntity;
|
||||
import kd.bos.entity.validate.AbstractValidator;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.yem.wm.es.contractamtlist.util.FunUtil.getPayBills;
|
||||
import static com.yem.wm.es.contractamtlist.util.FunUtil.getShipBills;
|
||||
@ -20,25 +26,112 @@ import static com.yem.wm.es.contractamtlist.util.FunUtil.getShipBills;
|
||||
* @Created by ZZSLL
|
||||
*/
|
||||
|
||||
public class ExportPresentSubmitValidator extends AbstractValidator
|
||||
{
|
||||
public class ExportPresentSubmitValidator extends AbstractValidator {
|
||||
@Override
|
||||
public void validate()
|
||||
{
|
||||
public void validate() {
|
||||
ExtendedDataEntity[] dataEntities = this.getDataEntities();
|
||||
for (ExtendedDataEntity data : dataEntities) {
|
||||
DynamicObject dataEntity = data.getDataEntity();
|
||||
// 款项类型
|
||||
String paymenttype = dataEntity.getString("yem_paymenttype");
|
||||
|
||||
// 是否见提单
|
||||
String isladingbill = dataEntity.getString("yem_isladingbill");
|
||||
// 收汇信息
|
||||
DynamicObjectCollection receiveC = dataEntity.getDynamicObjectCollection("yem_es_exportpre_erf");
|
||||
DynamicObjectCollection detailC = dataEntity.getDynamicObjectCollection("yem_es_exportpre_el");
|
||||
|
||||
Set<String> salesOrder = new HashSet<>();
|
||||
for (DynamicObject d : detailC) {
|
||||
salesOrder.add(d.getString("yem_contractnum"));
|
||||
}
|
||||
String selectfields = DynamicObjectUtil.getSelectfields("yem_es_salesorder");
|
||||
selectfields = DynamicObjectUtil.getEntrySelectfields(selectfields, "yem_es_salesorder", "yem_es_salescontrac_s");
|
||||
Map<Object, DynamicObject> orders = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", selectfields, new QFilter[]{new QFilter("billno", "in", salesOrder)});
|
||||
|
||||
if ("A".equals(paymenttype)) {
|
||||
arrearsVerification(dataEntity, data);
|
||||
|
||||
if ("A".equals(isladingbill)) {
|
||||
prePayAmtValidator(data, orders, detailC, receiveC);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void arrearsVerification(DynamicObject dataEntity, ExtendedDataEntity data)
|
||||
{
|
||||
DynamicObjectCollection collection = dataEntity.getDynamicObjectCollection("yem_es_exportpre_erf");
|
||||
/**
|
||||
* 0、见提单并且100%L/C,100%OA、100%DP、100%DA并且没有预收款:判断预收款项是否认领完成
|
||||
* 0、见提单并且100%L/C,100%OA、100%DP、100%DA并且有预收款:只判断预收款项是否认领完成
|
||||
* 通过或不进行1234校验
|
||||
* 1、见提单并且正常款项:判断合同是否认领完成
|
||||
* 2、见提单并且特殊款项:判断合同是否认领完成
|
||||
* 1或2通过不进行后续校验
|
||||
* 3、未件提单并且正常款项:判断合同是否认领完成
|
||||
* 4、未件提单并且特殊款项:判断合同是否认领完成
|
||||
* 3或4通过不进行后续校验
|
||||
*
|
||||
*/
|
||||
private void prePayAmtValidator(ExtendedDataEntity data, Map<Object, DynamicObject> orders, DynamicObjectCollection detailC, DynamicObjectCollection receiveC) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Map.Entry<Object, DynamicObject> entry : orders.entrySet()) {
|
||||
DynamicObject order = entry.getValue();
|
||||
BigDecimal shipPreRapRate = PaymentControlUtil.getShipPreRapRate(order);
|
||||
BigDecimal procPreRapRate = PaymentControlUtil.getProcPreRapRate(order);
|
||||
// 该合同是否包含预付
|
||||
boolean isPre = shipPreRapRate.add(procPreRapRate).compareTo(BigDecimal.ZERO) > 0;
|
||||
DynamicObjectCollection collection = order.getDynamicObjectCollection("yem_es_salescontrac_s");
|
||||
boolean isSpecialRapStyle = false;
|
||||
for (DynamicObject d : collection) {
|
||||
DynamicObject rapstyle = d.getDynamicObject("yem_rapstyle_c");
|
||||
if (YEM.isNotEmpty(rapstyle) && "D/A JSFS08 L/C OA D/A".contains(rapstyle.getString("number"))) {
|
||||
isSpecialRapStyle = true;
|
||||
}
|
||||
}
|
||||
|
||||
// 合同金额
|
||||
BigDecimal offeramount = order.getBigDecimal("yem_offeramount");
|
||||
String billno = order.getString("billno");
|
||||
// 合同已认领金额
|
||||
BigDecimal climeAmt = PaymentControlUtil.getContractClimeAmt(order, "");
|
||||
// 只判断预付款是否认领完成
|
||||
if (isSpecialRapStyle && isPre) {
|
||||
BigDecimal climeAmtShip = PaymentControlUtil.getContractClimeAmt(order, "D");
|
||||
BigDecimal climeAmtProc = PaymentControlUtil.getContractClimeAmt(order, "E");
|
||||
|
||||
BigDecimal climePreAmt = climeAmtShip.add(climeAmtProc);
|
||||
|
||||
BigDecimal shipAmt = PaymentControlUtil.getAdvancePayment(shipPreRapRate, offeramount);
|
||||
BigDecimal procAmt = PaymentControlUtil.getAdvancePayment(procPreRapRate, offeramount);
|
||||
|
||||
BigDecimal orderPreAmt = shipAmt.add(procAmt);
|
||||
|
||||
if (climePreAmt.compareTo(orderPreAmt) < 0) {
|
||||
sb.append(String.format("合同 [ %s ] ,合同预收金额 [ %s ], 合同预收已认领金额合计 [ %s ],合同预收款未认领完成,请核对后提交!(L/C、OA、DP、DA)",
|
||||
billno,
|
||||
orderPreAmt.setScale(4, RoundingMode.HALF_UP).toPlainString(),
|
||||
climePreAmt.setScale(4, RoundingMode.HALF_UP).toPlainString())).append("\r\n");
|
||||
}
|
||||
} else {
|
||||
if (climeAmt.compareTo(offeramount) < 0) {
|
||||
boolean passed = arrearsVerification(data.getDataEntity(), data, receiveC);
|
||||
if (!passed) {
|
||||
sb.append(String.format("合同 [ %s ] ,合同金额 [ %s ], 合同已认领金额合计 [ %s ],合同未认领完成,请核对后提交!",
|
||||
billno,
|
||||
offeramount.setScale(4, RoundingMode.HALF_UP).toPlainString(),
|
||||
climeAmt.setScale(4, RoundingMode.HALF_UP).toPlainString())).append("\r\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sb.length() > 0) {
|
||||
this.addErrorMessage(data, String.valueOf(sb));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 走储备申请或者走欠条申请,但是款项未认领完成,不允许提交寄单放单
|
||||
*/
|
||||
private boolean arrearsVerification(DynamicObject dataEntity, ExtendedDataEntity data, DynamicObjectCollection collection) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (DynamicObject dynamicObject : collection) {
|
||||
DynamicObject saleOrder = dynamicObject.getDynamicObject("yem_saleorder");
|
||||
@ -62,5 +155,7 @@ public class ExportPresentSubmitValidator extends AbstractValidator
|
||||
if (sb.length() > 0) {
|
||||
this.addErrorMessage(data, String.valueOf(sb));
|
||||
}
|
||||
|
||||
return sb.length() == 0;
|
||||
}
|
||||
}
|
||||
|
@ -99,6 +99,26 @@ public class StorgeTransToExportPresentConvert extends AbstractConvertPlugIn
|
||||
addNew.set("yem_debtamt", thisRealityAmt.setScale(2, RoundingMode.HALF_UP));//欠款金额
|
||||
}
|
||||
}
|
||||
|
||||
// 收汇方式
|
||||
DynamicObjectCollection exportpreErw = dataEntity.getDynamicObjectCollection("yem_es_exportpre_erw");
|
||||
Set<String> salesorder = new HashSet<>();
|
||||
for (DynamicObject d : exportpreErw) {
|
||||
String contractnum = d.getString("yem_contractnum_c");
|
||||
salesorder.add(contractnum);
|
||||
}
|
||||
|
||||
Map<Object, DynamicObject> map = BusinessDataServiceHelper.loadFromCache("yem_es_salesorder", "id, billno, yem_operator", new QFilter[]{new QFilter("billno", "in", salesorder)});
|
||||
for (Map.Entry<Object, DynamicObject> entry : map.entrySet()) {
|
||||
DynamicObject order = entry.getValue();
|
||||
String billno = order.getString("billno");
|
||||
for (DynamicObject d : exportpreErw) {
|
||||
if (billno.equals(d.getString("yem_contractnum_c"))) {
|
||||
DynamicObject operator = order.getDynamicObject("yem_operator");
|
||||
d.set("yem_operator_e", operator);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,13 @@
|
||||
package com.yem.wm.es.storagetrans.dynamic;
|
||||
|
||||
import com.yem.rf.utils.RFUtils;
|
||||
import com.yem.wm.es.Util.CreditBackFillUtils;
|
||||
import com.yem.wm.es.Util.TotalUtil;
|
||||
import com.yem.wm.es.shippingdetails.util.PaymentControlUtil;
|
||||
import com.yem.wm.utils.CalendarUtils;
|
||||
import com.yem.wm.utils.RptUtil;
|
||||
import com.yem.wm.utils.YEM;
|
||||
import kd.bos.algo.DataSet;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.entity.datamodel.IDataModel;
|
||||
@ -13,17 +17,17 @@ import kd.bos.form.IFormView;
|
||||
import kd.bos.form.control.Control;
|
||||
import kd.bos.form.events.AfterDoOperationEventArgs;
|
||||
import kd.bos.form.plugin.AbstractFormPlugin;
|
||||
import kd.bos.orm.ORM;
|
||||
import kd.bos.orm.query.QCP;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import kd.tmc.cfm.formplugin.bd.PayMentbyInstalments;
|
||||
import org.apache.commons.compress.utils.Lists;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Date;
|
||||
import java.util.EventObject;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author xwudd
|
||||
@ -45,6 +49,7 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
|
||||
model.setValue("yem_storagetransno", parentModel.getValue("billno"));//储运托单号
|
||||
model.setValue("yem_currency", parentModel.getValue("yem_creditcurr"));//信保币别
|
||||
model.setValue("yem_settlementcurr", parentModel.getValue("yem_currency"));//结算币别
|
||||
model.setValue("yem_currencybase", parentModel.getValue("yem_currencybase"));//本位币
|
||||
model.setValue("yem_actulpreamount", parentModel.getValue("yem_actualsinkamount"));//实际收汇金额汇总
|
||||
model.setValue("yem_actulpreamountbase", parentModel.getValue("yem_actualsinkamountba"));//实际收汇本位币金额汇总
|
||||
@ -115,6 +120,10 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
String key = control.getKey();
|
||||
if ("btnok".equals(key)) {
|
||||
|
||||
if (!beforeOkOperationValidator()) {
|
||||
return;
|
||||
}
|
||||
|
||||
IFormView view = this.getView();
|
||||
IDataModel model = this.getModel();
|
||||
DynamicObject dataEntity = model.getDataEntity(true);
|
||||
@ -151,14 +160,15 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
parentModel.setValue("yem_creditremark", subMap.get("creditRemark"), i);//信保备注
|
||||
|
||||
parentModel.setValue("yem_creditquotation", subMap.get("yem_creditquotation"), i);
|
||||
parentModel.setValue("yem_sinosurerate_cd", subMap.get("yem_sinosurerate_cd"));
|
||||
parentModel.setValue("yem_term_cd", subMap.get("yem_term_cd"));
|
||||
parentModel.setValue("yem_sinosurerate_cd", subMap.get("yem_sinosurerate_cd"), i);
|
||||
parentModel.setValue("yem_term_cd", subMap.get("yem_term_cd"), i);
|
||||
|
||||
// parentModel.setValue("yem_year_e", subMap.get("year"));
|
||||
dynamicObject.set("yem_year_e", subMap.get("year"));
|
||||
parentModel.setValue("yem_creditstatus_e", subMap.get("creditstatus"));
|
||||
parentModel.setValue("yem_creditstatus_e", subMap.get("creditstatus"), i);
|
||||
|
||||
parentModel.setValue("yem_insuranceamt_cd", subMap.get("yem_premium"));//保险费
|
||||
parentModel.setValue("yem_insuranceamt_cd", subMap.get("yem_premium"), i);//保险费
|
||||
parentModel.setValue("yem_contractpayamt", subMap.get("yem_contractpayamt"), i);//合同回款金额
|
||||
}
|
||||
}
|
||||
subEntryBackFill();
|
||||
@ -172,6 +182,107 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* ②信保回填弹窗界面:业务手动维护当前收款币别对应的合同回款币别金额,点击确认时,【合同回款金额】必填;
|
||||
* <br/>
|
||||
* ③信保回填弹窗界面,确认时:判断当前合同下的【合同回款金额】汇总值 是否超出收款单认领到该合同尾款的【收款认领金额】汇总值,如果超出,不允许通过,并提示:合同号:***,合同回款总金额:***元,尾款(账期)认领总金额:***元,已超额,请认领完成后在操作信保回款。否则可以通过
|
||||
* <br/>
|
||||
*
|
||||
* @link <a href="https://docs.qq.com/sheet/DTEluRXJXbW5lY0xD?tab=000001">文档</>
|
||||
*
|
||||
* @return Boolean
|
||||
*/
|
||||
private boolean beforeOkOperationValidator() {
|
||||
IDataModel model = this.getModel();
|
||||
IFormView view = this.getView();
|
||||
IFormView parentView = view.getParentView();
|
||||
IDataModel parentModel = parentView.getModel();
|
||||
DynamicObject dataEntity = model.getDataEntity(true);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
DynamicObjectCollection collection = dataEntity.getDynamicObjectCollection("yem_creditentry");
|
||||
// 当前订舱合同回款金额
|
||||
Map<String, BigDecimal> contractPayAmtMap = new HashMap<>();
|
||||
for (DynamicObject d : collection) {
|
||||
int idx = collection.indexOf(d);
|
||||
BigDecimal contractpayamt = d.getBigDecimal("yem_contractpayamt");
|
||||
String salecontractno = d.getString("yem_salecontractno");
|
||||
if (contractPayAmtMap.containsKey(salecontractno)) {
|
||||
BigDecimal decimal = contractPayAmtMap.get(salecontractno);
|
||||
decimal = decimal.add(contractpayamt);
|
||||
contractPayAmtMap.put(salecontractno, decimal);
|
||||
} else {
|
||||
contractPayAmtMap.put(salecontractno, contractpayamt);
|
||||
}
|
||||
if (contractpayamt.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
sb.append(String.format("请填写明细信息第 %s 行,合同回款金额!!", idx + 1)).append("\n\r");
|
||||
}
|
||||
}
|
||||
if (sb.length() > 0) {
|
||||
view.showErrorNotification(sb.toString());
|
||||
return false;
|
||||
}
|
||||
|
||||
QFilter qFilter = RFUtils.getBaseQFilter();
|
||||
|
||||
// 当前单涉及需要校验的合同
|
||||
Set<String> salesorder = new HashSet<>();
|
||||
for (DynamicObject d : collection) {
|
||||
salesorder.add(d.getString("yem_salecontractno"));
|
||||
}
|
||||
qFilter.and("yem_creditdetail.yem_salecontractno.billno", "in", salesorder);
|
||||
qFilter.and("billno", "not in", parentModel.getValue("billno"));
|
||||
ArrayList<String> selectfileds = Lists.newArrayList();
|
||||
selectfileds.add("yem_creditdetail.yem_salecontractno.billno yem_salecontractno");//外销合同号
|
||||
selectfileds.add("yem_creditdetail.yem_contractpayamt yem_contractpayamt");//合同回款金额
|
||||
DataSet st = ORM.create().queryDataSet("com.yem.wm.es.storagetrans.dynamic.CreditBackFillEdit.beforeOkOperationValidator", "yem_es_storagetrans", String.join(",", selectfileds), qFilter.toArray());
|
||||
st = st.groupBy(new String[]{"yem_salecontractno"}).sum("yem_contractpayamt").finish();
|
||||
DynamicObjectCollection dataSetCollection = ORM.create().toPlainDynamicObjectCollection(st);
|
||||
|
||||
// 历史(除去本单)订舱合同回款金额 + 当前订舱合同回款金额
|
||||
|
||||
for (DynamicObject setObj : dataSetCollection) {
|
||||
String salecontractno = setObj.getString("yem_salecontractno");
|
||||
BigDecimal contractpayamt = setObj.getBigDecimal("yem_contractpayamt");
|
||||
if (contractPayAmtMap.containsKey(salecontractno)) {
|
||||
BigDecimal decimal = contractPayAmtMap.get(salecontractno);
|
||||
decimal = decimal.add(contractpayamt);
|
||||
contractPayAmtMap.put(salecontractno, decimal);
|
||||
} else {
|
||||
contractPayAmtMap.put(salecontractno, contractpayamt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
StringBuilder amtSb = new StringBuilder();
|
||||
|
||||
DynamicObject[] load = BusinessDataServiceHelper.load("yem_es_salesorder", "id, billno", new QFilter[]{new QFilter("billno", "in", salesorder)});
|
||||
for (DynamicObject object : load) {
|
||||
for (Map.Entry<String, BigDecimal> map : contractPayAmtMap.entrySet()) {
|
||||
BigDecimal amt = map.getValue();
|
||||
String billno = map.getKey();
|
||||
if (object.getString("billno").equals(billno)) {
|
||||
BigDecimal contractClimeAmt = PaymentControlUtil.getContractClimeAmt(object, "F");
|
||||
if (amt.compareTo(contractClimeAmt) > 0) {
|
||||
amtSb.append(String.format("合同号:%s,合同回款总金额:%s元,尾款(账期)认领总金额:%s元,已超额,请认领完成后在操作信保回款。"
|
||||
, billno
|
||||
, amt.setScale(4, RoundingMode.HALF_UP).toPlainString()
|
||||
, contractClimeAmt.setScale(4, RoundingMode.HALF_UP).toPlainString()
|
||||
)).append("\n\r");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (amtSb.length() > 0) {
|
||||
view.showErrorNotification(amtSb.toString());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 缓存分录数据
|
||||
*
|
||||
@ -237,6 +348,8 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
|
||||
map.put("yem_premium", model.getValue("yem_premium", i));//保险费
|
||||
|
||||
map.put("yem_contractpayamt", model.getValue("yem_contractpayamt", i));//合同回款金额
|
||||
|
||||
Long pkValue = dynamicObject.getLong("yem_parententryid");
|
||||
collectionMap.put(pkValue, map);
|
||||
}
|
||||
@ -308,6 +421,7 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
dynamicObject.set("yem_creditstatus_e", map.get("creditstatus"));
|
||||
|
||||
dynamicObject.set("yem_premium", map.get("yem_premium"));
|
||||
dynamicObject.set("yem_contractpayamt", map.get("yem_contractpayamt"));
|
||||
}
|
||||
}
|
||||
SaveServiceHelper.save(new DynamicObject[]{csrCreditLine});
|
||||
@ -366,6 +480,7 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
addNew.set("yem_crenote", crecollection.getString("yem_crenote"));//收款备注
|
||||
addNew.set("yem_crecollecurrency", crecollection.getDynamicObject("yem_crecollecurrency"));//收款币别
|
||||
addNew.set("yem_crecollecamt", crecollection.getBigDecimal("yem_crecollecamt"));//收款金额
|
||||
addNew.set("yem_contractpayamt_e", crecollection.getBigDecimal("yem_contractpayamt_e"));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -418,6 +533,7 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
parentAddNer.set("yem_crenote", crecollection.getString("yem_crenote"));//收款备注
|
||||
parentAddNer.set("yem_crecollecurrency", crecollection.getDynamicObject("yem_crecollecurrency"));//收款币别
|
||||
parentAddNer.set("yem_crecollecamt", crecollection.getBigDecimal("yem_crecollecamt"));//收款金额
|
||||
parentAddNer.set("yem_contractpayamt_e", crecollection.getBoolean("yem_contractpayamt_e"));//合同回款金额
|
||||
}
|
||||
}
|
||||
BigDecimal creactualamt = BigDecimal.ZERO;// 实际收汇金额
|
||||
@ -501,6 +617,21 @@ public class CreditBackFillEdit extends AbstractFormPlugin {
|
||||
this.getModel().setValue("yem_creactuallocamt", creactualamt.multiply(crerate), row);
|
||||
// this.getView().updateView();
|
||||
}
|
||||
|
||||
// 汇总子分录合同回款金额到分录
|
||||
if ("yem_contractpayamt_e".equals(key)) {
|
||||
DynamicObjectCollection collection = dataEntity.getDynamicObjectCollection("yem_creditentry");
|
||||
for (DynamicObject entry : collection) {
|
||||
int idx = collection.indexOf(entry);
|
||||
DynamicObjectCollection subEntry = entry.getDynamicObjectCollection("yem_crecollection");
|
||||
BigDecimal calc = BigDecimal.ZERO;
|
||||
for (DynamicObject subObj : subEntry) {
|
||||
BigDecimal contractpayamt_e = subObj.getBigDecimal("yem_contractpayamt_e");
|
||||
calc = calc.add(contractpayamt_e);
|
||||
}
|
||||
model.setValue("yem_contractpayamt", calc, idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void carryCreditInsuranceRate(int rowIndex) {
|
||||
|
@ -30,7 +30,12 @@ public class CsrCreditSubmitLineValidator extends AbstractValidator {
|
||||
String swiftcode = dataEntity.getString("yem_swiftcode");
|
||||
Date yearBegin = getYearBegin(bizDate);
|
||||
Date yearLast = getYearLast(bizDate);
|
||||
QFilter qFilter = new QFilter("yem_customer", QCP.equals, customer.getPkValue());
|
||||
|
||||
if (!customer.containsProperty("yem_customer")) {
|
||||
customer = BusinessDataServiceHelper.loadSingleFromCache(customer.getPkValue(), customer.getDynamicObjectType().getName());
|
||||
}
|
||||
QFilter qFilter = new QFilter("yem_customer.yem_customer", QCP.equals, customer.getString("yem_customer"));
|
||||
// QFilter qFilter = new QFilter("yem_customer", QCP.equals, customer.getPkValue());
|
||||
// qFilter.and(new QFilter("org", QCP.equals, org.getPkValue()));
|
||||
qFilter.and(new QFilter("yem_bizdate", QCP.large_than, yearBegin));
|
||||
qFilter.and(new QFilter("yem_bizdate", QCP.less_equals, yearLast));
|
||||
|
@ -77,6 +77,9 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin {
|
||||
model.setValue("yem_parameter", mechanical.getString("yem_parameter"), createRow);
|
||||
model.setValue("yem_remarke", mechanical.getString("yem_remarke"), createRow);
|
||||
model.setValue("yem_entryid", id, createRow);
|
||||
if (mechanical.containsProperty("yem_model_config_c")) {
|
||||
model.setValue("yem_model_config_c", mechanical.getDynamicObject("yem_model_config_c"), createRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -114,6 +117,8 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin {
|
||||
model.setValue("yem_specification", optional.getString("yem_specification_o"), entryRow);
|
||||
model.setValue("yem_remarke", optional.getString("yem_remarke"), entryRow);
|
||||
model.setValue("yem_entryid", optional.getPkValue(), entryRow);
|
||||
model.setValue("yem_model_config_c", optional.getDynamicObject("yem_model_config_c"), entryRow);
|
||||
model.setValue("yem_ruconfigure_c",optional.getString("yem_ruconfigure_c"),entryRow);
|
||||
}
|
||||
}
|
||||
|
||||
@ -172,6 +177,7 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin {
|
||||
parentModel.setValue("yem_configurtype", "A", optionalRow);
|
||||
parentModel.setValue("yem_configurname", model.getValue("yem_profilenamea", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_configurtypeen", model.getValue("yem_configure", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_configurtyperu", model.getValue("yem_ruconfigure_c", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_specification_o", model.getValue("yem_specification", selectRow), optionalRow);
|
||||
// parentModel.setValue("yem_marketprice", marketPrice, optionalRow);
|
||||
// parentModel.setValue("yem_marketraiseprice", marketRaisePrice, optionalRow);
|
||||
@ -179,6 +185,13 @@ public class OptionalFormPlugIn extends AbstractFormPlugin implements Plugin {
|
||||
parentModel.setValue("yem_arguments", model.getValue("yem_parameter", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_remarkss", model.getValue("yem_remarke", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow);
|
||||
DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_c", optionalRow);
|
||||
if (YEM.isNotEmpty(modelConfigR)) {
|
||||
parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow);
|
||||
parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow);
|
||||
parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import com.yem.wm.utils.FunctionalCommon;
|
||||
import com.yem.wm.utils.YEM;
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.entity.MainEntityType;
|
||||
import kd.bos.entity.datamodel.IDataModel;
|
||||
import kd.bos.form.FormShowParameter;
|
||||
import kd.bos.form.IFormView;
|
||||
@ -107,6 +108,10 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin {
|
||||
// model.setValue("yem_marketraiseprice", replaceable.getBigDecimal("yem_salesmarkup_re"), entryRow);
|
||||
model.setValue("yem_remarke", replaceable.getString("yem_remarkr"), entryRow);
|
||||
model.setValue("yem_entryid", replaceable.getPkValue(), entryRow);
|
||||
model.setValue("yem_ruconfigure_c",replaceable.getString("yem_ruconfigure_r"),entryRow);
|
||||
|
||||
model.setValue("yem_model_config_r", replaceable.getDynamicObject("yem_model_config_r"), entryRow);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -164,12 +169,20 @@ public class ReplaceFormPlugIn extends AbstractFormPlugin implements Plugin {
|
||||
parentModel.setValue("yem_configurtype", "B", optionalRow);
|
||||
parentModel.setValue("yem_configurname", model.getValue("yem_profilenamea", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_configurtypeen", model.getValue("yem_configure", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_configurtyperu",model.getValue("yem_ruconfigure_c",selectRow),optionalRow);
|
||||
parentModel.setValue("yem_specification_o", model.getValue("yem_specification", selectRow), optionalRow);
|
||||
// parentModel.setValue("yem_marketprice", marketPrice, optionalRow);
|
||||
// parentModel.setValue("yem_marketraiseprice", marketRaisePrice, optionalRow);
|
||||
parentModel.setValue("yem_unitsetnumber", model.getValue("yem_unitsetnumber", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_remarkss", model.getValue("yem_remarke", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_configentryid", model.getValue("yem_entryid", selectRow), optionalRow);
|
||||
DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_r", optionalRow);
|
||||
DynamicObject parentDataEntity = parentModel.getDataEntity(true);
|
||||
if (YEM.isNotEmpty(modelConfigR)) {
|
||||
parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow);
|
||||
parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow);
|
||||
parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -105,6 +105,8 @@ public class RetrofittingFormPlugIn extends AbstractFormPlugin implements Plugin
|
||||
model.setValue("yem_specification",optional.getString("yem_specification_a"),entryRow);
|
||||
model.setValue("yem_remarke",optional.getString("yem_remarka"),entryRow);
|
||||
model.setValue("yem_entryid",optional.getPkValue(),entryRow);
|
||||
model.setValue("yem_ruconfigure_c", optional.getString("yem_ruconfigure_a"), entryRow);
|
||||
model.setValue("yem_model_config_r", optional.getDynamicObject("yem_model_config_a"), entryRow);
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,12 +163,19 @@ public class RetrofittingFormPlugIn extends AbstractFormPlugin implements Plugin
|
||||
parentModel.setValue("yem_configurtype","C",optionalRow);
|
||||
parentModel.setValue("yem_configurname",model.getValue("yem_profilenamea",selectRow),optionalRow);
|
||||
parentModel.setValue("yem_configurtypeen",model.getValue("yem_configure",selectRow),optionalRow);
|
||||
parentModel.setValue("yem_configurtyperu",model.getValue("yem_ruconfigure_c",selectRow),optionalRow);
|
||||
parentModel.setValue("yem_specification_o",model.getValue("yem_specification",selectRow),optionalRow);
|
||||
// parentModel.setValue("yem_marketprice",marketPrice,optionalRow);
|
||||
// parentModel.setValue("yem_marketraiseprice",marketRaisePrice,optionalRow);
|
||||
parentModel.setValue("yem_unitsetnumber", model.getValue("yem_unitsetnumber", selectRow), optionalRow);
|
||||
parentModel.setValue("yem_remarkss",model.getValue("yem_remarke",selectRow),optionalRow);
|
||||
parentModel.setValue("yem_configentryid",model.getValue("yem_entryid",selectRow),optionalRow);
|
||||
DynamicObject modelConfigR = (DynamicObject) model.getValue("yem_model_config_r", optionalRow);
|
||||
if (YEM.isNotEmpty(modelConfigR)) {
|
||||
parentModel.setValue("yem_cname_config", modelConfigR.getString("yem_standard_cname"), optionalRow);
|
||||
parentModel.setValue("yem_ename_config", modelConfigR.getString("yem_standard_ename"), optionalRow);
|
||||
parentModel.setValue("yem_runame_config", modelConfigR.getString("yem_standard_runame"), optionalRow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user