zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
@@ -1,6 +1,7 @@
package com.matrix.system.hive.service.imp;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.exception.GlobleException;
import com.matrix.core.pojo.PaginationVO;
@@ -16,17 +17,16 @@
import com.matrix.system.common.dao.SysUsersDao;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.AchieveNewDao;
import com.matrix.system.hive.dao.ShoppingGoodsDao;
import com.matrix.system.hive.dao.SysBeauticianStateDao;
import com.matrix.system.hive.dao.SysProjUseDao;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.hive.service.AchieveNewService;
import com.matrix.system.hive.service.SysProjServicesService;
import com.matrix.system.hiveErp.pojo.AchieveRuleItem;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
/**
@@ -173,6 +173,9 @@
        // 下单人是否计算消耗业绩
        boolean flag = projServicesService.skipServiceOrderStep(Dictionary.SALE_MAN_IS_CONSUME_ACHIEVE);
        for (SysBeauticianState beauticianState : beauticianStateList) {
            // 是否第一次计算改美疗师
            boolean isFirst = true;
@@ -184,9 +187,17 @@
            achieveNew.setVipId(projServices.getVipId());
            // 是否为赠送业绩
            if (Dictionary.TAOCAN_SOURCE_ZS.equals(projUse.getSource())) {
                achieveNew.setFreeConsume(projUse.getPrice()*beauticianState.getCount());
                //计算提成
                achieveNew.setProjPercentage(
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS,achieveNew.getFreeConsume(),beauticianState.getProjId()));
            } else {
                achieveNew.setHisConsume(projUse.getPrice()*beauticianState.getCount());
                achieveNew.setHisConsume(new BigDecimal(projUse.getPrice()*beauticianState.getCount()).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue());
                //计算提成
                achieveNew.setProjPercentage(
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_BJ,achieveNew.getHisConsume(),beauticianState.getProjId()));
            }
            achieveNew.setT2(projUse.getSource());
            achieveNew.setDatatime(new Date());
@@ -197,15 +208,18 @@
            achieveNew.setCompanyId(projServices.getCompanyId());
            achieveNew.setShoppingGoodsId(projUse.getProjId());
            if (flag) {
                if (!achieveId.equals(beauticianState.getStaffId())) {
                    AchieveNew saleMan = new AchieveNew();
                    BeanUtils.copyProperties(achieveNew, saleMan);
                    saleMan.setBeaultId(achieveId);
                    saleAchieveNumOfPeople(saleMan);
                    achieveNewList.add(saleMan);
                }
            if (flag) {
//                if (!achieveId.equals(beauticianState.getStaffId())) {
                    AchieveNew saleManAchieve = new AchieveNew();
                    BeanUtils.copyProperties(achieveNew, saleManAchieve);
                    saleManAchieve.setBeaultId(achieveId);
                    saleAchieveNumOfPeople(saleManAchieve);
                    //销售人员不计算项目提成
                    saleManAchieve.setProjPercentage(0D);
                    achieveNewList.add(saleManAchieve);
//                }
            }
            List<AchieveNew> beautyList = achieveNewDao.selectBeautyManAchieveList(beauticianState.getStaffId(), projServices.getVipId(), new Date());
@@ -239,6 +253,36 @@
    }
    @Autowired
    AchieveRuleDao achieveRuleDao;
    private Double calculationProjPercentage(int type, Double consume, Long goodsId) {
         ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(goodsId);
         if(shoppingGoods.getAchieveRuleId()!=null){
             AchieveRule achieveRule = achieveRuleDao.selectById(shoppingGoods.getAchieveRuleId());
             if(achieveRule!=null){
                 List<AchieveRuleItem> achieveRuleItems = JSONUtil.toList(JSONUtil.parseArray(achieveRule.getRules()), AchieveRuleItem.class);
                 double percentage=0D;
                 for(AchieveRuleItem item:achieveRuleItems){
                     if(item.getAchieveType()==type
                        && (item.getLower() == consume
                             || (item.getLower()< consume && consume < item.getUpper() ))){
                         if(AchieveRuleItem.ACHIEVE_TYPE_FIXED==item.getCalculationType()){
                             percentage=item.getAchieve();
                         }else{
                             percentage= consume * (item.getAchieve()/100);
                         }
                         break;
                     }
                 }
                 return percentage;
             }
         }
        return 0D;
    }
    /**
     * 顾问人头业绩
     * @param achieveNew
@@ -264,7 +308,6 @@
                    for (AchieveNew achieveNew : orderItem.getAchieveList()) {
                        if (achieveNew !=null   && achieveNew.getGoodsCash()!=null) {
                            buildAchieve(pageOrder,  orderItem, achieveNew);
                            // 新增美疗师业绩
                            achieveNewList.add(achieveNew);
                        }
                    }
@@ -290,7 +333,10 @@
        }
        achieveNew.setVipId(pageOrder.getVipId());
        achieveNew.setSaleId(pageOrder.getStaffId());
        if(achieveNew.getSaleId()==null){
            achieveNew.setSaleId(pageOrder.getStaffId());
        }
        if (pageOrder.getPayTime() != null) {
            achieveNew.setDatatime(pageOrder.getPayTime());