Explorar o código

生成邀请码

chunping %!s(int64=3) %!d(string=hai) anos
pai
achega
1127333db0

+ 30 - 43
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/GoodsMgrController.java

@@ -3,6 +3,9 @@ package com.qs.mp.web.controller.api.admin;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.admin.domain.Goods;
+import com.qs.mp.admin.domain.vo.GoodsListVO;
+import com.qs.mp.admin.service.IGoodsService;
 import com.qs.mp.channel.domain.Channel;
 import com.qs.mp.channel.domain.param.ChannelParam;
 import com.qs.mp.channel.domain.vo.ChannelVO;
@@ -11,6 +14,7 @@ import com.qs.mp.channel.service.IChannelUserRelService;
 import com.qs.mp.common.constant.UserConstants;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
+import com.qs.mp.common.enums.ChannelRoleEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.system.domain.SysUser;
 import com.qs.mp.system.service.ISysUserService;
@@ -45,53 +49,35 @@ import org.springframework.web.bind.annotation.RestController;
 public class GoodsMgrController extends BaseApiController {
 
 	@Autowired
-	private IChannelService channelService;
-	
+	private IGoodsService goodsService;
+
 	@Autowired
-	private IChannelUserRelService channelUserRelService;
-	
+	private IChannelService channelService;
+
 	@Autowired
-	private ISysUserService userService;
-	
+	private ISysUserService sysUserService;
+
 	@Autowired
 	private MapperFacade mapperFacade;
 
-	
+
 	/**
 	 * 获取我的下级渠道列表信息,支持翻页
 	 *
 	 * @return
 	 */
 	@PostMapping("/list")
-	public TableDataInfo listChannel(@RequestBody Channel channel) {
-		List<ChannelVO> list = new ArrayList<ChannelVO>();
+	public TableDataInfo list(@RequestBody Goods goods) {
+		List<GoodsListVO> list = new ArrayList<GoodsListVO>();
 		startPage();
-		QueryWrapper<Channel> queryWrapper = new QueryWrapper<>();
-		if(null!=channel && null != channel.getParentId()) {
-			queryWrapper.eq("t1.parent_id", channel.getParentId());
-		}
-		queryWrapper.gt("t1.level", 0);
-		queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getMobile()), "t1.mobile", channel.getMobile());
-		queryWrapper.likeRight(null != channel && StringUtils.isNotBlank(channel.getName()), "t1.name", channel.getName());
-		queryWrapper.orderByAsc("t1.channel_id");
-		list = channelService.selectChannelVoList(queryWrapper);
-		if(null != list && list.size() > 0) {
-			for(ChannelVO channelVO : list) {
-				if(null != channelVO && StringUtils.isNotBlank(channelVO.getChannelNo())) {
-					int siteCnt = channelService.getChannelSiteCnt(channelVO.getChannelNo());
-					int userCnt = channelUserRelService.getChannelTotalUserCnt(channelVO.getChannelNo());
-					channelVO.setSiteCnt(siteCnt);
-					channelVO.setUserCnt(userCnt);
-					// 查询用户信息
-					// SysUser sysUser = userService.selectUserById(channelVO.getUserId());
-					// channelVO.setSysUser(sysUser);
- 				}
-			}
-		}
+		List<Goods> goodsList = goodsService.list(new LambdaQueryWrapper<Goods>());
+		List<GoodsListVO> goodsListVOList = mapperFacade.mapAsList(goodsList, GoodsListVO.class);
+		TableDataInfo res = getDataTable(goodsList);
+		res.setRows(goodsListVOList);
 		return getDataTable(list);
 	}
