From 9c791d431038fe79a111805762ee2f42c96b51c5 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 08 Nov 2021 17:03:15 +0800
Subject: [PATCH] fix

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java |   75 +++++++++++++++++++++++++++++--------
 1 files changed, 58 insertions(+), 17 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 6b84084..ff89cae 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
@@ -26,6 +26,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 /**
@@ -172,6 +173,8 @@
         // 下单人是否计算消耗业绩
         boolean flag = projServicesService.skipServiceOrderStep(Dictionary.SALE_MAN_IS_CONSUME_ACHIEVE);
 
+
+        Set<Long> beautyIds = new HashSet<>();
         for (SysBeauticianState beauticianState : beauticianStateList) {
             // 是否第一次计算改美疗师
             boolean isFirst = true;
@@ -183,12 +186,14 @@
             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()));
@@ -202,24 +207,27 @@
             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);
+                    AchieveNew saleManAchieve = new AchieveNew();
+                    BeanUtils.copyProperties(achieveNew, saleManAchieve);
+                    saleManAchieve.setBeaultId(achieveId);
 
-                    saleAchieveNumOfPeople(saleMan);
-                    achieveNewList.add(saleMan);
+                    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())) {
@@ -235,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());
         }
 
     }
@@ -288,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()) {
 
@@ -299,15 +332,20 @@
                     for (AchieveNew achieveNew : orderItem.getAchieveList()) {
                         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());
+            }
         }
     }
 
@@ -325,7 +363,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());
@@ -343,7 +384,7 @@
         }
 
         // 设置顾问人头业绩
-        saleAchieveNumOfPeople(achieveNew);
+//        saleAchieveNumOfPeople(achieveNew);
 
         achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL);
         achieveNew.setOrderId(pageOrder.getId());
@@ -379,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);
     }
 

--
Gitblit v1.9.1