mitao
2024-07-08 022a7ff7abf82cd2546e18071ade5228b4e2339f
meiya-admin/src/main/java/com/sinata/modular/member/controller/MemUserSalesController.java
@@ -8,7 +8,11 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.sinata.common.enums.*;
import com.sinata.common.enums.EnumAuditState;
import com.sinata.common.enums.EnumCityRole;
import com.sinata.common.enums.EnumIsDelete;
import com.sinata.common.enums.EnumIsSystemNotice;
import com.sinata.common.enums.EnumMemberGrade;
import com.sinata.common.enums.mall.EnumMallGoodsGroupType;
import com.sinata.common.enums.mall.EnumMallOrderState;
import com.sinata.core.base.controller.BaseController;
@@ -21,6 +25,7 @@
import com.sinata.core.shiro.ShiroUser;
import com.sinata.core.util.Convert;
import com.sinata.core.util.ExcelExportUtil;
import com.sinata.core.util.ExcelImportUtil;
import com.sinata.core.util.SqlUtil;
import com.sinata.modular.mall.model.MallOrder;
import com.sinata.modular.mall.service.IMallOrderService;
@@ -28,10 +33,22 @@
import com.sinata.modular.member.model.MemUserRelation;
import com.sinata.modular.member.service.IMemUserRelationService;
import com.sinata.modular.member.service.IMemUserService;
import com.sinata.modular.system.model.Role;
import com.sinata.modular.system.model.SystemNotice;
import com.sinata.modular.system.model.TCityRegion;
import com.sinata.modular.system.service.IRoleService;
import com.sinata.modular.system.service.ISystemNoticeService;
import com.sinata.modular.system.service.ITCityRegionService;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
@@ -39,12 +56,9 @@
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import org.springframework.web.multipart.MultipartFile;
/**
 * 会员用户信息控制器
@@ -72,6 +86,9 @@
    @Autowired
    private ISystemNoticeService systemNoticeService;
    @Autowired
    private IRoleService roleService;
    /**
     * 跳转到会员用户信息首页
@@ -137,12 +154,18 @@
        try {
            // 【城市管理员】数据查询
            ShiroUser shiroUser = ShiroKit.getUser();
            if (shiroUser.getRoleList().contains(EnumCityRole.PROVINCE_ROLE.index)) {
                // 省级城市管理员
                wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 2), SqlLike.RIGHT);
            } else if (shiroUser.getRoleList().contains(EnumCityRole.CITY_ROLE.index)) {
            List<Integer> roleList = shiroUser.getRoleList();
            List<Integer> cityRoleList = roleService.selectList(
                            new EntityWrapper<Role>().in("id", roleList)).stream().map(Role::getCityRole)
                    .collect(
                            Collectors.toList());
            if (cityRoleList.contains(EnumCityRole.CITY_ROLE.index)) {
                // 市级城市管理员
                wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 4), SqlLike.RIGHT);
                wrapper.like("o.agent_county_code", shiroUser.getCityCode().substring(0, 4), SqlLike.RIGHT);
            }
            else if (cityRoleList.contains(EnumCityRole.PROVINCE_ROLE.index)) {
                // 省级城市管理员
                wrapper.like("o.agent_county_code", shiroUser.getCityCode().substring(0, 2), SqlLike.RIGHT);
            }
        } catch (Exception e) {
            e.printStackTrace();
@@ -179,15 +202,20 @@
        List<MemUser> v4UserList = memUserService.getUserListByGrade(EnumMemberGrade.G_4.index);
        List<MemUser> v5UserList = memUserService.getUserListByGrade(EnumMemberGrade.G_5.index);
        List<MemUserRelation> userRelationList = memUserRelationService.selectList(null);
        Map<Integer, Integer> userRelationMap = userRelationList.stream().collect(Collectors
                .toMap(u -> u.getId(), p -> p.getParentId()));
        // 封装数据
        for (Map<String, Object> map : list) {
            map.put("cityCode",
                    cityRegionService.getProvinceCityCountyNameByAll(cityAll, Convert.toStr(map.get("city_code"))).stream()
       /* for (Map<String, Object> map : list) {
             map.put("cityCode",
                    cityRegionService.getProvinceCityCountyNameByAll(cityAll,
                                    Convert.toStr(map.get("agent_county_code"))).stream()
                            .map(TCityRegion::getName)
                            .collect(Collectors.joining("-"))
            );
            map.put("audit_time", DateUtil.format(DateUtil.parse(Convert.toStr(map.get("audit_time"))), "yyyy-MM-dd"));
            map.put("audit_time",
                    DateUtil.format(DateUtil.parse(Convert.toStr(map.get("audit_time"))),
                            "yyyy-MM-dd"));
//            // 权益人信息
//            MemUser equityUser = equityUserUserList.stream().filter(o -> {
@@ -219,29 +247,30 @@
            }).findFirst().orElse(new MemUser());
            map.put("equityUserShowId", parentUser.getShowId());
            map.put("equityUserRealName", parentUser.getRealName());
            map.put("equityUserCityCode", cityRegionService.getProvinceCityCountyNameByAll(cityAll, parentUser.getCityCode()).stream()
            map.put("equityUserCityCode", cityRegionService.getProvinceCityCountyNameByAll(cityAll,
                            parentUser.getCityCode()).stream()
                    .map(TCityRegion::getName)
                    .collect(Collectors.joining("-")));
            // 用户等级
            Integer userMemberGradeId = map.get("member_grade_id") == null ? null : (Integer) map.get("member_grade_id");
            Integer userMemberGradeId = map.get("member_grade_id") == null ? null
                    : (Integer) map.get("member_grade_id");
            // 查询上级城市合伙人、市场总监信息
            MemUser[] parentV4V5User = memUserRelationService.getParentV4V5ByRelationPath(
                    v4UserList,
                    v5UserList,
          MemUser[] parentV4V5User = memUserRelationService.getParentV4V5ByRelationPath2(
                    map.get("relation_path") == null ? null : map.get("relation_path").toString(),
                    userMemberGradeId
            );
            if (parentV4V5User[0] != null) {
                map.put("v4ShowId", parentV4V5User[0].getShowId());
                map.put("v4Team", parentV4V5User[0].getRealName());
            }
            if (parentV4V5User[1] != null) {
                map.put("v5ShowId", parentV4V5User[1].getShowId());
                map.put("v5Team", parentV4V5User[1].getRealName());
            }
            // 本人是城市合伙人或市场总监时,城市合伙人工号/团队、市场总监工号/团队,显示本人的信息
        if (parentV4V5User[0] != null) {
            map.put("v4ShowId", parentV4V5User[0].getShowId());
            map.put("v4Team", parentV4V5User[0].getRealName());
        }
        if (parentV4V5User[1] != null) {
            map.put("v5ShowId", parentV4V5User[1].getShowId());
            map.put("v5Team", parentV4V5User[1].getRealName());
        }
        // 本人是城市合伙人或市场总监时,城市合伙人工号/团队、市场总监工号/团队,显示本人的信息
            if (userMemberGradeId == EnumMemberGrade.G_4.index) {
                map.put("v4ShowId", map.get("show_id"));
                map.put("v4Team", map.get("real_name"));
@@ -253,8 +282,54 @@
                map.put("v5ShowId", map.get("show_id"));
                map.put("v5Team", map.get("real_name"));
            }
        }
        return list;
        }*/
        List<Map<String, Object>> result = list.stream().peek(map -> {
            map.put("cityCode",
                    cityRegionService.getProvinceCityCountyNameByAll(cityAll,
                                    Convert.toStr(map.get("agent_county_code"))).stream()
                            .map(TCityRegion::getName)
                            .collect(Collectors.joining("-"))
            );
            map.put("audit_time",
                    DateUtil.format(DateUtil.parse(Convert.toStr(map.get("audit_time"))),
                            "yyyy-MM-dd"));
            // 推荐人信息
            Integer[] parentUserId = new Integer[]{0};
            for (MemUserRelation ur : parentUserRelationList) {
                if (ur.getId().equals(Convert.toInt(map.get("id")))) {
                    parentUserId[0] = ur.getParentId();
                    break;
                }
            }
            MemUser parentUser = parentUserList.stream().filter(o -> {
                if (o.getId().equals(parentUserId[0])) {
                    return true;
                }
                return false;
            }).findFirst().orElse(new MemUser());
            map.put("equityUserShowId", parentUser.getShowId());
            map.put("equityUserRealName", parentUser.getRealName());
            map.put("equityUserCityCode", cityRegionService.getProvinceCityCountyNameByAll(cityAll,
                            parentUser.getCityCode()).stream()
                    .map(TCityRegion::getName)
                    .collect(Collectors.joining("-")));
            // 用户等级
            Integer userMemberGradeId = map.get("member_grade_id") == null ? null
                    : (Integer) map.get("member_grade_id");
            // 查询上级城市合伙人、市场总监信息
            MemUser[] parentV4V5User = memUserRelationService.getParentV4V5ByRelationPath3(
                    Integer.valueOf(map.get("id").toString()), userRelationMap);
            if (parentV4V5User[0] != null) {
                map.put("v4ShowId", parentV4V5User[0].getShowId());
                map.put("v4Team", parentV4V5User[0].getRealName());
            }
            if (parentV4V5User[1] != null) {
                map.put("v5ShowId", parentV4V5User[1].getShowId());
                map.put("v5Team", parentV4V5User[1].getRealName());
            }
        }).collect(Collectors.toList());
        return result;
    }
    /**
@@ -444,18 +519,21 @@
                Integer gradeId = 0;
                // 判断用是否为普通会员、VIP会员,可直接升级黄金营销员、城市合伙人
                if (memUser.getMemberGradeId() == EnumMemberGrade.G_1.index || memUser.getMemberGradeId() == EnumMemberGrade.G_2.index) {
                //2024年4月改:购买钻石套餐成为城市合伙人的时间节点:次日、次月、次季度(和人员职级晋升维持设置 一致)
                    if (order.getOrderType() == EnumMallGoodsGroupType.GROUP_DIAMOND.index) {
                        gradeId = EnumMemberGrade.G_4.index;
                        gradeId = EnumMemberGrade.G_3.index;
                        setSql +=", upgrade_status = 0";
                    } else if (order.getOrderType() == EnumMallGoodsGroupType.GROUP_GOLD.index) {
                        gradeId = EnumMemberGrade.G_3.index;
                        setSql +=", upgrade_status = 1";
                    }
                }
                // 判断用是否为黄金营销员,可升级城市合伙人
                else if (memUser.getMemberGradeId() == EnumMemberGrade.G_3.index) {
                    if (order.getOrderType() == EnumMallGoodsGroupType.GROUP_DIAMOND.index) {
                        gradeId = EnumMemberGrade.G_4.index;
                    }
                }
//                else if (memUser.getMemberGradeId() == EnumMemberGrade.G_3.index) {
//                    if (order.getOrderType() == EnumMallGoodsGroupType.GROUP_DIAMOND.index) {
//                        gradeId = EnumMemberGrade.G_4.index;
//                    }
//                }
                // 其他(城市合伙人、市场总监)不处理
                // 升级、重置品行(处理降级的要重置)
@@ -477,6 +555,7 @@
                            + ", agent_province_code = " + SqlUtil.addSingleQuotes(province)
                            + ", agent_city_code = " + SqlUtil.addSingleQuotes(city)
                            + ", agent_county_code = " + SqlUtil.addSingleQuotes(county);
                    log.info("用户:{}修改了营销员城市地址",memUser.getRealName());
                }
            }
@@ -725,6 +804,18 @@
    @RequestMapping(value = "/editUserLevel")
    public Object editUserLevel(Integer userId, String memberGradeId) {
        String whereSql = "member_grade_id = " + memberGradeId;
        MemUser memUser = memUserService.selectById(userId);
        if (Objects.nonNull(memUser)) {
            String equityOrderNo = memUser.getEquityOrderNo();
            MallOrder order = mallOrderService.selectOne(new EntityWrapper<MallOrder>()
                    .eq("order_no", equityOrderNo));
            if (Objects.nonNull(order)) {
                if (order.getOrderType() == 2 && memUser.getMemberGradeId() == 3) {
                    whereSql += ", upgrade_status = 1";
                }
            }
        }
        boolean flag = memUserService.updateForSet(whereSql, new EntityWrapper<MemUser>().eq("id", userId));
        return returnByFlag(flag, null);
    }
@@ -774,7 +865,7 @@
                + ", agent_province_code = " + SqlUtil.addSingleQuotes(province)
                + ", agent_city_code = " + SqlUtil.addSingleQuotes(city)
                + ", agent_county_code = " + SqlUtil.addSingleQuotes(county);
        log.info("用户:{}修改了营销员城市地址",userIdList.toString());
        boolean flag = memUserService.updateForSet(whereSql, new EntityWrapper<MemUser>().in("id", userIdList));
        return returnByFlag(flag, null);
    }
@@ -804,5 +895,55 @@
            return new ErrorTip(500, StrUtil.isNotBlank(msg) ? msg : "操作失败!");
        }
    }
    @Permission
    @ResponseBody
    @BussinessLog(value = "营销人员管理-下载导入模板")
    @RequestMapping(value = "/downloadTemplate",method = RequestMethod.POST)
    public Object downloadTemplate(HttpServletResponse response) {
        // // 表格数据【封装】
        // List<List<Object>> dataList = new ArrayList<>();
        //     // 头部列【封装】
        //     List<Object> shellList = new ArrayList<>();
        //     shellList.add("姓名");
        //     shellList.add("手机号");
        //     shellList.add("性别");
        //     shellList.add("生日 例:2024-06-06");
        //     shellList.add("证件类型 0身份证 1护照");
        //     shellList.add("身份证号");
        //     shellList.add("银行名称");
        //     shellList.add("银行卡号");
        //     shellList.add("推荐人手机号");
        //     dataList.add(shellList);
        // try {
        //     ExcelExportUtil.easySheet(URLEncoder.encode("营销人员导入模板", "UTF-8"),"sheet1",dataList,response);
        // } catch (IOException e) {
        //     throw new RuntimeException(e);
        // }
        String url = "https://meitianmeiya.obs.cn-southwest-2.myhuaweicloud.com/excel/%E8%90%A5%E9%94%80%E4%BA%BA%E5%91%98%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xls";
        return new SuccessTip(200, url);
    }
    @Permission
    @ResponseBody
    @BussinessLog(value = "营销人员管理-导入")
    @RequestMapping(value = "/importSalesUser",method = RequestMethod.POST)
    public Object importUsers(MultipartFile file, HttpServletResponse response)  {
        String s = file.getOriginalFilename();
        if (s == null || !("xls".equals(s.substring(s.lastIndexOf(".") + 1)) || "xlsx".equals(s.substring(s.lastIndexOf(".") + 1)))) {
            return new ErrorTip(500,"只能上传.xls或.xlsx格式的文件!");
        }
        List<Map<String, String>> mapList = null;
        try {
            mapList = ExcelImportUtil.getMapList(file,
                    new String[]{"姓名", "手机号", "性别","生日 例:2024-06-06","证件类型 0身份证 1护照", "身份证号","银行名称","银行卡号","推荐人手机号","职级 3黄金营销员 4城市合伙人 5市场总监"});
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        String str = memUserService.importSalesUser(mapList, response);
            if (str == null) {
                return SUCCESS_TIP;
            } else {
                return new SuccessTip(201, str);
            }
    }
}