mitao
2024-06-06 3d2b51ea4520533de5e78f88dddf5b5c7dce4247
meiya-admin/src/main/java/com/sinata/modular/member/service/impl/MemUserServiceImpl.java
@@ -1,17 +1,38 @@
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;
@@ -32,11 +53,15 @@
 * @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();
@@ -149,5 +174,171 @@
            }
        }
    }
    @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;
    }
}