| | |
| | | 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; |
| | |
| | | * @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(); |
| | |
| | | } |
| | | } |
| | | } |
| | | @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; |
| | | } |
| | | } |