-	
-	
+
+
 	/**
 	 * 新增子渠道信息
 	 * @param
@@ -121,7 +107,7 @@ public class GoodsMgrController extends BaseApiController {
 		if(null != channel.getParentId() && channel.getParentId() != 0) {
 			Channel parentChannel = channelService.getById(channel.getParentId());
 			if(null != parentChannel) {
-				 if(null != parentChannel.getCommRate() 
+				 if(null != parentChannel.getCommRate()
 						 && channel.getCommRate().compareTo(parentChannel.getCommRate()) > 0) {
 					 return AjaxResult.error("佣金比例不能高于父渠道的佣金比例");
 				 }
@@ -130,18 +116,18 @@ public class GoodsMgrController extends BaseApiController {
 			}else {
 				return AjaxResult.error("父渠道不存在");
 			}
-			
+
 		}else {
 			channel.setLevel(1);
 			channel.setChannelNo("");
 		}
 		// 3.插入数据
 		try {
-			channelService.saveChannel(channel,"channel");
+			channelService.saveChannel(channel, ChannelRoleEnum.CHANNEL);
 		} catch (Exception e) {
 			return AjaxResult.error("渠道'" + channel.getName() + "'新增失败" + e.getMessage());
 		}
-		
+
 		return AjaxResult.success("渠道'" + channel.getName() + "'新增成功");
 	}
 
@@ -153,7 +139,7 @@ public class GoodsMgrController extends BaseApiController {
 	@ApiOperation(value = "编辑子渠道信息", notes = "渠道端编辑子渠道")
 	@PostMapping("/update")
 	public AjaxResult channelUpdate(@Validated @RequestBody ChannelParam channelParam) {
-		if (null == channelParam || null == channelParam.getChannelId()) {
+		/*if (null == channelParam || null == channelParam.getChannelId()) {
 			return error(ErrorCodeEnum.ERROR_CODE_1001);
 		}
 		Channel channel = mapperFacade.map(channelParam, Channel.class);
@@ -187,7 +173,7 @@ public class GoodsMgrController extends BaseApiController {
 		// 3.校验佣金比例,不能高于其父渠道的佣金比例,不能低于其子渠道的最大佣金比例
 		Channel parentChannel = channelService.getById(oldChannel.getParentId());
 		if(null != parentChannel) {
-			 if(null != parentChannel.getCommRate() 
+			 if(null != parentChannel.getCommRate()
 					 && channel.getCommRate().compareTo(parentChannel.getCommRate()) > 0) {
 				 return AjaxResult.error("佣金比例不能高于父渠道的佣金比例");
 			 }
@@ -212,10 +198,11 @@ public class GoodsMgrController extends BaseApiController {
 		} catch (Exception e) {
 			return AjaxResult.error(e.getMessage());
 		}
-		return AjaxResult.success("渠道'" + channel.getName() + "'编辑成功");
+		return AjaxResult.success("渠道'" + channel.getName() + "'编辑成功");*/
+		return AjaxResult.success();
 	}
