From 1eedb8a57c2eb5c9953dcf058184ebdc6987fbf5 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Tue, 24 May 2022 15:14:21 +0800
Subject: [PATCH] Merge branch 'feature/订单服务单代码改造' into alpha
---
zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java | 227 ++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 193 insertions(+), 34 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 c91af9b..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
@@ -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;
@@ -8,19 +10,25 @@
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.app.vo.UserAchieveVo;
+import com.matrix.system.common.bean.BusParameterSettings;
import com.matrix.system.common.bean.SysUsers;
+import com.matrix.system.common.constance.AppConstance;
+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.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.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.*;
/**
@@ -42,6 +50,9 @@
@Autowired
private SysProjUseDao sysProjUseDao;
+
+ @Autowired
+ private SysProjServicesService projServicesService;
@Override
public int add(AchieveNew achieveNew) {
@@ -154,13 +165,18 @@
@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();
Long achieveId = projServices.getCreateStaffId();
+ // 下单人是否计算消耗业绩
+ boolean flag = projServicesService.skipServiceOrderStep(Dictionary.SALE_MAN_IS_CONSUME_ACHIEVE);
+
+
+ Set<Long> beautyIds = new HashSet<>();
for (SysBeauticianState beauticianState : beauticianStateList) {
// 是否第一次计算改美疗师
boolean isFirst = true;
@@ -172,9 +188,17 @@
achieveNew.setVipId(projServices.getVipId());
// 是否为赠送业绩
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()));
+
} 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());
@@ -184,25 +208,118 @@
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()));
}
if (isFirst && beauticianState.getEndTime() != null && beauticianState.getBeginTime() != null) {
- long timeSpace = beauticianState.getEndTime().getTime() - beauticianState.getBeginTime().getTime();
- if (timeSpace > 0) {
- achieveNew.setProjTime((int) (timeSpace / 1000 / 60));
- } else {
- achieveNew.setProjTime(1);
- }
+// long timeSpace = beauticianState.getEndTime().getTime() - beauticianState.getBeginTime().getTime();
+// if (timeSpace > 0) {
+// achieveNew.setProjTime((int) (timeSpace / 1000 / 60));
+// } else {
+// achieveNew.setProjTime(1);
+// }
+ achieveNew.setProjTime(beauticianState.getExcTime());
isFirst = false;
}
+
+ beautyIds.add(achieveNew.getBeaultId());
achieveNewList.add(achieveNew);
}
if (CollectionUtils.isNotEmpty(achieveNewList)) {
achieveNewDao.batchInsert(achieveNewList);
+ achieveNumOfPeople(beautyIds, projServices.getVipId());
+ }
+
+ }
+
+ @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());
+ }
+ }
+
+ /**
+ * 合并订单与服务单人头逻辑,即每一个客户对美疗师/顾问来说,每一天同一个客户只算一个人头。
+ * 如若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);
+ }
}
}
@@ -210,44 +327,72 @@
@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.getAchaeveList())) {
+ if (orderItem != null && CollectionUtils.isNotEmpty(orderItem.getAchieveList())) {
- for (AchieveNew achieveNew : orderItem.getAchaeveList()) {
- if (achieveNew !=null && achieveNew.getT1()!=null) {
- buildAchieve(pageOrder, orderItem, achieveNew);
- // 新增美疗师业绩
+ 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());
+ }
}
}
@Autowired
ShoppingGoodsDao shoppingGoodsDao;
+ @Autowired
+ BusParameterSettingsDao busParameterSettingsDao;
private void buildAchieve(SysOrder pageOrder, SysOrderItem orderItem, AchieveNew achieveNew) {
+ BusParameterSettings shopManageJjcpasConsume = null;
if (Dictionary.ORDER_STATU_TK.equals(pageOrder.getStatu())) {
achieveNew.setId(null);
achieveNew.setProjPercentage(0 - achieveNew.getProjPercentage());
- achieveNew.setT1((0 - Double.parseDouble(achieveNew.getT1())) + "");
+ achieveNew.setGoodsCash(0 - achieveNew.getGoodsCash());
}
achieveNew.setVipId(pageOrder.getVipId());
- achieveNew.setSaleId(pageOrder.getStaffId());
+ if (achieveNew.getSaleId() == null) {
+ achieveNew.setSaleId(pageOrder.getStaffId());
+ }
+
if (pageOrder.getPayTime() != null) {
achieveNew.setDatatime(pageOrder.getPayTime());
} else {
achieveNew.setDatatime(new Date());
}
+ 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())) {
+// achieveNew.setHisConsume(achieveNew.getGoodsCash());
+// }
+ if (BooleanEnum.TRUE.getValue() == shopManageJjcpasConsume.getIntParamValue()) {
+ achieveNew.setHisConsume(achieveNew.getGoodsCash());
+ }
+
+ }
+
+ // 设置顾问人头业绩
+// saleAchieveNumOfPeople(achieveNew);
+
achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL);
achieveNew.setOrderId(pageOrder.getId());
achieveNew.setOrderItemId(orderItem.getId());
@@ -256,14 +401,6 @@
achieveNew.setShoppingGoodsId(orderItem.getGoodsId());
// 是否赠送
achieveNew.setT2(orderItem.getIsFree());
- // 根据商品类型设置业绩类型
-
- if (Dictionary.ACHIEVE_TYPE_CASH.equals(achieveNew.getT3())){
- achieveNew.setCardCash(Double.parseDouble(achieveNew.getT1()));
- } else {
- // 设置划扣金额
- achieveNew.setConsume(Double.parseDouble(achieveNew.getT1()));
- }
}
@Override
@@ -290,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);
}
@@ -307,19 +444,19 @@
Date endTime = calendar.getTime();
switch (type) {
// 本日
- case 1 :
+ case 1:
break;
- // 昨日
+ // 昨日
case 2:
startTime = DateUtil.previousNDate(startTime, 1);
endTime = startTime;
break;
- // 本月
+ // 本月
case 3:
calendar.set(Calendar.DAY_OF_MONTH, 1);
startTime = calendar.getTime();
break;
- // 上月
+ // 上月
case 4:
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
@@ -339,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