3 files added
17 files modified
| | |
| | | return mallMemberService.getAgentLevelOption(); |
| | | } |
| | | |
| | | /** |
| | | * 代理-等级选择Option |
| | | */ |
| | | @GetMapping("agentLevelOption/tree") |
| | | @ControllerEndpoint(exceptionMessage = "获取等级失败") |
| | | public List<AdminAgentLevelOptionTreeVo> agentLevelOption() { |
| | | // return mallMemberService.getAgentLevelOption(); |
| | | return mallMemberService.agentLevelOption(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 代理列表-全部成员 |
| | |
| | | return mallMemberService.agentAddress(); |
| | | } |
| | | |
| | | /** |
| | | * 合伙人申请列表-更新 |
| | | */ |
| | | @PostMapping("agentVerifyUpdate") |
| | | @ControllerEndpoint(operation = "合伙人申请列表-更新", exceptionMessage = "操作失败") |
| | | public FebsResponse agentVerifyUpdate(@Valid AdminAgentVerifyVo adminAgentVerifyVo) { |
| | | return mallMemberService.agentVerifyUpdate(adminAgentVerifyVo); |
| | | } |
| | | |
| | | } |
| | |
| | | return iApiMallAgentService.agentApply(apiAgentApplyDto); |
| | | } |
| | | |
| | | @ApiOperation(value = "代理申请信息") |
| | | @GetMapping(value = "/agentApplyInfo") |
| | | public FebsResponse agentApplyInfo() { |
| | | return memberService.agentApplyInfo(); |
| | | } |
| | | |
| | | @ApiOperation(value = "合伙人权益") |
| | | @GetMapping(value = "/agentDetail") |
| | | public FebsResponse agentDetail() { |
| | |
| | | import cc.mrbird.febs.common.entity.FebsConstant; |
| | | import cc.mrbird.febs.common.utils.FebsUtil; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.MallAgentRecordMapper; |
| | | import cc.mrbird.febs.mall.mapper.MallSalesmanMapper; |
| | | import cc.mrbird.febs.mall.service.IAdminMallMemberService; |
| | | import cc.mrbird.febs.mall.vo.*; |
| | |
| | | private final IAdminMallMemberService mallMemberService; |
| | | |
| | | private final MallSalesmanMapper mallSalesmanMapper; |
| | | private final MallAgentRecordMapper mallAgentRecordMapper; |
| | | |
| | | public static long idFromMoneyFlow; |
| | | |
| | |
| | | return FebsUtil.view("modules/mallMember/agentAchieveList"); |
| | | } |
| | | |
| | | /** |
| | | * 合伙人代理等级列表-选择 |
| | | * @param id |
| | | * @param model |
| | | * @return |
| | | */ |
| | | @GetMapping("agentVerify/{id}") |
| | | @RequiresPermissions("agentVerify:update") |
| | | public String agentVerify(@PathVariable long id, Model model) { |
| | | MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(id); |
| | | AdminAgentVerifyVo data = new AdminAgentVerifyVo(); |
| | | data.setId(mallAgentRecord.getId()); |
| | | model.addAttribute("adminAgentVerifyVo", data); |
| | | return FebsUtil.view("modules/mallMember/agentVerify"); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | //充值金额 |
| | | private BigDecimal amount; |
| | | //代理等级 |
| | | private Integer agentLevel; |
| | | private String agentLevel; |
| | | |
| | | //状态 1::申请中 2:同意 3:拒绝 |
| | | private Integer state; |
| | |
| | | @TableField(exist = false) |
| | | private String nickname; |
| | | |
| | | @TableField(exist = false) |
| | | private String agentLevelName; |
| | | |
| | | } |
| | |
| | | DataDictionaryCustom selectDicDataByTypeAndCode(@Param("type") String type, @Param("code") String code); |
| | | |
| | | List<AdminAgentLevelOptionTreeVo> getAgentLevelOption(); |
| | | List<AdminAgentLevelOptionTreeVo> agentLevelOption(); |
| | | |
| | | AdminRankAwardUpdateInfoVo getRankAwardUpdateInfoById(@Param("id")long id); |
| | | |
| | |
| | | package cc.mrbird.febs.mall.mapper; |
| | | |
| | | import cc.mrbird.febs.mall.entity.MallAgentRecord; |
| | | import cc.mrbird.febs.mall.vo.ApiMallAgentRecordVo; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | |
| | | void updateStateByMemberId(@Param("memberId")Long memberId); |
| | | |
| | | void deleteByMemberIdAndState(@Param("memberId")Long memberId, @Param("state")Integer applyIng); |
| | | |
| | | ApiMallAgentRecordVo selectApiMallAgentRecordVoByMemberIdAndState(@Param("memberId")Long memberId, @Param("state")Integer applyIng); |
| | | } |
| | |
| | | List<AdminMallAgentRecordVo> selectAgentAddressProvince(); |
| | | |
| | | List<String> selectAgentAddressCity(@Param("province")String province); |
| | | |
| | | } |
| | |
| | | IPage<AdminMallAgentRecordVo> getAgentAchieveList(MallAgentRecord mallAgentRecord, QueryRequest request); |
| | | |
| | | List<AdminMallAgentRecordVo> agentAddress(); |
| | | |
| | | List<AdminAgentLevelOptionTreeVo> agentLevelOption(); |
| | | |
| | | FebsResponse agentVerifyUpdate(AdminAgentVerifyVo adminAgentVerifyVo); |
| | | } |
| | |
| | | |
| | | FebsResponse rechargeWallet(ApiRechargeWalletDto apiRechargeWalletDto); |
| | | |
| | | void updateMemberAgent(Long memberId); |
| | | void updateMemberAgent(Long memberId,String levelCode); |
| | | |
| | | FebsResponse agentDetail(); |
| | | |
| | | FebsResponse activityInfo(); |
| | | |
| | | FebsResponse agentApplyInfo(); |
| | | } |
| | |
| | | return dataDictionaryCustomMapper.getAgentLevelOption(); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<AdminAgentLevelOptionTreeVo> agentLevelOption() { |
| | | return dataDictionaryCustomMapper.agentLevelOption(); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse agentVerifyUpdate(AdminAgentVerifyVo adminAgentVerifyVo) { |
| | | MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(adminAgentVerifyVo.getId()); |
| | | if(ObjectUtil.isEmpty(mallAgentRecord)){ |
| | | throw new FebsException("记录不存在"); |
| | | } |
| | | BigDecimal amount = adminAgentVerifyVo.getAmount(); |
| | | if(BigDecimal.ZERO.compareTo(amount) >= 0){ |
| | | throw new FebsException("请输入正确的金额"); |
| | | } |
| | | if(StrUtil.isEmpty(adminAgentVerifyVo.getLevelCode())){ |
| | | throw new FebsException("请选择代理级别"); |
| | | } |
| | | mallAgentRecord.setAgentLevel(adminAgentVerifyVo.getLevelCode()); |
| | | mallAgentRecord.setAmount(adminAgentVerifyVo.getAmount()); |
| | | mallAgentRecordMapper.updateById(mallAgentRecord); |
| | | return new FebsResponse().success().message("操作成功"); |
| | | } |
| | | |
| | | @Override |
| | | public IPage<AdminAgentMemberVo> agentChild(QueryRequest request, MallMember mallMember) { |
| | | Long memberId = mallMember.getId(); |
| | |
| | | mallMemberVo.setIsAgent(1); |
| | | }else if(ObjectUtil.isNotEmpty(mallAgentRecordAgree)){ |
| | | mallMemberVo.setIsAgent(2); |
| | | if(StrUtil.isNotEmpty(mallAgentRecordAgree.getAgentLevel())){ |
| | | DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode("AGENT_LEVEL_APPLY", mallAgentRecordAgree.getAgentLevel()); |
| | | mallMemberVo.setAgentLevelName(dataDictionaryCustom.getDescription()); |
| | | } |
| | | }else if(ObjectUtil.isNotEmpty(mallAgentRecordDisagree)){ |
| | | mallMemberVo.setIsAgent(3); |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void updateMemberAgent(Long memberId) { |
| | | public void updateMemberAgent(Long memberId,String levelCode) { |
| | | mallAgentRecordMapper.updateStateByMemberId(memberId); |
| | | |
| | | //更新用户表中的LEVEL |
| | | MallMember mallMember = this.baseMapper.selectById(memberId); |
| | | mallMember.setLevel(AgentLevelEnum.FIRST_LEVEL.name()); |
| | | mallMember.setLevel(levelCode); |
| | | this.baseMapper.updateById(mallMember); |
| | | } |
| | | |
| | |
| | | return new FebsResponse().success().data(map); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse agentApplyInfo() { |
| | | Long memberId = LoginUserUtil.getLoginUser().getId(); |
| | | ApiMallAgentRecordVo apiMallAgentRecordVo = mallAgentRecordMapper.selectApiMallAgentRecordVoByMemberIdAndState(memberId,MallAgentRecord.APPLY_ING); |
| | | return new FebsResponse().success().data(apiMallAgentRecordVo); |
| | | } |
| | | |
| | | private String getXcxLoginUrl(String code) { |
| | | String wechatLoginUrl =xcxProperties.getWecharLoginUrl(); |
| | | return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code); |
New file |
| | |
| | | package cc.mrbird.febs.mall.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | @ApiModel(value = "AdminAgentVerifyVo", description = "信息返回类") |
| | | public class AdminAgentVerifyVo { |
| | | |
| | | //ID |
| | | private Long id; |
| | | //充值金额 |
| | | private BigDecimal amount; |
| | | //代理等级 |
| | | private String levelCode; |
| | | } |
New file |
| | |
| | | package cc.mrbird.febs.mall.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | @ApiModel(value = "ApiMallAgentRecordVo", description = "返回参数类") |
| | | public class ApiMallAgentRecordVo { |
| | | private Long id; |
| | | //申请人姓名 |
| | | @ApiModelProperty(value = "申请人姓名") |
| | | private String name; |
| | | //电话 |
| | | @ApiModelProperty(value = "电话") |
| | | private String phone; |
| | | //店铺名称(非必填) |
| | | @ApiModelProperty(value = "店铺名称(非必填)") |
| | | private String storeName; |
| | | //省 |
| | | @ApiModelProperty(value = "省") |
| | | private String province; |
| | | //市 |
| | | @ApiModelProperty(value = "市") |
| | | private String city; |
| | | //区、县 |
| | | @ApiModelProperty(value = "区、县") |
| | | private String area; |
| | | //详细地址 |
| | | @ApiModelProperty(value = "详细地址") |
| | | private String storeAddress; |
| | | //充值金额 |
| | | @ApiModelProperty(value = "充值金额") |
| | | private BigDecimal amount; |
| | | //代理等级 |
| | | @ApiModelProperty(value = "代理等级") |
| | | private String agentLevel; |
| | | |
| | | @ApiModelProperty(value = "代理等级名称") |
| | | private String agentLevelName; |
| | | |
| | | //状态 1::申请中 2:同意 3:拒绝 |
| | | @ApiModelProperty(value = "状态 1::申请中 2:同意 3:拒绝") |
| | | private Integer state; |
| | | } |
| | |
| | | @ApiModelProperty(value = "是否是代理 1: 申请中 2:是 3:否") |
| | | private Integer isAgent; |
| | | |
| | | @ApiModelProperty(value = "代理名称") |
| | | private String agentLevelName; |
| | | |
| | | } |
| | |
| | | import cc.mrbird.febs.common.utils.RedisUtils; |
| | | import cc.mrbird.febs.common.utils.SpringContextHolder; |
| | | import cc.mrbird.febs.mall.dto.RechargeWalletMessageSendDto; |
| | | import cc.mrbird.febs.mall.entity.DataDictionaryCustom; |
| | | import cc.mrbird.febs.mall.entity.MallMemberWallet; |
| | | import cc.mrbird.febs.mall.entity.MallMoneyFlow; |
| | | import cc.mrbird.febs.mall.entity.MallOrderInfo; |
| | | import cc.mrbird.febs.mall.entity.*; |
| | | import cc.mrbird.febs.mall.mapper.*; |
| | | import cc.mrbird.febs.mall.service.IApiMallMemberService; |
| | | import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; |
| | |
| | | private IApiMallMemberWalletService memberWalletService; |
| | | @Autowired |
| | | private IApiMallMemberService mallMemberService; |
| | | @Autowired |
| | | private MallAgentRecordMapper mallAgentRecordMapper; |
| | | |
| | | @Autowired |
| | | private IXcxPayService iXcxPayService; |
| | |
| | | String rechargeNo = (String) jsonObject.get("rechargeNo"); |
| | | Integer type = (Integer) jsonObject.get("type"); |
| | | Long memberId = Long.parseLong(jsonObject.get("memberId").toString()); |
| | | Long agentApplyId = Long.parseLong(jsonObject.get("agentApplyId").toString()); |
| | | // 检验订单状态 |
| | | MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOneByOrderNoAndMemberId(rechargeNo,memberId); |
| | | // 校验签名 |
| | |
| | | log.debug("检查支付金额payMoney={},mallMoneyFlow.getPayMoney()={}", payMoney, mallMoneyFlow.getAmount()); |
| | | //合伙人申请的充值,要更新会员状态为FIRST_LEVEL |
| | | if(2 == type){ |
| | | mallMemberService.updateMemberAgent(memberId); |
| | | MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(agentApplyId); |
| | | mallMemberService.updateMemberAgent(memberId,mallAgentRecord.getAgentLevel()); |
| | | } |
| | | memberWalletService.addBalance(payMoney,memberId); |
| | | mallMoneyFlow.setStatus(2); |
| | |
| | | String productNames = "小程序充值"; |
| | | MallMember mallMember = mallMemberMapper.selectById(apiRechargeWalletDto.getMemberId()); |
| | | String rechargeNo = apiRechargeWalletDto.getRechargeNo(); |
| | | Long agentApplyId = apiRechargeWalletDto.getAgentApplyId() == null ? 0L : apiRechargeWalletDto.getAgentApplyId(); |
| | | Boolean debug = xcxProperties.getDebug(); |
| | | String attrStr = "{'rechargeNo':"+rechargeNo+",'memberId':"+mallMember.getId()+",'type':"+apiRechargeWalletDto.getType()+"}"; |
| | | String attrStr = "{'rechargeNo':"+rechargeNo |
| | | +",'memberId':"+mallMember.getId() |
| | | +",'agentApplyId':"+agentApplyId |
| | | +",'type':"+apiRechargeWalletDto.getType()+"}"; |
| | | if (debug) { |
| | | payData = weixinServiceUtil.createRechargeWallet("[测试]" + productNames, rechargeNo, |
| | | 1, mallMember.getOpenId(), attrStr); |
| | |
| | | where a.type='AGENT_LEVEL' and a.code != 'ZERO_LEVEL' |
| | | </select> |
| | | |
| | | <select id="agentLevelOption" resultType="cc.mrbird.febs.mall.vo.AdminAgentLevelOptionTreeVo"> |
| | | select a.code id,a.description name from data_dictionary_custom a |
| | | where a.type='AGENT_LEVEL_APPLY' |
| | | </select> |
| | | |
| | | <select id="getRankAwardUpdateInfoById" resultType="cc.mrbird.febs.mall.vo.AdminRankAwardUpdateInfoVo"> |
| | | select a.* from data_dictionary_custom a |
| | | where a.id = #{id} |
| | |
| | | <select id="selectMallAgentRecordListInPage" resultType="cc.mrbird.febs.mall.entity.MallAgentRecord"> |
| | | SELECT |
| | | a.*, |
| | | c.description agentLevelName, |
| | | b.name memberName |
| | | FROM mall_agent_record a |
| | | LEFT JOIN mall_member b on a.member_id = b.id |
| | | LEFT JOIN data_dictionary_custom c on a.agent_level = c.code |
| | | <where> |
| | | <if test="record != null" > |
| | | <if test="record.name!=null and record.name!=''"> |
| | |
| | | where member_id = #{memberId} and state = #{state} |
| | | </delete> |
| | | |
| | | <select id="selectApiMallAgentRecordVoByMemberIdAndState" resultType="cc.mrbird.febs.mall.vo.ApiMallAgentRecordVo"> |
| | | select a.*, |
| | | b.description agentLevelName |
| | | from mall_agent_record a |
| | | left join data_dictionary_custom b on a.agent_level = b.CODE |
| | | where a.member_id = #{memberId} |
| | | and a.state = #{state} |
| | | limit 1 |
| | | </select> |
| | | |
| | | </mapper> |
New file |
| | |
| | | <style> |
| | | #agent-verify { |
| | | padding: 20px 25px 25px 0; |
| | | } |
| | | |
| | | #agent-verify .layui-treeSelect .ztree li a, .ztree li span { |
| | | margin: 0 0 2px 3px !important; |
| | | } |
| | | #agent-verify #data-permission-tree-block { |
| | | border: 1px solid #eee; |
| | | border-radius: 2px; |
| | | padding: 3px 0; |
| | | } |
| | | #agent-verify .layui-treeSelect .ztree li span.button.switch { |
| | | top: 1px; |
| | | left: 3px; |
| | | } |
| | | #agent-verify img{ |
| | | max-width:100px |
| | | } |
| | | |
| | | </style> |
| | | <div class="layui-fluid" id="agent-verify"> |
| | | <form class="layui-form" action="" lay-filter="agent-verify-form"> |
| | | <div class="layui-form-item febs-hide"> |
| | | <label class="layui-form-label febs-form-item-require">用户id:</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="id" data-th-value="${adminAgentSelectVo.id}"> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label febs-form-item-require">充值金额:</label> |
| | | <div class="layui-input-block"> |
| | | <input type="text" name="amount" lay-verify="required" autocomplete="off" class="layui-input" > |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label febs-form-item-require">代理等级:</label> |
| | | <div class="layui-input-inline"> |
| | | <select name="levelCode" class="agent-verify-category" id="levelSelect"> |
| | | <option value="">请选择</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="layui-form-item febs-hide"> |
| | | <button class="layui-btn" lay-submit="" lay-filter="agent-verify-form-submit" id="submit"></button> |
| | | </div> |
| | | </form> |
| | | </div> |
| | | |
| | | <script data-th-inline="javascript"> |
| | | layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree', 'laydate','upload'], function () { |
| | | var $ = layui.$, |
| | | febs = layui.febs, |
| | | layer = layui.layer, |
| | | formSelects = layui.formSelects, |
| | | treeSelect = layui.treeSelect, |
| | | form = layui.form, |
| | | laydate = layui.laydate, |
| | | eleTree = layui.eleTree, |
| | | adminAgentVerifyVo = [[${adminAgentVerifyVo}]], |
| | | $view = $('#agent-verify'), |
| | | upload = layui.upload, |
| | | validate = layui.validate; |
| | | |
| | | form.render(); |
| | | laydate.render({ |
| | | elem: '#febs-form-group-date' |
| | | }); |
| | | |
| | | formSelects.render(); |
| | | |
| | | //(下拉框) |
| | | $.get(ctx + 'admin/mallMember/agentLevelOption/tree', function (data) { |
| | | for (var k in data) |
| | | { |
| | | $(".agent-verify-category").append("<option value='" + data[k].id + "'>" + data[k].name + "</option>"); |
| | | } |
| | | layui.use('form', function () { |
| | | var form = layui.form; |
| | | form.render(); |
| | | }); |
| | | }); |
| | | initVerifyValue(); |
| | | |
| | | function initVerifyValue() { |
| | | form.val("agent-verify-form", { |
| | | "id": adminAgentVerifyVo.id |
| | | }); |
| | | } |
| | | |
| | | form.on('submit(agent-verify-form-submit)', function (data) { |
| | | febs.post(ctx + 'admin/mallMember/agentVerifyUpdate', data.field, function () { |
| | | layer.closeAll(); |
| | | febs.alert.success('操作成功'); |
| | | $('#febs-agent-apply-list').find('#reset').click(); |
| | | }); |
| | | return false; |
| | | }); |
| | | }); |
| | | </script> |
| | |
| | | layEvent = obj.event; |
| | | |
| | | if (layEvent === 'agree') { |
| | | febs.modal.confirm('通过', '通过用户的代理申请?', function () { |
| | | agree(data.id); |
| | | // febs.modal.confirm('通过', '通过用户的代理申请?', function () { |
| | | // agree(data.id); |
| | | // }); |
| | | |
| | | febs.modal.open('代理申请审核', 'modules/mallMember/agentVerify/' + data.id, { |
| | | btn: ['确认','取消'], |
| | | yes: function (index, layero) { |
| | | $('#agent-verify').find('#submit').trigger('click'); |
| | | $query.click(); |
| | | }, |
| | | btn2: function () { |
| | | layer.closeAll(); |
| | | } |
| | | }); |
| | | } |
| | | if (layEvent === 'disagree') { |
| | |
| | | defaultToolbar:[], |
| | | cols: [[ |
| | | {field:'memberName', title:'微信昵称', width:100, rowspan: 2,align: 'center'} |
| | | ,{align: 'center', title: '基本信息', colspan: 7} |
| | | ,{align: 'center', title: '基本信息', colspan: 9} |
| | | ,{field: 'state', title: '申请状态', |
| | | templet: function (d) { |
| | | if (d.state === 1) { |
| | |
| | | // {field: 'memberName', title: '微信昵称', minWidth: 150,align:'left'}, |
| | | {field: 'name', title: '姓名', minWidth: 100,align:'left'}, |
| | | {field: 'phone', title: '电话', minWidth: 100,align:'left'}, |
| | | {field: 'amount', title: '充值金额', minWidth: 100,align:'left'}, |
| | | {field: 'agentLevelName', title: '等级', minWidth: 100,align:'left'}, |
| | | {field: 'province', title: '省', minWidth: 100,align:'left'}, |
| | | {field: 'city', title: '市', minWidth: 100,align:'left'}, |
| | | {field: 'area', title: '区、县', minWidth: 100,align:'left'}, |