src/main/java/com/xcong/excoin/modules/agent/controller/AgentController.java
@@ -1,5 +1,7 @@ package com.xcong.excoin.modules.agent.controller; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.xcong.excoin.common.annotation.ControllerEndpoint; import com.xcong.excoin.common.controller.BaseController; import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; @@ -10,12 +12,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.util.Map; /** @@ -34,15 +35,35 @@ @GetMapping("getList") @RequiresPermissions("agent:view") public FebsResponse getList(AgentUser agentUser, QueryRequest queryRequest) { User user = getCurrentUser(); agentUser.setRefererId(user.getInviteId()); Map<String, Object> map = getDataTable(agentService.findAgentList(agentUser, queryRequest)); return new FebsResponse().success().data(map); } @PostMapping("add") @RequiresPermissions("agent:add") @ControllerEndpoint(operation = "新增代理商", exceptionMessage = "新增代理商失败") public FebsResponse add(@Valid AgentUser agentUser) { User user = getCurrentUser(); agentService.addAgent(agentUser, user); return new FebsResponse().success(); } @GetMapping("del/{ids}") @RequiresPermissions("agent:del") @ControllerEndpoint(operation = "删除代理商", exceptionMessage = "删除代理商失败") public FebsResponse del(@NotBlank(message = "{required}") @PathVariable("ids") String ids) { String[] idsArr = ids.split(StringPool.COMMA); agentService.delAgent(idsArr); return new FebsResponse().success(); } @PostMapping("reset/{id}") @RequiresPermissions("agent:password:reset") @ControllerEndpoint(operation = "重置密码", exceptionMessage = "重置密码失败") public FebsResponse reset(@NotNull(message = "{required}") @PathVariable("id") Long id) { agentService.resetPwd(id); return new FebsResponse().success(); } } src/main/java/com/xcong/excoin/modules/agent/entity/AgentFriendRelationEntity.java
@@ -54,7 +54,7 @@ /** * 代理层级 */ private Integer leverId; private Integer levelId; /** * 手续费是否设置自己 src/main/java/com/xcong/excoin/modules/agent/mapper/AgentFriendRelationMapper.java
@@ -3,9 +3,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.agent.entity.AgentFriendRelationEntity; import org.apache.ibatis.annotations.Param; /** * @author helius */ public interface AgentFriendRelationMapper extends BaseMapper<AgentFriendRelationEntity> { AgentFriendRelationEntity selectAgentFriendRelationByUserId(@Param("userId") Long userId); } src/main/java/com/xcong/excoin/modules/agent/pojo/AgentUser.java
@@ -51,7 +51,7 @@ /** * 上级邀请码 */ private String referId; private String refererId; /** * 发展代理数 @@ -89,4 +89,9 @@ */ private Date createTime; /** * 实名状态 */ private Integer certifyStatus; } src/main/java/com/xcong/excoin/modules/agent/service/IAgentService.java
@@ -13,4 +13,8 @@ IPage<AgentUser> findAgentList(AgentUser agentUser, QueryRequest request); void addAgent(AgentUser agentUser, User user); void delAgent(String[] ids); void resetPwd(Long id); } src/main/java/com/xcong/excoin/modules/agent/service/impl/AgentServiceImpl.java
@@ -1,5 +1,6 @@ package com.xcong.excoin.modules.agent.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xcong.excoin.common.entity.FebsConstant; @@ -13,12 +14,17 @@ import com.xcong.excoin.modules.agent.pojo.AgentUser; import com.xcong.excoin.modules.agent.service.IAgentService; import com.xcong.excoin.system.entity.User; import com.xcong.excoin.system.entity.UserRole; import com.xcong.excoin.system.mapper.UserMapper; import com.xcong.excoin.system.mapper.UserRoleMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.Date; import java.util.List; /** * @author wzy @@ -33,6 +39,8 @@ private final MemberMapper memberMapper; private final UserRoleMapper userRoleMapper; private final AgentFriendRelationMapper agentFriendRelationMapper; @Override @@ -41,14 +49,22 @@ return userMapper.selectAgentUserList(page, agentUser); } @Transactional(rollbackFor = Exception.class) @Override public void addAgent(AgentUser agentUser, User user) { AgentFriendRelationEntity agentFriendRelation = new AgentFriendRelationEntity(); String refererId = ""; int level = 0; if (FebsConstant.USER_TYPE_ADMIN.equals(user.getType())) { refererId = FebsConstant.DEFAULT_REFERER_ID; level = 1; } else { refererId = user.getInviteId(); AgentFriendRelationEntity friendRelationEntity = agentFriendRelationMapper.selectAgentFriendRelationByUserId(user.getUserId()); if (agentUser.getReturnRatio().compareTo(friendRelationEntity.getReturnRatio()) > 0) { throw new FebsException("返佣比例需小于自己的返佣比例"); } level++; } MemberEntity memberEntity = memberMapper.selectMemberByInviteIdAndRefererId(agentUser.getInviteId(), refererId); if (memberEntity == null) { @@ -71,19 +87,41 @@ addUser.setCreateTime(new Date()); addUser.setInviteId(agentUser.getInviteId()); addUser.setAgentName(agentUser.getName()); addUser.setPassword(Md5Util.encrypt(user.getUsername(), User.DEFAULT_PASSWORD)); userMapper.insert(user); addUser.setPassword(Md5Util.encrypt(addUser.getUsername(), User.DEFAULT_PASSWORD)); userMapper.insert(addUser); UserRole userRole = new UserRole(); userRole.setUserId(addUser.getUserId()); userRole.setRoleId(83L); userRoleMapper.insert(userRole); agentFriendRelation.setInviteId(agentUser.getInviteId()); agentFriendRelation.setRefererId(refererId); agentFriendRelation.setRefererIds(memberEntity.getRefererIds()); agentFriendRelation.setMemberId(memberEntity.getId()); agentFriendRelation.setReturnRatio(agentUser.getReturnRatio()); agentFriendRelation.setUserId(user.getUserId()); agentFriendRelation.setUserId(addUser.getUserId()); agentFriendRelation.setCreateBy(user.getUsername()); agentFriendRelation.setCreateTime(new Date()); agentFriendRelation.setUpdateBy(user.getUsername()); agentFriendRelation.setUpdateTime(new Date()); agentFriendRelation.setLevelId(level); agentFriendRelation.setFeeIsSelf(2); agentFriendRelationMapper.insert(agentFriendRelation); } @Override public void delAgent(String[] ids) { List<String> list = Arrays.asList(ids); userMapper.deleteBatchIds(list); agentFriendRelationMapper.delete(new QueryWrapper<AgentFriendRelationEntity>().lambda().in(AgentFriendRelationEntity::getUserId, list)); userRoleMapper.delete(new QueryWrapper<UserRole>().lambda().in(UserRole::getUserId, list)); } @Override public void resetPwd(Long id) { User user = userMapper.selectById(id); user.setPassword(Md5Util.encrypt(user.getUsername(), User.DEFAULT_PASSWORD)); userMapper.updateById(user); } } src/main/resources/mapper/modules/AgentFriendRelationMapper.xml
@@ -2,4 +2,8 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xcong.excoin.modules.agent.mapper.AgentFriendRelationMapper"> <select id="selectAgentFriendRelationByUserId" resultType="com.xcong.excoin.modules.agent.entity.AgentFriendRelationEntity"> select * from agent_friend_relation where user_id=#{userId} </select> </mapper> src/main/resources/mapper/system/UserMapper.xml
@@ -94,7 +94,7 @@ u.invite_id, u.system, u.type, u.agent_name, u.agent_name </sql> <select id="countUserDetail" parameterType="user" resultType="long"> @@ -167,13 +167,26 @@ </select> <select id="selectAgentUserList" resultType="com.xcong.excoin.modules.agent.pojo.AgentUser"> select * select a.user_id id, a.username account, a.agent_name name, a.invite_id, a.create_time, a.status, b.return_ratio, c.phone telphone, c.email, c.referer_id refererId, c.certify_status from t_user a inner join agent_friend_relation b on a.user_id = b.user_id inner join member c on b.member_id = c.id <if test="record != null"> <where> <if test="record.refererId!=null and record.refererId!=''"> find_in_set(#{record.refererId}, b.referer_ids) </if> </where> </if> </select> src/main/resources/templates/febs/views/modules/agent/agent.html
@@ -60,7 +60,7 @@ <i class="layui-icon"></i> </div> <div class="layui-btn layui-btn-sm layui-btn-primary table-action action-more" shiro:hasAnyPermissions="user:add,user:update,user:password:reset,user:export"> shiro:hasAnyPermissions="agent:add,agent:edit"> <i class="layui-icon"></i> </div> </div> @@ -76,10 +76,10 @@ <script type="text/html" id="certify-status"> {{# var certifyStatus = { 0: {title: '未通过', color: 'red'}, 1: {title: '审核中', color: 'blue'}, 0: {title: '未实名', color: 'blue'}, 1: {title: '未实名', color: 'blue'}, 2: {title: '审核通过', color: 'green'}, 3: {title: '未实名', color: 'cyan'} 3: {title: '未实名', color: 'blue'} }[d.certifyStatus]; }} <span class="layui-badge febs-tag-{{certifyStatus.color}}">{{ certifyStatus.title }}</span> @@ -97,14 +97,12 @@ <!-- 表格操作栏 start --> <script type="text/html" id="user-option"> <span shiro:lacksPermission="agent:view,agent:edit,agent:del"> <span shiro:lacksPermission="agent:edit,agent:del"> <span class="layui-badge-dot febs-bg-orange"></span> 无权限 </span> <a lay-event="detail" shiro:hasPermission="agent:view"><i class="layui-icon febs-edit-area febs-green"></i></a> <a lay-event="edit" shiro:hasPermission="agent:edit"><i class="layui-icon febs-edit-area febs-blue"></i></a> <a lay-event="del" shiro:hasPermission="agent:del"><i class="layui-icon febs-edit-area febs-red"></i></a> <a lay-event="reset" title="重置密码" shiro:hasPermission="agent:password:reset"><i class="layui-icon febs-edit-area febs-blue"></i></a> <a lay-event="edit" title="编辑" shiro:hasPermission="agent:edit"><i class="layui-icon febs-edit-area febs-blue"></i></a> <a lay-event="del" title="删除" shiro:hasPermission="agent:del"><i class="layui-icon febs-edit-area febs-red"></i></a> </script> <!-- 表格操作栏 end --> <script data-th-inline="none" type="text/javascript"> @@ -115,7 +113,6 @@ febs = layui.febs, form = layui.form, table = layui.table, treeSelect = layui.treeSelect, dropdown = layui.dropdown, $view = $('#febs-user'), $query = $view.find('#query'), @@ -170,19 +167,19 @@ }); } } if (name === 'reset') { if (!checkStatus.data.length) { febs.alert.warn('请选择需要重置密码的用户'); } else { var usernames = []; layui.each(checkStatus.data, function (key, item) { usernames.push(item.username) }); febs.post(ctx + 'user/password/reset/' + usernames.join(','), null, function () { febs.alert.success('所选用户密码已重置为1234qwer'); }); } } // if (name === 'reset') { // if (!checkStatus.data.length) { // febs.alert.warn('请选择需要重置密码的用户'); // } else { // var usernames = []; // layui.each(checkStatus.data, function (key, item) { // usernames.push(item.username) // }); // febs.post(ctx + 'user/password/reset/' + usernames.join(','), null, function () { // febs.alert.success('所选用户密码已重置为1234qwer'); // }); // } // } }, options: [{ name: 'add', @@ -192,34 +189,23 @@ name: 'delete', title: '删除代理商', perms: 'agent:del' }, { name: 'reset', title: '密码重置', perms: 'agent:password:reset' }] }); // 下拉框选择器 treeSelect.render({ elem: $view.find('#dept'), type: 'get', data: ctx + 'dept/select/tree', placeholder: '请选择', search: false }); // 初始化表格操作栏各个按钮功能 table.on('tool(userTable)', function (obj) { var data = obj.data, layEvent = obj.event; if (layEvent === 'detail') { febs.modal.view('用户信息', 'system/user/detail/' + data.username, { area: $(window).width() <= 750 ? '95%' : '660px' if (layEvent === 'reset') { febs.modal.confirm('重置密码', '确定重置该用户密码?', function () { febs.post(ctx + 'agent/reset/' + data.id, null, function () { febs.alert.success('所选用户密码已重置为1234qwer'); }); }); } if (layEvent === 'del') { febs.modal.confirm('删除用户', '确定删除该用户?', function () { deleteUsers(data.userId); deleteUsers(data.id); }); } if (layEvent === 'edit') { @@ -246,7 +232,6 @@ // 刷新按钮 $reset.on('click', function () { $searchForm[0].reset(); treeSelect.revokeNode('dept'); sortObject.type = 'null'; createTimeTo = null; createTimeFrom = null; @@ -263,9 +248,9 @@ {field: 'name', title: '代理姓名', minWidth: 100, align: 'center'}, {field: 'account', title: '代理账号', minWidth: 100, align: 'center'}, {field: 'inviteId', title: '代理UID', minWidth: 100, align: 'center'}, {field: 'phone', title: '手机号', minWidth: 100, align: 'center'}, {field: 'email', title: '邮箱', minWidth: 100, align: 'center'}, {field: 'referId', title: '上级UID', minWidth: 100, align: 'center'}, {field: 'phone', title: '手机号', minWidth: 130, align: 'center'}, {field: 'email', title: '邮箱', minWidth: 180, align: 'center'}, {field: 'refererId', title: '上级UID', minWidth: 100, align: 'center'}, {title: '是否实名', templet: '#certify-status', minWidth: 100, align: 'center'}, {field: 'childCnt', title: '发展代理数', minWidth: 100, align: 'center'}, {field: 'chargeTotal', title: '充值总额', minWidth: 100, align: 'center'}, @@ -303,7 +288,7 @@ febs.alert.warn('所选用户包含当前登录用户,无法删除'); return; } febs.get(ctx + 'user/delete/' + userIds, null, function () { febs.get(ctx + 'agent/del/' + userIds, null, function () { febs.alert.success('删除用户成功'); $query.click(); });