|  |  |  | 
|---|
|  |  |  | package com.matrix.system.hive.service.imp; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import cn.hutool.core.collection.CollUtil; | 
|---|
|  |  |  | import com.matrix.core.constance.MatrixConstance; | 
|---|
|  |  |  | import com.matrix.core.exception.GlobleException; | 
|---|
|  |  |  | import com.matrix.core.pojo.PaginationVO; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.hive.bean.*; | 
|---|
|  |  |  | 
|---|
|  |  |  | import com.matrix.system.hive.dao.SysProjUseDao; | 
|---|
|  |  |  | import com.matrix.system.hive.plugin.util.CollectionUtils; | 
|---|
|  |  |  | import com.matrix.system.hive.service.AchieveNewService; | 
|---|
|  |  |  | import com.matrix.system.hive.service.SysProjServicesService; | 
|---|
|  |  |  | import org.springframework.beans.BeanUtils; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SysProjUseDao sysProjUseDao; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SysProjServicesService projServicesService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public int add(AchieveNew achieveNew) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Long achieveId = projServices.getCreateStaffId(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 下单人是否计算消耗业绩 | 
|---|
|  |  |  | boolean flag = projServicesService.skipServiceOrderStep(Dictionary.SALE_MAN_IS_CONSUME_ACHIEVE); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (SysBeauticianState beauticianState : beauticianStateList) { | 
|---|
|  |  |  | // 是否第一次计算改美疗师 | 
|---|
|  |  |  | boolean isFirst = true; | 
|---|
|  |  |  | 
|---|
|  |  |  | achieveNew.setShopId(projServices.getShopId()); | 
|---|
|  |  |  | achieveNew.setCompanyId(projServices.getCompanyId()); | 
|---|
|  |  |  | achieveNew.setShoppingGoodsId(projUse.getProjId()); | 
|---|
|  |  |  | achieveNew.setNumberOfPeople(1D / size); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (flag) { | 
|---|
|  |  |  | //                if (!achieveId.equals(beauticianState.getStaffId())) { | 
|---|
|  |  |  | AchieveNew saleMan = new AchieveNew(); | 
|---|
|  |  |  | BeanUtils.copyProperties(achieveNew, saleMan); | 
|---|
|  |  |  | saleMan.setBeaultId(achieveId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | saleAchieveNumOfPeople(saleMan); | 
|---|
|  |  |  | achieveNewList.add(saleMan); | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | achieveNewList.add(achieveNew); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 顾问人头业绩 | 
|---|
|  |  |  | * @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()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void addAchaeveByOrder(SysOrder pageOrder) { | 
|---|
|  |  |  | List<AchieveNew> achieveNewList = new ArrayList<>(); | 
|---|
|  |  |  | 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) { | 
|---|
|  |  |  | for (AchieveNew achieveNew : orderItem.getAchieveList()) { | 
|---|
|  |  |  | if (achieveNew !=null   && achieveNew.getGoodsCash()!=null) { | 
|---|
|  |  |  | buildAchieve(pageOrder,  orderItem, achieveNew); | 
|---|
|  |  |  | // 新增美疗师业绩 | 
|---|
|  |  |  | achieveNewList.add(achieveNew); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @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()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | achieveNew.setDatatime(new Date()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Dictionary.SHOPPING_GOODS_TYPE_JJCP.equals(orderItem.getShoppingGoods().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()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置顾问人头业绩 | 
|---|
|  |  |  | saleAchieveNumOfPeople(achieveNew); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | achieveNew.setOrderType(Dictionary.ORDER_TYPE_SEAL); | 
|---|
|  |  |  | achieveNew.setOrderId(pageOrder.getId()); | 
|---|
|  |  |  | achieveNew.setOrderItemId(orderItem.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 | 
|---|
|  |  |  | 
|---|
|  |  |  | // 本日 | 
|---|
|  |  |  | 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); | 
|---|