提交 b9d0e033 作者: zhenjie

用户裂变相关

上级 20386513
package com.mmc.iuav.user.model.qo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.domain.Page;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/7/15 11:03
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserRcdQO implements Serializable {
private static final long serialVersionUID = 1561616165L;
@ApiModelProperty(value = "用户id不能为空", required = true, example = "1")
@NotNull(message = "用户id不能为空", groups = Page.class)
private Integer userAccountId;
@ApiModelProperty(value = "页码", required = true, example = "1")
@NotNull(message = "页码不能为空", groups = Page.class)
@Min(value = 1, groups = Page.class)
private Integer pageNo;
@ApiModelProperty(value = "每页显示数", required = true, example = "10")
@NotNull(message = "每页显示数不能为空", groups = Page.class)
@Min(value = 1, groups = Page.class)
private Integer pageSize;
public void buildCurrentPage() {
this.pageNo = (pageNo - 1) * pageSize;
}
}
package com.mmc.iuav.user.model.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/7/17 10:00
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TopInviteVO implements Serializable {
private static final long serialVersionUID = 9208361817264837853L;
private Integer id;
private String uid;
private String phoneNum;
private String userName;
private String nickName;
private String userImg;
private Integer inviteCount;
}
......@@ -55,14 +55,12 @@ public class UserAccountVO implements Serializable {
private Date createTime;
@ApiModelProperty(value = "企业认证状态, 0未通过,1通过")
private Integer companyAuthStatus;
@ApiModelProperty(value = "合作标签id")
private Integer cooperationTagId;
@ApiModelProperty(value = "企业名称")
private String companyName;
@ApiModelProperty(value = "合作标签名称")
private String tagName;
@ApiModelProperty(value = "是否删除")
private Integer deleted;
@ApiModelProperty(value = "推荐伙伴个数")
private Integer inviteCount;
@ApiModelProperty(value = "用户合作标签")
private List<CooperationTagVO> cooperationTagVOS;
@ApiModelProperty(value = "上级推荐人")
private UserRcdVO userRcdVO;
}
package com.mmc.iuav.user.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/7/17 10:56
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserRcdVO implements Serializable {
private static final long serialVersionUID = 445983687443393839L;
private Integer id;
@ApiModelProperty(value = "用户id(推荐接受人)")
private Integer userAccountId;
@ApiModelProperty(value = "邀请人id")
private Integer rcdUserId;
@ApiModelProperty(value = "邀请人昵称")
private String rcdNickname;
@ApiModelProperty(value = "邀请人姓名")
private String rcdUserName;
private String remark;
private Date createTime;
}
......@@ -5,6 +5,7 @@ import com.mmc.iuav.group.Update;
import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.qo.UserAccountQO;
import com.mmc.iuav.user.model.qo.UserRcdQO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.service.UserAccountService;
import io.swagger.annotations.*;
......@@ -62,12 +63,13 @@ public class UserAccountController extends BaseController {
return userAccountService.feignListUserAccountIds(provinceCode, cityCode, districtCode);
}
@ApiOperation(value = "授权手机号")
@ApiOperation(value = "授权手机号-裂变邀请")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = Integer.class)})
@GetMapping("getUserPhoneNumber")
public ResultBody getUserPhoneNumber(HttpServletRequest request,
@ApiParam(value = "授权手机号code", required = true) @RequestParam String code) {
return userAccountService.getUserPhoneNumber(this.getUserLoginInfoFromRedis(request).getUserAccountId(), code);
@ApiParam(value = "授权手机号code", required = true) @RequestParam String code,
@ApiParam(value = "邀请人id", required = false) @RequestParam Integer rcdUserId) {
return userAccountService.getUserPhoneNumber(this.getUserLoginInfoFromRedis(request).getUserAccountId(), code, rcdUserId);
}
@ApiOperation(value = "根据用户id查询用户信息", hidden = true)
......@@ -112,4 +114,25 @@ public class UserAccountController extends BaseController {
return userAccountService.disableAppAccount(userAccountId);
}
@ApiOperation(value = "裂变-邀请人数")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("countRcd")
public ResultBody countRcd(@RequestParam Integer userAccountId) {
return userAccountService.countRcd(userAccountId);
}
@ApiOperation(value = "裂变-邀请列表")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@PostMapping("listUserRcd")
public ResultBody listUserRcd(@RequestBody UserRcdQO userRcdQO) {
return userAccountService.listUserRcd(userRcdQO);
}
@ApiOperation(value = "裂变-邀请排行榜")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
@GetMapping("topRcd")
public ResultBody topRcd(@RequestParam(required = false, defaultValue = "10") Integer topNum) {
return userAccountService.topRcd(topNum);
}
}
......@@ -3,6 +3,7 @@ package com.mmc.iuav.user.dao;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.entity.UserRcdDO;
import com.mmc.iuav.user.model.qo.UserAccountQO;
import com.mmc.iuav.user.model.qo.UserRcdQO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
......@@ -118,4 +119,42 @@ public interface UserServiceDao {
*/
List<UserAccountDO> listAppUser(UserAccountQO param);
/**
* 添加邀请信息
*
* @param userRcd
*/
void insertUserRcd(UserRcdDO userRcd);
/**
* 邀请人数
*
* @param userAccountId
* @return
*/
int countRcd(Integer userAccountId);
/**
* 邀请列表
*
* @param userRcdQO
* @return
*/
List<UserAccountDO> listUserRcd(UserRcdQO userRcdQO);
/**
* 邀请排行榜
*
* @param topNum
* @return
*/
List<UserAccountDO> topRcd(Integer topNum);
/**
* 查询用户推荐个数
*
* @param uIds
* @return
*/
List<UserAccountDO> getInviteCount(@Param("uIds") List<Integer> uIds);
}
......@@ -2,13 +2,17 @@ package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.vo.BUserAccountVO;
import com.mmc.iuav.user.model.vo.TopInviteVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zj
......@@ -40,10 +44,20 @@ public class UserAccountDO implements Serializable {
private Integer cityCode;
private Integer districtCode;
private Integer cooperationTagId;
private Integer companyAuthStatus;
private String companyName;
private String tagName;
/**
* 邀请人数
*/
private Integer inviteCount;
/**
* 上级推荐人
*/
private UserRcdDO userRcdDO;
/**
* 用户加盟标签
*/
private List<CooperationTagDO> cooperationTagDOS;
public UserAccountDO(UserAccountVO userAccountVO) {
this.id = userAccountVO.getId();
......@@ -71,16 +85,24 @@ public class UserAccountDO implements Serializable {
}
public UserAccountVO buildUserAccountVO() {
return UserAccountVO.builder().id(this.id).uid(this.uid).phoneNum(this.phoneNum).userName(this.userName).nickName(this.nickName)
.userImg(this.userImg).userSex(this.userSex).email(this.email).source(this.source).accountStatus(this.accountStatus).remark(this.remark).portType(this.portType)
.createTime(this.createTime).companyAuthStatus(this.companyAuthStatus == null || this.companyAuthStatus != 1 ? 0 : 1).cooperationTagId(this.cooperationTagId).companyName(this.companyName)
.tagName(this.tagName).build();
return UserAccountVO.builder().id(this.id).uid(this.uid).phoneNum(this.phoneNum).userName(this.userName).nickName(this.nickName).userImg(this.userImg)
.userSex(this.userSex).email(this.email).source(this.source).accountStatus(this.accountStatus).remark(this.remark).portType(this.portType).createTime(this.createTime)
.companyAuthStatus(this.companyAuthStatus == null || this.companyAuthStatus != 1 ? 0 : 1).companyName(this.companyName)
.inviteCount(this.inviteCount)
.cooperationTagVOS(CollectionUtils.isEmpty(this.cooperationTagDOS) ? null : this.cooperationTagDOS.stream().map(CooperationTagDO::buildCooperationTagVO).collect(Collectors.toList()))
.userRcdVO(this.userRcdDO == null ? null : this.userRcdDO.buildUserRcdVO())
.build();
}
public UserAccountSimpleDTO buildUserAccountSimpleDTO() {
return UserAccountSimpleDTO.builder().id(this.id).uid(this.uid).phoneNum(this.phoneNum).userName(this.userName).nickName(this.nickName)
.userImg(this.userImg).openid(this.openId).userSex(this.userSex).email(this.email).source(this.source).accountStatus(this.accountStatus).portType(this.portType)
.companyAuthStatus(this.companyAuthStatus == null || this.companyAuthStatus != 1 ? 0 : 1).cooperationTagId(this.cooperationTagId).companyName(this.companyName)
.companyAuthStatus(this.companyAuthStatus == null || this.companyAuthStatus != 1 ? 0 : 1).companyName(this.companyName)
.build();
}
public TopInviteVO buildTopInviteVO() {
return TopInviteVO.builder().id(this.id).uid(this.id + "").nickName(this.nickName).userName(this.userName).phoneNum(this.phoneNum)
.inviteCount(this.inviteCount).build();
}
}
package com.mmc.iuav.user.entity;
import com.mmc.iuav.user.model.vo.UserRcdVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
......@@ -17,8 +18,27 @@ import java.util.Date;
public class UserRcdDO implements Serializable {
private static final long serialVersionUID = 5407029715338119583L;
private Integer id;
/**
* 用户id(推荐接受人)
*/
private Integer userAccountId;
/**
* 邀请人id(发起人)
*/
private Integer rcdUserId;
/**
* 邀请人昵称(发起人)
*/
private String rcdNickname;
/**
* 邀请人姓名(发起人)
*/
private String rcdUserName;
private String remark;
private Date createTime;
public UserRcdVO buildUserRcdVO() {
return UserRcdVO.builder().id(this.id).userAccountId(this.userAccountId).rcdUserId(this.rcdUserId).rcdNickname(this.rcdNickname)
.rcdUserName(this.rcdUserName).remark(this.remark).createTime(this.createTime).build();
}
}
......@@ -4,6 +4,7 @@ import com.mmc.iuav.response.ResultBody;
import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.qo.UserAccountQO;
import com.mmc.iuav.user.model.qo.UserRcdQO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import java.util.List;
......@@ -75,9 +76,10 @@ public interface UserAccountService {
*
* @param id
* @param code
* @param rcdUserId
* @return
*/
ResultBody getUserPhoneNumber(Integer id, String code);
ResultBody getUserPhoneNumber(Integer id, String code, Integer rcdUserId);
/**
* 根据id获取用户信息
......@@ -127,5 +129,27 @@ public interface UserAccountService {
*/
ResultBody disableAppAccount(Integer userAccountId);
/**
* 用户邀请人数
*
* @param userAccountId
* @return
*/
ResultBody countRcd(Integer userAccountId);
/**
* 用户邀请列表
*
* @param userRcdQO
* @return
*/
ResultBody listUserRcd(UserRcdQO userRcdQO);
/**
* 邀请排行榜
*
* @param topNum
* @return
*/
ResultBody topRcd(Integer topNum);
}
......@@ -11,8 +11,10 @@ import com.mmc.iuav.user.entity.UserAccountDO;
import com.mmc.iuav.user.entity.UserRcdDO;
import com.mmc.iuav.user.model.dto.UserAccountSimpleDTO;
import com.mmc.iuav.user.model.qo.UserAccountQO;
import com.mmc.iuav.user.model.qo.UserRcdQO;
import com.mmc.iuav.user.model.vo.CompanyAuthVO;
import com.mmc.iuav.user.model.vo.CooperationTagVO;
import com.mmc.iuav.user.model.vo.TopInviteVO;
import com.mmc.iuav.user.model.vo.UserAccountVO;
import com.mmc.iuav.user.mq.MqProducer;
import com.mmc.iuav.user.service.CompanyAuthService;
......@@ -21,6 +23,7 @@ import com.mmc.iuav.user.service.WxService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
......@@ -147,8 +150,9 @@ public class UserAccountServiceImpl implements UserAccountService {
}
}
@Transactional
@Override
public ResultBody getUserPhoneNumber(Integer id, String code) {
public ResultBody getUserPhoneNumber(Integer id, String code, Integer rcdUserId) {
String userPhoneNumber = wxService.getUserPhoneNumber(id, code);
if (StringUtils.isBlank(userPhoneNumber)) {
return ResultBody.error(ResultEnum.AUTH_PHONE_NUMBER_ERROR);
......@@ -157,6 +161,12 @@ public class UserAccountServiceImpl implements UserAccountService {
userAccount.setId(id);
userAccount.setPhoneNum(userPhoneNumber);
userServiceDao.update(userAccount);
if (rcdUserId != null) {
UserRcdDO userRcd = new UserRcdDO();
userRcd.setUserAccountId(id);
userRcd.setRcdUserId(rcdUserId);
userServiceDao.insertUserRcd(userRcd);
}
return ResultBody.success();
}
......@@ -218,18 +228,45 @@ public class UserAccountServiceImpl implements UserAccountService {
param.buildCurrentPage();
List<UserAccountDO> userAccountDOList = userServiceDao.listAppUser(param);
List<Integer> uIds = userAccountDOList.stream().map(UserAccountDO::getId).collect(Collectors.toList());
// 设置加盟商标签
buildTagsInfo(uIds, userAccountDOList);
// 设置推荐(邀请)伙伴个数
buildInviteCount(uIds, userAccountDOList);
List<UserAccountVO> userAccountVOS = userAccountDOList.stream().map(UserAccountDO::buildUserAccountVO).collect(Collectors.toList());
return ResultBody.success(PageResult.buildPage(pageNo, param.getPageSize(), count, userAccountVOS));
}
/**
* 设置推荐伙伴个数
*
* @param uIds
* @param userAccountDOList
*/
private void buildInviteCount(List<Integer> uIds, List<UserAccountDO> userAccountDOList) {
List<UserAccountDO> userInviteList = userServiceDao.getInviteCount(uIds);
if (CollectionUtils.isEmpty(userInviteList)) {
userInviteList.forEach(d -> d.setInviteCount(0));
} else {
Map<Integer, Integer> inviteCount = userInviteList.stream().collect(Collectors.toMap(UserAccountDO::getId, UserAccountDO::getInviteCount));
userAccountDOList.forEach(d -> d.setInviteCount(inviteCount.get(d.getId()) == null ? 0 : inviteCount.get(d.getId())));
}
}
/**
* 设置加盟商标签
*
* @param uIds
* @param userAccountDOList
*/
private void buildTagsInfo(List<Integer> uIds, List<UserAccountDO> userAccountDOList) {
List<CooperationTagDO> cooperationTagDOS = cooperationDao.listUserCooperationTagByUIds(uIds);
Map<Integer, List<CooperationTagDO>> userTagsMap = cooperationTagDOS.stream().collect(Collectors.groupingBy(CooperationTagDO::getUserAccountId));
List<UserAccountDO> res = buildTagInfo(userAccountDOList);
List<UserAccountVO> userAccountVOS = res.stream().map(UserAccountDO::buildUserAccountVO).collect(Collectors.toList());
for (UserAccountVO userAccountVO : userAccountVOS) {
List<CooperationTagDO> userCooperationTagDOS = userTagsMap.get(userAccountVO.getId());
for (UserAccountDO userAccountDO : userAccountDOList) {
List<CooperationTagDO> userCooperationTagDOS = userTagsMap.get(userAccountDO.getId());
if (!CollectionUtils.isEmpty(userCooperationTagDOS)) {
List<CooperationTagVO> cooperationTagVOS = userCooperationTagDOS.stream().map(CooperationTagDO::buildCooperationTagVO).collect(Collectors.toList());
userAccountVO.setCooperationTagVOS(cooperationTagVOS);
userAccountDO.setCooperationTagDOS(userCooperationTagDOS);
}
}
return ResultBody.success(PageResult.buildPage(pageNo, param.getPageSize(), count, userAccountVOS));
}
@Override
......@@ -242,16 +279,33 @@ public class UserAccountServiceImpl implements UserAccountService {
return ResultBody.success();
}
private List<UserAccountDO> buildTagInfo(List<UserAccountDO> userAccountDOList) {
List<CooperationTagDO> cooperationTagDOS = cooperationDao.listTags();
Map<Integer, CooperationTagDO> cooperationTagDOMap = cooperationTagDOS.stream().collect(Collectors.toMap(CooperationTagDO::getId, d -> d, (k1, k2) -> k2));
for (UserAccountDO userAccountDO : userAccountDOList) {
CooperationTagDO cooperationTagDO = cooperationTagDOMap.get(userAccountDO.getCooperationTagId());
if (cooperationTagDO != null) {
userAccountDO.setTagName(cooperationTagDO.getTagName());
}
@Override
public ResultBody countRcd(Integer userAccountId) {
Integer count = userServiceDao.countRcd(userAccountId);
return ResultBody.success(count);
}
@Override
public ResultBody listUserRcd(UserRcdQO userRcdQO) {
int count = userServiceDao.countRcd(userRcdQO.getUserAccountId());
if (count == 0) {
return ResultBody.success(PageResult.buildPage(userRcdQO.getPageNo(), userRcdQO.getPageSize(), count));
}
return userAccountDOList;
int pageNo = userRcdQO.getPageNo();
userRcdQO.buildCurrentPage();
List<UserAccountDO> userRcd = userServiceDao.listUserRcd(userRcdQO);
List<UserAccountVO> userAccountVOS = userRcd.stream().map(UserAccountDO::buildUserAccountVO).collect(Collectors.toList());
return ResultBody.success(PageResult.buildPage(pageNo, userRcdQO.getPageSize(), count, userAccountVOS));
}
@Override
public ResultBody topRcd(Integer topNum) {
List<UserAccountDO> topInviteUser = userServiceDao.topRcd(topNum);
if (!CollectionUtils.isEmpty(topInviteUser)) {
List<TopInviteVO> topInviteVOS = topInviteUser.stream().map(UserAccountDO::buildTopInviteVO).collect(Collectors.toList());
return ResultBody.success(topInviteVOS);
}
return ResultBody.success();
}
......
......@@ -22,6 +22,15 @@
<result property="createTime" column="createTime"/>
<result property="updateTime" column="update_time"/>
<result property="companyAuthStatus" column="companyAuthStatus"/>
<result property="companyName" column="companyName"/>
<association property="userRcdDO" javaType="com.mmc.iuav.user.entity.UserRcdDO">
<id property="id" column="user_rcd_id"/>
<result property="rcdUserId" column="rcd_user_id"/>
<result property="rcdNickname" column="rcdNickname"/>
<result property="rcdUserName" column="rcdUsername"/>
</association>
</resultMap>
<insert id="insertUserAccount" parameterType="com.mmc.iuav.user.entity.UserAccountDO"
......@@ -34,6 +43,11 @@
#{portType}, NOW())
</insert>
<insert id="insertUserRcd" parameterType="com.mmc.iuav.user.entity.UserRcdDO">
insert into user_rcd (user_account_id, rcd_user_id, create_time)
values (#{userAccountId}, #{rcdUserId}, NOW());
</insert>
<update id="update" parameterType="com.mmc.iuav.user.entity.UserAccountDO">
update user_account
<set>
......@@ -269,13 +283,16 @@
</if>
</select>
<select id="listAppUser" resultType="com.mmc.iuav.user.entity.UserAccountDO"
<select id="listAppUser" resultMap="userAccountResultMap"
parameterType="com.mmc.iuav.user.model.qo.UserAccountQO">
select ua.id, ua.uid, ua.phone_num, ua.user_name, ua.nick_name, ua.user_img, ua.open_id,
ua.union_id, ua.user_sex, ua.email, ua.source, ua.account_status, ua.remark,
ua.port_type, ua.disable, ua.create_time, ua.update_time, IFNULL(ca.auth_status, 0) as
companyAuthStatus, ca.company_name
companyAuthStatus, ca.company_name, rcd.id as user_rcd_id, rcd.rcd_user_id, r_user.nick_name as rcdNickname,
r_user.user_name as rcdUserName
from user_account ua left join company_auth ca on ua.id = ca.user_account_id
left join user_rcd rcd on rcd.user_account_id = ua.id
left join user_account r_user on r_user.id = rcd.rcd_user_id
where
ua.disable = 0 and ua.port_type = 100
<if test="phoneNum != null and phoneNum != '' ">
......@@ -304,4 +321,51 @@
limit #{pageNo}, #{pageSize}
</select>
<select id="countRcd" resultType="int">
select count(*) from user_rcd where rcd_user_id = #{userAccountId}
</select>
<select id="listUserRcd" resultType="com.mmc.iuav.user.entity.UserAccountDO"
parameterType="com.mmc.iuav.user.model.qo.UserRcdQO">
select ua.id,ua.phone_num, ua.user_name, ua.nick_name, ua.user_img,ur.create_time
from user_account ua inner join user_rcd ur on ua.id = ur.user_account_id
where ur.rcd_user_id = #{userAccountId}
order by ur.create_time desc
limit #{pageNo}, #{pageSize}
</select>
<select id="topRcd" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select ua.id,
ua.nick_name,
ua.user_img,
ua.user_name,
ua.uid,
ua.phone_num,
count(*) as invite_count
from user_rcd urd
INNER JOIN user_account ua ON urd.rcd_user_id = ua.id
where ua.is_deleted = 0
GROUP BY urd.rcd_user_id
ORDER BY invite_count DESC limit #{topNum}
</select>
<select id="getInviteCount" resultType="com.mmc.iuav.user.entity.UserAccountDO">
select ua.id,
ua.nick_name,
ua.user_img,
ua.user_name,
ua.uid,
ua.phone_num,
count(*) as invite_count
from user_rcd urd
INNER JOIN user_account ua ON urd.rcd_user_id = ua.id
where ua.is_deleted = 0
<if test="uIds != null">
<foreach collection="uIds" separator="," open="and urd.rcd_user_id in (" close=")" item="id">
#{id}
</foreach>
</if>
GROUP BY urd.rcd_user_id
</select>
</mapper>
......@@ -17,6 +17,7 @@ data-filter:
- /userapp/wx/getAppletQRCode
- /userapp/wx/wxSendMessage
- /userapp/user-account/feignListUserAccountIds
- /userapp/user-account/topRcd
- /userapp/back-user/listTest
- /userapp/company/listCompanyPageBack
- /userapp/company/getCompanyInfoById
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论