| | |
| | | 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.*; |
| | | |
| | | /** |
| | |
| | | // 下单人是否计算消耗业绩 |
| | | boolean flag = projServicesService.skipServiceOrderStep(Dictionary.SALE_MAN_IS_CONSUME_ACHIEVE); |
| | | |
| | | |
| | | Set<Long> beautyIds = new HashSet<>(); |
| | | for (SysBeauticianState beauticianState : beauticianStateList) { |
| | | // 是否第一次计算改美疗师 |
| | | boolean isFirst = true; |
| | |
| | | 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.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())) { |
| | |
| | | achieveNew.setProjTime(beauticianState.getExcTime()); |
| | | isFirst = false; |
| | | } |
| | | |
| | | beautyIds.add(achieveNew.getBeaultId()); |
| | | achieveNewList.add(achieveNew); |
| | | } |
| | | |
| | | if (CollectionUtils.isNotEmpty(achieveNewList)) { |
| | | achieveNewDao.batchInsert(achieveNewList); |
| | | achieveNumOfPeople(beautyIds, projServices.getVipId()); |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * 合并订单与服务单人头逻辑,即每一个客户对美疗师/顾问来说,每一天同一个客户只算一个人头。 |
| | | * 如若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()) { |
| | | |
| | |
| | | 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()); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | achieveNew.setVipId(pageOrder.getVipId()); |
| | | achieveNew.setSaleId(pageOrder.getStaffId()); |
| | | if(achieveNew.getSaleId()==null){ |
| | | achieveNew.setSaleId(pageOrder.getStaffId()); |
| | | } |
| | | |
| | | |
| | | if (pageOrder.getPayTime() != null) { |
| | | achieveNew.setDatatime(pageOrder.getPayTime()); |
| | |
| | | } |
| | | |
| | | // 设置顾问人头业绩 |
| | | saleAchieveNumOfPeople(achieveNew); |
| | | // saleAchieveNumOfPeople(achieveNew); |
| | | |
| | | achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL); |
| | | achieveNew.setOrderId(pageOrder.getId()); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<AchieveNew> findVipConsumeStatisticsList(AchieveNew achieveNew, PaginationVO pageVo) { |
| | | public List<Map<String, Object>> findVipConsumeStatisticsList(AchieveNew achieveNew, PaginationVO pageVo) { |
| | | return achieveNewDao.selectVipConsumeStatisticsList(achieveNew, pageVo); |
| | | } |
| | | |
| | |
| | | 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); |
| | | } |
| | | } |