package com.sinata.modular.member.service.impl;
|
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.baomidou.mybatisplus.plugins.Page;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.google.common.collect.Lists;
|
import com.sinata.common.enums.EnumMemberGrade;
|
import com.sinata.common.enums.EnumUserBankDetailDoneType;
|
import com.sinata.common.enums.EnumUserBankDetailType;
|
import com.sinata.core.shiro.ShiroKit;
|
import com.sinata.core.util.Convert;
|
import com.sinata.core.util.ExcelExportUtil;
|
import com.sinata.core.util.MD5Util;
|
import com.sinata.core.util.SqlUtil;
|
import com.sinata.core.util.ToolUtil;
|
import com.sinata.core.util.huawei.obs.ObsUploadUtil;
|
import com.sinata.core.util.juhe.TelecomUtil;
|
import com.sinata.modular.member.dao.MemUserMapper;
|
import com.sinata.modular.member.model.MemUser;
|
import com.sinata.modular.member.model.MemUserBankDetail;
|
import com.sinata.modular.member.model.MemUserRelation;
|
import com.sinata.modular.member.service.IMemUserBankDetailService;
|
import com.sinata.modular.member.service.IMemUserRelationService;
|
import com.sinata.modular.member.service.IMemUserService;
|
import java.io.InputStream;
|
import java.net.URLEncoder;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.concurrent.atomic.AtomicInteger;
|
import javax.servlet.http.HttpServletResponse;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.StringUtils;
|
|
import javax.annotation.Resource;
|
import java.math.BigDecimal;
|
import java.time.LocalDateTime;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 会员用户信息 服务实现类
|
* </p>
|
*
|
* @author goku
|
* @since 2023-03-23
|
*/
|
@Service
|
@Slf4j
|
public class MemUserServiceImpl extends ServiceImpl<MemUserMapper, MemUser> implements IMemUserService {
|
|
@Resource
|
private IMemUserBankDetailService memoryUserBankDetailService;
|
@Resource
|
private IMemUserRelationService memUserRelationService;
|
@Resource
|
private TelecomUtil telecomUtil;
|
@Override
|
public List<Map<String, Object>> getMapList(Wrapper wrapper) {
|
boolean admin = ShiroKit.isAdmin();
|
if (admin) {
|
return baseMapper.getMapList(wrapper);
|
} else {
|
return baseMapper.getMapListAuth(wrapper);
|
}
|
}
|
|
@Override
|
public List<Map<String, Object>> getMapList(Page<Map<String, Object>> page, Wrapper wrapper) {
|
boolean admin = ShiroKit.isAdmin();
|
if (admin) {
|
return baseMapper.getMapList(page, wrapper);
|
} else {
|
return baseMapper.getMapListAuth(page, wrapper);
|
}
|
}
|
|
@Override
|
public Object[] getIdArrayByUser(String showId, String phone, String nickName) {
|
// 设置查询条件
|
Wrapper<MemUser> wrapper = new EntityWrapper<MemUser>().setSqlSelect("id");
|
if (!StringUtils.isEmpty(showId)) {
|
wrapper.like("show_id", showId);
|
}
|
if (!StringUtils.isEmpty(phone)) {
|
wrapper.like("phone", phone);
|
}
|
if (!StringUtils.isEmpty(nickName)) {
|
wrapper.like("nick_name", nickName);
|
}
|
|
// 查询用户列表
|
List<MemUser> userList = baseMapper.selectList(wrapper);
|
|
// 封装用户ID
|
Object[] idArray = new Integer[]{0};
|
if (userList != null && userList.size() > 0) {
|
idArray = userList.stream().map(o -> o.getId()).collect(Collectors.toList()).toArray();
|
}
|
return idArray;
|
}
|
|
@Override
|
public void wrapperMapUser(List<Map<String, Object>> list, String userKey) {
|
// 用户ID串
|
Object[] userIds = list.stream().map(o -> o.get(userKey)).collect(Collectors.toList()).toArray();
|
// 用户列表
|
List<MemUser> userList = baseMapper.selectList(
|
new EntityWrapper<MemUser>()
|
.setSqlSelect("id, show_id showId, phone, nick_name nickName")
|
.in("id", userIds)
|
);
|
|
// 封装数据
|
for (Map<String, Object> map : list) {
|
for (MemUser u : userList) {
|
if (u.getId().toString().equals(map.get(userKey) + "")) {
|
map.put(userKey + "_showId", u.getShowId());
|
map.put(userKey + "_phone", u.getPhone());
|
map.put(userKey + "_nickName", u.getNickName());
|
}
|
}
|
}
|
}
|
|
@Override
|
public List<MemUser> getUserListByGrade(Integer memberGradeId) {
|
return this.selectList(
|
new EntityWrapper<MemUser>()
|
.setSqlSelect("id, show_id, nick_name, real_name, member_grade_id")
|
.eq("member_grade_id", memberGradeId)
|
);
|
}
|
|
@Override
|
@Transactional
|
public void subIntegralCancelOrder(String orderNo) {
|
MemUserBankDetail bankDetail = memoryUserBankDetailService.selectOne(
|
new EntityWrapper<MemUserBankDetail>()
|
.eq("order_no", orderNo)
|
.last("LIMIT 1")
|
);
|
|
if (bankDetail != null) {
|
// 计算增加积分
|
BigDecimal subIntegral = bankDetail.getAmount().multiply(BigDecimal.valueOf(-1));
|
if (subIntegral.compareTo(BigDecimal.ZERO) <= 0) {
|
// 获取用户信息
|
MemUser user = this.selectById(bankDetail.getUserId());
|
if (user != null) {
|
BigDecimal oldAmount = user.getIntegral();
|
// 增加积分
|
user.setIntegral(user.getIntegral().add(subIntegral));
|
this.updateById(user);
|
|
// 添加账户明细记录
|
bankDetail
|
.setId(null)
|
.setType(EnumUserBankDetailType.INTEGRAL.index)
|
.setDoneType(EnumUserBankDetailDoneType.SUB_INTEGRAL_CANCEL_ORDER.index)
|
.setMark(EnumUserBankDetailDoneType.SUB_INTEGRAL_CANCEL_ORDER.mark)
|
.setAmount(subIntegral)
|
.setOldAmount(oldAmount)
|
.setCreateTime(LocalDateTime.now())
|
.insert();
|
}
|
}
|
}
|
}
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public String importSalesUser(List<Map<String, String>> mapList, HttpServletResponse response) {
|
// 表格数据【封装】
|
List<List<Object>> dataList = new ArrayList<>();
|
// 头部列【封装】
|
List<Object> shellList = new ArrayList<>();
|
shellList.add("姓名");
|
shellList.add("手机号");
|
shellList.add("性别");
|
shellList.add("生日");
|
shellList.add("证件类型 0身份证 1护照");
|
shellList.add("身份证号");
|
shellList.add("银行名称");
|
shellList.add("银行卡号");
|
shellList.add("推荐人手机号");
|
shellList.add("职级 3黄金营销员 4城市合伙人 5市场总监");
|
shellList.add("备注");
|
dataList.add(shellList);
|
List<String> cardTypeList = Lists.newArrayList("0", "1");
|
List<String> gradeIdList = Lists.newArrayList("3", "4", "5");
|
List<String> sexList = Lists.newArrayList("男", "女");
|
for (Map<String, String> stringStringMap : mapList) {
|
MemUser memUser = new MemUser();
|
String realName = stringStringMap.get("姓名");
|
String sex = stringStringMap.get("性别");
|
String birthday = stringStringMap.get("生日 例:2024-06-06");
|
String idCard = stringStringMap.get("身份证号");
|
String cardType = stringStringMap.get("证件类型 0身份证 1护照");
|
String inviteUserPhone = stringStringMap.get("推荐人手机号");
|
String phone = stringStringMap.get("手机号");
|
String bankName = stringStringMap.get("银行名称");
|
String bankNumber = stringStringMap.get("银行卡号");
|
String memberGradeId = stringStringMap.get("职级 3黄金营销员 4城市合伙人 5市场总监");
|
|
List<Object> list = new ArrayList<>();
|
list.add(realName);
|
list.add(phone);
|
list.add(sex);
|
list.add(birthday);
|
list.add(cardType);
|
list.add(idCard);
|
list.add(bankName);
|
list.add(bankNumber);
|
list.add(inviteUserPhone);
|
list.add(memberGradeId);
|
if (ToolUtil.isAllEmpty(realName, phone, sex,birthday,idCard, cardType, inviteUserPhone, bankName, bankNumber)) {
|
continue;
|
}
|
//判断导入的生日格式是否正确2024-06-06
|
if (ToolUtil.isNotEmpty(birthday)) {
|
try {
|
DateUtil.parse(birthday, "yyyy-MM-dd");
|
} catch (Exception e) {
|
list.add("生日格式错误");
|
dataList.add(list);
|
continue;
|
}
|
}
|
if (!gradeIdList.contains(memberGradeId)) {
|
list.add("职级填写错误");
|
dataList.add(list);
|
continue;
|
}
|
if (!sexList.contains(sex)) {
|
list.add("性别填写错误");
|
dataList.add(list);
|
continue;
|
}
|
if (ToolUtil.isOneEmpty(realName, phone, sex,birthday,idCard, cardType, inviteUserPhone, bankName, bankNumber)) {
|
list.add("信息填写不完整");
|
dataList.add(list);
|
continue;
|
}
|
memUser.setRealName(realName);
|
memUser.setPhone(phone);
|
memUser.setSex(sex);
|
memUser.setBirthday(birthday);
|
memUser.setCardType(cardTypeList.contains(cardType) ? cardType : "0");
|
memUser.setIdCard(idCard);
|
memUser.setBankName(bankName);
|
memUser.setBankNumber(bankNumber);
|
memUser.setNickName("用户" + ToolUtil.getRandomString(4));
|
memUser.setPassword(MD5Util.encrypt(phone));
|
memUser.setMemberGradeId(Integer.valueOf(memberGradeId));
|
memUser.setMemberGradeTime(new Date());
|
memUser.setShowId("0");
|
memUser.setIsLeaveOffice(0);
|
memUser.setAuditTime(new Date());
|
memUser.setAuditState(1);
|
memUser.setCreateTime(new Date());
|
memUser.setCreditScore(BigDecimal.valueOf(100L));
|
// 获取最新工号
|
Object showId = this.selectObj(
|
new EntityWrapper<MemUser>()
|
.setSqlSelect("MAX(CAST(show_id AS UNSIGNED)) AS max_show_id")
|
.ne("show_id", "0")
|
);
|
if (showId == null) {
|
showId = "1000" + "100000";
|
}
|
String showIdStr = String.valueOf(Convert.toInt(showId) + 1);
|
memUser.setShowId(showIdStr);
|
EntityWrapper<MemUser> wrapper = new EntityWrapper<>();
|
wrapper.eq("phone", memUser.getPhone());
|
if (this.selectOne(wrapper) != null) {
|
list.add("该手机号已被注册");
|
dataList.add(list);
|
continue;
|
}
|
EntityWrapper<MemUser> wrapper2 = new EntityWrapper<>();
|
wrapper2.eq("phone", inviteUserPhone);
|
MemUser inviteUser = this.selectOne(wrapper2);
|
if (inviteUser == null) {
|
list.add("邀请人不存在");
|
dataList.add(list);
|
continue;
|
} else {
|
if (inviteUser.getMemberGradeId() < EnumMemberGrade.G_3.index) {
|
list.add("邀请人等级不足");
|
dataList.add(list);
|
continue;
|
}
|
}
|
boolean verify = telecomUtil.verify(memUser.getRealName(), memUser.getIdCard(),
|
memUser.getPhone());
|
if (!verify) {
|
list.add("实名认证失败");
|
dataList.add(list);
|
continue;
|
}
|
String agentCountyCode = inviteUser.getAgentCountyCode();
|
String agentCityCode = inviteUser.getAgentCityCode();
|
String agentProvinceCode = inviteUser.getAgentProvinceCode();
|
memUser.setAgentProvinceCode(agentProvinceCode);
|
memUser.setAgentCityCode(agentCityCode);
|
memUser.setAgentCountyCode(agentCountyCode);
|
memUser.setCityCode(agentCityCode);
|
this.insert(memUser);
|
MemUserRelation shareUserRelation = memUserRelationService.selectById(inviteUser.getId());
|
//添加关系
|
MemUserRelation build = MemUserRelation.builder()
|
.id(memUser.getId())
|
.parentId(shareUserRelation.getId())
|
.relationPath(
|
shareUserRelation.getRelationPath() + "/" + memUser.getId())
|
.build();
|
memUserRelationService.insertOrUpdate(build);
|
}
|
|
if (dataList.size() > 1) {
|
try {
|
InputStream inputStream = ExcelExportUtil.easySheet2(
|
URLEncoder.encode("导入失败数据", "UTF-8"), "sheet1", dataList, response);
|
if (inputStream != null) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
|
String fileName = "导入失败数据" + "-"+sdf.format(new Date())+".xls";
|
String url = ObsUploadUtil.obsUploadInputStream(inputStream, "excel", fileName);
|
log.info("导入失败数据:{}", url);
|
return url;
|
}
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
}
|
return null;
|
}
|
}
|