parent
f66388a623
commit
0c7ef831e5
|
@ -0,0 +1,346 @@
|
|||
package zcgj.zcdev.zcdev.pr.plugin.operate;
|
||||
|
||||
import kd.bos.dataentity.entity.DynamicObject;
|
||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||
import kd.bos.entity.EntityMetadataCache;
|
||||
import kd.bos.orm.query.QFilter;
|
||||
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
||||
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
||||
import kd.ec.basedata.common.enums.PayDirectionEnum;
|
||||
import kd.ec.basedata.common.enums.ecma.OrderSourceEnum;
|
||||
import kd.ec.contract.common.utils.EcNumberHelper;
|
||||
import kd.ec.contract.common.utils.TypeUtils;
|
||||
import kd.ec.contract.opplugin.OutContractRevisionBillOp;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class OutContractRevisionBillOpExt extends OutContractRevisionBillOp {
|
||||
|
||||
private static String selector = (String) Stream.of("totalrevisionamount", "totalrevisionoftaxamount", "totalamount", "totaloftaxamount", "ismultirate", "taxrate", "originalamount", "avgtaxrate", "originaloftaxamount", "taxamount").collect(Collectors.joining(","));
|
||||
|
||||
@Override
|
||||
public void reverseWritingToContract(String operationKey, DynamicObject source) {
|
||||
boolean isFromDB = source.getDataEntityState().getFromDatabase();
|
||||
if (isFromDB) {
|
||||
source = BusinessDataServiceHelper.loadSingle(source.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outrevision"));
|
||||
DynamicObject contract = BusinessDataServiceHelper.loadSingle(source.getDynamicObject("contract").getPkValue(), "ec_out_contract", selector);
|
||||
BigDecimal totalRevisionAmount = contract.getBigDecimal("totalrevisionamount");
|
||||
BigDecimal totalRevisionOfTaxAmount = contract.getBigDecimal("totalrevisionoftaxamount");
|
||||
BigDecimal totalAmount = contract.getBigDecimal("totalamount");
|
||||
BigDecimal totalOfTaxAmount = contract.getBigDecimal("totaloftaxamount");
|
||||
BigDecimal revisionAmount = source.getBigDecimal("revisionamount");
|
||||
BigDecimal revisionOfTaxAmount = source.getBigDecimal("revisionoftaxamount");
|
||||
DynamicObject currency = source.getDynamicObject("currency");
|
||||
int pricePrecision = currency == null ? 10 : currency.getInt("priceprecision");
|
||||
if (operationKey.equals("audit")) {
|
||||
this.doHandlerTaxRateChange(contract, source);
|
||||
contract.set("totalrevisionamount", totalRevisionAmount.add(revisionAmount));
|
||||
contract.set("totalrevisionoftaxamount", totalRevisionOfTaxAmount.add(revisionOfTaxAmount));
|
||||
contract.set("totalamount", totalAmount.add(revisionAmount));
|
||||
contract.set("totaloftaxamount", totalOfTaxAmount.add(revisionOfTaxAmount));
|
||||
DynamicObjectCollection kapianEntry = (DynamicObjectCollection)source.get("kapianentry");
|
||||
List<DynamicObject> listUpdateList = new ArrayList();
|
||||
List<DynamicObject> listaddList = new ArrayList();
|
||||
Map<Long, BigDecimal> entryId_biangengsl = new HashMap();
|
||||
boolean isSingleRateChangeMultyRate = false;//单税率改为多税率
|
||||
boolean isMultyRateChangeSingleRate = false;//多税率改为单税率
|
||||
for(int i = 0; i < kapianEntry.size(); ++i) {
|
||||
DynamicObjectCollection subentrys = (DynamicObjectCollection)((DynamicObject)kapianEntry.get(i)).get("entryentity");
|
||||
HashMap<String, DynamicObject> newListingMap = new HashMap();
|
||||
ArrayList<DynamicObject> updateLevelList = new ArrayList();
|
||||
|
||||
for(int k = 0; k < subentrys.size(); ++k) {
|
||||
DynamicObject subEntry = (DynamicObject)subentrys.get(k);
|
||||
int changeType = TypeUtils.nullToInt(subEntry.get("subchangetype"));
|
||||
if (changeType == 3) {
|
||||
DynamicObject listing = new DynamicObject(EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
|
||||
listing.set("id", subEntry.get("newlistingid"));
|
||||
listing.set("isaddnew", true);
|
||||
listing.set("listparentid", subEntry.get("superlistingid"));
|
||||
listing.set("parent", subEntry.get("superlistingid"));
|
||||
if (subEntry.getDynamicObject("parentgroup") != null) {
|
||||
listing.set("level", subEntry.getDynamicObject("parentgroup").getInt("level") + 1);
|
||||
} else {
|
||||
updateLevelList.add(listing);
|
||||
}
|
||||
|
||||
listing.set("paydirection", PayDirectionEnum.OUT.getValue());
|
||||
listing.set("number", subEntry.get("listnumber"));
|
||||
listing.set("name", subEntry.get("listname"));
|
||||
listing.set("sysnumber", subEntry.get("sysnum"));
|
||||
listing.set("desc", subEntry.get("remark"));
|
||||
if (subEntry.get("boqnumber") != null) {
|
||||
listing.set("boqnumber", subEntry.getDynamicObject("boqnumber").getPkValue());
|
||||
}
|
||||
|
||||
DynamicObject parentnode = (DynamicObject)subEntry.getParent();
|
||||
listing.set("listingmodel", parentnode.get("listmodelid"));
|
||||
listing.set("contractid", contract.getPkValue().toString());
|
||||
listing.set("enable", 1);
|
||||
listing.set("status", "C");
|
||||
listing.set("isleaf", false);
|
||||
listing.set("currency", source.getDynamicObject("currency").getPkValue());
|
||||
listaddList.add(listing);
|
||||
newListingMap.put(subEntry.get("newlistingid").toString(), listing);
|
||||
}
|
||||
}
|
||||
|
||||
for(DynamicObject listing : updateLevelList) {
|
||||
if (listing.get("listparentid") != null && listing.getLong("listparentid") != 0L) {
|
||||
DynamicObject parent = (DynamicObject)newListingMap.get(String.valueOf(listing.getLong("listparentid")));
|
||||
listing.set("level", parent.getInt("level") + 1);
|
||||
} else {
|
||||
listing.set("level", 1);
|
||||
}
|
||||
}
|
||||
|
||||
for(int k = 0; k < subentrys.size(); ++k) {
|
||||
DynamicObject subEntry = (DynamicObject)subentrys.get(k);
|
||||
int changeType = TypeUtils.nullToInt(subEntry.get("subchangetype"));
|
||||
if (changeType == 0) {
|
||||
DynamicObject listing = (DynamicObject)subEntry.get("listid");
|
||||
if (listing == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
listing = BusinessDataServiceHelper.loadSingle(listing.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
|
||||
listing.set("ischanged", true);
|
||||
listing.set("enable", 1);
|
||||
BigDecimal changeQty = listing.getBigDecimal("changeqty");
|
||||
BigDecimal addQty = subEntry.getBigDecimal("biangengsl");
|
||||
entryId_biangengsl.put((Long)listing.getPkValue(), addQty);
|
||||
changeQty = changeQty.add(addQty);
|
||||
listing.set("changeqty", changeQty);
|
||||
BigDecimal changedTaxAmount = (BigDecimal)subEntry.get("hsbgje");
|
||||
BigDecimal lastChangedTaxAmount = (BigDecimal)listing.get("chgoftaxamount");
|
||||
listing.set("chgoftaxamount", lastChangedTaxAmount.add(changedTaxAmount));
|
||||
BigDecimal totalQty = listing.getBigDecimal("totalqty").add(addQty);
|
||||
listing.set("totalqty", totalQty);
|
||||
BigDecimal lastTotalChangedTaxAmount = listing.getBigDecimal("lstoftaxamount");
|
||||
BigDecimal totalChangedTaxAmount = lastTotalChangedTaxAmount.add(changedTaxAmount);
|
||||
listing.set("lstoftaxamount", totalChangedTaxAmount);
|
||||
listing.set("lasttotalamt", subEntry.getBigDecimal("bghzje"));
|
||||
if (totalQty.compareTo(BigDecimal.ZERO) != 0) {
|
||||
BigDecimal avgTaxPrice = EcNumberHelper.divide(totalChangedTaxAmount, totalQty, pricePrecision);
|
||||
listing.set("avgtaxprice", avgTaxPrice);
|
||||
BigDecimal avgPrice = EcNumberHelper.divide(subEntry.getBigDecimal("bghzje"), totalQty, pricePrecision);
|
||||
listing.set("avgprice", avgPrice);
|
||||
}
|
||||
|
||||
listUpdateList.add(listing);
|
||||
}
|
||||
|
||||
if (changeType == 1 || changeType == 4 || changeType == 5) {
|
||||
DynamicObject listing = (DynamicObject)subEntry.get("listid");
|
||||
if (listing == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
listing = BusinessDataServiceHelper.loadSingle(listing.getPkValue(), EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
|
||||
if (this.isSingleRateChange(contract, source)) {
|
||||
//如果是单税率变更为多税率的情况下,需要判断综合税率是不是为空,如果当前税率为空,则有可能是单改多
|
||||
Object curtaxrate = source.get("curtaxrate");
|
||||
if (curtaxrate != null) {
|
||||
listing.set("rateobj", source.get("curtaxrate"));
|
||||
listing.set("taxrate", source.getDynamicObject("curtaxrate").get("taxrate"));
|
||||
}else{
|
||||
Object rateobj = subEntry.get("rateobj");
|
||||
listing.set("rateobj", rateobj);
|
||||
listing.set("taxrate", subEntry.getDynamicObject("rateobj").get("taxrate"));
|
||||
listing.set("taxprice", subEntry.get("biangenghouhsdj")); //含税单价
|
||||
listing.set("oftax", subEntry.get("bghhszje")); //价税合计
|
||||
listing.set("tax", subEntry.get("bghse")); //税额
|
||||
listing.set("desc", subEntry.get("remark")); //备注
|
||||
isSingleRateChangeMultyRate = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.isMultyRateChange(contract, source)) {
|
||||
boolean ismultirate = source.getBoolean("ismultirate");
|
||||
Object rateobj = subEntry.get("rateobj");
|
||||
if(rateobj!=null){
|
||||
listing.set("rateobj", rateobj);
|
||||
listing.set("taxrate", subEntry.getDynamicObject("rateobj").get("taxrate"));
|
||||
}
|
||||
if(!ismultirate){
|
||||
Object curtaxrate = source.get("curtaxrate");
|
||||
listing.set("rateobj", curtaxrate);
|
||||
listing.set("taxrate", source.getDynamicObject("curtaxrate").get("taxrate"));
|
||||
listing.set("taxprice", subEntry.get("biangenghouhsdj")); //含税单价
|
||||
listing.set("oftax", subEntry.get("bghhszje")); //价税合计
|
||||
listing.set("tax", subEntry.get("bghse")); //税额
|
||||
listing.set("desc", subEntry.get("remark")); //备注
|
||||
isMultyRateChangeSingleRate = true;
|
||||
}
|
||||
}
|
||||
|
||||
listing.set("ischanged", true);
|
||||
listing.set("enable", 1);
|
||||
BigDecimal effectQty = subEntry.getBigDecimal("shouyingxsl");
|
||||
BigDecimal lastChangedEffectQty = listing.getBigDecimal("chgeffectqty");
|
||||
listing.set("chgeffectqty", effectQty.add(lastChangedEffectQty));
|
||||
listing.set("curtaxprice", subEntry.getBigDecimal("biangenghouhsdj"));
|
||||
BigDecimal changedTaxAmount = subEntry.getBigDecimal("hsbgje");
|
||||
BigDecimal lastChangedTaxAmount = (BigDecimal)listing.get("chgoftaxamount");
|
||||
listing.set("chgoftaxamount", lastChangedTaxAmount.add(changedTaxAmount));
|
||||
BigDecimal lastTotalChangedTaxAmount = listing.getBigDecimal("lstoftaxamount");
|
||||
BigDecimal totalChangedTaxAmount = lastTotalChangedTaxAmount.add(changedTaxAmount);
|
||||
listing.set("lstoftaxamount", totalChangedTaxAmount);
|
||||
listing.set("currentprice", subEntry.getBigDecimal("biangenghoudj"));
|
||||
listing.set("lasttotalamt", subEntry.getBigDecimal("bghzje"));
|
||||
BigDecimal addQty = subEntry.getBigDecimal("biangengsl");
|
||||
entryId_biangengsl.put((Long)listing.getPkValue(), addQty);
|
||||
BigDecimal totalQty = listing.getBigDecimal("totalqty").add(addQty);
|
||||
listing.set("totalqty", totalQty);
|
||||
if (totalQty.compareTo(BigDecimal.ZERO) != 0) {
|
||||
BigDecimal avgTaxPrice = EcNumberHelper.divide(totalChangedTaxAmount, totalQty, pricePrecision);
|
||||
listing.set("avgtaxprice", avgTaxPrice);
|
||||
BigDecimal avgPrice = EcNumberHelper.divide(subEntry.getBigDecimal("bghzje"), totalQty, pricePrecision);
|
||||
listing.set("avgprice", avgPrice);
|
||||
}
|
||||
|
||||
listUpdateList.add(listing);
|
||||
}
|
||||
if (changeType == 2) {
|
||||
DynamicObject listing = new DynamicObject(EntityMetadataCache.getDataEntityType("ec_outtreelisting"));
|
||||
listing.set("id", subEntry.get("newlistingid"));
|
||||
listing.set("isaddnew", true);
|
||||
listing.set("paydirection", PayDirectionEnum.OUT.getValue());
|
||||
listing.set("listparentid", subEntry.getString("superlistingid"));
|
||||
listing.set("number", subEntry.get("listnumber"));
|
||||
listing.set("name", subEntry.get("listname"));
|
||||
listing.set("sysnumber", subEntry.get("sysnum"));
|
||||
if (subEntry.get("measureunit") != null) {
|
||||
listing.set("measureunit", subEntry.getDynamicObject("measureunit").getPkValue());
|
||||
}
|
||||
|
||||
listing.set("qty", subEntry.get("qty"));
|
||||
listing.set("totalqty", subEntry.get("qty"));
|
||||
listing.set("price", subEntry.get("price"));
|
||||
listing.set("avgprice", subEntry.get("price"));
|
||||
listing.set("currentprice", subEntry.get("price"));
|
||||
listing.set("cbsnumber", subEntry.get("cbsnumber"));
|
||||
listing.set("amount", subEntry.get("amount"));
|
||||
listing.set("lasttotalamt", subEntry.get("amount"));
|
||||
listing.set("taxrate", subEntry.get("taxrate1"));
|
||||
listing.set("tax", subEntry.get("tax"));
|
||||
listing.set("taxprice", subEntry.get("hanshuidanj"));
|
||||
listing.set("avgtaxprice", subEntry.get("hanshuidanj"));
|
||||
listing.set("curtaxprice", subEntry.get("hanshuidanj"));
|
||||
listing.set("oftax", subEntry.get("oftax"));
|
||||
listing.set("lstoftaxamount", subEntry.get("oftax"));
|
||||
listing.set("desc", subEntry.get("remark"));
|
||||
DynamicObject parentnode = (DynamicObject)subEntry.getParent();
|
||||
listing.set("listingmodel", parentnode.get("listmodelid"));
|
||||
listing.set("contractid", contract.getPkValue().toString());
|
||||
if (subEntry.get("resourceitem") != null) {
|
||||
listing.set("resourceitem", subEntry.getDynamicObject("resourceitem").getPkValue());
|
||||
}
|
||||
|
||||
if (subEntry.get("materiel") != null) {
|
||||
listing.set("material", subEntry.getDynamicObject("materiel").getPkValue());
|
||||
}
|
||||
|
||||
if (subEntry.get("boqnumber") != null) {
|
||||
listing.set("boqnumber", subEntry.getDynamicObject("boqnumber").getPkValue());
|
||||
}
|
||||
|
||||
if (subEntry.get("contlistnumber") != null) {
|
||||
listing.set("contlistnumber", subEntry.getDynamicObject("contlistnumber").getPkValue());
|
||||
}
|
||||
|
||||
if (subEntry.get("listunitproject") != null) {
|
||||
listing.set("listunitproject", subEntry.getDynamicObject("listunitproject").getPkValue());
|
||||
}
|
||||
|
||||
if (subEntry.get("rateobj") != null) {
|
||||
listing.set("rateobj", subEntry.getDynamicObject("rateobj").getPkValue());
|
||||
}
|
||||
|
||||
listing.set("directfee", subEntry.get("directfee"));
|
||||
listing.set("equfee", subEntry.get("equfee"));
|
||||
listing.set("manequfee", subEntry.get("manequfee"));
|
||||
listing.set("manfee", subEntry.get("manfee"));
|
||||
listing.set("tmpfee", subEntry.get("tmpfee"));
|
||||
listing.set("enable", 1);
|
||||
listing.set("status", "C");
|
||||
listing.set("currency", source.getDynamicObject("currency").getPkValue());
|
||||
listing.set("isleaf", true);
|
||||
if (subEntry.getDynamicObject("parentgroup") != null) {
|
||||
listing.set("level", subEntry.getDynamicObject("parentgroup").getInt("level") + 1);
|
||||
listing.set("parent", subEntry.getDynamicObject("parentgroup").getPkValue());
|
||||
} else if (subEntry.get("superlistingid") != null && subEntry.getLong("superlistingid") != 0L) {
|
||||
DynamicObject superListing = (DynamicObject)newListingMap.get(String.valueOf(subEntry.getLong("superlistingid")));
|
||||
listing.set("level", superListing.getInt("level") + 1);
|
||||
listing.set("parent", subEntry.getLong("superlistingid"));
|
||||
} else {
|
||||
listing.set("level", 1);
|
||||
listing.set("parent", (Object)null);
|
||||
}
|
||||
|
||||
listing.set("leaseunit", subEntry.get("leaseunit"));
|
||||
listing.set("leaseqty", subEntry.get("leaseqty"));
|
||||
listing.set("leasebegintime", subEntry.get("leasebegintime"));
|
||||
listing.set("leaseendtime", subEntry.get("leaseendtime"));
|
||||
listing.set("leasedayqty", subEntry.get("leasedayqty"));
|
||||
listing.set("arrivaldate", subEntry.get("arrivaldate"));
|
||||
listaddList.add(listing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.writeBackPurchaseOrder(entryId_biangengsl, contract);
|
||||
if (!listUpdateList.isEmpty()) {
|
||||
SaveServiceHelper.save(((DynamicObject)listUpdateList.get(0)).getDataEntityType(), listUpdateList.toArray());
|
||||
}
|
||||
|
||||
if (!listaddList.isEmpty()) {
|
||||
SaveServiceHelper.save(((DynamicObject)listaddList.get(0)).getDataEntityType(), listaddList.toArray());
|
||||
}
|
||||
boolean ismultirate = source.getBoolean("ismultirate");
|
||||
if(isSingleRateChangeMultyRate && ismultirate){
|
||||
contract.set("ismultirate", true);//多税率
|
||||
}
|
||||
if(isMultyRateChangeSingleRate && !ismultirate){
|
||||
contract.set("ismultirate", false);//单税率
|
||||
}
|
||||
|
||||
} else if (operationKey.equals("unaudit")) {
|
||||
contract.set("totalrevisionamount", totalRevisionAmount.subtract(revisionAmount));
|
||||
contract.set("totalrevisionoftaxamount", totalRevisionOfTaxAmount.subtract(revisionOfTaxAmount));
|
||||
contract.set("totalamount", totalAmount.subtract(revisionAmount));
|
||||
contract.set("totaloftaxamount", totalOfTaxAmount.subtract(revisionOfTaxAmount));
|
||||
}
|
||||
|
||||
SaveServiceHelper.save(new DynamicObject[]{contract});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void writeBackPurchaseOrder(Map<Long, BigDecimal> entryId_biangengsl, DynamicObject contract) {
|
||||
QFilter contractFilter = new QFilter("contract", "=", contract.getPkValue());
|
||||
QFilter sourceFilter = new QFilter("source", "=", OrderSourceEnum.PUR_CONT.getValue());
|
||||
DynamicObject[] orderBillArr = BusinessDataServiceHelper.load("ecma_purchaseorderbill", "billno,billname,orderentry,orderentry.sourceqty,orderentry.restqty,orderentry.listingid", new QFilter[]{contractFilter, sourceFilter});
|
||||
|
||||
for(DynamicObject item : orderBillArr) {
|
||||
for(DynamicObject entry : item.getDynamicObjectCollection("orderentry")) {
|
||||
Long listingId = entry.getLong("listingid");
|
||||
BigDecimal biangengsl = (BigDecimal)entryId_biangengsl.get(listingId);
|
||||
BigDecimal sourceQty = entry.getBigDecimal("sourceqty");
|
||||
BigDecimal restQty = entry.getBigDecimal("restqty");
|
||||
if (biangengsl != null) {
|
||||
entry.set("sourceqty", sourceQty.add(biangengsl));
|
||||
entry.set("restqty", restQty.add(biangengsl));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SaveServiceHelper.save(orderBillArr);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue