package com.sinata.modular.member.controller;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.enums.SqlLike;
|
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.mall.EnumMallGoodsGroupType;
|
import com.sinata.common.enums.mall.EnumMallOrderState;
|
import com.sinata.core.base.controller.BaseController;
|
import com.sinata.core.base.tips.ErrorTip;
|
import com.sinata.core.base.tips.SuccessTip;
|
import com.sinata.core.common.annotion.BussinessLog;
|
import com.sinata.core.common.annotion.Permission;
|
import com.sinata.core.common.constant.factory.PageFactory;
|
import com.sinata.core.shiro.ShiroKit;
|
import com.sinata.core.shiro.ShiroUser;
|
import com.sinata.core.util.Convert;
|
import com.sinata.core.util.ExcelExportUtil;
|
import com.sinata.core.util.SqlUtil;
|
import com.sinata.modular.mall.model.MallOrder;
|
import com.sinata.modular.mall.service.IMallOrderService;
|
import com.sinata.modular.member.model.MemUser;
|
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 lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.ui.Model;
|
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.ResponseBody;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 会员用户信息控制器
|
*
|
* @author goku
|
*/
|
@Slf4j
|
@Controller
|
@RequestMapping("/memUserSales")
|
public class MemUserSalesController extends BaseController {
|
|
private String PREFIX = "/member/memUserSales/";
|
|
@Autowired
|
private IMemUserService memUserService;
|
|
@Autowired
|
private IMemUserRelationService memUserRelationService;
|
|
@Autowired
|
private ITCityRegionService cityRegionService;
|
|
@Autowired
|
private IMallOrderService mallOrderService;
|
|
@Autowired
|
private ISystemNoticeService systemNoticeService;
|
|
@Autowired
|
private IRoleService roleService;
|
|
/**
|
* 跳转到会员用户信息首页
|
*/
|
@RequestMapping("")
|
public String index(Model model) {
|
boolean admin = ShiroKit.isAdmin();
|
if (admin) {
|
return PREFIX + "memUserSales.html";
|
} else {
|
return PREFIX + "memUserSalesAuth.html";
|
}
|
}
|
|
@ResponseBody
|
@RequestMapping(value = "/list")
|
public Object list(String beginTime, String endTime, String nickName, String phone, String showId, Integer isLock, Integer isLeaveOffice, Integer memberGradeId) {
|
Page<Map<String, Object>> page = new PageFactory().defaultPage();
|
|
List<Map<String, Object>> list = wrapperList(page, beginTime, endTime, nickName, phone, showId, isLock, isLeaveOffice, memberGradeId);
|
|
page.setRecords(list);
|
return super.packForBT(page);
|
}
|
|
public List<Map<String, Object>> wrapperList(Page<Map<String, Object>> page, String beginTime, String endTime, String nickName, String phone, String showId, Integer isLock, Integer isLeaveOffice, Integer memberGradeId) {
|
Wrapper wrapper = new EntityWrapper<MemUser>()
|
.orNew()
|
.gt("member_grade_id", 2)
|
.or()
|
.ne("equity_user_id", 0)
|
.andNew()
|
.eq("o.is_delete", EnumIsDelete.EXISTED.index)
|
.orderBy("apply_time", false);
|
|
if (!StringUtils.isEmpty(nickName)) {
|
wrapper.like("real_name", nickName);
|
}
|
if (!StringUtils.isEmpty(phone)) {
|
wrapper.like("phone", phone);
|
}
|
if (!StringUtils.isEmpty(showId)) {
|
wrapper.like("show_id", showId);
|
}
|
if (!StringUtils.isEmpty(isLock) && isLock != -1) {
|
wrapper.eq("is_lock", isLock);
|
}
|
if (!StringUtils.isEmpty(isLeaveOffice) && isLeaveOffice != -1) {
|
wrapper.eq("is_leave_office", isLeaveOffice);
|
}
|
if (!StringUtils.isEmpty(memberGradeId) && memberGradeId != -1) {
|
wrapper.eq("member_grade_id", memberGradeId);
|
}
|
|
// 时间搜索
|
if (!StringUtils.isEmpty(beginTime)) {
|
wrapper.ge("apply_time", beginTime + " 00:00:00");
|
}
|
if (!StringUtils.isEmpty(endTime)) {
|
wrapper.le("apply_time", endTime + " 23:59:59");
|
}
|
|
try {
|
// 【城市管理员】数据查询
|
ShiroUser shiroUser = ShiroKit.getUser();
|
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);
|
}
|
else if (cityRoleList.contains(EnumCityRole.PROVINCE_ROLE.index)) {
|
// 省级城市管理员
|
wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 2), SqlLike.RIGHT);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
// 查询数据列表
|
List<Map<String, Object>> list;
|
if (page != null) {
|
list = memUserService.getMapList(page, wrapper);
|
} else {
|
list = memUserService.getMapList(wrapper);
|
}
|
|
// 推荐人关系
|
List<MemUserRelation> parentUserRelationList = memUserRelationService.selectList(
|
new EntityWrapper<MemUserRelation>()
|
.setSqlSelect("id, parent_id")
|
.in("id", list.stream().map(o -> o.get("id")).collect(Collectors.toList())));
|
// 推荐人列表
|
List<MemUser> parentUserList = memUserService.selectList(
|
new EntityWrapper<MemUser>()
|
.setSqlSelect("id, show_id, real_name, phone, city_code")
|
.in("id", parentUserRelationList.stream().map(o -> o.getParentId()).collect(Collectors.toList()))
|
);
|
// // 权益人ids
|
// List<MemUser> equityUserUserList = memUserService.selectList(
|
// new EntityWrapper<MemUser>()
|
// .setSqlSelect("id, real_name, phone, city_code")
|
// .in("id", list.stream().map(o -> o.get("equity_user_id")).collect(Collectors.toList()))
|
// );
|
|
// 获取所有城市
|
List<TCityRegion> cityAll = cityRegionService.getCityNameCodeAll();
|
|
List<MemUser> v4UserList = memUserService.getUserListByGrade(EnumMemberGrade.G_4.index);
|
List<MemUser> v5UserList = memUserService.getUserListByGrade(EnumMemberGrade.G_5.index);
|
|
// 封装数据
|
for (Map<String, Object> map : list) {
|
map.put("cityCode",
|
cityRegionService.getProvinceCityCountyNameByAll(cityAll, Convert.toStr(map.get("city_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"));
|
|
// // 权益人信息
|
// MemUser equityUser = equityUserUserList.stream().filter(o -> {
|
// if (o.getId().equals(Convert.toInt(map.get("equity_user_id")))) {
|
// return true;
|
// }
|
// return false;
|
// }).findFirst().orElse(new MemUser());
|
// map.put("equityUserRealName", equityUser.getRealName());
|
// map.put("equityUserCityCode",
|
// cityRegionService.getProvinceCityCountyNameByAll(cityAll, equityUser.getCityCode()).stream()
|
// .map(TCityRegion::getName)
|
// .collect(Collectors.joining("-"))
|
// );
|
|
// 推荐人信息
|
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.getParentV4V5ByRelationPath(
|
v4UserList,
|
v5UserList,
|
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());
|
} else if (parentV4V5User[1] != null) {
|
map.put("v4ShowId", parentV4V5User[1].getShowId());
|
map.put("v4Team", parentV4V5User[1].getRealName());
|
map.put("v5ShowId", parentV4V5User[1].getShowId());
|
map.put("v5Team", parentV4V5User[1].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"));
|
}
|
if (userMemberGradeId == EnumMemberGrade.G_5.index) {
|
// 当是:市场总监后,城市合伙人无数据时,城市合伙人信息需显示本人的信息(只是做展示,不影响任何功能)
|
map.put("v4ShowId", map.get("show_id"));
|
map.put("v4Team", map.get("real_name"));
|
map.put("v5ShowId", map.get("show_id"));
|
map.put("v5Team", map.get("real_name"));
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 导出用户列表
|
*/
|
@Permission
|
@ResponseBody
|
@RequestMapping(value = "/export")
|
public void export(String beginTime, String endTime, String nickName, String phone, String showId, Integer isLock, Integer isLeaveOffice, Integer memberGradeId, HttpServletResponse response) {
|
boolean admin = ShiroKit.isAdmin();
|
List<Map<String, Object>> list = this.wrapperList(null, beginTime, endTime, nickName, phone, showId, isLock, isLeaveOffice, memberGradeId);
|
|
// 表格数据【封装】
|
List<List<Object>> dataList = new ArrayList<>();
|
if (admin) {
|
// 头部列【封装】
|
List<Object> shellList = new ArrayList<>();
|
shellList.add("工号");
|
shellList.add("提交时间");
|
shellList.add("推荐人工号");
|
shellList.add("推荐人");
|
shellList.add("推荐人所在城市");
|
shellList.add("姓名");
|
shellList.add("性别");
|
shellList.add("生日");
|
shellList.add("联系电话");
|
shellList.add("证件类型");
|
shellList.add("证件号码");
|
shellList.add("银行卡号");
|
shellList.add("品行分");
|
shellList.add("审核状态");
|
shellList.add("佣金等级");
|
shellList.add("积分");
|
shellList.add("入司时间");
|
shellList.add("状态");
|
shellList.add("城市合伙人工号");
|
shellList.add("城市合伙人团队");
|
shellList.add("市场总监工号");
|
shellList.add("市场总监团队");
|
dataList.add(shellList);
|
|
// 详细数据列【封装】
|
for (Map<String, Object> map : list) {
|
shellList = new ArrayList<>();
|
shellList.add(map.get("show_id"));
|
shellList.add(map.get("apply_time"));
|
shellList.add(map.get("equityUserShowId"));
|
shellList.add(map.get("equityUserRealName"));
|
shellList.add(map.get("equityUserCityCode"));
|
shellList.add(map.get("real_name"));
|
shellList.add(map.get("sex"));
|
shellList.add(map.get("birthday"));
|
shellList.add(map.get("phone"));
|
shellList.add(Convert.toInt(map.get("card_type")) == 0 ? "身份证" : "护照");
|
shellList.add(map.get("id_card"));
|
shellList.add(map.get("bank_number"));
|
shellList.add(map.get("credit_score"));
|
shellList.add(EnumAuditState.getMarkByIndex(Convert.toInt(map.get("audit_state"))));
|
shellList.add(EnumMemberGrade.getAliasByIndex(Convert.toInt(map.get("member_grade_id"))));
|
shellList.add(map.get("integral"));
|
shellList.add(map.get("audit_time"));
|
Integer isLeaveOfficeNum = Convert.toInt(map.get("is_leave_office"));
|
shellList.add(isLeaveOfficeNum == 0 ? "在职" : isLeaveOfficeNum == 1 ? "离职" : "-");
|
shellList.add(map.get("v4ShowId"));
|
shellList.add(map.get("v4Team"));
|
shellList.add(map.get("v5ShowId"));
|
shellList.add(map.get("v5Team"));
|
dataList.add(shellList);
|
}
|
} else {
|
// 头部列【封装】
|
List<Object> shellList = new ArrayList<>();
|
shellList.add("工号");
|
shellList.add("提交时间");
|
shellList.add("推荐人工号");
|
shellList.add("推荐人");
|
shellList.add("推荐人所在城市");
|
shellList.add("姓名");
|
shellList.add("性别");
|
shellList.add("生日");
|
shellList.add("证件类型");
|
shellList.add("品行分");
|
shellList.add("审核状态");
|
shellList.add("佣金等级");
|
shellList.add("积分");
|
shellList.add("入司时间");
|
shellList.add("状态");
|
shellList.add("城市合伙人工号");
|
shellList.add("城市合伙人团队");
|
shellList.add("市场总监工号");
|
shellList.add("市场总监团队");
|
dataList.add(shellList);
|
|
// 详细数据列【封装】
|
for (Map<String, Object> map : list) {
|
shellList = new ArrayList<>();
|
shellList.add(map.get("show_id"));
|
shellList.add(map.get("apply_time"));
|
shellList.add(map.get("equityUserShowId"));
|
shellList.add(map.get("equityUserRealName"));
|
shellList.add(map.get("equityUserCityCode"));
|
shellList.add(map.get("real_name"));
|
shellList.add(map.get("sex"));
|
shellList.add(map.get("birthday"));
|
shellList.add(Convert.toInt(map.get("card_type")) == 0 ? "身份证" : "护照");
|
shellList.add(map.get("credit_score"));
|
shellList.add(EnumAuditState.getMarkByIndex(Convert.toInt(map.get("audit_state"))));
|
shellList.add(EnumMemberGrade.getAliasByIndex(Convert.toInt(map.get("member_grade_id"))));
|
shellList.add(map.get("integral"));
|
shellList.add(map.get("audit_time"));
|
Integer isLeaveOfficeNum = Convert.toInt(map.get("is_leave_office"));
|
shellList.add(isLeaveOfficeNum == 0 ? "在职" : isLeaveOfficeNum == 1 ? "离职" : "-");
|
shellList.add(map.get("v4ShowId"));
|
shellList.add(map.get("v4Team"));
|
shellList.add(map.get("v5ShowId"));
|
shellList.add(map.get("v5Team"));
|
dataList.add(shellList);
|
}
|
}
|
|
try {
|
String title = "营销员";
|
// 调用工具类进行导出
|
ExcelExportUtil.easySheet(title + DateUtil.format(new Date(), "YYYYMMddHHmmSS"), title, dataList, response);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 跳转销售人员审核
|
*/
|
@RequestMapping(value = "/openAudit/{memUserId}")
|
public Object openAudit(@PathVariable("memUserId") Integer memUserId, Model model) {
|
// 个人信息
|
MemUser memUser = memUserService.selectById(memUserId);
|
if (memUser != null) {
|
Map<String, Object> map = JSON.parseObject(JSON.toJSONString(memUser), Map.class);
|
map.put("createTime", DateUtil.format(memUser.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
|
map.put("memberGradeId", EnumMemberGrade.getMarkByIndex(memUser.getMemberGradeId()));
|
|
// 权益转让人
|
MemUser equityUser = memUserService.selectById(memUser.getEquityUserId());
|
if (equityUser != null) {
|
equityUser.setCityCode(
|
String.join(" ", cityRegionService.getProvinceCityCountyName(equityUser.getCityCode()))
|
);
|
}
|
map.put("equityUser", equityUser);
|
|
model.addAttribute("item", map);
|
}
|
return PREFIX + "memUserSales_audit.html";
|
}
|
|
@Permission
|
@BussinessLog(value = "营销人员管理-审核")
|
@ResponseBody
|
@RequestMapping(value = "/audit")
|
public Object audit(Integer userId, Integer state, String remark) {
|
MemUser memUser = memUserService.selectById(userId);
|
if (memUser == null || memUser.getAuditState() != 0) {
|
return new ErrorTip(500, "人员信息审核失败,请刷新重试!");
|
}
|
|
String setSql = "audit_state = " + state
|
+ ", audit_time = NOW()"
|
+ ", remark = " + SqlUtil.addSingleQuotes(remark);
|
if (state == 1) {
|
// 获取最新工号
|
Object showId = memUserService.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";
|
}
|
|
// 设置工号
|
setSql += ", show_id = " + SqlUtil.addSingleQuotes(Convert.toInt(showId) + 1)
|
+ ", is_leave_office = 0";
|
|
// 购买套餐成功 即 VIP会员,申请入司 为 黄金营销员/城市合伙人
|
MallOrder order = mallOrderService.selectById(memUser.getEquityOrderNo());
|
if (order != null && order.getOrderType() != EnumMallGoodsGroupType.GOODS.index) {
|
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_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;
|
// }
|
// }
|
// 其他(城市合伙人、市场总监)不处理
|
|
// 升级、重置品行(处理降级的要重置)
|
if (gradeId != 0) {
|
setSql += ", member_grade_id = " + gradeId
|
+ ", is_buy_grade = " + gradeId
|
+ ", member_grade_time = NOW()"
|
+ ", credit_score = 100";
|
}
|
|
// 当用户已申请并通过成为营销员,用户所在城市需显示营销员的城市,营销员的城市取套餐推荐人的所在城市
|
MemUser saleUser = memUserService.selectById(order.getSaleUserId());
|
if (saleUser != null && StrUtil.isNotBlank(saleUser.getCityCode())) {
|
String province = StrUtil.sub(saleUser.getCityCode(), 0, 2) + "0000";
|
String city = StrUtil.sub(saleUser.getCityCode(), 0, 4) + "00";
|
String county = saleUser.getCityCode();
|
|
setSql += ", city_code = " + SqlUtil.addSingleQuotes(saleUser.getCityCode())
|
+ ", agent_province_code = " + SqlUtil.addSingleQuotes(province)
|
+ ", agent_city_code = " + SqlUtil.addSingleQuotes(city)
|
+ ", agent_county_code = " + SqlUtil.addSingleQuotes(county);
|
}
|
}
|
|
// 查询上级
|
MemUserRelation shareUserRelation = memUserRelationService.selectById(order.getSaleUserId());
|
// 更新用户关系表
|
memUserRelationService.insertOrUpdate(
|
MemUserRelation.builder()
|
.id(userId)
|
.parentId(shareUserRelation.getId())
|
.relationPath(shareUserRelation.getRelationPath() + "/" + userId)
|
.build()
|
);
|
} else if (state == 2) {
|
// 重置申请条件
|
setSql += ", is_leave_office = -1";
|
}
|
|
boolean flag = memUserService.updateForSet(setSql, new EntityWrapper<MemUser>().eq("id", userId));
|
if (flag) {
|
if (state == 2) {
|
// 订单材料受赠人,0未申请入司
|
mallOrderService.updateForSet("use_user_id = 0",
|
new EntityWrapper<MallOrder>()
|
.eq("order_no", memUser.getEquityOrderNo())
|
);
|
}
|
// 清除后台通知
|
cleanSystemNotice(memUser.getId());
|
}
|
|
return returnByFlag(flag, null);
|
}
|
|
/**
|
* 清除后台通知
|
*/
|
public void cleanSystemNotice(Integer id) {
|
try {
|
SystemNotice systemNotice = systemNoticeService.selectOne(
|
new EntityWrapper<SystemNotice>()
|
.eq("param", id)
|
.eq("type", EnumIsSystemNotice.TYPE_1.index)
|
);
|
if (systemNotice != null) {
|
// 修改后台通知
|
systemNotice.setIsDelete(1).updateById();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 跳转销售人员信息详情
|
*/
|
@RequestMapping(value = "/detail/{memUserId}")
|
public Object detail(@PathVariable("memUserId") Integer memUserId, Model model) {
|
boolean admin = ShiroKit.isAdmin();
|
model.addAttribute("isAdmin", admin);
|
// 个人信息
|
MemUser memUser = memUserService.selectById(memUserId);
|
if (memUser != null) {
|
Map<String, Object> map = JSON.parseObject(JSON.toJSONString(memUser), Map.class);
|
map.put("createTime", DateUtil.format(memUser.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
|
Date leaveOfficeTime = memUser.getLeaveOfficeTime();
|
if (leaveOfficeTime != null) {
|
map.put("leaveOfficeTime", DateUtil.format(leaveOfficeTime, "yyyy.MM.dd"));
|
}
|
map.put("memberGradeId", EnumMemberGrade.getMarkByIndex(memUser.getMemberGradeId()));
|
|
// 权益转让人
|
MemUser equityUser = memUserService.selectById(memUser.getEquityUserId());
|
if (equityUser != null) {
|
equityUser.setCityCode(
|
Arrays.stream(cityRegionService.getProvinceCityCountyName(equityUser.getCityCode())).collect(Collectors.joining(" "))
|
);
|
}
|
map.put("equityUser", equityUser);
|
|
MemUser parentUser = memUserRelationService.getParentUserById(memUserId);
|
if (parentUser != null) {
|
model.addAttribute("equityUserRealName", parentUser.getRealName());
|
model.addAttribute("equityUserCityCode", cityRegionService.getProvinceCityCountyNameByAll(null, parentUser.getCityCode()).stream()
|
.map(TCityRegion::getName)
|
.collect(Collectors.joining("-")));
|
}
|
|
model.addAttribute("item", map);
|
}
|
return PREFIX + "memUserSales_detail.html";
|
}
|
|
/**
|
* 跳转团队成员
|
*/
|
@RequestMapping(value = "/team")
|
public String team(Model model, Integer teamUserId) {
|
model.addAttribute("teamUserId", teamUserId);
|
return PREFIX + "memUserSales_team.html";
|
}
|
|
/**
|
* 获取团队成员
|
*/
|
@ResponseBody
|
@RequestMapping(value = "/teamList")
|
public Object teamList(Integer teamUserId, Integer memberGradeId, String showId, String beginTime, String endTime) {
|
Page<Map<String, Object>> page = new PageFactory().defaultPage();
|
|
List<Map<String, Object>> list = wrapperTeamList(page, teamUserId, memberGradeId, showId, beginTime, endTime);
|
|
page.setRecords(list);
|
return super.packForBT(page);
|
}
|
@RequestMapping(value = "/team/export")
|
public void teamExport(Integer teamUserId, Integer memberGradeId, String showId, String beginTime, String endTime, HttpServletResponse response) {
|
List<Map<String, Object>> list = wrapperTeamList(null, teamUserId, memberGradeId, showId, beginTime, endTime);
|
|
// 表格数据【封装】
|
List<List<Object>> dataList = new ArrayList<>();
|
|
// 头部列【封装】
|
List<Object> shellList = new ArrayList<>();
|
shellList.add("工号");
|
shellList.add("注册时间");
|
shellList.add("姓名");
|
shellList.add("用户职级");
|
shellList.add("消费金额");
|
shellList.add("入司时间");
|
shellList.add("品行分");
|
shellList.add("状态");
|
dataList.add(shellList);
|
|
// 详细数据列【封装】
|
for (Map<String, Object> map : list) {
|
shellList = new ArrayList<>();
|
shellList.add(map.get("show_id"));
|
shellList.add(map.get("create_time"));
|
shellList.add(map.get("real_name"));
|
shellList.add(EnumMemberGrade.getMarkByIndex(Convert.toInt(map.get("member_grade_id"))));
|
shellList.add(map.get("orderMoney"));
|
shellList.add(map.get("audit_time"));
|
shellList.add(map.get("credit_score"));
|
Integer isLeaveOfficeNum = Convert.toInt(map.get("is_leave_office"));
|
shellList.add(isLeaveOfficeNum == 0 ? "在职" : isLeaveOfficeNum == 1 ? "离职" : "-");
|
dataList.add(shellList);
|
}
|
try {
|
String title = "营销员团队";
|
// 调用工具类进行导出
|
ExcelExportUtil.easySheet(title + DateUtil.format(new Date(), "YYYYMMddHHmmSS"), title, dataList, response);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
public List<Map<String, Object>> wrapperTeamList(Page<Map<String, Object>> page, Integer teamUserId, Integer memberGradeId, String showId, String beginTime, String endTime) {
|
List<Map<String, Object>> list = new ArrayList<>();
|
|
List gradeList = new ArrayList();
|
if (memberGradeId != null && memberGradeId != -1) {
|
gradeList.add(memberGradeId);
|
} else {
|
MemUser teamUser = memUserService.selectById(teamUserId);
|
if (teamUser.getMemberGradeId() == EnumMemberGrade.G_4.index) {
|
gradeList.add(EnumMemberGrade.G_3.index);
|
}
|
if (teamUser.getMemberGradeId() == EnumMemberGrade.G_5.index) {
|
gradeList.add(EnumMemberGrade.G_3.index);
|
gradeList.add(EnumMemberGrade.G_4.index);
|
}
|
}
|
if (CollUtil.isNotEmpty(gradeList)) {
|
if (page != null) {
|
list = memUserRelationService.myTeam(page, teamUserId, gradeList, showId, beginTime, endTime);
|
} else {
|
list = memUserRelationService.myTeam(teamUserId, gradeList, showId, beginTime, endTime);
|
}
|
}
|
|
// 按用户分组查询业绩
|
List<MallOrder> goodsMoneyList = mallOrderService.selectList(
|
new EntityWrapper<MallOrder>()
|
.setSqlSelect("SUM(goods_money) goodsMoney, user_id")
|
.eq("state", EnumMallOrderState.SUCCESS.index)
|
.in("user_id", list.stream().map(o -> o.get("id")).collect(Collectors.toList()))
|
.groupBy("user_id")
|
);
|
|
return list.stream().map(o -> {
|
BigDecimal orderMoney = BigDecimal.ZERO;
|
for (MallOrder om : goodsMoneyList) {
|
if (om.getUserId().equals(o.get("id"))) {
|
orderMoney = om.getGoodsMoney();
|
break;
|
}
|
}
|
o.put("orderMoney", orderMoney);
|
return o;
|
}).collect(Collectors.toList());
|
}
|
|
/**
|
* 跳转修改品行分
|
*/
|
@RequestMapping(value = "/openEditCreditScore")
|
public String openEditCreditScore(Model model, String ids) {
|
model.addAttribute("ids", ids);
|
return PREFIX + "edit_credit_score.html";
|
}
|
|
/**
|
* 修改品行分
|
*/
|
@Permission
|
@BussinessLog(value = "营销人员管理-修改品行分")
|
@ResponseBody
|
@RequestMapping(value = "/editCreditScore")
|
public Object editCreditScore(String ids, String creditScore) {
|
boolean flag = memUserService.updateForSet("credit_score = " + creditScore, new EntityWrapper<MemUser>().in("id", ids.split(",")));
|
return returnByFlag(flag, null);
|
}
|
|
/**
|
* 跳转修改职级
|
*/
|
@RequestMapping(value = "/openEditUserLevel/{userId}")
|
public String openEditUserLevel(Model model, @PathVariable("userId") Integer userId) {
|
MemUser item = memUserService.selectOne(
|
new EntityWrapper<MemUser>()
|
.setSqlSelect("id, member_grade_id")
|
.eq("id", userId)
|
);
|
|
model.addAttribute("item", item);
|
return PREFIX + "edit_user_level.html";
|
}
|
|
/**
|
* 修改职级
|
*/
|
@Permission
|
@BussinessLog(value = "营销人员管理-修改职级")
|
@ResponseBody
|
@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);
|
}
|
|
@RequestMapping(value = "/openEditCityCode/{userId}")
|
public String openEditCityCode(Model model, @PathVariable("userId") Integer userId) {
|
// 省市区三级联动
|
List<TCityRegion> cityList = cityRegionService.selectList(
|
new EntityWrapper<TCityRegion>()
|
.setSqlSelect("code, name")
|
.eq("parent_id", 0)
|
);
|
model.addAttribute("cityList", cityList);
|
|
MemUser item = memUserService.selectOne(
|
new EntityWrapper<MemUser>()
|
.setSqlSelect("id, city_code")
|
.eq("id", userId)
|
);
|
|
model.addAttribute("item", item);
|
return PREFIX + "edit_city_code.html";
|
}
|
|
@Permission
|
@BussinessLog(value = "营销人员管理-修改城市", key = "userId")
|
@ResponseBody
|
@RequestMapping(value = "/editCityCode")
|
public Object editCityCode(Integer userId, String cityCode) {
|
// 下级用户列表
|
List<MemUserRelation> subUserList = memUserRelationService.selectList(
|
new EntityWrapper<MemUserRelation>()
|
.setSqlSelect("id, relation_path")
|
.like("relation_path", "/" + userId + "/")
|
);
|
|
// 获取下级用户ID
|
List<Integer> userIdList = subUserList.stream().map(MemUserRelation::getId).collect(Collectors.toList());
|
// 添加自己
|
userIdList.add(userId);
|
|
String province = StrUtil.sub(cityCode, 0, 2) + "0000";
|
String city = StrUtil.sub(cityCode, 0, 4) + "00";
|
String county = cityCode;
|
|
String whereSql = "city_code = " + SqlUtil.addSingleQuotes(cityCode)
|
+ ", agent_province_code = " + SqlUtil.addSingleQuotes(province)
|
+ ", agent_city_code = " + SqlUtil.addSingleQuotes(city)
|
+ ", agent_county_code = " + SqlUtil.addSingleQuotes(county);
|
|
boolean flag = memUserService.updateForSet(whereSql, new EntityWrapper<MemUser>().in("id", userIdList));
|
return returnByFlag(flag, null);
|
}
|
|
@Permission
|
@BussinessLog(value = "营销人员管理-离职")
|
@ResponseBody
|
@RequestMapping(value = "/updateLeaveOffice")
|
public Object updateLeaveOffice(Integer userId) {
|
boolean flag = memUserService.updateForSet("is_leave_office = 1, leave_office_time = NOW()", new EntityWrapper<MemUser>().eq("id", userId));
|
return returnByFlag(flag, null);
|
}
|
|
@Permission
|
@ResponseBody
|
@BussinessLog(value = "营销人员管理-冻结/解冻")
|
@RequestMapping(value = "/updateState")
|
public Object updateState(Integer userId, Integer state) {
|
boolean flag = memUserService.updateForSet("is_lock = " + state, new EntityWrapper<MemUser>().eq("id", userId));
|
return returnByFlag(flag, "");
|
}
|
|
public Object returnByFlag(boolean flag, String msg) {
|
if (flag) {
|
return new SuccessTip(200, "操作成功!");
|
} else {
|
return new ErrorTip(500, StrUtil.isNotBlank(msg) ? msg : "操作失败!");
|
}
|
}
|
|
}
|