-	
-	
+
+
 	/**
 	 * 停用、启用渠道
 	 * @param
@@ -245,5 +232,5 @@ public class GoodsMgrController extends BaseApiController {
 		}
 		return AjaxResult.success("操作成功");
 	}
-	
+
 }

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

@@ -17,6 +17,7 @@ import com.qs.mp.common.constant.UserConstants;
 import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.ChannelCertifyStatusEnum;
+import com.qs.mp.common.enums.ChannelRoleEnum;
 import com.qs.mp.common.enums.ChannelVerifyStatusEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
 import com.qs.mp.common.exception.ServiceException;
@@ -168,7 +169,7 @@ public class ChannelController extends BaseApiController {
 		// 3.插入数据
 		channel.setChannelNo(parentChannel.getChannelNo()+".");
 		try {
-			channelService.saveChannel(channel,"channel");
+			channelService.saveChannel(channel, ChannelRoleEnum.CHANNEL);
 		} catch (Exception e) {
 			return AjaxResult.error("渠道'" + channel.getName() + "'新增失败" + e.getMessage());
 		}
@@ -409,7 +410,7 @@ public class ChannelController extends BaseApiController {
 		// 3.插入数据
 		channel.setChannelNo(parentChannel.getChannelNo()+".");
 		try {
-			channelService.saveChannel(channel,"site");
+			channelService.saveChannel(channel,ChannelRoleEnum.SALESITE);
 		} catch (Exception e) {
 			return AjaxResult.error("经销商'" + channel.getName() + "'新增失败"+e.getMessage());
 		}

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

@@ -0,0 +1,115 @@
+package com.qs.mp.web.controller.api.channel;
+
+import cn.jsms.api.ValidSMSResult;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.channel.domain.Channel;
+import com.qs.mp.channel.domain.ChannelCommission;
+import com.qs.mp.channel.domain.param.ChannelInviteParam;
+import com.qs.mp.channel.domain.param.ChannelParam;
+import com.qs.mp.channel.domain.param.SiteParam;
+import com.qs.mp.channel.domain.param.VerifyParam;
+import com.qs.mp.channel.domain.vo.ChannelOperDataVO;
+import com.qs.mp.channel.domain.vo.ChannelVO;
+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.constant.UserConstants;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.core.page.TableDataInfo;
+import com.qs.mp.common.enums.ChannelCertifyStatusEnum;
+import com.qs.mp.common.enums.ChannelRoleEnum;
+import com.qs.mp.common.enums.ChannelVerifyStatusEnum;
+import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.common.jsms.JSMSUtils;
+import com.qs.mp.common.utils.DateUtils;
+import com.qs.mp.framework.service.IWxUrlLinkService;
+import com.qs.mp.system.service.ISysUserService;
+import com.qs.mp.utils.SecurityUtils;
+import com.qs.mp.web.controller.common.BaseApiController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import ma.glasnost.orika.MapperFacade;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @auther zhongcp
+ * @create 2022-02-28 16:17:48
+ * @describe 渠道邀请前端控制器
+ */
+@Api("渠道邀请API")
+@RestController
+@RequestMapping("/api/v1/mp/channel/*")
+@Component
+public class ChannelInviteController extends BaseApiController {
+
+	@Autowired
+	private IChannelService channelService;
+
+	@Autowired
+	private IWxUrlLinkService wxUrlLinkService;
+
+	@Autowired
+	private MapperFacade mapperFacade;
+
+	/**
+	 * 生成邀请码
+	 *
+	 * @return
+	 */
+	@PostMapping("invite/generate")
+	public AjaxResult listChannel(@RequestBody  JSONObject jsonObject) {
+		Long channelId = SecurityUtils.getLoginUser().getChannelId();
+		String type = jsonObject.getString("type");
+		String rst = wxUrlLinkService.generateCode("", "id=" + channelId + ",type=" + type);
+		return AjaxResult.success(rst);
+	}
+
+	/**
+	 * 注册成为经销商
+	 *
+	 * @param
+	 * @return
+	 */
+	@PostMapping(value = "invite/register")
+	public AjaxResult register(@RequestBody ChannelInviteParam param) {
+
+		Channel parent = channelService.getById(param.getChannelId());
+		if(null == parent || parent.getLevel() == 0) {
+			return error("渠道不存在");
+		}
+		ValidSMSResult res = JSMSUtils.sendValidSMSCode(param.getMessageId(), param.getCode());
+		if (res == null || !res.getIsValid()) {
+			return error("短信验证码错误");
+		}
+
+		// 创建经销商
+		Channel channel = new Channel();
+		channel.setChannelNo(parent.getChannelNo() + ".");
+		if (ChannelRoleEnum.CHANNEL.getValue().equals(param.getType())) {
+			channel.setLevel(0);
+		} else if (ChannelRoleEnum.SALESITE.getValue().equals(param.getType())) {
+			channel.setLevel(parent.getLevel() + 1);
+		}
+		channel.setParentId(parent.getChannelId());
+		channel.setMobile(param.getMobile());
+		channel.setName(param.getMobile());
+		channelService.saveChannel(channel,  ChannelRoleEnum.SALESITE);
+		return AjaxResult.success();
+	}
+}

+ 77 - 0
mp-admin/src/test/java/com/qs/mp/service/ServiceImplTest.java

