From ad31648c6f7a8bff1f7ccdf84b76006b9ffb78f8 Mon Sep 17 00:00:00 2001
From: jyy <jyy>
Date: Sat, 17 Jul 2021 15:59:10 +0800
Subject: [PATCH] 1.	新增套餐中有效和无效的操作 2.	会员修改门店功能 3.	套餐新增编辑次数功能 4.	计算是否为赠送的条件为,全部为赠送金额购买且支付金额大于0 5.	打印小票功能调整间距,和收银人 6.	PC端服务单新增划扣金额展示

---
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java |  107 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 98 insertions(+), 9 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 40331bd..e302e9f 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
@@ -1,5 +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;
@@ -15,15 +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.*;
 
 /**
@@ -45,6 +48,9 @@
 
     @Autowired
     private SysProjUseDao sysProjUseDao;
+
+    @Autowired
+    private SysProjServicesService projServicesService;
 
     @Override
     public int add(AchieveNew achieveNew) {
@@ -164,6 +170,12 @@
 
         Long achieveId = projServices.getCreateStaffId();
 
+        // 下单人是否计算消耗业绩
+        boolean flag = projServicesService.skipServiceOrderStep(Dictionary.SALE_MAN_IS_CONSUME_ACHIEVE);
+
+
+
+
         for (SysBeauticianState beauticianState : beauticianStateList) {
             // 是否第一次计算改美疗师
             boolean isFirst = true;
@@ -175,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());
@@ -187,7 +207,29 @@
             achieveNew.setShopId(projServices.getShopId());
             achieveNew.setCompanyId(projServices.getCompanyId());
             achieveNew.setShoppingGoodsId(projUse.getProjId());
-            achieveNew.setNumberOfPeople(1D / size);
+
+
+            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());
+            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())) {
                 achieveNew.setProjPercentage(Double.parseDouble(beauticianState.getExtract()));
@@ -211,6 +253,50 @@
 
     }
 
+    @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
+     */
+    private void saleAchieveNumOfPeople(AchieveNew achieveNew) {
+        List<AchieveNew> saleList = achieveNewDao.selectSaleManAchieveList(achieveNew.getSaleId(), achieveNew.getVipId(), new Date());
+        if (CollUtil.isEmpty(saleList)) {
+            achieveNew.setNumberOfPeople(1D);
+        } else {
+            achieveNew.setNumberOfPeople(1D / (1D + saleList.size()));
+            achieveNewDao.updateAchieveNumOfPeople(saleList, achieveNew.getNumberOfPeople());
+        }
+    }
+
     @Override
     public void addAchaeveByOrder(SysOrder pageOrder) {
         List<AchieveNew> achieveNewList = new ArrayList<>();
@@ -222,7 +308,6 @@
                     for (AchieveNew achieveNew : orderItem.getAchieveList()) {
                         if (achieveNew !=null   && achieveNew.getGoodsCash()!=null) {
                             buildAchieve(pageOrder,  orderItem, achieveNew);
-                            // 新增美疗师业绩
                             achieveNewList.add(achieveNew);
                         }
                     }
@@ -248,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());
@@ -265,7 +353,8 @@
 
         }
 
-
+        // 设置顾问人头业绩
+        saleAchieveNumOfPeople(achieveNew);
 
         achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL);
         achieveNew.setOrderId(pageOrder.getId());

--
Gitblit v1.9.1