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 | 273 +++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 208 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 d2466f9..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) { @@ -161,6 +172,11 @@ 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,40 +188,138 @@ achieveNew.setVipId(projServices.getVipId()); // 是否为赠送业绩 if (Dictionary.TAOCAN_SOURCE_ZS.equals(projUse.getSource())) { - achieveNew.setFreeConsume(projUse.getPrice()); + + achieveNew.setFreeConsume(projUse.getPrice() * beauticianState.getCount()); + //计算提成 + achieveNew.setProjPercentage( + calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS, achieveNew.getFreeConsume(), beauticianState.getProjId())); + } else { - achieveNew.setHisConsume(projUse.getPrice()); + 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()); - if (projServices.getCreateTime() != null) { - achieveNew.setDatatime(projServices.getCreateTime()); - } else { - achieveNew.setDatatime(new Date()); - } + achieveNew.setDatatime(new Date()); achieveNew.setOrderType(Dictionary.ORDER_TYPE_SERVICE); achieveNew.setServiceOrderId(projServices.getId()); achieveNew.setOrderItemId(beauticianState.getId()); 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); + } } } @@ -213,78 +327,80 @@ @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()); } } - } else { - // 如果该订单明细没有设置美疗师则单独设置顾问业绩 - AchieveNew achieveNew = new AchieveNew(); - // 顾问业绩等于收款金额 - achieveNew.setT1(orderItem.getPayMoney() + ""); - buildAchieve(pageOrder, orderItem, achieveNew); - // 新增顾问业绩 - achieveNewList.add(achieveNew); } } } + 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) { - achieveNew.setVipId(pageOrder.getVipId()); - achieveNew.setSaleId(pageOrder.getStaffId()); + BusParameterSettings shopManageJjcpasConsume = null; + if (Dictionary.ORDER_STATU_TK.equals(pageOrder.getStatu())) { + achieveNew.setId(null); + achieveNew.setProjPercentage(0 - achieveNew.getProjPercentage()); + achieveNew.setGoodsCash(0 - achieveNew.getGoodsCash()); + } - if (pageOrder.getOrderTime() != null) { - achieveNew.setDatatime(pageOrder.getOrderTime()); - } else if (pageOrder.getOrderTime() != null) { - achieveNew.setDatatime(pageOrder.getOrderTime()); + achieveNew.setVipId(pageOrder.getVipId()); + 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()); achieveNew.setShopId(pageOrder.getShopId()); + achieveNew.setCompanyId(pageOrder.getCompanyId()); achieveNew.setShoppingGoodsId(orderItem.getGoodsId()); // 是否赠送 achieveNew.setT2(orderItem.getIsFree()); - // 根据商品类型设置业绩类型 - - String goodType = shoppingGoodsDao.selectById(orderItem.getGoodsId()).getGoodType(); - if (orderItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY) - && Dictionary.SHOPPING_GOODS_TYPE_XM.equals(goodType)) { - // 现金支付设置现金单次 - achieveNew.setProjCash(Double.parseDouble(achieveNew.getT1())); - - } else if (orderItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY) - && Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(goodType)) { - // 设置现金产品 - achieveNew.setGoodsCash(Double.parseDouble(achieveNew.getT1())); - } else if (orderItem.getPayMethod().equals(Dictionary.PAY_TYPE_MOENY) - && (Dictionary.SHOPPING_GOODS_TYPE_TC.equals(goodType) - || Dictionary.SHOPPING_GOODS_TYPE_CZK.equals(goodType) - || Dictionary.SHOPPING_GOODS_TYPE_ZHK.equals(goodType) - || Dictionary.SHOPPING_GOODS_TYPE_TCK.equals(goodType))) { - // 设置卡项 - achieveNew.setCardCash(Double.parseDouble(achieveNew.getT1())); - } else if (!orderItem.getPayMethod().equals(Dictionary.PAY_TYPE_CARD)) { - // 设置划扣金额 - achieveNew.setConsume(Double.parseDouble(achieveNew.getT1())); - } } @Override @@ -311,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); } @@ -328,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); @@ -355,4 +471,31 @@ return achieveNewDao.selectUserAchieveByTime(startTime, endTime, users.getSuId()); } + + @Override + 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