From 608f4bd5ff1a0024c04af0973b20ed360d1d16a0 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 09 Nov 2021 11:34:52 +0800
Subject: [PATCH] fix
---
zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java | 69 +++++++++++++++++++++++++++-------
1 files changed, 54 insertions(+), 15 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 201047f..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()) {
@@ -300,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());
+ }
}
}
@@ -345,7 +384,7 @@
}
// 设置顾问人头业绩
- saleAchieveNumOfPeople(achieveNew);
+// saleAchieveNumOfPeople(achieveNew);
achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL);
achieveNew.setOrderId(pageOrder.getId());
@@ -381,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