1.出口发票保存生成备注及合同号
This commit is contained in:
ljw 2024-11-28 18:36:16 +08:00
parent 894e3882f3
commit cb45727a2e

View File

@ -4,7 +4,6 @@ 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.datamodel.IDataModel;
import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
import kd.bos.entity.plugin.PreparePropertysEventArgs;
import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
@ -16,7 +15,11 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.operation.SaveServiceHelper;
import java.math.BigDecimal;
import java.util.*;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author xwudd
@ -33,8 +36,8 @@ public class ExportInvoiceSaveOP extends AbstractOperationServicePlugIn {
@Override
public void beginOperationTransaction(BeginOperationTransactionArgs e) {
DynamicObject[] dataEntities = e.getDataEntities();
for(DynamicObject dt:dataEntities){
// setOutForm(dt);
for (DynamicObject dt : dataEntities) {
// setOutForm(dt);
}
}
@ -42,50 +45,113 @@ public class ExportInvoiceSaveOP extends AbstractOperationServicePlugIn {
public void endOperationTransaction(EndOperationTransactionArgs e) {
super.endOperationTransaction(e);
DynamicObject[] dataEntities = e.getDataEntities();
for(DynamicObject dataEntitie : dataEntities){
Map<Long,BigDecimal> map = new HashMap<>();
Map<Long,Integer> seqs = new HashMap<>();
for (DynamicObject dataEntitie : dataEntities) {
DynamicObjectCollection yemEsMaterialinfo = dataEntitie.getDynamicObjectCollection("yem_es_materialinfo");
if (yemEsMaterialinfo.size() > 0) {
Map<String, String> map = new HashMap<>();
for (int i = 0; i < yemEsMaterialinfo.size(); i++) {
DynamicObject dynamicObject = yemEsMaterialinfo.get(i);
String yemContractnumbersM = dynamicObject.getString("yem_contractnumbers_m");
map.put(yemContractnumbersM, yemContractnumbersM);
}
String queryString = map.values().stream().collect(Collectors.joining("&"));
dataEntitie.set("yem_contractnumber", queryString);
StringBuilder yemShipports = new StringBuilder();
String yemTradeway = "";
String yemSettlement = "";
BigDecimal totalAmount = BigDecimal.ZERO;
StringBuilder yemDestports = new StringBuilder();
String yemseatransfeecurr = "";
String yeminsurefeecurr = "";
DynamicObject yem_Tradeway = dataEntitie.getDynamicObject("yem_tradeway");//成交方式
if (yem_Tradeway != null) {
yemTradeway = "成交方式:" + dataEntitie.getString("yem_tradeway.name");//成交方式
}
DynamicObject yem_Settlement = dataEntitie.getDynamicObject("yem_currency");//币别
if (yem_Settlement != null) {
yemSettlement = dataEntitie.getString("yem_currency.billno");//币别
}
DynamicObjectCollection yemExportinvoiceC = dataEntitie.getDynamicObjectCollection("yem_exportinvoice_c");
if (yemExportinvoiceC.size() > 0) {
totalAmount = yemExportinvoiceC.stream().map(dynamicObject -> dynamicObject.getBigDecimal("yem_cusamount"))
.reduce(BigDecimal.ZERO, BigDecimal::add);//成交总额
}
DynamicObject yem_seatransfeecurr = dataEntitie.getDynamicObject("yem_seatransfeecurr");//海运币别
if (yem_seatransfeecurr != null) {
yemseatransfeecurr = yem_seatransfeecurr.getString("billno");
}
DynamicObject yem_insurefeecurr = dataEntitie.getDynamicObject("yem_insurefeecurr");//运保币别
if (yem_insurefeecurr != null) {
yeminsurefeecurr = yem_insurefeecurr.getString("billno");
}
BigDecimal yemExrate = dataEntitie.getBigDecimal("yem_exrate");//汇率
BigDecimal yemSeatransfee = dataEntitie.getBigDecimal("yem_seatransfee");//海运费
BigDecimal yemInsurefee = dataEntitie.getBigDecimal("yem_insurefee");//保险费
String yemLadbillnum = dataEntitie.getString("yem_ladbillnum");//提单号
// queryString//合同号
DynamicObjectCollection yem_shipports = dataEntitie.getDynamicObjectCollection("yem_shipports");//起运港
if (yem_shipports != null) {
for (DynamicObject yemShipport : yem_shipports) {
String ssa = yemShipport.getDynamicObject("fbasedataid").getString("name");//起运港
yemShipports.append(ssa);
}
}
DynamicObjectCollection yem_Destports = dataEntitie.getDynamicObjectCollection("yem_destports");//目的港
if (yem_Destports != null) {
for (DynamicObject yemShipport : yem_Destports) {
String string = yemShipport.getDynamicObject("fbasedataid").getString("name");
yemDestports.append(string);//目的港
}
}
dataEntitie.set("yem_remark", ":" + yemTradeway + " 成交总额:" + yemSettlement + totalAmount + " 汇率:" + yemExrate + " 海运费:"
+ yemseatransfeecurr + yemSeatransfee + " 保险费:" + yeminsurefeecurr + yemInsurefee + " 提单号:" + yemLadbillnum + " 合同号:"
+ queryString + " 起运港:" + yemShipports + " 目的港:" + yemDestports);
dataEntitie.getInt("yem_currency");//币别
}
Map<Long, BigDecimal> map = new HashMap<>();
Map<Long, Integer> seqs = new HashMap<>();
Set<Long> ids = new HashSet<>();
DynamicObjectCollection exportInvoice_cs = dataEntitie.getDynamicObjectCollection("yem_exportinvoice_c");
for(DynamicObject exportInvoice_c : exportInvoice_cs){
for (DynamicObject exportInvoice_c : exportInvoice_cs) {
long sourceBillId = exportInvoice_c.getLong("yem_sourcebillid_ec");
long sourceBillEntryId = exportInvoice_c.getLong("yem_sourcebillentryid");
BigDecimal sourceCusQty = exportInvoice_c.getBigDecimal("yem_cusqty");
ids.add(sourceBillId);
if(map.containsKey(sourceBillEntryId)){
map.put(sourceBillEntryId,map.get(sourceBillEntryId).add(sourceCusQty));
}else{
map.put(sourceBillEntryId,sourceCusQty);
if (map.containsKey(sourceBillEntryId)) {
map.put(sourceBillEntryId, map.get(sourceBillEntryId).add(sourceCusQty));
} else {
map.put(sourceBillEntryId, sourceCusQty);
}
seqs.put(sourceBillEntryId,exportInvoice_c.getInt("seq"));
seqs.put(sourceBillEntryId, exportInvoice_c.getInt("seq"));
}
map = getQtyMap(dataEntitie, map);
StringBuffer sb = new StringBuffer();
DynamicObject[] declareDocxs = BusinessDataServiceHelper.load("yem_es_declaredocx", "id,billno,yem_es_declare_ec.yem_cusqty,yem_es_declare_ec.yem_billingnoticeqty",
new QFilter[]{new QFilter("id", QCP.in, ids)});
Set<Long> entryIds = map.keySet();
for(Long entryId : entryIds){
for (Long entryId : entryIds) {
BigDecimal sourceCusQty = map.get(entryId);
for(DynamicObject declareDocx : declareDocxs){//源单出口报关单
for (DynamicObject declareDocx : declareDocxs) {//源单出口报关单
DynamicObjectCollection declare_ecs = declareDocx.getDynamicObjectCollection("yem_es_declare_ec");//源单报关商品分录
for(int j = 0; j < declare_ecs.size(); j++){
for (int j = 0; j < declare_ecs.size(); j++) {
DynamicObject declare_ec = declare_ecs.get(j);
long declare_ecId = declare_ec.getLong("id");
if(entryId == declare_ecId){
if (entryId == declare_ecId) {
BigDecimal cusQty = declare_ec.getBigDecimal("yem_cusqty");
if(sourceCusQty.compareTo(cusQty) <= 0){
declare_ec.set("yem_billingnoticeqty",sourceCusQty);
}else{
if (sourceCusQty.compareTo(cusQty) <= 0) {
declare_ec.set("yem_billingnoticeqty", sourceCusQty);
} else {
sb.append(String.format("[出口发票单(%s报关商品第%s行]反写[出口报关单(%s报关商品第%s行已开票数量大于数量不允许超额]\n",
dataEntitie.getString("billno"),seqs.get(entryId),declareDocx.getString("billno"),j + 1));
dataEntitie.getString("billno"), seqs.get(entryId), declareDocx.getString("billno"), j + 1));
}
}
}
}
}
if(sb.length() > 0){
if (sb.length() > 0) {
throw new KDBizException(sb.toString());
}else{
} else {
SaveServiceHelper.save(declareDocxs);
}
}
@ -93,7 +159,7 @@ public class ExportInvoiceSaveOP extends AbstractOperationServicePlugIn {
}
public Map<Long,BigDecimal> getQtyMap(DynamicObject dataEntitie,Map<Long,BigDecimal> map){
public Map<Long, BigDecimal> getQtyMap(DynamicObject dataEntitie, Map<Long, BigDecimal> map) {
long id = dataEntitie.getLong("id");
Set<Long> entryIds = map.keySet();
String name = dataEntitie.getDynamicObjectType().getName();
@ -102,15 +168,15 @@ public class ExportInvoiceSaveOP extends AbstractOperationServicePlugIn {
DynamicObject[] exportInvoices = BusinessDataServiceHelper.load(name, selectFields,
new QFilter[]{new QFilter("yem_exportinvoice_c.yem_sourcebillentryid", QCP.in, entryIds),
new QFilter("id", QCP.not_equals, id)});
for(DynamicObject exportInvoice : exportInvoices){
for (DynamicObject exportInvoice : exportInvoices) {
DynamicObjectCollection exportInvoice_cs = exportInvoice.getDynamicObjectCollection("yem_exportinvoice_c");
for(DynamicObject exportInvoice_c : exportInvoice_cs){
for (DynamicObject exportInvoice_c : exportInvoice_cs) {
long sourceBillEntryId = exportInvoice_c.getLong("yem_sourcebillentryid");
BigDecimal sourceCusQty = exportInvoice_c.getBigDecimal("yem_cusqty");
if(map.containsKey(sourceBillEntryId)){
map.put(sourceBillEntryId,map.get(sourceBillEntryId).add(sourceCusQty));
}else{
map.put(sourceBillEntryId,sourceCusQty);
if (map.containsKey(sourceBillEntryId)) {
map.put(sourceBillEntryId, map.get(sourceBillEntryId).add(sourceCusQty));
} else {
map.put(sourceBillEntryId, sourceCusQty);
}
}
}
@ -118,19 +184,19 @@ public class ExportInvoiceSaveOP extends AbstractOperationServicePlugIn {
}
/**
* 最后一张出口发票保存时 处理海运费原币尾零 (暂时废弃 11-21)
* */
* 最后一张出口发票保存时 处理海运费原币尾零 (暂时废弃 11-21)
*/
private static void setOutForm(DynamicObject dt) {
//确定本次为 最后一次生成出口发票
boolean flag = true;
//储运托单 海运费
BigDecimal decimal = BigDecimal.ZERO;
long aLong = dt.getLong("yem_sourcebillid");
if(YEM.isNotEmpty(aLong)){
if (YEM.isNotEmpty(aLong)) {
DynamicObject object2 = BusinessDataServiceHelper.loadSingle(aLong, "yem_es_declaredocx");
if(object2 != null){
DynamicObject object = BusinessDataServiceHelper.loadSingle(object2.getPkValue(),object2.getDynamicObjectType().getName());
if(object != null){
if (object2 != null) {
DynamicObject object = BusinessDataServiceHelper.loadSingle(object2.getPkValue(), object2.getDynamicObjectType().getName());
if (object != null) {
decimal = object.getBigDecimal("yem_reightamt");
DynamicObjectCollection dynamicObjectCollection1 = object.getDynamicObjectCollection("yem_es_materialinfo");
DynamicObjectCollection dynamicObjectCollectionNow = dt.getDynamicObjectCollection("yem_es_materialinfo");
@ -140,24 +206,24 @@ public class ExportInvoiceSaveOP extends AbstractOperationServicePlugIn {
//储运未报关总数量
BigDecimal faCount = BigDecimal.ZERO;
//子父分录行数相同
if(dynamicObjectCollection1 != null && dynamicObjectCollectionNow != null && dynamicObjectCollectionNow.size() == dynamicObjectCollection1.size()){
for(DynamicObject dc:dynamicObjectCollection1){
if (dynamicObjectCollection1 != null && dynamicObjectCollectionNow != null && dynamicObjectCollectionNow.size() == dynamicObjectCollection1.size()) {
for (DynamicObject dc : dynamicObjectCollection1) {
BigDecimal yemQty = dc.getBigDecimal("yem_qty");
BigDecimal yemInvoicedqty = dc.getBigDecimal("yem_invoicedqty");
BigDecimal yemUnassdeclaqty = BigDecimal.ZERO;
if(yemQty != null){
if (yemQty != null) {
yemUnassdeclaqty = yemQty.subtract(yemInvoicedqty);
}
if(BigDecimal.ZERO.compareTo(yemUnassdeclaqty) != 0){
if(dynamicObjectCollectionNow != null && dynamicObjectCollectionNow.size() > row){
if (BigDecimal.ZERO.compareTo(yemUnassdeclaqty) != 0) {
if (dynamicObjectCollectionNow != null && dynamicObjectCollectionNow.size() > row) {
DynamicObject object1 = dynamicObjectCollectionNow.get(row);
if(object1 !=null){
if (object1 != null) {
//来源分录id等于父明细内码时
Object pkValue = dc.getPkValue();
long sourceentryid = object1.getLong("yem_sourceentryid");
if(pkValue != null && pkValue.equals(sourceentryid)){
if (pkValue != null && pkValue.equals(sourceentryid)) {
BigDecimal yemQtys = object1.getBigDecimal("yem_qty");
if(YEM.isNotEmpty(yemUnassdeclaqty) && yemUnassdeclaqty.compareTo(yemQtys) != 0){
if (YEM.isNotEmpty(yemUnassdeclaqty) && yemUnassdeclaqty.compareTo(yemQtys) != 0) {
flag = false;
}
}
@ -167,40 +233,40 @@ public class ExportInvoiceSaveOP extends AbstractOperationServicePlugIn {
}
row++;
}
}else {
} else {
int rowCount = 0;
for(DynamicObject dts:dynamicObjectCollection1){
for (DynamicObject dts : dynamicObjectCollection1) {
BigDecimal yemQty = dts.getBigDecimal("yem_qty");
BigDecimal yemInvoicedqty = dts.getBigDecimal("yem_invoicedqty");
BigDecimal yemUnassdeclaqty = BigDecimal.ZERO;
if(yemQty != null){
if (yemQty != null) {
yemUnassdeclaqty = yemQty.subtract(yemInvoicedqty);
}
if(YEM.isNotEmpty(yemUnassdeclaqty)){
rowCount ++;
if (YEM.isNotEmpty(yemUnassdeclaqty)) {
rowCount++;
}
}
//子父分录行数不同
//父分录 未报关数量不为0的行数要不等于子分类行数
if(dynamicObjectCollectionNow != null && dynamicObjectCollectionNow.size() != rowCount){
if (dynamicObjectCollectionNow != null && dynamicObjectCollectionNow.size() != rowCount) {
flag = false;
}else {
} else {
// //父分录 未报关数量不为0的行数要等于子分类行数 且数量之和要等于父分录 未报关数量之和
for(DynamicObject dynamicObject:dynamicObjectCollectionNow){
for (DynamicObject dynamicObject : dynamicObjectCollectionNow) {
BigDecimal yemQty = dynamicObject.getBigDecimal("yem_qty");
sonCount = sonCount.add(yemQty);
}
for(DynamicObject dc:dynamicObjectCollection1){
for (DynamicObject dc : dynamicObjectCollection1) {
BigDecimal yemQty = dc.getBigDecimal("yem_qty");
BigDecimal yemInvoicedqty = dc.getBigDecimal("yem_invoicedqty");
BigDecimal yemUnassdeclaqty = BigDecimal.ZERO;
if(yemQty != null){
if (yemQty != null) {
yemUnassdeclaqty = yemQty.subtract(yemInvoicedqty);
}
faCount = faCount.add(yemUnassdeclaqty);
}
if(faCount.compareTo(sonCount) != 0){
if (faCount.compareTo(sonCount) != 0) {
flag = false;
}
@ -208,30 +274,28 @@ public class ExportInvoiceSaveOP extends AbstractOperationServicePlugIn {
}
}
}
}
//处理海运费尾零
if(flag){
if (flag) {
DynamicObject[] load = BusinessDataServiceHelper.load("yem_exportinvoice", "yem_seatransfee",
new QFilter[]{
//new QFilter("billstatus", QCP.equals, "C"),
new QFilter("yem_sourcebillid", QCP.equals, aLong)
});
if(load != null){
if (load != null) {
BigDecimal count = BigDecimal.ZERO;
for(DynamicObject dc:load){
for (DynamicObject dc : load) {
BigDecimal yemReightamt = dc.getBigDecimal("yem_seatransfee");
count = count.add(yemReightamt);
}
BigDecimal yemReightamt = dt.getBigDecimal("yem_seatransfee");
yemReightamt = count.add(yemReightamt);
if(yemReightamt.compareTo(decimal) != 0){
dt.set("yem_seatransfee",decimal.subtract(count));
if (yemReightamt.compareTo(decimal) != 0) {
dt.set("yem_seatransfee", decimal.subtract(count));
}
}
}