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;
|
import com.matrix.core.tools.DateUtil;
|
import com.matrix.core.tools.ModelUtils;
|
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.*;
|
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.hiveErp.pojo.AchieveRuleItem;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
|
/**
|
* This field was generated by Zking.software.Codegen.
|
*
|
* @date 2019-03-24 16:01
|
*/
|
@Service("achieveNewService")
|
public class AchieveNewServiceImpl implements AchieveNewService {
|
|
@Autowired
|
private AchieveNewDao achieveNewDao;
|
|
@Autowired
|
private SysUsersDao shopstaffInfoDao;
|
|
@Autowired
|
SysBeauticianStateDao sysBeauticianStateDao;
|
|
@Autowired
|
private SysProjUseDao sysProjUseDao;
|
|
@Autowired
|
private SysProjServicesService projServicesService;
|
|
@Override
|
public int add(AchieveNew achieveNew) {
|
|
return achieveNewDao.insert(achieveNew);
|
|
}
|
|
@Override
|
public int batchAdd(List<AchieveNew> achieveNewList) {
|
int num = 0;
|
|
int c = 10000;
|
int size = achieveNewList.size() / c + 1;
|
for (int i = 0; i < size; i++) {
|
int begin = i * c;
|
int end = (i + 1) * c;
|
end = end >= achieveNewList.size() ? achieveNewList.size() : end;
|
List<AchieveNew> insertList = achieveNewList.subList(begin, end);
|
num += achieveNewDao.batchInsert(insertList);
|
}
|
return num;
|
|
}
|
|
@Override
|
public int modifyByMap(AchieveNew oldAchieveNew, AchieveNew newAchieveNew) {
|
|
try {
|
if (!ModelUtils.isModified(oldAchieveNew, newAchieveNew)) {
|
return 1;
|
}
|
} catch (NoSuchFieldException e1) {
|
e1.printStackTrace();
|
}
|
Map<String, Object> modifyMap = null;
|
try {
|
modifyMap = ModelUtils.comparePojo2Map(oldAchieveNew, newAchieveNew);
|
} catch (Exception e) {
|
throw new GlobleException("数据对比失败");
|
}
|
if (modifyMap.size() > 0) {
|
modifyMap.put("id", oldAchieveNew.getId());
|
achieveNewDao.updateByMap(modifyMap);
|
}
|
return 1;
|
}
|
|
@Override
|
public int modifyByModel(AchieveNew achieveNew) {
|
|
return achieveNewDao.updateByModel(achieveNew);
|
|
}
|
|
@Override
|
public int remove(List<Long> list) {
|
|
return achieveNewDao.deleteByIds(list);
|
|
}
|
|
@Override
|
public int removeById(Long id) {
|
|
return achieveNewDao.deleteById(id);
|
|
}
|
|
@Override
|
public int removeByModel(AchieveNew achieveNew) {
|
|
return achieveNewDao.deleteByModel(achieveNew);
|
|
}
|
|
@Override
|
public List<AchieveNew> findInPage(AchieveNew achieveNew, PaginationVO pageVo) {
|
|
return achieveNewDao.selectInPage(achieveNew, pageVo);
|
|
}
|
|
@Override
|
public List<AchieveNew> findByModel(AchieveNew achieveNew) {
|
|
return achieveNewDao.selectByModel(achieveNew);
|
|
}
|
|
@Override
|
public int findTotal(AchieveNew achieveNew) {
|
|
return achieveNewDao.selectTotalRecord(achieveNew);
|
|
}
|
|
@Override
|
public AchieveNew findById(Long id) {
|
|
return achieveNewDao.selectById(id);
|
|
}
|
|
@Override
|
public int modify(AchieveNew obje) {
|
|
return 0;
|
}
|
|
|
@Override
|
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);
|
|
for (SysBeauticianState beauticianState : beauticianStateList) {
|
// 是否第一次计算改美疗师
|
boolean isFirst = true;
|
SysProjUse projUse = sysProjUseDao.selectById(beauticianState.getPuseId());
|
AchieveNew achieveNew = new AchieveNew();
|
// 设置顾问id
|
achieveNew.setSaleId(achieveId);
|
achieveNew.setBeaultId(beauticianState.getStaffId());
|
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.setProjPercentage(
|
calculationProjPercentage(AchieveRuleItem.ACHIEVE_TYPE_BJ,achieveNew.getHisConsume(),beauticianState.getProjId()));
|
}
|
achieveNew.setT2(projUse.getSource());
|
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());
|
|
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);
|
// }
|
achieveNew.setProjTime(beauticianState.getExcTime());
|
isFirst = false;
|
}
|
achieveNewList.add(achieveNew);
|
}
|
|
if (CollectionUtils.isNotEmpty(achieveNewList)) {
|
achieveNewDao.batchInsert(achieveNewList);
|
}
|
|
}
|
|
@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());
|
}
|
}
|
|
@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.getAchieveList())) {
|
|
for (AchieveNew achieveNew : orderItem.getAchieveList()) {
|
if (achieveNew !=null && achieveNew.getGoodsCash()!=null) {
|
buildAchieve(pageOrder, orderItem, achieveNew);
|
// 新增美疗师业绩
|
achieveNewList.add(achieveNew);
|
}
|
}
|
}
|
}
|
}
|
if (CollectionUtils.isNotEmpty(achieveNewList)) {
|
achieveNewDao.batchInsert(achieveNewList);
|
}
|
}
|
|
@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.setGoodsCash(0 - achieveNew.getGoodsCash());
|
}
|
|
achieveNew.setVipId(pageOrder.getVipId());
|
achieveNew.setSaleId(pageOrder.getStaffId());
|
|
if (pageOrder.getPayTime() != null) {
|
achieveNew.setDatatime(pageOrder.getPayTime());
|
} 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.setShopId(pageOrder.getShopId());
|
achieveNew.setCompanyId(pageOrder.getCompanyId());
|
achieveNew.setShoppingGoodsId(orderItem.getGoodsId());
|
// 是否赠送
|
achieveNew.setT2(orderItem.getIsFree());
|
}
|
|
@Override
|
public List<AchieveNew> findDayFlow(AchieveNew achieveNew, PaginationVO pageVo) {
|
|
return achieveNewDao.findDayFlow(achieveNew, pageVo);
|
}
|
|
@Override
|
public int findDayFlowTotal(AchieveNew achieveNew, PaginationVO pageVo) {
|
return achieveNewDao.findDayFlowTotal(achieveNew, pageVo);
|
}
|
|
@Override
|
public List<AchieveNew> findSumDailyInfoNew(AchieveNew achieveNew, PaginationVO pageVo) {
|
|
return achieveNewDao.findSumDailyInfoNew(achieveNew, pageVo);
|
}
|
|
|
@Override
|
public void modifyAchieveTime(AchieveNew achieveNew) {
|
achieveNewDao.updateAchieveTime(achieveNew);
|
}
|
|
@Override
|
public List<AchieveNew> findVipConsumeStatisticsList(AchieveNew achieveNew, PaginationVO pageVo) {
|
return achieveNewDao.selectVipConsumeStatisticsList(achieveNew, pageVo);
|
}
|
|
@Override
|
public int findVipConsumeStatisticsTotal(AchieveNew achieveNew) {
|
return achieveNewDao.selectVipConsumeStatisticsTotal(achieveNew);
|
}
|
|
@Override
|
public UserAchieveVo findUserAchieveByTime(int type) {
|
SysUsers users = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
|
Calendar calendar = Calendar.getInstance();
|
Date startTime = calendar.getTime();
|
Date endTime = calendar.getTime();
|
switch (type) {
|
// 本日
|
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);
|
startTime = calendar.getTime();
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
endTime = calendar.getTime();
|
break;
|
default:
|
break;
|
|
}
|
|
return achieveNewDao.selectUserAchieveByTime(startTime, endTime, users.getSuId());
|
}
|
|
@Override
|
public List<AchieveNew> findOrderItemAchieve(Long orderId) {
|
return achieveNewDao.selectOrderItemAchieveByOrderId(orderId);
|
}
|
}
|