@@ -0,0 +1,77 @@
+package com.qs.mp.service;
+
+import com.qs.mp.MpApplication;
+import com.qs.mp.framework.service.IWxUrlLinkService;
+import java.util.Date;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.TestPropertySource;
+
+/**
+ * @author zhongcp
+ * @Date 2021/8/31
+ */
+@AutoConfigureMockMvc
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = MpApplication.class)
+@TestPropertySource(locations = "classpath:application-dev.yml")
+@ActiveProfiles("dev")
+public class ServiceImplTest {
+
+  protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
+
+  @Autowired
+  private IWxUrlLinkService wxUrlLinkService;
+
+  @Test
+  public void testGenerateQrCode() {
+    System.out.println(wxUrlLinkService.generateCode("", "xxx=1"));
+
+  }
+
+
+  public static void main(String[] args) {
+//    SignerVO signerVO = JSON.parseObject("{\"address\":\"西溪壹号\",\"corpName\":\"杭州全数时代科技有限公司\",\"corporate\":false,\"email\":\"\",\"idNo\":\"\",\"individual\":true,\"legalName\":\"戴小丹\",\"mobile\":\"18888888888\",\"name\":\"钟春平\",\"type\":\"INDIVIDUAL\"}", SignerVO.class);
+
+    /*String str = "abcd01234";
+
+    String[] part = str.split("(?<=\\D)(?=\\d)");
+
+    System.out.println(part[0]);
+
+    System.out.println(part[1]);
+
+    System.out.println("a1b2c3".replaceAll("[^(0-9)]", ""));*/
+
+    /*System.out.println((int)(new BigDecimal(80).divide(new BigDecimal(100)).setScale(0,
+        RoundingMode.HALF_UP).intValue()));
+    System.out.println((int)40/100);*/
+//    System.out.println((new GsonBuilder()).excludeFieldsWithoutExposeAnnotation().create().fromJson("{\"is_valid\":TRUE}", ValidSMSResult.class));
+    /*DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
+    Date start = DateUtils.parseStrToDate("2020-09-10", "yyyy-MM-dd");
+    Date end = DateUtils.parseStrToDate("2020-12-31", "yyyy-MM-dd");
+    Date calEndDay = DateUtils.addMonths(start, 1);
+    if (calEndDay.compareTo(end) == 0) {
+      System.out.println(true);
+    }*/
+
+    System.out.println(new Date().getMonth());
+//    int months = DateUtils.diffMonth(start, end);
+//    System.out.println(months);
+//    System.out.println(new Date(1648310400000L));
+//    System.out.println(DateUtils.addDays(DateUtils.getToday(), 2).getTime());
+//    System.out.println(DateUtils.diff(new Date(1635004800000L), DateUtils.getToday()));
+//    System.out.println(DateUtils.addDays(DateUtils.parseDate("2022-11-03"), -60));
+//    BigDecimal x = BigDecimal.valueOf(0.5);
+//    System.out.println(x.divide(BigDecimal.valueOf(100)));
+//    System.out.println(BigDecimal.valueOf(1).add(x.divide(BigDecimal.valueOf(100))).doubleValue());
+//
+//    System.out.println(BigDecimal.valueOf(1).add(x.divide(BigDecimal.valueOf(100))).pow(2));
+//    System.out.println(BigDecimal.valueOf(4000000).multiply(BigDecimal.valueOf(1).add(x.divide(BigDecimal.valueOf(100))).pow(2)));
+//    System.out.println(BigDecimal.valueOf(4000000).multiply(BigDecimal.valueOf(Math.pow( BigDecimal.valueOf(1).add(x.divide(BigDecimal.valueOf(100))).doubleValue(), Double.valueOf(String.valueOf(2))))).intValue());
+  }
+}

+ 80 - 0
mp-common/src/main/java/com/qs/mp/common/utils/http/HttpUtils.java

@@ -1,6 +1,8 @@
 package com.qs.mp.common.utils.http;
 
+import cn.hutool.http.ssl.TrustAnyHostnameVerifier;
 import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
@@ -16,6 +18,7 @@ import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
+import org.apache.commons.codec.binary.Base64;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.qs.mp.common.constant.Constants;
@@ -177,6 +180,83 @@ public class HttpUtils
         return result.toString();
     }
 
+    /**
+     * 向指定 URL 发送POST方法的请求,返回图片buffer对象
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendImagePost(String url, String param)
+    {
+        PrintWriter out = null;
+        InputStream in = null;
+        String result = "";
+        try
+        {
+            String urlNameString = url;
+            log.info("sendPost - {}", urlNameString, param);
+            URL realUrl = new URL(urlNameString);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = conn.getInputStream();
+            byte[] data = null;
+            // 读取图片字节数组
+            ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
+            byte[] buff = new byte[100];
+            int rc = 0;
+            while ((rc = in.read(buff, 0, 100)) > 0) {
+                swapStream.write(buff, 0, rc);
+            }
+            data = swapStream.toByteArray();
+            return new String(Base64.encodeBase64(data));
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result;
+    }
+
     public static String sendSSLPost(String url, String param)
     {
         StringBuilder result = new StringBuilder();

+ 8 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/Goods.java

@@ -3,6 +3,7 @@ package com.qs.mp.admin.domain;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.util.Date;
@@ -85,6 +86,13 @@ public class Goods implements Serializable {
   @TableField("status")
   private String status;
 
+  /**
+   * 逻辑删除标识
+   */
+  @TableField("is_deleted")
+  @TableLogic
+  private Integer isDeleted;
+
   /**
    * 创建时间
    */

+ 63 - 0
mp-service/src/main/java/com/qs/mp/admin/domain/vo/GoodsListVO.java

