From 68defbe491894e01c4402922de33c39633fca091 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Tue, 29 Mar 2022 14:25:54 +0800
Subject: [PATCH] 系统名称

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java |  181 +++++++++++++++++++++++++++++----------------
 1 files changed, 116 insertions(+), 65 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
index da2e7ba..2af56ad 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
@@ -16,16 +16,19 @@
 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;
 import com.matrix.system.hive.service.AchieveNewService;
 import com.matrix.system.hive.service.SysProjServicesService;
+import com.matrix.system.hive.vo.DailyBeautyListVo;
 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.*;
 
 /**
@@ -162,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();
@@ -172,10 +175,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,24 +189,16 @@
             // 是否为赠送业绩
             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;
-                }
-
-
-
-
-
-            } else {
-                achieveNew.setHisConsume(projUse.getPrice()*beauticianState.getCount());
+                achieveNew.setFreeConsume(projUse.getPrice() * beauticianState.getCount());
                 //计算提成
                 achieveNew.setProjPercentage(
-                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_BJ,achieveNew.getHisConsume(),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.setProjPercentage(
+                        calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_BJ, achieveNew.getHisConsume(), beauticianState.getProjId()));
             }
             achieveNew.setT2(projUse.getSource());
             achieveNew.setDatatime(new Date());
@@ -219,24 +212,24 @@
 
             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);
 //                }
             }
 
-            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 +245,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());
         }
 
     }
@@ -265,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) {
@@ -305,25 +302,53 @@
         }
     }
 
+    /**
+     * 合并订单与服务单人头逻辑,即每一个客户对美疗师/顾问来说,每一天同一个客户只算一个人头。
+     * 如若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();
+            }
+
+            if (CollUtil.isNotEmpty(achieveNewList)) {
+                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()) {
 
                 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());
                         }
                     }
                 }
             }
         }
+
         if (CollectionUtils.isNotEmpty(achieveNewList)) {
             achieveNewDao.batchInsert(achieveNewList);
+            if (!beautyIds.isEmpty()) {
+                achieveNumOfPeople(beautyIds, pageOrder.getVipId());
+            }
         }
     }
 
@@ -333,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());
@@ -341,7 +366,7 @@
         }
 
         achieveNew.setVipId(pageOrder.getVipId());
-        if(achieveNew.getSaleId()==null){
+        if (achieveNew.getSaleId() == null) {
             achieveNew.setSaleId(pageOrder.getStaffId());
         }
 
@@ -351,18 +376,22 @@
         } 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());
             }
 
         }
 
         // 设置顾问人头业绩
-        saleAchieveNumOfPeople(achieveNew);
+//        saleAchieveNumOfPeople(achieveNew);
 
         achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL);
         achieveNew.setOrderId(pageOrder.getId());
@@ -398,7 +427,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);
     }
 
@@ -415,7 +444,7 @@
         Date endTime = calendar.getTime();
         switch (type) {
             // 本日
-            case 1 :
+            case 1:
                 break;
             // 昨日
             case 2:
@@ -447,4 +476,26 @@
     public List<AchieveNew> findOrderItemAchieve(Long orderId) {
         return achieveNewDao.selectOrderItemAchieveByOrderId(orderId);
     }
+
+    @Override
+    public List<DailyBeautyListVo> findDailyBeautyList(AchieveNew achieveNew, PaginationVO pageVo) {
+        List<DailyBeautyListVo> list = achieveNewDao.selectDailyBeautyList(achieveNew, pageVo);
+        if (CollUtil.isNotEmpty(list)) {
+            for (DailyBeautyListVo item : list) {
+                String pl = achieveNewDao.selectPlInfoByVipIdAndDate(item.getDatatime(), item.getVipId());
+                item.setProjInfo(pl);
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public int findDailyBeautyListTotal(AchieveNew achieveNew) {
+        return achieveNewDao.selectDailyBeautyListTotal(achieveNew);
+    }
+
+    @Override
+    public void removeByOrderId(Long orderId) {
+        achieveNewDao.deleteByOrderId(orderId);
+    }
 }
\ No newline at end of file

--
Gitblit v1.9.1