package com.yem.wm.bd.tandardcon.validator;

import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.ExtendedDataEntity;
import kd.bos.entity.validate.AbstractValidator;
import org.joda.time.Interval;
import scala.Array;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author power
 * @ClassName
 * @description: 标准提成 提交 校验器
 * @date 2023/8/21
 */
public class TandardconSubmitValidator extends AbstractValidator {
    @Override
    public void validate() {
        ExtendedDataEntity[]  datas = this.getDataEntities();
        for(ExtendedDataEntity temp:datas) {
            DynamicObject bill = temp.getDataEntity();
            DynamicObjectCollection tandardcons = bill.getDynamicObjectCollection("yem_bd_tandardcon_a");
            ArrayList<Object> salesvolumelist=new ArrayList<>();
            HashMap<Integer, String> Sites = new HashMap<Integer, String>();
            boolean flag = false;
            int x =0;
            for (DynamicObject tandardcon:tandardcons) {
                x++;
                ArrayList<Object> salesvolumelists=new ArrayList<>();
                String typeclassify = tandardcon.getString("yem_typeclassify.name");
                BigDecimal salesvolumestart = tandardcon.getBigDecimal("yem_salesvolumestart");
                BigDecimal salesvolumend = tandardcon.getBigDecimal("yem_salesvolumend");
                if (salesvolumend.compareTo(salesvolumestart) < 1) {
                    this.addErrorMessage(temp,"第"+x+"行的销售（至）小于等于销售（从）");
                }
                salesvolumelists.add(typeclassify);
                salesvolumelists.add(salesvolumestart);
                salesvolumelists.add(salesvolumend);
                salesvolumelist.add(salesvolumelists);

            }
            String name ="";
            for (int i = 0; i < salesvolumelist.size()-1;i++) {
                ArrayList temp1 = (ArrayList) salesvolumelist.get(i);
                String typeclassifys = (String) temp1.get(0);
                for (int j = 0; j < salesvolumelist.size(); j++) {
                    ArrayList temp2 = (ArrayList) salesvolumelist.get(j);
                    String typeclassifyss = (String) temp2.get(0);
                    if (j!=i){
                        if (typeclassifys.equals(typeclassifyss)){
                            BigDecimal salesvolumestart =(BigDecimal) temp1.get(1);
                            BigDecimal salesvolumend =(BigDecimal) temp1.get(2);

                            BigDecimal salesvolumestarts =(BigDecimal) temp2.get(1);
                            BigDecimal salesvolumends =(BigDecimal) temp2.get(2);
                            // 判断区间1和区间2是否存在交集
                            if (salesvolumestart.compareTo(salesvolumends) <= 0 && salesvolumend.compareTo(salesvolumestarts) >= 0) {
                                name=typeclassifys;
                                flag = true;
                                break;
                            }
                        }
                    }
                }

            }
            if (flag){
                this.addErrorMessage(temp,"相同的"+name+"下的销量区间重叠");
            }
        }
    }

}
