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 | 181 +++++++++++++++++++++++++++++---------------- 1 files changed, 116 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 da2e7ba..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 @@ -16,16 +16,19 @@ 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.*; 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.*; /** @@ -162,7 +165,7 @@ @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(); @@ -172,10 +175,8 @@ // 下单人是否计算消耗业绩 boolean flag = projServicesService.skipServiceOrderStep(Dictionary.SALE_MAN_IS_CONSUME_ACHIEVE); - //赠送项目是否计算消耗业绩 - boolean zsConsumeAchieve = projServicesService.skipServiceOrderStep(Dictionary.ZS_CONSUME_ACHIEVE); - + Set<Long> beautyIds = new HashSet<>(); for (SysBeauticianState beauticianState : beauticianStateList) { // 是否第一次计算改美疗师 boolean isFirst = true; @@ -188,24 +189,16 @@ // 是否为赠送业绩 if (Dictionary.TAOCAN_SOURCE_ZS.equals(projUse.getSource())) { - if(zsConsumeAchieve){ - achieveNew.setFreeConsume(projUse.getPrice()*beauticianState.getCount()); - //计算提成 - achieveNew.setProjPercentage( - calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS,achieveNew.getFreeConsume(),beauticianState.getProjId())); - }else{ - continue; - } - - - - - - } else { - achieveNew.setHisConsume(projUse.getPrice()*beauticianState.getCount()); + achieveNew.setFreeConsume(projUse.getPrice() * beauticianState.getCount()); //计算提成 achieveNew.setProjPercentage( - calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_BJ,achieveNew.getHisConsume(),beauticianState.getProjId())); + calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_ZS, achieveNew.getFreeConsume(), beauticianState.getProjId())); + + } else { + 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()); @@ -219,24 +212,24 @@ if (flag) { // if (!achieveId.equals(beauticianState.getStaffId())) { - AchieveNew saleManAchieve = new AchieveNew(); - BeanUtils.copyProperties(achieveNew, saleManAchieve); - saleManAchieve.setBeaultId(achieveId); + AchieveNew saleManAchieve = new AchieveNew(); + BeanUtils.copyProperties(achieveNew, saleManAchieve); + saleManAchieve.setBeaultId(achieveId); - saleAchieveNumOfPeople(saleManAchieve); - //销售人员不计算项目提成 - saleManAchieve.setProjPercentage(0D); - achieveNewList.add(saleManAchieve); + 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())) { @@ -252,11 +245,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()); } } @@ -265,34 +261,35 @@ AchieveRuleDao achieveRuleDao; private Double calculationProjPercentage(int type, Double consume, Long goodsId) { - ShoppingGoods shoppingGoods = shoppingGoodsDao.selectById(goodsId); - if(shoppingGoods.getAchieveRuleId()!=null){ + 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() ))){ + 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; - } - } + 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) { @@ -305,25 +302,53 @@ } } + /** + * 合并订单与服务单人头逻辑,即每一个客户对美疗师/顾问来说,每一天同一个客户只算一个人头。 + * 如若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); + } + } + + } + @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.getAchieveList())) { for (AchieveNew achieveNew : orderItem.getAchieveList()) { - if (achieveNew !=null && achieveNew.getGoodsCash()!=null) { - buildAchieve(pageOrder, orderItem, achieveNew); + 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()); + } } } @@ -333,7 +358,7 @@ BusParameterSettingsDao busParameterSettingsDao; private void buildAchieve(SysOrder pageOrder, SysOrderItem orderItem, AchieveNew achieveNew) { - BusParameterSettings shopManageJjcpasConsume =null; + BusParameterSettings shopManageJjcpasConsume = null; if (Dictionary.ORDER_STATU_TK.equals(pageOrder.getStatu())) { achieveNew.setId(null); achieveNew.setProjPercentage(0 - achieveNew.getProjPercentage()); @@ -341,7 +366,7 @@ } achieveNew.setVipId(pageOrder.getVipId()); - if(achieveNew.getSaleId()==null){ + if (achieveNew.getSaleId() == null) { achieveNew.setSaleId(pageOrder.getStaffId()); } @@ -351,18 +376,22 @@ } else { achieveNew.setDatatime(new Date()); } - if(Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(orderItem.getShoppingGoods().getGoodType())){ - if(shopManageJjcpasConsume==null){ + 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())){ +// if (AppConstance.IS_Y.equals(shopManageJjcpasConsume.getParamValue())) { +// achieveNew.setHisConsume(achieveNew.getGoodsCash()); +// } + if (BooleanEnum.TRUE.getValue() == shopManageJjcpasConsume.getIntParamValue()) { achieveNew.setHisConsume(achieveNew.getGoodsCash()); } } // 设置顾问人头业绩 - saleAchieveNumOfPeople(achieveNew); +// saleAchieveNumOfPeople(achieveNew); achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL); achieveNew.setOrderId(pageOrder.getId()); @@ -398,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); } @@ -415,7 +444,7 @@ Date endTime = calendar.getTime(); switch (type) { // 本日 - case 1 : + case 1: break; // 昨日 case 2: @@ -447,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