fix
Helius
2021-11-08 9c791d431038fe79a111805762ee2f42c96b51c5
zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
@@ -26,6 +26,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.*;
/**
@@ -172,10 +173,8 @@
        // 下单人是否计算消耗业绩
        boolean flag = projServicesService.skipServiceOrderStep(Dictionary.SALE_MAN_IS_CONSUME_ACHIEVE);
        //赠送项目是否计算消耗业绩
        boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE);
        Set<Long> beautyIds = new HashSet<>();
        for (SysBeauticianState beauticianState : beauticianStateList) {
            // 是否第一次计算改美疗师
            boolean isFirst = true;
@@ -188,21 +187,13 @@
            // 是否为赠送业绩
            if (Dictionary.TAOCAN_SOURCE_ZS.equals(projUse.getSource())) {
                if(zsConsumeAchieve){
                    achieveNew.setFreeConsume(projUse.getPrice()*beauticianState.getCount());
                    //计算提成
                    achieveNew.setProjPercentage(
                            calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS,achieveNew.getFreeConsume(),beauticianState.getProjId()));
                }else{
                    continue;
                }
                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()));
@@ -230,13 +221,13 @@
//                }
            }
            List<AchieveNew> beautyList = achieveNewDao.selectBeautyManAchieveList(beauticianState.getStaffId(), projServices.getVipId(), new Date());
            if (CollUtil.isEmpty(beautyList)) {
                achieveNew.setNumberOfPeople(1D / size);
            } else {
                achieveNew.setNumberOfPeople(1D / (size + beautyList.size()));
                achieveNewDao.updateAchieveNumOfPeople(beautyList, achieveNew.getNumberOfPeople());
            }
//            List<AchieveNew> beautyList = achieveNewDao.selectBeautyManAchieveList(beauticianState.getStaffId(), projServices.getVipId(), new Date());
//            if (CollUtil.isEmpty(beautyList)) {
//                achieveNew.setNumberOfPeople(1D / size);
//            } else {
//                achieveNew.setNumberOfPeople(1D / (size + beautyList.size()));
//                achieveNewDao.updateAchieveNumOfPeople(beautyList, achieveNew.getNumberOfPeople());
//            }
            achieveNew.setProjNum(1);
            if (StringUtils.isNotBlank(beauticianState.getExtract())) {
@@ -252,11 +243,14 @@
                achieveNew.setProjTime(beauticianState.getExcTime());
                isFirst = false;
            }
            beautyIds.add(achieveNew.getBeaultId());
            achieveNewList.add(achieveNew);
        }
        if (CollectionUtils.isNotEmpty(achieveNewList)) {
            achieveNewDao.batchInsert(achieveNewList);
            achieveNumOfPeople(beautyIds, projServices.getVipId());
        }
    }
@@ -305,9 +299,31 @@
        }
    }
    /**
     *
     * 合并订单与服务单人头逻辑,即每一个客户对美疗师/顾问来说,每一天同一个客户只算一个人头。
     * 如若A给客户X下订单,并给客户X服务,对A来说只算一个人头
     */
    private void achieveNumOfPeople(Set<Long> beautyIds, Long vipId) {
        for (Long userId : beautyIds) {
            double num;
            List<AchieveNew> achieveNewList = achieveNewDao.selectBeautyManAchieveList(userId, vipId, new Date());
            if (CollUtil.isEmpty(achieveNewList)) {
                num = 1D;
            } else {
                num = 1D / achieveNewList.size();
            }
            achieveNewDao.updateAchieveNumOfPeople(achieveNewList, num);
        }
    }
    @Override
    public void addAchaeveByOrder(SysOrder pageOrder) {
        List<AchieveNew> achieveNewList = new ArrayList<>();
        Set<Long> beautyIds = new HashSet<>();
        if (CollectionUtils.isNotEmpty(pageOrder.getItems())) {
            for (SysOrderItem orderItem : pageOrder.getItems()) {
@@ -317,13 +333,19 @@
                        if (achieveNew !=null   && achieveNew.getGoodsCash()!=null) {
                            buildAchieve(pageOrder,  orderItem, achieveNew);
                            achieveNewList.add(achieveNew);
                            beautyIds.add(achieveNew.getBeaultId());
                        }
                    }
                }
            }
        }
        if (CollectionUtils.isNotEmpty(achieveNewList)) {
            achieveNewDao.batchInsert(achieveNewList);
            if (!beautyIds.isEmpty()) {
                achieveNumOfPeople(beautyIds, pageOrder.getVipId());
            }
        }
    }
@@ -362,7 +384,7 @@
        }
        // 设置顾问人头业绩
        saleAchieveNumOfPeople(achieveNew);
//        saleAchieveNumOfPeople(achieveNew);
        achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL);
        achieveNew.setOrderId(pageOrder.getId());
@@ -398,7 +420,7 @@
    }
    @Override
    public List<AchieveNew> findVipConsumeStatisticsList(AchieveNew achieveNew, PaginationVO pageVo) {
    public List<Map<String, Object>> findVipConsumeStatisticsList(AchieveNew achieveNew, PaginationVO pageVo) {
        return achieveNewDao.selectVipConsumeStatisticsList(achieveNew, pageVo);
    }