Helius
2022-05-24 560228ac3c15cccce0b2a5994d44e4e81b5b3b73
zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
@@ -16,6 +16,7 @@
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.dao.SysUsersDao;
import com.matrix.system.constance.Dictionary;
import com.matrix.system.enums.BooleanEnum;
import com.matrix.system.hive.bean.*;
import com.matrix.system.hive.dao.*;
import com.matrix.system.hive.plugin.util.CollectionUtils;
@@ -164,7 +165,7 @@
    @Override
    public void     addAchieveByServiceOrder(SysProjServices projServices) {
    public void addAchieveByServiceOrder(SysProjServices projServices) {
        List<AchieveNew> achieveNewList = new ArrayList<>();
        List<SysBeauticianState> beauticianStateList = sysBeauticianStateDao.selectBySerIds(projServices.getId());
        int size = beauticianStateList.size();
@@ -188,16 +189,16 @@
            // 是否为赠送业绩
            if (Dictionary.TAOCAN_SOURCE_ZS.equals(projUse.getSource())) {
                achieveNew.setFreeConsume(projUse.getPrice()*beauticianState.getCount());
                achieveNew.setFreeConsume(projUse.getPrice() * beauticianState.getCount());
                //计算提成
                achieveNew.setProjPercentage(
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS,achieveNew.getFreeConsume(),beauticianState.getProjId()));
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS, achieveNew.getFreeConsume(), beauticianState.getProjId()));
            } else {
                achieveNew.setHisConsume(new BigDecimal(projUse.getPrice()*beauticianState.getCount()).setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue());
                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()));
                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_BJ, achieveNew.getHisConsume(), beauticianState.getProjId()));
            }
            achieveNew.setT2(projUse.getSource());
            achieveNew.setDatatime(new Date());
@@ -211,14 +212,14 @@
            if (flag) {
//                if (!achieveId.equals(beauticianState.getStaffId())) {
                    AchieveNew saleManAchieve = new AchieveNew();
                    BeanUtils.copyProperties(achieveNew, saleManAchieve);
                    saleManAchieve.setBeaultId(achieveId);
                AchieveNew saleManAchieve = new AchieveNew();
                BeanUtils.copyProperties(achieveNew, saleManAchieve);
                saleManAchieve.setBeaultId(achieveId);
                    saleAchieveNumOfPeople(saleManAchieve);
                    //销售人员不计算项目提成
                    saleManAchieve.setProjPercentage(0D);
                    achieveNewList.add(saleManAchieve);
                saleAchieveNumOfPeople(saleManAchieve);
                //销售人员不计算项目提成
                saleManAchieve.setProjPercentage(0D);
                achieveNewList.add(saleManAchieve);
//                }
            }
@@ -260,34 +261,35 @@
    AchieveRuleDao achieveRuleDao;
    private Double calculationProjPercentage(int type, Double consume, Long goodsId) {
         ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(goodsId);
         if(shoppingGoods.getAchieveRuleId()!=null){
        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() ))){
            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;
             }
         }
                        if (AchieveRuleItem.ACHIEVE_TYPE_FIXED == item.getCalculationType()) {
                            percentage = item.getAchieve();
                        } else {
                            percentage = consume * (item.getAchieve() / 100);
                        }
                        break;
                    }
                }
                return percentage;
            }
        }
        return 0D;
    }
    /**
     * 顾问人头业绩
     *
     * @param achieveNew
     */
    private void saleAchieveNumOfPeople(AchieveNew achieveNew) {
@@ -301,7 +303,6 @@
    }
    /**
     *
     * 合并订单与服务单人头逻辑,即每一个客户对美疗师/顾问来说,每一天同一个客户只算一个人头。
     * 如若A给客户X下订单,并给客户X服务,对A来说只算一个人头
     */
@@ -333,10 +334,9 @@
                if (orderItem != null && CollectionUtils.isNotEmpty(orderItem.getAchieveList())) {
                    for (AchieveNew achieveNew : orderItem.getAchieveList()) {
                        if (achieveNew !=null   && achieveNew.getGoodsCash()!=null) {
                            buildAchieve(pageOrder,  orderItem, achieveNew);
                        if (achieveNew != null && achieveNew.getGoodsCash() != null) {
                            buildAchieve(pageOrder, orderItem, achieveNew);
                            achieveNewList.add(achieveNew);
                            beautyIds.add(achieveNew.getBeaultId());
                        }
                    }
@@ -358,7 +358,7 @@
    BusParameterSettingsDao busParameterSettingsDao;
    private void buildAchieve(SysOrder pageOrder, SysOrderItem orderItem, AchieveNew achieveNew) {
        BusParameterSettings shopManageJjcpasConsume =null;
        BusParameterSettings shopManageJjcpasConsume = null;
        if (Dictionary.ORDER_STATU_TK.equals(pageOrder.getStatu())) {
            achieveNew.setId(null);
            achieveNew.setProjPercentage(0 - achieveNew.getProjPercentage());
@@ -366,7 +366,7 @@
        }
        achieveNew.setVipId(pageOrder.getVipId());
        if(achieveNew.getSaleId()==null){
        if (achieveNew.getSaleId() == null) {
            achieveNew.setSaleId(pageOrder.getStaffId());
        }
@@ -376,11 +376,15 @@
        } else {
            achieveNew.setDatatime(new Date());
        }
        if(Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(orderItem.getShoppingGoods().getGoodType())){
            if(shopManageJjcpasConsume==null){
        ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(orderItem.getGoodsId());
        if (Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(shoppingGoods.getGoodType())) {
            if (shopManageJjcpasConsume == null) {
                shopManageJjcpasConsume = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.SHOP_MANAGE_JJCPAS_CONSUME, pageOrder.getCompanyId());
            }
            if(AppConstance.IS_Y.equals(shopManageJjcpasConsume.getParamValue())){
//            if (AppConstance.IS_Y.equals(shopManageJjcpasConsume.getParamValue())) {
//                achieveNew.setHisConsume(achieveNew.getGoodsCash());
//            }
            if (BooleanEnum.TRUE.getValue() == shopManageJjcpasConsume.getIntParamValue()) {
                achieveNew.setHisConsume(achieveNew.getGoodsCash());
            }
@@ -440,7 +444,7 @@
        Date endTime = calendar.getTime();
        switch (type) {
            // 本日
            case 1 :
            case 1:
                break;
            // 昨日
            case 2:
@@ -489,4 +493,9 @@
    public int findDailyBeautyListTotal(AchieveNew achieveNew) {
        return achieveNewDao.selectDailyBeautyListTotal(achieveNew);
    }
    @Override
    public void removeByOrderId(Long orderId) {
        achieveNewDao.deleteByOrderId(orderId);
    }
}