Browse Source

门店创建推广员接口

cup 2 years ago
parent
commit
ad014380cc

+ 28 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelController.java

@@ -1,5 +1,6 @@
 package com.qs.mp.web.controller.api.channel;
 
+import com.alibaba.druid.sql.visitor.functions.If;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -10,6 +11,7 @@ import com.qs.mp.channel.domain.ChannelCommission;
 import com.qs.mp.channel.domain.ChannelOrderDetail;
 import com.qs.mp.channel.domain.ChannelUserRel;
 import com.qs.mp.channel.domain.param.ChannelParam;
+import com.qs.mp.channel.domain.param.PromoterCreateParam;
 import com.qs.mp.channel.domain.param.SiteQueryParam;
 import com.qs.mp.channel.domain.param.VerifyParam;
 import com.qs.mp.channel.domain.vo.ChannelOperDataVO;
@@ -28,6 +30,7 @@ import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.exception.base.BaseException;
 import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.user.domain.UserAddr;
 import com.qs.mp.user.domain.UserTicketOrder;
@@ -96,6 +99,31 @@ public class ChannelController extends BaseApiController {
 	@Autowired
 	private IUserAddrService userAddrService;
 
+
+
+	@PostMapping("/promoter/create")
+	@ApiOperation("门店创建推广员接口")
+	@ApiResponses(
+		@ApiResponse(code = 200, message = "成功")
+	)
+	public AjaxResult promoterCreate(@Validated @RequestBody PromoterCreateParam param) {
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		param.setChannelId(channelId);
+
+		// 校验推广员信息合法性
+		String checkRes = channelService.checkPromoter(param);
+		if (StringUtils.isNotBlank(checkRes)) {
+			return AjaxResult.error(checkRes);
+		}
+
+		// 创建推广员
+		channelService.createPromoter(param);
+
+		return AjaxResult.success(param);
+	}
+
+
+
 	/**
 	 * 获取我的下级渠道列表信息,支持翻页
 	 *

+ 40 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/PromoterCreateParam.java

@@ -0,0 +1,40 @@
+package com.qs.mp.channel.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.math.BigDecimal;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * 推广员添加入参类
+ * @author Cup
+ * @date 2022/8/9
+ */
+@ApiModel("推广员添加入参类")
+@Data
+public class PromoterCreateParam {
+
+    @ApiModelProperty("推广员所属门店id")
+    private Long channelId;
+
+    @ApiModelProperty("手机号")
+    @NotBlank(message = "手机号不能为空")
+    @Length(min = 11, max = 11, message = "手机号格式不正确")
+    private String mobile;
+
+    @ApiModelProperty("名字")
+    @NotBlank(message = "名字不能为空")
+    private String name;
+
+    @ApiModelProperty("工号")
+    @NotBlank(message = "工号不能为空")
+    private String wordNo;
+
+    @ApiModelProperty("佣金比例")
+    @NotNull(message = "佣金比例不能为空")
+    private BigDecimal commRate;
+
+}

+ 13 - 0
mp-service/src/main/java/com/qs/mp/channel/service/IChannelService.java

@@ -2,6 +2,7 @@ package com.qs.mp.channel.service;
 
 import com.qs.mp.admin.domain.vo.IndexVO;
 import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.domain.param.PromoterCreateParam;
 import com.qs.mp.channel.domain.vo.ChannelOperDataVO;
 import com.qs.mp.channel.domain.vo.ChannelVO;
 
@@ -116,4 +117,16 @@ public interface IChannelService extends IService<Channel> {
 	 * @return
 	 */
     boolean siteVerify(Channel channel);
+
+	/**
+	 * 推广员信息合法性校验
+	 * @param param
+	 */
+    String checkPromoter(PromoterCreateParam param);
+
+	/**
+	 * 创建推广员
+	 * @param param
+	 */
+	void createPromoter(PromoterCreateParam param);
 }

+ 79 - 0
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelServiceImpl.java

@@ -3,15 +3,18 @@ package com.qs.mp.channel.service.impl;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qs.mp.admin.domain.vo.IndexVO;
 import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.domain.param.PromoterCreateParam;
 import com.qs.mp.channel.domain.vo.ChannelOperDataVO;
 import com.qs.mp.channel.domain.vo.ChannelVO;
 import com.qs.mp.channel.mapper.ChannelMapper;
 import com.qs.mp.channel.service.IChannelCommissionService;
 import com.qs.mp.channel.service.IChannelService;
 import com.qs.mp.channel.service.IChannelUserRelService;
+import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.enums.ChannelCertifyStatusEnum;
 import com.qs.mp.common.enums.ChannelRoleEnum;
 import com.qs.mp.common.enums.ChannelVerifyStatusEnum;
@@ -25,6 +28,7 @@ import com.qs.mp.system.service.ISysUserService;
 import com.qs.mp.user.domain.UserAddr;
 import com.qs.mp.user.service.IUserAddrService;
 import com.qs.mp.utils.SecurityUtils;
+import java.math.BigDecimal;
 import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -61,6 +65,81 @@ public class ChannelServiceImpl extends ServiceImpl<ChannelMapper, Channel> impl
   @Autowired
   private IUserAddrService userAddrService;
 
+
+  @Autowired
+  private ISysUserService sysUserService;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void createPromoter(PromoterCreateParam param) {
+
+        // 判断用户是否已经注册了盲票
+        SysUser sysUser = sysUserService.selectUserByUserName(param.getMobile());
+        if (sysUser == null) {
+            sysUser = new SysUser();
+            // 直接注册新用户
+            sysUser.setUserName(param.getMobile());
+            sysUser.setNickName(param.getMobile());
+            sysUser.setPhonenumber(param.getMobile());
+            sysUserService.registerUser(sysUser);
+        }
+
+        Channel channel = this.getById(param.getChannelId());
+
+        // 创建推广员
+        Channel promoter = new Channel();
+        promoter.setUserId(sysUser.getUserId());
+        promoter.setWordNo(param.getWordNo());
+        promoter.setName(param.getName());
+        promoter.setLevel(-1);
+        promoter.setCommRate(param.getCommRate());
+        promoter.setMobile(param.getMobile());
+        promoter.setParentId(channel.getChannelId());
+        promoter.setChannelNo("");
+
+        boolean res = this.save(promoter);
+        if (!res) {
+            throw new ServiceException("创建推广员失败");
+        }
+
+        // 更新关系链编码
+        boolean rtn = this.update(new LambdaUpdateWrapper<Channel>()
+            .set(Channel::getChannelNo, channel.getChannelNo() + "." + promoter.getChannelId())
+            .eq(Channel::getChannelId, promoter.getChannelId()));
+        if (!rtn) {
+            throw new ServiceException("更新关系链编码失败");
+        }
+    }
+
+    @Override
+  public String checkPromoter(PromoterCreateParam param) {
+
+    // 校验门店
+    Channel channel = this.getById(param.getChannelId());
+    if (channel == null) {
+      return "门店不存在";
+    }
+
+    // 校验佣金比例
+    if (param.getCommRate().compareTo(channel.getCommRate()) > 0) {
+        return "佣金比例不能大于门店的佣金比例";
+    }
+
+    if (param.getCommRate().compareTo(BigDecimal.ZERO) < 0) {
+        return "佣金比例不能小于0";
+    }
+
+    // 校验用户是否已经是渠道或门店或推广员
+    int count = channelService.count(
+        new LambdaQueryWrapper<Channel>().eq(Channel::getMobile, param.getMobile()));
+    if (count > 0) {
+      return "该手机号已存在角色";
+    }
+
+    return null;
+  }
+
   @Override
   @Transactional(rollbackFor = Exception.class)
   public void saveChannel(Channel channel, ChannelRoleEnum channelRole) {