You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

412 lines
18 KiB
Java

6 years ago
package com.kiisoo.ic.customer;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.kiisoo.ic.common.utils.httpClientUtil.HttpClientUtil;
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.bean.FriendDTO;
import com.kiisoo.ic.customer.bean.OpCustomerDTO;
6 years ago
import com.kiisoo.ic.customer.entity.OpCustomer;
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.customer.service.CustomerViewService;
import com.kiisoo.ic.domain.service.PrivilageDomainService;
import com.kiisoo.ic.employee.service.EmployeeService;
import com.kiisoo.ic.generalize.service.RetailCompanyService;
import com.kiisoo.ic.store.entity.PoiStore;
import com.kiisoo.ic.store.entity.PoiStoreStaff;
import com.kiisoo.ic.store.entity.PrivilageCpUserStoreDO;
import com.kiisoo.ic.store.mapper.PoiStoreDOMapper;
import com.kiisoo.ic.store.mapper.PoiStoreStaffDOMapper;
import com.kiisoo.ic.store.mapper.PrivilageCpUserStoreDOMapper;
6 years ago
import com.kiisoo.ic.store.service.PoiStoreService;
import com.kiisoo.ic.synchronous.entity.TurnBackDTO;
import com.kiisoo.ic.synchronous.entity.VipDataDTO;
import com.kiisoo.ic.system.enums.RoleEnum;
import com.kiisoo.ic.webappmy.vo.StafferInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
6 years ago
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
6 years ago
/**
* @ClassName: CustomerService
* @Description:
* @Auther: Caps
* @Date: 2020/4/2 0002 17:06
* @Version: v1
*/
@Service
public class CustomerService {
@Autowired
private OpCustomerDOMapper opCustomerDOMapper;
@Autowired
private OpSellerCustomerRelationDOMapper opSellerCustomerRelationDOMapper;
@Autowired
private OpVipDOMapper opVipDOMapper;
@Autowired
private PoiStoreDOMapper poiStoreDOMapper;
@Autowired
private PoiStoreStaffDOMapper poiStoreStaffDOMapper;
@Autowired
private PrivilageCpUserStoreDOMapper privilageCpUserStoreDOMapper;
@Autowired
private PoiStoreService poiStoreService;
@Autowired
private PrivilageDomainService privilageDomainService;
@Autowired
private RetailCompanyService retailCompanyService;
@Autowired
private CustomerViewService customerViewService;
6 years ago
/**
* token
*/
private final static String TOKEN = "BOSIDENG";
6 years ago
/**
*
* @param customerDTO
* @Description: id 1. 2.id 3.idvip
6 years ago
*/
@Transactional(rollbackFor = Exception.class)
public Long customerRelation(CustomerDTO customerDTO){
//客户信息
QueryWrapper<OpCustomer> customerWrapper = new QueryWrapper<>();
customerWrapper.eq("external_userid",customerDTO.getExternalUserid()).last("limit 1");
OpCustomer opCustomer = opCustomerDOMapper.selectOne(customerWrapper);
//店铺信息
QueryWrapper<PoiStore> poiWrapper = new QueryWrapper<>();
poiWrapper.eq("code",customerDTO.getShopCode()).last("limit 1");
PoiStore poiStore = poiStoreDOMapper.selectOne(poiWrapper);
//导购信息
QueryWrapper<PoiStoreStaff> 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.setExternalUserid(customerDTO.getExternalUserid());
String customerName = EmployeeService.filterEmoji(customerDTO.getName());
insertCustomer.setName(customerName);
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();
}
}
/**
* /vipVIP
* @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<OpVip> 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<OpCustomer> wrapper1 = new QueryWrapper<>();
wrapper1.eq("wechat_uni_id",customerModifyDTO.getUniId());
opCustomerDOMapper.update(opCustomer,wrapper1);
}
/**
*
* @param turnBackDTOS
* @return
*/
@Transactional(rollbackFor = Exception.class)
public void turnBack(TurnBackDTO turnBackDTOS){
if(turnBackDTOS.getWxData().getUnionId() == null || turnBackDTOS.getUserId() == null){
return;
}
//客户信息
QueryWrapper<OpCustomer> customerWrapper = new QueryWrapper<>();
customerWrapper.eq("wechat_uni_id",turnBackDTOS.getWxData().getUnionId()).last("limit 1");
OpCustomer opCustomer = opCustomerDOMapper.selectOne(customerWrapper);
//店铺信息
QueryWrapper<PrivilageCpUserStoreDO> poiWrapper = new QueryWrapper<>();
poiWrapper.eq("cp_user_id",turnBackDTOS.getUserId()).last("limit 1");
PrivilageCpUserStoreDO poiStore = privilageCpUserStoreDOMapper.selectOne(poiWrapper);
if(poiStore == null){
return;
}
PoiStoreStaff poiStoreStaff = null;
if(!turnBackDTOS.getEaCode().equals("0")){
//导购信息
QueryWrapper<PoiStoreStaff> wrapper = new QueryWrapper<>();
wrapper.eq("staff_code",turnBackDTOS.getEaCode()).eq("store_id",poiStore.getStoreId()).last("limit 1");
poiStoreStaff = poiStoreStaffDOMapper.selectOne(wrapper);
}
//做插入使用 --如果没有客户信息就先创建客户信息如果有就判断是否有客户导购得关系,如果没有就添加有就不管
OpCustomer insertCustomer = new OpCustomer();
insertCustomer.setWechatUniId(turnBackDTOS.getWxData().getUnionId());
insertCustomer.setName(turnBackDTOS.getName());
insertCustomer.setAvatarUrl(turnBackDTOS.getWxData().getAvatarUrl());
insertCustomer.setPhone(turnBackDTOS.getPhone());
if(null != opCustomer){
//更新一下
insertCustomer.setId(opCustomer.getId());
opCustomerDOMapper.updateById(insertCustomer);
if(poiStoreStaff != null){
//存在--1.处理客户导购关系。
sellerCustomerRelation(opCustomer,turnBackDTOS.getEaCode(),poiStore.getId(),poiStoreStaff.getUserId());
}
}else {
insertCustomer.setCreateBy(Constants.SYS_OPERATION);
//不存在
opCustomerDOMapper.insert(insertCustomer);
if(poiStoreStaff != null) {
//添加关系
sellerCustomerRelation(insertCustomer, turnBackDTOS.getEaCode(), poiStore.getId(), poiStoreStaff.getUserId());
}
}
//处理客户vip的关系
if(turnBackDTOS.getVipData() != null){
//有vip数据就不需要重新请求bsd的vip接口
vipCheck(turnBackDTOS);
}
}
/**
* vip
* @param turnBackDTO vip
*/
private void vipCheck(TurnBackDTO turnBackDTO){
OpCustomer opCustomer = new OpCustomer(turnBackDTO.getName(),turnBackDTO.getPhone());
opCustomer.setUpdateBy(Constants.SYS_OPERATION);
QueryWrapper<OpVip> wrapper = new QueryWrapper<>();
wrapper.eq("phone",turnBackDTO.getVipData().getPhone()).eq("name",turnBackDTO.getVipData().getName());
OpVip opVip = opVipDOMapper.selectOne(wrapper);
OpVip opVip1 = new OpVip();
opVip1.setStatus(1L);
opVip1.setPhone(turnBackDTO.getVipData().getPhone());
opVip1.setName(turnBackDTO.getVipData().getName());
opVip1.setBirthday(turnBackDTO.getVipData().getBirthday());
opVip1.setRegisterTime(new Date(turnBackDTO.getVipData().getRegisterTime()));
if(opVip == null){
//数据库没有这个数据--新建数据
opVip1.setCreateBy(Constants.SYS_OPERATION);
opVip1.setCreateTime(new Date());
opVipDOMapper.insert(opVip1);
//有vip信息就绑定信息
opCustomer.setMemberId(opVip1.getId());
}else {
opVip1.setId(opVip.getId());
opVip1.setUpdateTime(new Date());
opVip1.setUpdateBy(Constants.SYS_OPERATION);
opVipDOMapper.updateById(opVip1);
//有vip信息就绑定信息
opCustomer.setMemberId(opVip.getId());
}
QueryWrapper<OpCustomer> wrapper1 = new QueryWrapper<>();
wrapper1.eq("wechat_uni_id",turnBackDTO.getWxData().getUnionId());
opCustomerDOMapper.update(opCustomer,wrapper1);
}
/**
*
* @param opCustomer
* @param staffCode Code
*/
private void sellerCustomerRelation(OpCustomer opCustomer,String staffCode,long shopId,long sellerId){
6 years ago
QueryWrapper<PoiStoreStaff> staf = new QueryWrapper<PoiStoreStaff>();
staf.eq("staff_code",staffCode);
PoiStoreStaff poiStoreStaff = poiStoreStaffDOMapper.selectOne(staf);
QueryWrapper<OpSellerCustomerRelation> wrapper1 = new QueryWrapper<>();
6 years ago
wrapper1.eq("customer_id",opCustomer.getId()).eq("user_id",poiStoreStaff.getUserId()).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);
//判断是否有效
QueryWrapper<OpSellerCustomerRelation> wrapper = new QueryWrapper<>();
wrapper.eq("customer_id",opCustomer.getId()).last("limit 1");
OpSellerCustomerRelation op = opSellerCustomerRelationDOMapper.selectOne(wrapper);
if(op == null){
//有效
insertRelation.setType(1);
}else {
//无效
insertRelation.setType(2);
}
opSellerCustomerRelationDOMapper.insert(insertRelation);
}
6 years ago
}
/**
* id
* @param shopIds
*/
public List<OpCustomerDTO> getCustomerInfoByShopIds(Set<Long> shopIds, Date startDate, Date endDate, int pageNum, int pageSize){
PageHelper.startPage(pageNum,pageSize);
List<OpCustomerDTO> customers = opCustomerDOMapper.selectCustomerInfoByShopIds(shopIds, startDate, endDate);
AtomicInteger number = new AtomicInteger(1 + ((pageNum-1) * pageSize));
//求分页总数
Page<OpCustomerDTO> pageList = (Page<OpCustomerDTO>)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<OpCustomerDTO> getCustomerInfoBySellerId(long sellerId, Date startDate, Date endDate, int pageNum, int pageSize){
6 years ago
PageHelper.startPage(pageNum,pageSize);
List<OpCustomerDTO> customers = opCustomerDOMapper.selectCustomerInfoBySellerId(sellerId, startDate, endDate);
6 years ago
AtomicInteger number = new AtomicInteger(1 + ((pageNum-1) * pageSize));
//求分页总数
Page<OpCustomerDTO> pageList = (Page<OpCustomerDTO>)customers;
Long totalSize = pageList.getTotal();
for (OpCustomerDTO m : customers ) {
m.setTotalSize(totalSize);
m.setNumber(number.get());
number.incrementAndGet();
}
return customers;
}
/**
* 广
* @param userId id
* @param shopId id
* @param regionId id
* @param startDate
* @param endDate
*/
public List<OpCustomerDTO> getCustomerByUserAndDate(long userId,Long shopId, Long regionId , Long sellerId, Long companyId, Date startDate, Date endDate, int pageNum, int pageSize){
Set<Long> shopIds = new HashSet<>();
//根据店铺查询所有扫码客户信息
List<OpCustomerDTO> opCustomerDTOS;
if(sellerId != null){
opCustomerDTOS = getCustomerInfoBySellerId(sellerId, startDate, endDate,pageNum,pageSize);
return opCustomerDTOS;
}else if(shopId != null){
//如果有店铺则查店铺
shopIds.add(shopId);
}else if(regionId != null){
//如果有区域则查区域店铺
List<PoiStore> shops = poiStoreService.getRegionShop(regionId);
shopIds = shops.stream().map(p -> p.getId()).collect(Collectors.toSet());
List<Long> userAllShops = privilageDomainService.listUserDatePermission(userId);
shopIds.retainAll(userAllShops);
}else if(companyId != null){
//如果有公司则查公司店铺
Set<Long> sp = customerViewService.getCompanyShop(companyId, userId);
shopIds.addAll(sp);
}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);
}
/**
*
* @param userId
* @param sellerId
* @param search
* @param roleCode
*/
public Map<String,Object> listCustomer(Long userId,Long sellerId,String search,String roleCode, Integer type) throws Exception{
Map<String,Object> results = new HashMap<>();
Date thisDate = new Date();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, -24);
Date lastDate = dateFormat.parse(dateFormat.format(calendar.getTime()));
calendar.set(Calendar.HOUR_OF_DAY, -24);
Date earlyDate = dateFormat.parse(dateFormat.format(calendar.getTime()));
if (roleCode.equals(RoleEnum.ROLE_CODE_DZ.getRoleCode())){
List<StafferInfoVO> stafferInfoVOS = poiStoreStaffDOMapper.selectInfoById(userId);
Long shopId = stafferInfoVOS.get(0).getStoreId();
List<FriendDTO> thisList = opSellerCustomerRelationDOMapper.selectShopListByDate(shopId,null,sellerId,search,thisDate,thisDate, type);
results.put("this",thisList);
List<FriendDTO> lastList = opSellerCustomerRelationDOMapper.selectShopListByDate(shopId,null,sellerId,search,lastDate,lastDate, type);
results.put("last",lastList);
List<FriendDTO> earlyList = opSellerCustomerRelationDOMapper.selectShopListByDate(shopId,null,sellerId,search,null,earlyDate, type);
results.put("early",earlyList);
}else{
List<FriendDTO> thisList = opSellerCustomerRelationDOMapper.selectShopListByDate(null,userId,null,search,thisDate,thisDate, type);
results.put("this",thisList);
List<FriendDTO> lastList = opSellerCustomerRelationDOMapper.selectShopListByDate(null,userId,null,search,lastDate,lastDate, type);
results.put("last",lastList);
List<FriendDTO> earlyList = opSellerCustomerRelationDOMapper.selectShopListByDate(null,userId,null,search,null,earlyDate, type);
results.put("early",earlyList);
}
return results;
}
}