package com.kiisoo.ic.customer; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.kiisoo.ic.constants.Constants; import com.kiisoo.ic.customer.bean.CustomerDTO; import com.kiisoo.ic.customer.bean.CustomerModifyDTO; import com.kiisoo.ic.customer.entity.OpCustomer; import com.kiisoo.ic.customer.bean.OpCustomerDTO; import com.kiisoo.ic.customer.entity.OpSellerCustomerRelation; import com.kiisoo.ic.customer.entity.OpVip; import com.kiisoo.ic.customer.mapper.OpCustomerDOMapper; import com.kiisoo.ic.customer.mapper.OpSellerCustomerRelationDOMapper; import com.kiisoo.ic.customer.mapper.OpVipDOMapper; import com.kiisoo.ic.domain.service.PrivilageDomainService; import com.kiisoo.ic.store.entity.PoiStore; import com.kiisoo.ic.store.service.PoiStoreService; import com.kiisoo.ic.store.entity.PoiStoreStaff; import com.kiisoo.ic.store.mapper.PoiStoreDOMapper; import com.kiisoo.ic.store.mapper.PoiStoreStaffDOMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** * @ClassName: CustomerService * @Description: 客户业务类 * @Auther: Caps * @Date: 2020/4/2 0002 17:06 * @Version: v1 */ @Service public class CustomerService { private final OpCustomerDOMapper opCustomerDOMapper; private final OpSellerCustomerRelationDOMapper opSellerCustomerRelationDOMapper; private final OpVipDOMapper opVipDOMapper; private final PoiStoreDOMapper poiStoreDOMapper; private final PoiStoreStaffDOMapper poiStoreStaffDOMapper; @Autowired private PoiStoreService poiStoreService; @Autowired private PrivilageDomainService privilageDomainService; @Autowired public CustomerService(OpCustomerDOMapper opCustomerDOMapper, OpSellerCustomerRelationDOMapper opSellerCustomerRelationDOMapper, OpVipDOMapper opVipDOMapper, PoiStoreDOMapper poiStoreDOMapper, PoiStoreStaffDOMapper poiStoreStaffDOMapper) { this.opCustomerDOMapper = opCustomerDOMapper; this.opSellerCustomerRelationDOMapper = opSellerCustomerRelationDOMapper; this.opVipDOMapper = opVipDOMapper; this.poiStoreDOMapper = poiStoreDOMapper; this.poiStoreStaffDOMapper = poiStoreStaffDOMapper; } /** * 绑定客户的关系 * @param customerDTO 传输实体 * @Description: 根据客户联系方式查询客户id 1.判断客户是否存在,不存在就添加,存在就进行下一步 2.判断客户id和导购是否绑定了关系如果绑定了就直接下一步,如果没有就绑定 3.判断客户id和vip是否绑定了关系如果绑定了就直接下一步,如果没有就绑定 */ @Transactional(rollbackFor = Exception.class) public Long customerRelation(CustomerDTO customerDTO){ //客户信息 QueryWrapper customerWrapper = new QueryWrapper<>(); customerWrapper.eq("wechat_uni_id",customerDTO.getUniId()).last("limit 1"); OpCustomer opCustomer = opCustomerDOMapper.selectOne(customerWrapper); //店铺信息 QueryWrapper poiWrapper = new QueryWrapper<>(); poiWrapper.eq("code",customerDTO.getShopCode()).last("limit 1"); PoiStore poiStore = poiStoreDOMapper.selectOne(poiWrapper); //导购信息 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("staff_code",customerDTO.getStaffCode()).eq("store_code",customerDTO.getShopCode()).last("limit 1"); PoiStoreStaff poiStoreStaff = poiStoreStaffDOMapper.selectOne(wrapper); if(poiStoreStaff == null || poiStore == null){ return null; } //做插入使用 OpCustomer insertCustomer = new OpCustomer(); insertCustomer.setWechatUniId(customerDTO.getUniId()); insertCustomer.setName(customerDTO.getName()); if(null != opCustomer){ //存在--1.处理客户导购关系。 sellerCustomerRelation(opCustomer,customerDTO.getStaffCode(),poiStore.getId(),poiStoreStaff.getUserId()); return opCustomer.getId(); }else { insertCustomer.setCreateBy(Constants.SYS_OPERATION); //不存在 opCustomerDOMapper.insert(insertCustomer); //添加关系 sellerCustomerRelation(insertCustomer,customerDTO.getStaffCode(),poiStore.getId(),poiStoreStaff.getUserId()); return insertCustomer.getId(); } } /** * 录入客户信息/绑定客户vip关系(如果是VIP的话) * @param customerModifyDTO 更新实体 */ @Transactional(rollbackFor = Exception.class) public void customerVipRelation(CustomerModifyDTO customerModifyDTO){ OpCustomer opCustomer = new OpCustomer(customerModifyDTO.getName(),customerModifyDTO.getPhone()); opCustomer.setUpdateBy(Constants.SYS_OPERATION); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("phone",customerModifyDTO.getPhone()).last("limit 1"); OpVip opVip = opVipDOMapper.selectOne(wrapper); if(null != opVip){ //有vip信息就绑定信息 opCustomer.setMemberId(opVip.getId()); } QueryWrapper wrapper1 = new QueryWrapper<>(); wrapper1.eq("wechat_uni_id",customerModifyDTO.getUniId()); opCustomerDOMapper.update(opCustomer,wrapper1); } /** * 处理客户和导购的关系 * @param opCustomer 客户的数据信息 * @param staffCode 导购Code */ private void sellerCustomerRelation(OpCustomer opCustomer,String staffCode,long shopId,long sellerId){ QueryWrapper wrapper1 = new QueryWrapper<>(); wrapper1.eq("customer_id",opCustomer.getId()).eq("staff_code",staffCode).eq("store_id",shopId).last("limit 1"); OpSellerCustomerRelation opSellerCustomerRelation = opSellerCustomerRelationDOMapper.selectOne(wrapper1); if(null == opSellerCustomerRelation){ //不存在就添加 OpSellerCustomerRelation insertRelation = new OpSellerCustomerRelation(); insertRelation.setCreateTime(new Date()); insertRelation.setUpdateTime(new Date()); insertRelation.setCustomerId(opCustomer.getId()); insertRelation.setStoreId(shopId); insertRelation.setUserId(sellerId); insertRelation.setCreateBy(Constants.SYS_OPERATION); insertRelation.setUpdateBy(Constants.SYS_OPERATION); opSellerCustomerRelationDOMapper.insert(insertRelation); } } /** * 根据店铺id找到顾客信息 * @param shopIds */ public List getCustomerInfoByShopIds(Set shopIds, Date startDate, Date endDate, int pageNum, int pageSize){ PageHelper.startPage(pageNum,pageSize); List customers = opCustomerDOMapper.selectCustomerInfoByShopIds(shopIds, startDate, endDate); AtomicInteger number = new AtomicInteger(1 + ((pageNum-1) * pageSize)); //求分页总数 Page pageList = (Page)customers; Long totalSize = pageList.getTotal(); for (OpCustomerDTO m : customers ) { m.setTotalSize(totalSize); m.setNumber(number.get()); number.incrementAndGet(); } return customers; } /** * 根据导购id找到顾客信息 * @param sellerId */ public List getCustomerInfoByShopIds(long sellerId, Date startDate, Date endDate){ List customers = opCustomerDOMapper.selectCustomerInfoBySellerId(sellerId, startDate, endDate); return customers; } /** * 根据条件查询扫码推广的客户信息 * @param userId 用户id * @param shopId 店铺id * @param regionId 区域id * @param startDate 开始时间 * @param endDate 结束时间 */ public List getCustomerByUserAndDate(long userId,Long shopId, Long regionId , Long sellerId, Date startDate, Date endDate, int pageNum, int pageSize){ Set shopIds = new HashSet<>(); //根据店铺查询所有扫码客户信息 List opCustomerDTOS; //如果有店铺则查店铺 if(sellerId != null){ opCustomerDTOS = getCustomerInfoByShopIds(sellerId, startDate, endDate); return opCustomerDTOS; }else if(shopId != null){ shopIds.add(shopId); }else if(regionId != null){ //如果有区域则查区域店铺 List shops = poiStoreService.getRegionShop(regionId); shopIds = shops.stream().map(p -> p.getId()).collect(Collectors.toSet()); List userAllShops = privilageDomainService.listUserDatePermission(userId); shopIds.retainAll(userAllShops); }else{ //查询用户权限店铺 shopIds = new HashSet<>(privilageDomainService.listUserDatePermission(userId)); } //根据店铺查询所有扫码客户信息 opCustomerDTOS = getCustomerInfoByShopIds(shopIds, startDate, endDate,pageNum,pageSize); return opCustomerDTOS; } /** * 修改客户信息 * @param opCustomer */ public void editCustomerInfo(OpCustomer opCustomer){ opCustomerDOMapper.updateById(opCustomer); } }