@@ -0,0 +1,63 @@
+package com.qs.mp.admin.domain.vo;
+
+import lombok.Data;
+
+/**
+ * @describe 商品库实体类
+ * @auther quanshu
+ * @create 2022-03-07 20:43:44
+ */
+@Data
+public class GoodsListVO {
+
+  /**
+   * 主键
+   */
+  private String goodsId;
+
+  /**
+   * 商品标题
+   */
+  private String title;
+
+  /**
+   * 商品类目ID
+   */
+  private Long categoryId;
+
+  /**
+   * 商品图片
+   */
+  private String picUrl;
+
+  /**
+   * 原兑换价格
+   */
+  private Integer originPrice;
+
+  /**
+   * 现兑换价格
+   */
+  private Integer exchangePrice;
+
+  /**
+   * 商品价值
+   */
+  private Integer value;
+
+  /**
+   * 库存数量
+   */
+  private Integer quantity;
+
+  /**
+   * 已兑换量
+   */
+  private Integer exchangedQty;
+
+  /**
+   * 上架状态;上架/下架
+   */
+  private String status;
+
+}

+ 33 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/ChannelInviteParam.java

@@ -0,0 +1,33 @@
+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.NotNull;
+import lombok.Data;
+
+@ApiModel(value= "渠道邀请参数")
+@Data
+public class ChannelInviteParam {
+
+	@NotNull(message = "渠道ID不能为空")
+	@ApiModelProperty(value = "父渠道ID",required=true)
+	private Long channelId;
+
+	@NotNull(message = "邀请类型不能为空")
+	@ApiModelProperty(value = "邀请类型",required=true)
+	private String type;
+
+	@NotNull(message = "手机号不能为空")
+	@ApiModelProperty(value = "手机号",required=true)
+	private String mobile;
+
+	@NotNull(message = "消息ID不能为空")
+	@ApiModelProperty(value = "消息ID",required=true)
+	private String messageId;
+
+	@NotNull(message = "验证码不能为空")
+	@ApiModelProperty(value = "验证码",required=true)
+	private String code;
+
+}

+ 14 - 16
mp-service/src/main/java/com/qs/mp/channel/service/IChannelService.java

@@ -1,14 +1,12 @@
 package com.qs.mp.channel.service;
 
 import com.qs.mp.channel.domain.Channel;
-import com.qs.mp.channel.domain.ChannelCart;
 import com.qs.mp.channel.domain.vo.ChannelOperDataVO;
 import com.qs.mp.channel.domain.vo.ChannelVO;
 
+import com.qs.mp.common.enums.ChannelRoleEnum;
 import java.util.List;
 
-import org.apache.ibatis.annotations.Param;
-
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -21,49 +19,49 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2022-03-02
  */
 public interface IChannelService extends IService<Channel> {
-	
+
 	/**
 	 * 新增子渠道、经销商信息
-	 * 
+	 *
 	 * @param channel
-	 * @param channelType channel:子渠道  site: 经销商
+	 * @param channelRole channel:子渠道  site: 经销商
 	 * @return
 	 */
-    public void saveChannel(Channel channel, String channelType);
-     
+    public void saveChannel(Channel channel, ChannelRoleEnum channelRole);
+
     /**
 	 * 编辑子渠道、经销商信息
-	 * 
+	 *
 	 * @param channel
 	 * @param mobileChange 手机号码是否发生变更
 	 * @return
 	 */
     public void updateChannel(Channel channel, boolean mobileChange);
-    
-    
+
+
 	/**
 	 * 获取我的下级渠道、经销商列表信息,支持翻页
-	 * 
+	 *
 	 * @param channel
 	 * @return
 	 */
 	public List<ChannelVO> selectChannelVoList(Wrapper<Channel> queryWrapper);
-	
+
 	/**
 	 * 根据用户ID查询渠道
-	 * 
+	 *
 	 * @param userId
 	 * @return
 	 */
 	public Channel getChannelByUserId(Long userId);
-	
+
     /**
      * 查询渠道及其子渠道经销商总数
      * @param channelNo
      * @return
      */
 	public int getChannelSiteCnt(String channelNo);
-	
+
 	/**
 	 * 根据channelNo统计最近几天days的经营数据
 	 */

+ 5 - 4
mp-service/src/main/java/com/qs/mp/channel/service/impl/ChannelServiceImpl.java

@@ -3,13 +3,13 @@ package com.qs.mp.channel.service.impl;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.channel.domain.Channel;
-import com.qs.mp.channel.domain.ChannelCommission;
 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.enums.ChannelRoleEnum;
 import com.qs.mp.common.enums.RoleTypeEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.jsms.JSMSUtils;
@@ -53,12 +53,13 @@ public class ChannelServiceImpl extends ServiceImpl<ChannelMapper, Channel> impl
 
 	@Override
 	@Transactional
-	public void saveChannel(Channel channel, String channelType){
+	public void saveChannel(Channel channel, ChannelRoleEnum channelRole){
 		boolean res = channelService.save(channel);
 		if(res && null != channel.getChannelId()) {
 			channel.setChannelNo(channel.getChannelNo()+channel.getChannelId());
 		    // 获取默认的角色
-		    SysRole sysRole = roleService.selectDefaultRoleByType(channelType.equals("channel")?RoleTypeEnum.CHANNEL_ROLE.getValue():RoleTypeEnum.SALESITE_ROLE.getValue());
+		    SysRole sysRole = roleService.selectDefaultRoleByType(
+						channelRole == ChannelRoleEnum.CHANNEL ? RoleTypeEnum.CHANNEL_ROLE.getValue() : RoleTypeEnum.SALESITE_ROLE.getValue());
 		    if (null == sysRole || null == sysRole.getRoleId()) {
 		      throw new ServiceException(
 		          "未设置默认角色,请联系管理员");
@@ -75,7 +76,7 @@ public class ChannelServiceImpl extends ServiceImpl<ChannelMapper, Channel> impl
 		    sysUser.setRoleIds(roleIds);
 			int userNum = userService.insertUser(sysUser);
 		    if (userNum == 0 || null == sysUser.getUserId()) {
-		        throw new ServiceException("账号创建失败,请联系管理员");
+		        throw new ServiceException("账号创建失败,请联系管理员");
 		    }
 		    channel.setUserId(sysUser.getUserId());
 		    boolean ures = channelService.updateById(channel);

+ 8 - 0
mp-service/src/main/java/com/qs/mp/framework/service/IWxUrlLinkService.java

@@ -13,4 +13,12 @@ public interface IWxUrlLinkService {
    * @return
    */
   String generate(String path, String query);
+
+  /**
+   * 生成小程序码,返回的是base64字符串
+   * @param path
+   * @param scene
+   * @return
+   */
+  String generateCode(String path, String scene);
 }

+ 22 - 0
mp-service/src/main/java/com/qs/mp/framework/service/impl/WxUrlLinkServiceImpl.java

@@ -56,4 +56,26 @@ public class WxUrlLinkServiceImpl implements IWxUrlLinkService {
     }
     return jsonObject.getString("url_link");
   }
+
+  @Override
+  public String generateCode(String path, String scene) {
+    Map<String, Object> param = new HashMap<String, Object>();
+    param.put("path", path); // 页面路径
+    param.put("scene", scene); // 参数
+    param.put("check_path", false);// 为 true 时 page 必须是已经发布的小程序存在的页面(否则报错);为 false 时允许小程序未发布或者 page 不存在
+    param.put("env_version", "trial");
+    // 获取access_token
+    String accessToken = appTokenService.getAccessToken(channelAppId);
+    String res = HttpUtils.sendImagePost(
+        "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken,
+        JSON.toJSONString(param));
+    LogUtil.info(logger, "小程序链接获取,path:{0},scene:{1},res:{2}",
+        new Object[]{path, scene, res});
+    JSONObject jsonObject = JSON.parseObject(res);
+    if (jsonObject.getIntValue("errcode") != 0) {
+      LogUtil.error(logger, "小程序码获取错误,res:{0}", res);
+      return null;
+    }
+    return res;
+  }
 }

+ 3 - 2
mp-service/src/main/resources/mapper/admin/GoodsMapper.xml

@@ -15,13 +15,14 @@
         <result column="quantity" property="quantity" />
         <result column="exchanged_qty" property="exchangedQty" />
         <result column="status" property="status" />
+        <result column="is_deleted" property="isDeleted" />
         <result column="created_time" property="createdTime" />
         <result column="updated_time" property="updatedTime" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        goods_id, title, category_id, pic_url, description, origin_price, exchange_price, value, quantity, exchanged_qty, status, created_time, updated_time
+        goods_id, title, category_id, pic_url, description, origin_price, exchange_price, value, quantity, exchanged_qty, status, is_deleted, created_time, updated_time
     </sql>
 
-</mapper>
+</mapper>