package com.xzx.gc.user.service;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.xzx.gc.common.constant.CommonEnum;
|
import com.xzx.gc.common.constant.Constants;
|
import com.xzx.gc.common.constant.RedisKeyConstant;
|
import com.xzx.gc.common.constant.UserEnum;
|
import com.xzx.gc.common.utils.*;
|
import com.xzx.gc.entity.*;
|
import com.xzx.gc.model.user.UserGatherApplyListParam;
|
import com.xzx.gc.model.user.UserGatherAuditParam;
|
import com.xzx.gc.user.mapper.CoreUserMapper;
|
import com.xzx.gc.user.mapper.SysItemUserMapper;
|
import com.xzx.gc.user.mapper.UserGatherApplyMapper;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import tk.mybatis.mapper.entity.Example;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
@Service
|
@Transactional
|
public class UserGatherApplyService {
|
|
|
@Autowired
|
private UserGatherInfoService userGatherInfoService;
|
|
@Autowired
|
private IdUtils idUtils;
|
|
@Autowired
|
private UserService userService;
|
|
@Autowired
|
private AddressService addressService;
|
|
@Autowired
|
private UserGatherApplyMapper userGatherApplyMapper;
|
|
@Autowired
|
private AddressLevelService addressLevelService;
|
|
@Autowired
|
private AccountService accountService;
|
|
@Autowired
|
private HttpServletRequest request;
|
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Autowired
|
private TokenUtil tokenUtil;
|
|
@Autowired
|
private SysEnvironmentalInfoService sysEnvironmentalInfoService;
|
|
@Autowired
|
private OtherUserService otherUserService;
|
|
@Autowired
|
private UserRoleService userRoleService;
|
|
@Autowired
|
private PartnerTraceService partnerTraceService;
|
|
@Autowired
|
private PartnerGaodeService partnerGaodeService;
|
|
@Autowired
|
private UserScrapStoreService userScrapStoreService;
|
|
@Autowired
|
private SysItemUserMapper sysItemUserMapper;
|
|
@Autowired
|
private UserTargetInfoService userTargetInfoService;
|
|
@Autowired
|
private PartnerFenceService partnerFenceService;
|
|
@Autowired
|
private CoreUserMapper coreUserMapper;
|
|
public UserGatherApply findByRelationId(String relationId){
|
//可能申请多次
|
Example example=new Example(UserGatherApply.class);
|
Example.Criteria criteria = example.createCriteria();
|
criteria.andEqualTo("relationId",relationId);
|
example.setOrderByClause("create_time desc");
|
List<UserGatherApply> userGatherApplies = userGatherApplyMapper.selectByExample(example);
|
if(CollUtil.isNotEmpty(userGatherApplies)){
|
return userGatherApplies.get(0);
|
}
|
return null;
|
}
|
|
public void apply(UserGatherApply userGatherApply) {
|
|
//获取省市区
|
AddressLevelInfo byAdcode = addressLevelService.findByLocation(userGatherApply.getLongitude(), userGatherApply.getLatitude());
|
userGatherApply.setProvinceId(byAdcode.getLevel1Id());
|
userGatherApply.setCityId(byAdcode.getLevel2Id());
|
userGatherApply.setTownshipId(byAdcode.getLevel3Id());
|
userGatherApply.setStatus(CommonEnum.待审核.getValue());
|
|
//所属推广员ID
|
Short applyOrigin = userGatherApply.getApplyOrigin();
|
String createUserId = userGatherApply.getCreateUserId();
|
|
/**
|
* 设置推广人员
|
*/
|
//小程序
|
if(Convert.toShort(1).equals(applyOrigin)){
|
if(StrUtil.isNotBlank(createUserId)){
|
String mobilePhone = userService.findById(createUserId).getMobilePhone();
|
List<UserTargetInfo> byMobile = userTargetInfoService.findByMobile(mobilePhone);
|
if(CollUtil.isNotEmpty(byMobile)){
|
userGatherApply.setRelationUserId(byMobile.get(0).getRealUserId());
|
}
|
}
|
}else {
|
//安卓
|
userGatherApply.setRelationUserId(createUserId);
|
}
|
|
add(userGatherApply);
|
}
|
|
|
|
/**
|
* 审核集货员通过
|
* @param userGatherApply
|
*/
|
private String auditGather(UserGatherApply userGatherApply){
|
//添加集货员表
|
UserGatherInfo userGatherInfo=new UserGatherInfo();
|
BeanUtil.copyProperties(userGatherApply,userGatherInfo);
|
|
//查询是否有普通用户身份
|
UserInfo byMobileForbidden = userService.findByMobileForbidden(userGatherApply.getMobilePhone());
|
String userId;
|
if(byMobileForbidden!=null){
|
userId=byMobileForbidden.getUserId();
|
}else {
|
userId=idUtils.generate("YH",3);
|
}
|
userGatherInfo.setUserId(userId);
|
userGatherInfo.setNickName(StringUtils.encode(userGatherInfo.getName()));
|
UserGatherInfo byId = userGatherInfoService.findById(userId);
|
if(byId==null) {
|
userGatherInfoService.add(userGatherInfo);
|
}else {
|
userGatherInfo.setRegistTime(DateUtil.now());
|
userGatherInfo.setDelFlag(Constants.DEL_NOT_FLAG);
|
userGatherInfo.setIsProhibit(false);
|
userGatherInfoService.updateById(userGatherInfo);
|
}
|
|
if(byMobileForbidden!=null){
|
//更新用户类型
|
byMobileForbidden.setUserType(CommonEnum.集货员.getValue());
|
byMobileForbidden.setName(userGatherApply.getName());
|
userService.updateById(byMobileForbidden);
|
//将原所有地址设为非默认
|
addressService.updateByUserIdSetNoDefault(userId);
|
|
//删除缓存
|
redisUtil.del(RedisKeyConstant.TOKEN+userId);
|
|
}else {
|
//复制到用户表
|
UserInfo userInfo = new UserInfo();
|
BeanUtil.copyProperties(userGatherInfo, userInfo);
|
userService.add(userInfo);
|
|
//添加账户
|
AccountInfo accountInfo = accountService.init(userGatherApply.getMobilePhone(), userId);
|
accountService.add(accountInfo);
|
}
|
|
//添加地址
|
initAddAddress(userGatherApply,userId);
|
|
|
//发送短信
|
// SmsUtil.sendPoint(userGatherApply.getMobilePhone(), SmsConstant.GATHER_SUCCESS);
|
|
return userId;
|
}
|
|
|
|
private void initAddAddress(UserGatherApply userGatherApply,String userId){
|
AddressInfo addressInfo = new AddressInfo();
|
BeanUtil.copyProperties(userGatherApply, addressInfo);
|
addressInfo.setUserId(userId);
|
addressInfo.setFlag(UserEnum.默认地址.getValue());
|
addressInfo.setRelaPhone(userGatherApply.getMobilePhone());
|
addressInfo.setRelaName(userGatherApply.getName());
|
if(UserEnum.集货员类型.getValue().equals(userGatherApply.getType())) {
|
//将address_area(定位地址) detail_address小区地址
|
AddressLevelInfo addressLevelInfo = addressLevelService.find(userGatherApply.getProvinceId(), userGatherApply.getCityId(), userGatherApply.getTownshipId());
|
if(addressLevelInfo!=null){
|
addressInfo.setAddressArea(addressLevelInfo.getLevel1Name()+addressLevelInfo.getLevel2Name()+addressLevelInfo.getLevel3Name());
|
}
|
addressInfo.setDetailAddress(userGatherApply.getAddressArea());
|
//小区名称
|
addressInfo.setHouseName(userGatherApply.getDetailAddress());
|
}
|
addressService.add(addressInfo);
|
}
|
|
/**
|
* 审核成为回收员
|
* @param userGatherApply
|
*/
|
private String auditOtherUser(UserGatherApply userGatherApply){
|
String userId=idUtils.generate("USER",5);
|
OtherUserInfo otherUserInfo=new OtherUserInfo();
|
otherUserInfo.setUserId(userId);
|
otherUserInfo.setMobilePhone(userGatherApply.getMobilePhone());
|
String salt=RandomUtil.randomString(16);
|
// String password=RandomUtil.randomNumbers(6);
|
String password="123456";
|
String encrypt = SecurityUtil.encrypt(salt, password);
|
otherUserInfo.setPassword(encrypt);
|
otherUserInfo.setSalt(salt);
|
otherUserInfo.setName(userGatherApply.getName());
|
otherUserInfo.setUserType(CommonEnum.回收员.getValue());
|
|
//获取省市区
|
otherUserInfo.setProvinceId(Convert.toInt(userGatherApply.getProvinceId()));
|
otherUserInfo.setCityId(Convert.toInt(userGatherApply.getCityId()));
|
otherUserInfo.setTownshipId(Convert.toInt(userGatherApply.getTownshipId()));
|
|
//角色ID
|
UserRole byCode = userRoleService.findByCode(CommonEnum.回收员.getValue());
|
if(byCode!=null){
|
otherUserInfo.setRoleIds(Convert.toStr(byCode.getId()));
|
}
|
otherUserInfo.setIsProhibit(false);
|
otherUserInfo.setOriginType(Convert.toShort(1));
|
|
//合伙人相关
|
// PartnerGaode byTownId = partnerGaodeService.findByTownId(otherUserInfo.getTownshipId().toString());
|
// if(byTownId!=null){
|
// String partnerId = byTownId.getPartnerId();
|
// String terimalId=partnerTraceService.createTerimainal(partnerId,OrderEnum.回收员订单轨迹.getValue(),userId);
|
// String terimalDayId=partnerTraceService.createTerimainal(partnerId,OrderEnum.回收员全天轨迹.getValue(),userId);
|
// otherUserInfo.setTerminalId(terimalId);
|
// otherUserInfo.setTerminalDayId(terimalDayId);
|
// otherUserInfo.setPartnerId(partnerId);
|
// List<String> fences = partnerFenceService.findFences(partnerId);
|
// if(CollUtil.isNotEmpty(fences)){
|
// otherUserInfo.setTownId(CollUtil.join(fences,","));
|
// }
|
// }
|
otherUserService.add(otherUserInfo);
|
|
//新增账户
|
AccountInfo accountInfo = accountService.init(userGatherApply.getMobilePhone(), userId);
|
accountService.add(accountInfo);
|
|
//发送短信
|
// Map<String,String> map=new HashMap<>();
|
// map.put("other_number",password);
|
// SmsUtil.sendPointByTemplate(userGatherApply.getMobilePhone(),map,SmsConstant.OTHER_SUUCESS_TEMPLATE, 2);
|
return userId;
|
|
}
|
|
/**
|
* 审核成为废品站complaintFirstFlag
|
* @param userGatherApply
|
*/
|
private String auditScrapStore(UserGatherApply userGatherApply){
|
UserScrapStore userScrapStore=new UserScrapStore();
|
BeanUtil.copyProperties(userGatherApply,userScrapStore);
|
String id=idUtils.generate("FP",6);
|
userScrapStore.setId(id);
|
userScrapStoreService.add(userScrapStore);
|
|
//废品分类
|
String itemTypes = userGatherApply.getItemTypes();
|
if(StrUtil.isNotBlank(itemTypes)){
|
List<SysEnvironmentalInfo> byIds = sysEnvironmentalInfoService.findByIds(itemTypes.split(","));
|
List<SysItemUser> list=new ArrayList<>();
|
for (SysEnvironmentalInfo byId : byIds) {
|
SysItemUser sysItemUser=new SysItemUser();
|
sysItemUser.setUserId(id);
|
sysItemUser.setItemType(byId.getItemType());
|
sysItemUser.setCreateTime(DateUtil.now());
|
sysItemUser.setDelFlag(Constants.DEL_NOT_FLAG);
|
list.add(sysItemUser);
|
}
|
if(CollUtil.isNotEmpty(list)) {
|
sysItemUserMapper.insertList(list);
|
}
|
}
|
|
//发送短信
|
// SmsUtil.sendPoint(userGatherApply.getMobilePhone(), SmsConstant.SCRAP_SUCCESS);
|
|
return id;
|
|
|
}
|
|
public void add(UserGatherApply userGatherApply){
|
userGatherApply.setCreateTime(DateUtil.now());
|
userGatherApplyMapper.insertSelective(userGatherApply);
|
}
|
|
public List<UserGatherApply> findByMobileAndType(String mobile,String type){
|
UserGatherApply userGatherApply=new UserGatherApply();
|
userGatherApply.setMobilePhone(mobile);
|
userGatherApply.setType(type);
|
return userGatherApplyMapper.select(userGatherApply);
|
}
|
|
public List<UserGatherApply> list(UserGatherApplyListParam userGatherApplyListParam) {
|
Example example=new Example(UserGatherApply.class);
|
Example.Criteria criteria = example.createCriteria();
|
if(StrUtil.isNotBlank(userGatherApplyListParam.getStatus())){
|
criteria.andEqualTo("status",userGatherApplyListParam.getStatus());
|
}
|
|
|
if(StrUtil.isNotBlank(userGatherApplyListParam.getFilterType())){
|
criteria.andEqualTo("type",userGatherApplyListParam.getFilterType());
|
}else {
|
if(CommonEnum.app.getValue().equals(userGatherApplyListParam.getClientType())){
|
criteria.andIn("type",CollUtil.newArrayList(UserEnum.回收员类型.getValue(),UserEnum.废品店类型.getValue()));
|
}
|
}
|
|
if(StrUtil.isNotBlank(userGatherApplyListParam.getTownShipId())){
|
criteria.andEqualTo("townshipId",userGatherApplyListParam.getTownShipId());
|
}
|
|
if(StrUtil.isNotBlank(userGatherApplyListParam.getRelationUserId())){
|
criteria.andEqualTo("relationUserId",userGatherApplyListParam.getRelationUserId());
|
}
|
|
boolean createFlag=true;
|
if(StrUtil.isNotBlank(userGatherApplyListParam.getExamineTimeStart())){
|
createFlag=false;
|
criteria.andCondition("DATE_FORMAT(examine_time,'%Y-%m-%d')>=DATE_FORMAT('"+userGatherApplyListParam.getExamineTimeStart()+"','%Y-%m-%d')");
|
}
|
|
if(StrUtil.isNotBlank(userGatherApplyListParam.getExamineTimeEnd())){
|
createFlag=false;
|
criteria.andCondition("DATE_FORMAT(examine_time,'%Y-%m-%d')<=DATE_FORMAT('"+userGatherApplyListParam.getExamineTimeEnd()+"','%Y-%m-%d')");
|
}
|
|
if(StrUtil.isNotBlank(userGatherApplyListParam.getCreateTimeStart())){
|
criteria.andCondition("DATE_FORMAT(create_time,'%Y-%m-%d')>=DATE_FORMAT('"+userGatherApplyListParam.getCreateTimeStart()+"','%Y-%m-%d')");
|
}
|
|
if(StrUtil.isNotBlank(userGatherApplyListParam.getCreateTimeEnd())){
|
criteria.andCondition("DATE_FORMAT(create_time,'%Y-%m-%d')<=DATE_FORMAT('"+userGatherApplyListParam.getCreateTimeEnd()+"','%Y-%m-%d')");
|
}
|
|
if(createFlag) {
|
example.setOrderByClause("create_time desc");
|
}else {
|
example.setOrderByClause("examine_time desc");
|
}
|
List<UserGatherApply> userGatherApplies = userGatherApplyMapper.selectByExample(example);
|
|
for (UserGatherApply userGatherApply : userGatherApplies) {
|
String itemTypes = userGatherApply.getItemTypes();
|
//分类
|
if(StrUtil.isNotBlank(itemTypes)){
|
String[] split = itemTypes.split(",");
|
List<SysEnvironmentalInfo> byIds = sysEnvironmentalInfoService.findByIds(split);
|
if(CollUtil.isNotEmpty(byIds)) {
|
userGatherApply.setItemTypeNames(byIds.stream().map(x->x.getTitle()).collect(Collectors.joining(",")));
|
}
|
}
|
//所属区域名称
|
if(StrUtil.isNotBlank(userGatherApply.getTownshipId())) {
|
AddressLevelInfo addressLevelInfo = addressLevelService.find(userGatherApply.getProvinceId(), userGatherApply.getCityId(), userGatherApply.getTownshipId());
|
if (addressLevelInfo != null) {
|
userGatherApply.setTownshipName(addressLevelInfo.getLevel3Name());
|
}
|
}
|
|
//所属推广员名称
|
if(StrUtil.isNotBlank(userGatherApply.getRelationUserId())){
|
String name = otherUserService.findById(userGatherApply.getRelationUserId()).getName();
|
userGatherApply.setRelationUserName(name);
|
}
|
|
//审核人名称
|
//所属推广员名称
|
if(StrUtil.isNotBlank(userGatherApply.getUpdateUserId())) {
|
OtherUserInfo byId = otherUserService.findById(userGatherApply.getUpdateUserId());
|
if(byId!=null){
|
userGatherApply.setUpdateUserName(byId.getName());
|
}else {
|
CoreUser coreUser = coreUserMapper.selectByPrimaryKey(userGatherApply.getUpdateUserId());
|
if(coreUser!=null){
|
userGatherApply.setUpdateUserName(coreUser.getName());
|
}
|
}
|
}
|
|
String mobilePhone = userGatherApply.getMobilePhone();
|
UserGatherApply userGatherApply1=new UserGatherApply();
|
userGatherApply1.setMobilePhone(mobilePhone);
|
int i = userGatherApplyMapper.selectCount(userGatherApply1);
|
if(i>1){
|
userGatherApply.setIsApply(true);
|
}else{
|
userGatherApply.setIsApply(false);
|
}
|
}
|
|
return userGatherApplies;
|
|
}
|
|
|
public UserGatherApply findById(Long id){
|
return userGatherApplyMapper.selectByPrimaryKey(id);
|
}
|
|
public void audit(UserGatherAuditParam userGatherAuditParam) {
|
Long id = userGatherAuditParam.getId();
|
String status = userGatherAuditParam.getStatus();
|
UserGatherApply userGatherApply=new UserGatherApply();
|
BeanUtil.copyProperties(userGatherAuditParam,userGatherApply);
|
|
//审核通过
|
if(CommonEnum.已审核.getValue().equals(status)){
|
UserGatherApply byId = findById(id);
|
String type = byId.getType();
|
|
if(UserEnum.回收员类型.getValue().equals(type)){
|
String relationId=auditOtherUser(byId);
|
userGatherApply.setRelationId(relationId);
|
}else if(UserEnum.废品店类型.getValue().equals(type)){
|
String relationId=auditScrapStore(byId);
|
userGatherApply.setRelationId(relationId);
|
}else if(UserEnum.集货员类型.getValue().equals(type)) {
|
String relationId=auditGather(byId);
|
userGatherApply.setRelationId(relationId);
|
}
|
}
|
//更新审核状态
|
userGatherApply.setExamineTime(DateUtil.now());
|
userGatherApplyMapper.updateByPrimaryKeySelective(userGatherApply);
|
}
|
}
|