107 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Java
		
	
	
	
package tqq9.lc123.cloud.app.plugin.utils;
 | 
						|
 | 
						|
import kd.bos.dataentity.entity.DynamicObject;
 | 
						|
import kd.bos.dataentity.entity.DynamicObjectCollection;
 | 
						|
import kd.bos.dataentity.utils.StringUtils;
 | 
						|
import kd.bos.entity.datamodel.IDataModel;
 | 
						|
 | 
						|
import java.math.BigDecimal;
 | 
						|
import java.math.RoundingMode;
 | 
						|
import java.util.ArrayList;
 | 
						|
import java.util.List;
 | 
						|
 | 
						|
public class EntryFieldRefresher {
 | 
						|
 | 
						|
    /**
 | 
						|
     * 处理组织和字段的工具类
 | 
						|
     *
 | 
						|
     * @param org           组织参数
 | 
						|
     * @param entityname    字段标识
 | 
						|
     * @param dynamicObject 基础资料
 | 
						|
     * @param model         单据实体
 | 
						|
     */
 | 
						|
    public void updateDynamicObjectByOrg(String org, String entityname, DynamicObject dynamicObject, IDataModel model) {
 | 
						|
 | 
						|
        DynamicObjectCollection entries = model.getDataEntity(true).getDynamicObjectCollection("billentry");
 | 
						|
        for (int i = 0; i < entries.size(); i++) {
 | 
						|
            DynamicObject entry = entries.get(i);
 | 
						|
            DynamicObject entryrecorg = entry.getDynamicObject("entryrecorg");//收货组织
 | 
						|
            if (StringUtils.equals(org, entryrecorg.getString("number"))) {
 | 
						|
                model.setValue(entityname, dynamicObject, i);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
    /**
 | 
						|
     * 处理组织和字段的工具类
 | 
						|
     *
 | 
						|
     * @param org           组织参数
 | 
						|
     * @param entityname    字段标识
 | 
						|
     * @param sum_entityname     单头金额
 | 
						|
     * @param model         单据实体
 | 
						|
     */
 | 
						|
    public void sumEntrByOrg(String org, String entityname, String sum_entityname, IDataModel model) {
 | 
						|
 | 
						|
        DynamicObjectCollection entries = model.getDataEntity(true).getDynamicObjectCollection("billentry");
 | 
						|
        BigDecimal sum =BigDecimal.ZERO;
 | 
						|
        for (int i = 0; i < entries.size(); i++) {
 | 
						|
            DynamicObject entry = entries.get(i);
 | 
						|
            DynamicObject entryrecorg = entry.getDynamicObject("entryrecorg");//收货组织
 | 
						|
            BigDecimal qty = entry.getBigDecimal(entityname);//分录字段值
 | 
						|
            if (StringUtils.equals(org, entryrecorg.getString("number"))&&qty!=null) {
 | 
						|
                sum = sum.add(qty);
 | 
						|
            }
 | 
						|
            model.setValue(sum_entityname,sum);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * 处理组织和字段的工具类
 | 
						|
     *
 | 
						|
     * @param org        组织参数
 | 
						|
     * @param entityname 字段标识
 | 
						|
     * @param amount     金额
 | 
						|
     * @param model      单据实体
 | 
						|
     */
 | 
						|
    public void updateAmountByOrg(String org, String entityname, BigDecimal amount, IDataModel model) {
 | 
						|
        if (amount.compareTo(BigDecimal.ZERO) >= 0) {
 | 
						|
            DynamicObjectCollection entries = model.getDataEntity(true).getDynamicObjectCollection("billentry");
 | 
						|
            if (entries != null && entries.size() > 0) {
 | 
						|
                BigDecimal remainRefundAmt = amount;//拆分后剩余的金额
 | 
						|
                List<Integer> seqs = new ArrayList<>();
 | 
						|
                BigDecimal tqq9_totalamount = BigDecimal.ZERO;
 | 
						|
                for (int i = 0; i <= entries.size() - 1; i++) {
 | 
						|
                    DynamicObject entry = entries.get(i);
 | 
						|
                    DynamicObject entryrecorg = entry.getDynamicObject("entryrecorg");//收货组织
 | 
						|
                    if (StringUtils.equals(org, entryrecorg.getString("number"))) {
 | 
						|
                        BigDecimal tqq9_amount = entry.getBigDecimal("tqq9_amount");//价税合计
 | 
						|
                        tqq9_totalamount = tqq9_totalamount.add(tqq9_amount);
 | 
						|
                        if (tqq9_amount.compareTo(BigDecimal.ZERO) > 0) {
 | 
						|
                            seqs.add(i);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                for (int i = 0; i <= seqs.size() - 1; i++) {
 | 
						|
                    int seq = seqs.get(i);
 | 
						|
                    if (i == seqs.size() - 1) {
 | 
						|
                        //如果是最后一行
 | 
						|
                        model.setValue(entityname, remainRefundAmt, seq);//明细金额
 | 
						|
                    } else {
 | 
						|
                        //如果不是最后一行
 | 
						|
                        BigDecimal tqq9_amount = (BigDecimal) model.getValue("tqq9_amount", seq);//价税合计
 | 
						|
                        if (tqq9_amount.compareTo(BigDecimal.ZERO) == 0) {
 | 
						|
                            model.setValue(entityname, BigDecimal.ZERO, seq);//明细金额
 | 
						|
                        } else {
 | 
						|
                            BigDecimal tqq9_disamount = amount.multiply(tqq9_amount).divide(tqq9_totalamount, 10, RoundingMode.HALF_UP);//分录行含税金额比例
 | 
						|
                            model.setValue(entityname, tqq9_disamount, seq);//明细金额
 | 
						|
                            remainRefundAmt = remainRefundAmt.subtract(tqq9_disamount);
 | 
						|
                        }
 | 
						|
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |