浏览代码

分销系统V.1.0.0

kaick 1 年之前
父节点
当前提交
a6adda0e99

+ 3 - 1
src/main/java/com/caimei365/user/config/ApiConfig.java

@@ -25,7 +25,9 @@ public class ApiConfig implements WebMvcConfigurer {
                 .addPathPatterns("/user/distribution/**")
                 .addPathPatterns("/user/club/info/update")
                 .addPathPatterns("/user/shop/info/update")
-                .addPathPatterns("/user/club/archive/deduction");
+                .addPathPatterns("/user/club/archive/deduction")
+                .excludePathPatterns("/user/distribution/setPassword")
+                .excludePathPatterns("/user/distribution/home");
 //                .excludePathPatterns("/order/detail");
     }
 }

+ 14 - 1
src/main/java/com/caimei365/user/controller/BaseApi.java

@@ -7,6 +7,7 @@ import com.caimei365.user.idempotent.IpSave;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.MobileDto;
 import com.caimei365.user.model.dto.PasswordDto;
+import com.caimei365.user.model.po.CmUser;
 import com.caimei365.user.model.po.SysDict;
 import com.caimei365.user.model.vo.SysDictVO;
 import com.caimei365.user.service.BaseService;
@@ -267,6 +268,18 @@ public class BaseApi {
     @ApiOperation("获取userId")
     @GetMapping("/getFindUserId")
     public ResponseJson getFindUserId(Integer userType, Integer id) {
-        return ResponseJson.success(baseService.getByUserId(userType, id));
+        return baseService.getByUserId(userType, id);
+    }
+
+    @ApiOperation("获取Mobile")
+    @GetMapping("/getByDistributionClubMobile")
+    public ResponseJson getByMobile(Integer userId) {
+        return ResponseJson.success(baseService.getByMobile(8, userId));
+    }
+
+    @ApiOperation("获取user数量")
+    @GetMapping("/getByUserCount")
+    public Integer getByUserCount(CmUser user) {
+        return baseService.getByUserCount(user);
     }
 }

+ 16 - 21
src/main/java/com/caimei365/user/controller/DistributionApi.java

@@ -4,8 +4,10 @@ import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.ClubTemporaryDto;
 import com.caimei365.user.model.dto.OnlineDto;
 import com.caimei365.user.model.po.CmDistribution;
+import com.caimei365.user.model.po.CmUser;
 import com.caimei365.user.model.po.ServiceProviderPo;
 import com.caimei365.user.model.vo.*;
+import com.caimei365.user.service.BaseService;
 import com.caimei365.user.service.CmDistributionService;
 import com.caimei365.user.service.SellerService;
 import com.caimei365.user.utils.RequestUtil;
@@ -17,6 +19,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -36,6 +39,7 @@ import java.util.Map;
 public class DistributionApi {
 
     private final CmDistributionService cmDistributionService;
+    private final BaseService baseService;
 
 
     /**
@@ -46,12 +50,10 @@ public class DistributionApi {
         if (null == cmDistribution.parentId()) {
             return ResponseJson.error("参数异常!", null);
         }
-//        PageHelper.startPage(pageNum, pageSize);
-//        PaginationVo<CmDistributionVO> paginationVo = new PaginationVo(archiveList);
         List<CmDistribution> cmDistributionList = cmDistributionService.getCmDistributionList(new CmDistribution()
                 .parentId(cmDistribution.parentId())
         );
-        return ResponseJson.success( CmDistributionVO.setValues(cmDistributionList));
+        return ResponseJson.success(CmDistributionVO.setValues(cmDistributionList));
     }
 
 
@@ -89,18 +91,15 @@ public class DistributionApi {
      * 更新协销信息
      */
     @PostMapping("/setPassword")
-    public ResponseJson setPassword(CmDistribution cmDistribution, String oldPassword, String code) {
-        if (null == code) {
-            return ResponseJson.error("验证码不能为空!", null);
-        }
+    public ResponseJson setPassword(CmDistribution cmDistribution, String oldPassword,  String code) {
         if (!oldPassword.equals(cmDistribution.password())) {
             return ResponseJson.error("两次输入的密码不一致!", null);
         }
-        cmDistributionService.setPassword(new CmDistribution()
+        return cmDistributionService.setPassword(new CmDistribution()
                         .userId(cmDistribution.userId())
+                        .mobile(cmDistribution.mobile())
                         .password(cmDistribution.password())
                 , code);
-        return ResponseJson.success();
     }
 
     /**
@@ -115,9 +114,9 @@ public class DistributionApi {
             cmDistribution.status(91);
         }
         cmDistributionService.updateCmDistribution(new CmDistribution()
-                        .userId(cmDistribution.userId())
-                        .status(cmDistribution.status())
-                );
+                .userId(cmDistribution.userId())
+                .status(cmDistribution.status())
+        );
         return ResponseJson.success();
     }
 
@@ -126,30 +125,26 @@ public class DistributionApi {
      */
     @PostMapping("/save")
     public ResponseJson save(CmDistribution cmDistribution) {
-        if (null == cmDistribution.parentId()||cmDistribution.parentId()==0) {
+        if (null == cmDistribution.parentId() || cmDistribution.parentId() == 0) {
             return ResponseJson.error("管理员ID不能为空!", null);
         }
         if (null == cmDistribution.name() || null == cmDistribution.mobile() || null == cmDistribution.status()) {
             return ResponseJson.error("参数异常!", null);
         }
         // 验证手机号
-        String result = ValidateUtil.validateMobile( cmDistribution.mobile());
+        String result = ValidateUtil.validateMobile(cmDistribution.mobile());
         if (result != null) {
             return ResponseJson.error(result);
         }
         if (90 != cmDistribution.status()) {
             cmDistribution.status(91);
         }
-        CmDistribution mobile = new CmDistribution().mobile(cmDistribution.mobile());
-        if(StringUtils.isNotBlank(cmDistribution.id())){
-            mobile.id("not in=" + cmDistribution.id());
-        }
-        CmDistribution byCmDistributionMobile = cmDistributionService.getByCmDistribution(mobile);
-        if (null != byCmDistributionMobile) {
+        CmDistribution cmDistributionById = cmDistribution.id()==null?null:cmDistributionService.getCmDistributionById(cmDistribution.id());
+        CmUser cmUser = baseService.findUserByMobile(cmDistribution.mobile(),cmDistributionById==null?null:cmDistributionById.userId(),7);
+        if (cmUser!=null) {
             return ResponseJson.error("手机号码已经被使用!", null);
         }
         cmDistributionService.addCmDistribution(cmDistribution);
-
         return ResponseJson.success();
     }
 

+ 11 - 0
src/main/java/com/caimei365/user/controller/LoginApi.java

@@ -161,6 +161,17 @@ public class LoginApi {
         return cmDistributionService.organizeCodeLogin(loginCodeDto);
     }
 
+    /**
+     * 分销机构获取验证码(手机号,验证码)
+     *
+     * @return UserLoginVo
+     */
+    @ApiOperation("分销机构获取验证码(手机号,验证码)")
+    @PostMapping("/organizeDistributionClub")
+    public ResponseJson organizeClubCodeLogin(LoginCodeDto loginCodeDto,String userId) {
+        return cmDistributionService.organizeClubCodeLogin(loginCodeDto,userId);
+    }
+
     /**
      * 微信授权登录(小程序),用户数据存入Redis,key前缀:wxInfo:applets:
      * <p>

+ 21 - 0
src/main/java/com/caimei365/user/controller/RegisterApi.java

@@ -87,6 +87,27 @@ public class RegisterApi {
         return registerService.clubRegister(clubRegisterDto, headers);
     }
 
+    /**
+     * 分销人员生成特殊机构(注册)
+     * <p>
+     * spi旧接口:/club/common
+     *
+     * @param clubRegisterDto ClubRegisterDto{
+     *                        name          机构名称
+     *                        userName          联系人
+     *                        bindMobile        企业绑定手机号
+     *                        }
+     * @param headers         HttpHeaders
+     */
+    @ApiOperation("分销人员生成特殊机构")
+    @Idempotent(prefix = "idempotent_distributionClub", keys = {"#distributionClubRegisterDto"}, expire = 5)
+//    @IpSave(saveName = "分销人员生成特殊机构",saveParams = true)
+    @PostMapping("/distributionClub")
+    public ResponseJson distributionClubRegister(ClubRegisterDto clubRegisterDto, @RequestHeader HttpHeaders headers) {
+
+        return registerService.distributionClubRegister(clubRegisterDto, headers);
+    }
+
     /**
      * 组织普通机构 注册校验
      * @param bindMobile

+ 17 - 1
src/main/java/com/caimei365/user/mapper/BaseMapper.java

@@ -182,7 +182,12 @@ public interface BaseMapper {
     List<String> findLabelsByLableIds(String labelIds);
 
     Integer findBankByUserId(Integer userId);
-    Integer getByUserId(@Param("userType")Integer userType,@Param("id")Integer id);
+
+    Integer getByUserId(@Param("userType") Integer userType, @Param("id") Integer id);
+
+    String getByMobile(@Param("userIdentity") Integer userIdentity, @Param("userId") Integer userId);
+
+    Integer getByUserCount(CmUser user);
 
     /**
      * 新增用户信息
@@ -199,6 +204,14 @@ public interface BaseMapper {
      * @return 结果
      */
     public int updateUser(CmUser user);
+
+
+    /**
+     * 修改机构状态信息
+     *
+     */
+    public int updateClubStatus(Integer userId,Integer status);
+
     /**
      * 用户信息
      *
@@ -206,4 +219,7 @@ public interface BaseMapper {
      * @return 结果
      */
     public CmUser getByUser(CmUser user);
+
+    CmUser findUserByMobile(@Param("mobile") String mobile, @Param("oldUserId") Integer oldUserId, @Param("userIdentity") Integer userIdentity);
+
 }

+ 6 - 0
src/main/java/com/caimei365/user/model/dto/ClubRegisterDto.java

@@ -31,6 +31,12 @@ public class ClubRegisterDto implements Serializable {
      */
     @ApiModelProperty("用户名")
     private String userName;
+
+    /**
+     * 名称
+     */
+    @ApiModelProperty("名称")
+    private String name;
     /**
      * 企业绑定手机号
      */

+ 20 - 14
src/main/java/com/caimei365/user/model/vo/CmDistributionVO.java

@@ -86,25 +86,31 @@ public class CmDistributionVO implements Serializable {
 
     public static List<CmDistributionVO> setValues(List<CmDistribution> cmDistributionList) {
         List<CmDistributionVO> cmDistributionVOList = new ArrayList<>();
-        cmDistributionList.forEach(cmDistribution -> {
-            cmDistributionVOList.add(setValue(cmDistribution));
-        });
+        if(null!=cmDistributionList) {
+
+            cmDistributionList.forEach(cmDistribution -> {
+                cmDistributionVOList.add(setValue(cmDistribution));
+            });
+        }
         return cmDistributionVOList;
     }
 
     public static CmDistributionVO setValue(CmDistribution cmDistribution) {
             CmDistributionVO cmDistributionVO = new CmDistributionVO();
-            cmDistributionVO.setId(cmDistribution.getId());
-            cmDistributionVO.setUserId(cmDistribution.getUserId());
-            cmDistributionVO.setName(cmDistribution.getName());
-            cmDistributionVO.setLinkMan(cmDistribution.getLinkMan());
-            cmDistributionVO.setMobile(cmDistribution.getMobile());
-            cmDistributionVO.setSplitCode(cmDistribution.getSplitCode());
-            cmDistributionVO.setStatus(cmDistribution.getStatus());
-            cmDistributionVO.setQrCode(cmDistribution.getQrCode());
-            cmDistributionVO.setImage(cmDistribution.getImage());
-            cmDistributionVO.setParentId(cmDistribution.getParentId());
-            cmDistributionVO.setParentIds(cmDistribution.getParentIds());
+            if(null!=cmDistribution) {
+
+                cmDistributionVO.setId(cmDistribution.getId());
+                cmDistributionVO.setUserId(cmDistribution.getUserId());
+                cmDistributionVO.setName(cmDistribution.getName());
+                cmDistributionVO.setLinkMan(cmDistribution.getLinkMan());
+                cmDistributionVO.setMobile(cmDistribution.getMobile());
+                cmDistributionVO.setSplitCode(cmDistribution.getSplitCode());
+                cmDistributionVO.setStatus(cmDistribution.getStatus());
+                cmDistributionVO.setQrCode(cmDistribution.getQrCode());
+                cmDistributionVO.setImage(cmDistribution.getImage());
+                cmDistributionVO.setParentId(cmDistribution.getParentId());
+                cmDistributionVO.setParentIds(cmDistribution.getParentIds());
+            }
         return cmDistributionVO;
     }
 }

+ 12 - 1
src/main/java/com/caimei365/user/service/BaseService.java

@@ -4,6 +4,7 @@ import com.aliyuncs.exceptions.ClientException;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.MobileDto;
 import com.caimei365.user.model.dto.PasswordDto;
+import com.caimei365.user.model.po.CmUser;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.HashMap;
@@ -126,12 +127,22 @@ public interface BaseService {
 
     /**
      * 查超级会员套餐详情
+     *
      * @return
      */
     ResponseJson findPackage();
 
     ResponseJson<HashMap<String, String>> ossTokenGet() throws ClientException;
 
-    ResponseJson<Integer>  getByUserId(Integer userType, Integer userId);
+    ResponseJson<Integer> getByUserId(Integer userType, Integer userId);
+
+    String getByMobile( Integer userIdentity,  Integer userId);
+
+    Integer getUserIdByMobile(String mobile);
+
+    Integer getByUserCount(CmUser user);
+
+    CmUser getByUser(CmUser user);
 
+    CmUser findUserByMobile(String mobile, Integer oldUserId, Integer userIdentity);
 }

+ 3 - 0
src/main/java/com/caimei365/user/service/CmDistributionService.java

@@ -32,6 +32,7 @@ public interface CmDistributionService
      */
     public CmDistribution getByCmDistribution(CmDistribution cmDistribution);
 
+    public CmDistribution getCmDistributionById(String id);
 
     /**
      * 新增distribution
@@ -58,6 +59,8 @@ public interface CmDistributionService
      * @return
      */
     ResponseJson<UserLoginVo> organizeCodeLogin(LoginCodeDto loginCodeDto);
+
+    ResponseJson organizeClubCodeLogin(LoginCodeDto loginCodeDto ,String userId);
     /**
      * 修改分销人员登录密码
      * @param cmDistribution

+ 1 - 0
src/main/java/com/caimei365/user/service/RegisterService.java

@@ -53,6 +53,7 @@ public interface RegisterService {
      */
     ResponseJson clubRegister(ClubRegisterDto clubRegisterDto, HttpHeaders headers);
 
+    public ResponseJson distributionClubRegister(ClubRegisterDto clubRegisterDto, HttpHeaders headers);
     /**
      * 组织注册信息校验
      * @param bindMobile

+ 39 - 3
src/main/java/com/caimei365/user/service/impl/BaseServiceImpl.java

@@ -12,6 +12,7 @@ import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.dto.MobileDto;
 import com.caimei365.user.model.dto.PasswordDto;
 import com.caimei365.user.model.dto.SuperVipDto;
+import com.caimei365.user.model.po.CmUser;
 import com.caimei365.user.model.po.SuperVipPo;
 import com.caimei365.user.model.po.VipPackage;
 import com.caimei365.user.model.po.VipPayHistoryPo;
@@ -24,6 +25,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
@@ -120,7 +122,8 @@ public class BaseServiceImpl implements BaseService {
      * 获取短信验证码
      *
      * @param mobile           手机号
-     * @param activateCodeType 1:找回密码,2:手机号注册机构,3:供应商注册,4:修改手机号-旧手机验证码,5:修改手机号-新手机验证码,7:手机验证码登录,8:联合丽格注册,9:联合丽格登录验证,10:联合丽格找回密码,11:联合丽格更换手机号--旧手机验证码,12:联合丽格更换手机号--新手机验证码,13联合丽格采购员登录
+     * @param activateCodeType 1:找回密码,2:手机号注册机构,3:供应商注册,4:修改手机号-旧手机验证码,5:修改手机号-新手机验证码,7:手机验证码登录,8:联合丽格注册,9:联合丽格登录验证,10:联合丽格找回密码,11:联合丽格更换手机号--旧手机验证码,12:联合丽格更换手机号--新手机验证码,13联合丽格采购员登录,
+     *                         14登录分销商城,15分销商城找回密码
      * @param platformType     0:www,1:crm/h5,2:小程序
      * @param isCheckCaptcha   是否检查图片验证码,0:检查,1:不检查
      * @param imgCode          图片验证码
@@ -305,12 +308,20 @@ public class BaseServiceImpl implements BaseService {
             }
             // 【丽格集采联盟】您的验证码为:{s6},5分钟内有效,请勿泄漏他人。
             String content = "【丽格集采联盟】您的验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
-            sendFlag = isBeta || remoteCallService.remoteSendSms(0,1,mobile,content);
+            sendFlag = isBeta || remoteCallService.remoteSendSms(0, 1, mobile, content);
             if (!sendFlag) {
                 // 短信发送失败重试一次
-                sendFlag = remoteCallService.remoteSendSms(0,1,mobile,content);
+                sendFlag = remoteCallService.remoteSendSms(0, 1, mobile, content);
             }
             codeTypeTxt = "联合丽格采购员登录";
+        } else if (14 == activateCodeType) {
+            String content = "【分销商城】欢迎登录分销商城,您的验证码为" + randomCode + ",5分钟内有效,请勿泄露他人。";
+            sendFlag = isBeta || remoteCallService.remoteSendSms(0, 1, mobile, content);
+            codeTypeTxt = "分销商城人员登录";
+        } else if (15 == activateCodeType) {
+            String content = "【分销商城】您正在修改密码,验证码为" + randomCode + ",5分钟内有效,请勿泄露他人。";
+            sendFlag = isBeta || remoteCallService.remoteSendSms(0, 1, mobile, content);
+            codeTypeTxt = "分销商城找回密码";
         } else {
             return ResponseJson.error("参数错误:activateCodeType");
         }
@@ -805,4 +816,29 @@ public class BaseServiceImpl implements BaseService {
     public ResponseJson<Integer> getByUserId(Integer userType, Integer id) {
         return ResponseJson.success(baseMapper.getByUserId(userType, id));
     }
+
+    @Override
+    public String getByMobile(Integer userIdentity, Integer userId) {
+        return baseMapper.getByMobile(userIdentity,userId);
+    }
+
+    @Override
+    public Integer getUserIdByMobile(String mobile) {
+        return baseMapper.getUserIdByMobile(mobile);
+    }
+
+    @Override
+    public Integer getByUserCount(CmUser user) {
+        return baseMapper.getByUserCount(user);
+    }
+
+    @Override
+    public CmUser getByUser(CmUser user) {
+        return baseMapper.getByUser(user);
+    }
+
+    @Override
+    public CmUser findUserByMobile(String mobile, Integer oldUserId, Integer userIdentity) {
+        return baseMapper.findUserByMobile(mobile, oldUserId, userIdentity);
+    }
 }

+ 102 - 7
src/main/java/com/caimei365/user/service/impl/CmDistributionServiceImpl.java

@@ -15,6 +15,7 @@ import com.caimei365.user.model.po.CmDistribution;
 import com.caimei365.user.model.po.CmUser;
 import com.caimei365.user.model.vo.UserLoginVo;
 import com.caimei365.user.service.CmDistributionService;
+import com.caimei365.user.service.RemoteCallService;
 import com.caimei365.user.utils.DateUtil;
 import com.caimei365.user.utils.JwtUtil;
 import com.caimei365.user.utils.Md5Util;
@@ -23,6 +24,8 @@ import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.http.client.utils.DateUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.annotation.Resource;
 
@@ -43,6 +46,8 @@ public class CmDistributionServiceImpl implements CmDistributionService {
     private CmDistributionMapper cmDistributionMapper;
     @Resource
     private CommonService commonService;
+    @Resource
+    private RemoteCallService remoteCallService;
     /**
      * 通过对象查询distribution列表
      *
@@ -66,6 +71,16 @@ public class CmDistributionServiceImpl implements CmDistributionService {
         return cmDistributionMapper.getByCmDistribution(cmDistribution);
     }
 
+    /**
+     * 通过对象查询distribution
+     *
+     * @return distribution
+     */
+    @Override
+    public CmDistribution getCmDistributionById(String id) {
+        return cmDistributionMapper.getCmDistributionById(id);
+    }
+
 
     /**
      * 新增distribution
@@ -86,21 +101,27 @@ public class CmDistributionServiceImpl implements CmDistributionService {
         cmUser.setAuditStatus("1");
         cmUser.setAuditTime(DateUtil.formatDateTime(new Date()));
         if (StringUtils.isBlank(cmDistribution.id())) {
+            String password="1111aaaa";
             cmUser.setUserOrganizeID("0");
             cmUser.setMobile(cmDistribution.mobile());
             cmUser.setBindMobile(cmDistribution.mobile());
             cmUser.setUserIdentity("7");//外部协销
             cmUser.setRegisterUserTypeID("32");//协销
             cmUser.setRegisterTime(DateUtil.formatDateTime(new Date()));
-            cmUser.setServiceProviderID(Integer.valueOf(cmDistribution.id()));
             cmUser.setValidFlag("1");
-            CmDistribution cmDistributionByParentId = cmDistributionMapper.getCmDistributionById(cmDistribution.id());
+            CmDistribution cmDistributionByParentId = cmDistributionMapper.getCmDistributionById(String.valueOf(cmDistribution.parentId()));
             cmDistribution.parentIds(cmDistributionByParentId.parentIds() + "," + cmDistribution.parentId());
             cmDistribution.corporateName(cmDistributionByParentId.corporateName());
-            cmDistribution.password(Md5Util.md5("1111aaaa"));
+            cmDistribution.password(Md5Util.md5(password));
             cmUser.setPassword(cmDistribution.password());
             baseMapper.addUser(cmUser);
+//            cmUser.setServiceProviderID(Integer.valueOf(cmDistribution.id()));
             cmDistribution.userId(Integer.valueOf(cmUser.getUserID()));
+            cmDistribution.addTime(new Date());
+            String content = "【分销系统】您的分销系统登录账号 :"+cmDistribution.mobile()+",密码:"+password;
+            if (cmDistribution.mobile()!= null && cmDistribution.mobile() != "") {
+                remoteCallService.remoteSendSms(0, 1, cmDistribution.mobile(), content);
+            }
             return cmDistributionMapper.addCmDistribution(cmDistribution);
         } else {
             cmDistributionMapper.updateCmDistribution(cmDistribution);
@@ -124,6 +145,11 @@ public class CmDistributionServiceImpl implements CmDistributionService {
         if (StringUtils.isNotBlank(cmDistribution.password())) {
             baseMapper.updatePasswordByUserId(cmDistribution.password(), cmDistribution.userId());
         }
+        if (null!=cmDistribution.status()) {
+            baseMapper.updateUser(new CmUser()
+                    .userID(String.valueOf(cmDistribution.userId()))
+                    .validFlag(cmDistribution.status()==90?"1":"0"));
+        }
         return cmDistributionMapper.updateCmDistribution(cmDistribution);
     }
 
@@ -223,7 +249,7 @@ public class CmDistributionServiceImpl implements CmDistributionService {
                     redisService.remove("code:" + mobile);
                     // 根据手机号获取分销人员
                     UserLoginVo distribution = cmDistributionMapper.getLoginDistributionByMobile(mobile);
-                    if (distribution.getServiceStatus().equals(90)) {
+                    if (null!=distribution&&distribution.getServiceStatus().equals(90)) {
                         // 生成token
                         String token = JwtUtil.createToken(distribution.getUserId());
                         // 为了过期续签,将token存入redis,并设置超时时间
@@ -241,7 +267,73 @@ public class CmDistributionServiceImpl implements CmDistributionService {
                 return ResponseJson.error(-1, "验证码错误, 请重新获取", null);
             }
         }
-        return ResponseJson.error();
+        return ResponseJson.error(-1, "请获短信取验证码", null);
+    }
+
+    /**
+     * 分销人员登录验证码登录
+     *
+     * @param loginCodeDto
+     * @return
+     */
+    @Override
+    public ResponseJson organizeClubCodeLogin(LoginCodeDto loginCodeDto ,String userId) {
+        String mobile = loginCodeDto.getMobile();
+        String code = loginCodeDto.getCode();
+        if (StringUtils.isBlank(mobile)) {
+            return ResponseJson.error("请输入手机号", null);
+        }
+        if (StringUtils.isBlank(code)) {
+            return ResponseJson.error("请输入验证码", null);
+        }
+        // 判断redis中是否存在
+        boolean exists = redisService.exists("code:" + mobile);
+        if (exists) {
+            // 查看验证码是否过期
+            long expireTime = redisService.getExpireTime("code:" + mobile);
+            if (expireTime < 0) {
+                return ResponseJson.error(-1, "验证码已失效,请重新获取", null);
+            }
+            // 获取redis手机短信验证码
+            Object randomCode = redisService.get("code:" + mobile);
+
+            if (!ObjectUtils.isEmpty(randomCode)) {
+                if (code.equals(randomCode.toString())) {
+                    redisService.remove("code:" + mobile);
+                    // 根据手机号获取分销人员
+                    CmUser user = baseMapper.getByUser(new CmUser().userIdentity("8").userID(userId).bindMobile(mobile));
+                    if (null!=user) {
+                        String password="1111aaaa";
+                        baseMapper.updateUser(new CmUser()
+                                .userID(userId)
+                                .validFlag("1")
+                                .clubStatus(90)
+                                .password(Md5Util.md5(password))
+                        );
+                        baseMapper.updateClubStatus(Integer.valueOf(userId),90);
+                        // 发送短信
+                        String content = "亲爱的买家,您好,系统根据您下单时的手机号默认给您生成了登录账号与密码,账号:"+mobile+",密码:"+password+",您可通过手机号与密码或验证码登录分销系统查看您的订单状态";
+                        boolean smsFlag = remoteCallService.remoteSendSms(0, 1, mobile, content);
+                        if (!smsFlag) {
+                            // 短信发送失败重试一次
+                            remoteCallService.remoteSendSms(0, 1, mobile, content);
+                        }
+                        // 生成token
+                        String token = JwtUtil.createToken(Integer.valueOf(userId));
+                        // 为了过期续签,将token存入redis,并设置超时时间
+                        redisService.set(token, token, JwtUtil.getExpireTime());
+                        return ResponseJson.success(null,token);
+                    } else {
+                        return ResponseJson.error("该手机号暂未注册", null);
+                    }
+                } else {
+                    return ResponseJson.error(-1, "验证码错误,请确认验证码输入", null);
+                }
+            } else {
+                return ResponseJson.error(-1, "验证码错误, 请重新获取", null);
+            }
+        }
+        return ResponseJson.error(-1, "请获短信取验证码", null);
     }
 
     /**
@@ -259,6 +351,10 @@ public class CmDistributionServiceImpl implements CmDistributionService {
         if (StringUtils.isBlank(code)) {
             return ResponseJson.error("请输入验证码", null);
         }
+        UserLoginVo userBy = cmDistributionMapper.getLoginDistributionByMobile(mobile);
+        if (null==userBy) {
+            return ResponseJson.error("该手机号暂未注册", null);
+        }
         // 判断redis中是否存在
         boolean exists = redisService.exists("code:" + mobile);
         if (exists) {
@@ -273,7 +369,6 @@ public class CmDistributionServiceImpl implements CmDistributionService {
             if (!ObjectUtils.isEmpty(randomCode)) {
                 if (code.equals(randomCode.toString())) {
                     redisService.remove("code:" + mobile);
-                    UserLoginVo userBy = cmDistributionMapper.getLoginDistributionByMobile(mobile);
                     updateCmDistribution(new CmDistribution()
                             .userId(userBy.getUserId())
                             .password(Md5Util.md5(cmDistribution.password()))
@@ -286,7 +381,7 @@ public class CmDistributionServiceImpl implements CmDistributionService {
                 return ResponseJson.error(-1, "验证码错误, 请重新获取", null);
             }
         }
-        return ResponseJson.error();
+        return ResponseJson.error(-1, "请获短信取验证码", null);
     }
 }
 

+ 157 - 3
src/main/java/com/caimei365/user/service/impl/RegisterServiceImpl.java

@@ -1122,9 +1122,9 @@ public class RegisterServiceImpl implements RegisterService {
         if (StringUtils.isBlank(shopRegisterDto.getBindMobile())) {
             return ResponseJson.error("参数异常:企业绑定手机号不能为空!");
         }
-        if (StringUtils.isBlank(shopRegisterDto.getPassword())) {
-            return ResponseJson.error("参数异常:密码不能为空!");
-        }
+//        if (StringUtils.isBlank(shopRegisterDto.getPassword())) {
+//            return ResponseJson.error("参数异常:密码不能为空!");
+//        }
         if (StringUtils.isBlank(passWordConfirm)) {
             return ResponseJson.error("参数异常:确认密码不能为空!");
         }
@@ -1733,6 +1733,160 @@ public class RegisterServiceImpl implements RegisterService {
         return shortLink;
     }
 
+    /**
+     * 功能描述:分销人员生成机构
+     *
+     * @param clubRegisterDto
+     * @param headers
+     * @return [clubRegisterDto, headers]
+     * @auther: Kaick
+     * @date: 2023/10/10 11:28
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public ResponseJson distributionClubRegister(ClubRegisterDto clubRegisterDto, HttpHeaders headers) {
+        // 打印IP
+        String ip = headers.getFirst("X-CLIENT-IP");
+        log.info("机构注册 X-CLIENT-IP : " + ip);
+        // 参数校验
+        if (StringUtils.isBlank(clubRegisterDto.getName())) {
+            return ResponseJson.error("参数异常:名称不能为空!");
+        }
+        // 参数校验
+        if (StringUtils.isBlank(clubRegisterDto.getUserName())) {
+            return ResponseJson.error("参数异常:用户名不能为空!");
+        }
+        if (StringUtils.isBlank(clubRegisterDto.getBindMobile())) {
+            return ResponseJson.error("参数异常:企业绑定手机号不能为空!");
+        }
+        //机构重复则不注册
+        CmUser byUser = baseMapper.getByUser(new CmUser()
+                .userIdentity("8")
+                .validFlag("1")
+                .bindMobile(clubRegisterDto.getBindMobile())
+        );
+        if (null!=byUser) {
+            return ResponseJson.success(String.valueOf(byUser.clubID()), null);
+        }
+        clubRegisterDto.setPassword("1111aaaa");
+        // 获取ip所在地
+        String ipAddress = "";
+        Integer provinceId = null;
+        Integer cityId = null;
+        try {
+            ipAddress = IpUtil.recordIp(ip);
+            Map<String, String> map = IpUtil.recordAddress(ip);
+            // 省
+            String regionPro = map.get("regionPro");
+            provinceId = registerMapper.selProvince(regionPro);
+            // 市
+            String regionCity = map.get("regionCity");
+            cityId = registerMapper.selCity(regionCity);
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        log.info("ip所在地====》" + ipAddress);
+        /*
+            组装用户数据 user
+         */
+        UserPo user = new UserPo();
+        // 设置日期时间格式
+        Date date = new Date();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String current = dateFormat.format(date);
+        // 注册时间
+        user.setRegisterTime(current);
+        // 注册IP
+        user.setRegisterIp(ip);
+        // 注册IP所在地
+        user.setIpAddress(ipAddress);
+        // 注册来源: 0网站 1小程序
+        user.setSource(clubRegisterDto.getSource());
+        // 用户类型,供应商1,会员机构3,普通机构4
+        user.setRegisterUserTypeId(4);
+        // 采美默认组织机构0
+        user.setOrganizeId(0);
+        // 用户名
+        user.setName(clubRegisterDto.getName());
+        user.setUserName(clubRegisterDto.getUserName());
+        // 绑定手机号
+        user.setBindMobile(clubRegisterDto.getBindMobile());
+        // 用户身份: 1协销 2会员机构 3供应商 4普通机构,8分销人员生成机构
+        user.setUserIdentity(8);
+        // 用户权限: 2会员机构 3供应商 4协销 5普通机构
+        user.setUserPermission(5);
+        // 是否已经引导过(机构升级:0否,1是)
+        user.setGuideFlag(0);
+        // 设置机构
+        user.setClubStatus(92);
+        // 设置密码
+        user.setPassword(Md5Util.md5(clubRegisterDto.getPassword()));
+        // 同意协议
+        user.setAgreeFlag(1);
+        // 用户状态,1正常,0冻结
+        user.setValidFlag(0);
+        //采美豆
+        user.setUserBeans(0);
+        // 协销Id,默认采美官方
+        user.setServiceProviderId(clubRegisterDto.getSpId());
+        /*
+            保存数据库 user
+         */
+        int insertFlag = registerMapper.insertClubUser(user);
+        log.info("插入数据库User表,获得userId:" + user.getUserId());
+        if (insertFlag < 1) {
+            throw new RuntimeException("插入数据库异常user:" + user.toString());
+        }
+
+        /*
+          保存用户状态
+         */
+        List<UserPo> userPos = registerMapper.selUser(current);
+        for (UserPo userInfo : userPos) {
+            registerMapper.insertOrgan(userInfo.getUserId());
+        }
+        /*
+            组装机构数据
+         */
+        ClubPo club = new ClubPo();
+        // 机构名称
+        club.setName(user.getName());
+        // 联系手机
+        club.setContractMobile(user.getBindMobile());
+        // 联系人
+        club.setLinkMan(user.getUserName());
+        // 用户Id
+        club.setUserId(user.getUserId());
+        // 注册时间
+        club.setAddTime(current);
+        // 状态设置
+        club.setStatus(92);
+        // 协销Id(spId)
+        club.setServiceProviderId(clubRegisterDto.getSpId());
+        if (4 == user.getUserIdentity()) {
+            if (null != provinceId) {
+                club.setProvinceId(provinceId);
+            }
+            if (null != cityId) {
+                club.setCityId(cityId);
+            }
+        }
+        /*
+            保存数据库 club
+         */
+        int insertClubFlag = registerMapper.insertClub(club);
+        log.info("插入数据库club表,获得clubId:" + club.getClubId());
+        if (insertClubFlag < 1) {
+            throw new RuntimeException("插入数据库异常club:" + club.toString());
+        }
+        // user更新clubId
+        user.setClubId(club.getClubId());
+        registerMapper.updateUserClubId(user.getUserId(), club.getClubId());
+
+        return ResponseJson.success(String.valueOf(club.getClubId()), null);
+    }
+
 //    public static void main(String[] args) throws ParseException {
 //        Date d=new Date();
 //        //1.日期格式

+ 1 - 1
src/main/resources/bootstrap.yml

@@ -17,4 +17,4 @@ mybatis:
   # 扫描classpath中mapper目录下的映射配置文件,针对于映射文件放到了resources目录下
   mapper-locations: classpath:/mapper/*.xml
   # 定义包别名,使用pojo时可以直接使用pojo的类型名称不用加包名
-  type-aliases-package: com.caimei365.user.model
+  type-aliases-package: com.caimei365.user.model

+ 123 - 4
src/main/resources/mapper/BaseMapper.xml

@@ -214,16 +214,116 @@
     <select id="getByUserId" resultType="java.lang.Integer">
         <if test="userType != null">
             <if test="userType == 1">
-            SELECT userID from  club   WHERE  clubId = #{id}
+                SELECT userID from club WHERE clubId = #{id}
             </if>
             <if test="userType == 2">
-            SELECT userID from  shop   WHERE  shopId = #{id}
+                SELECT userID from shop WHERE shopId = #{id}
             </if>
             <if test="userType == 3">
-            SELECT userID from  serviceprovider  WHERE  serviceProviderID = #{id}
+                SELECT userID from serviceprovider WHERE serviceProviderID = #{id}
             </if>
         </if>
     </select>
+    <select id="getByMobile" resultType="String">
+       select bindMobile from user where  userIdentity=#{userIdentity} and  userId=#{userId}
+    </select>
+    <select id="getByUserCount" resultType="java.lang.Integer">
+        SELECT count(1) from user
+        <where>
+            <if test="userID != null  and userID != ''">
+                and user.userID
+                <if test="userID.toUpperCase().indexOf('=')==-1">
+                    = #{userID}
+                </if>
+                <if test="userID.toUpperCase().indexOf('=')!=-1">
+                    <if test="userID.toUpperCase().indexOf('NOT')!=-1"> not </if>
+                    <if test="userID.toUpperCase().indexOf('IN')!=-1"> in </if>
+                    <foreach item="userIDIn" collection="userID.substring(userID.toUpperCase().indexOf('=')+1,userID.length()).trim().split(',')" open="(" separator="," close=")">
+                        #{userIDIn}
+                    </foreach>
+                </if>
+            </if>
+            <if test="userOrganizeID != null  and userOrganizeID != ''">
+                and user.userOrganizeID
+                <if test="userOrganizeID.toUpperCase().indexOf('=')==-1">
+                    = #{userOrganizeID}
+                </if>
+                <if test="userOrganizeID.toUpperCase().indexOf('=')!=-1">
+                    <if test="userOrganizeID.toUpperCase().indexOf('NOT')!=-1"> not </if>
+                    <if test="userOrganizeID.toUpperCase().indexOf('IN')!=-1"> in </if>
+                    <foreach item="typeIn" collection="userOrganizeID.substring(userOrganizeID.toUpperCase().indexOf('=')+1,userOrganizeID.length()).trim().split(',')" open="(" separator="," close=")">
+                        #{typeIn}
+                    </foreach>
+                </if>
+            </if>
+            <if test="account != null  and account != ''"> and user.account = #{account}</if>
+            <if test="mobile != null  and mobile != ''"> and user.mobile = #{mobile}</if>
+            <if test="bindMobile != null  and bindMobile != ''"> and user.bindMobile = #{bindMobile}</if>
+            <if test="userPermission != null "> and user.userPermission = #{userPermission}</if>
+            <if test="userIdentity != null  and userIdentity != ''">
+                and user.userIdentity
+                <if test="userIdentity.toUpperCase().indexOf('=')==-1">
+                    = #{userIdentity}
+                </if>
+                <if test="userIdentity.toUpperCase().indexOf('=')!=-1">
+                    <if test="userIdentity.toUpperCase().indexOf('NOT')!=-1"> not </if>
+                    <if test="userIdentity.toUpperCase().indexOf('IN')!=-1"> in </if>
+                    <foreach item="typeIn" collection="userIdentity.substring(userIdentity.toUpperCase().indexOf('=')+1,userIdentity.length()).trim().split(',')" open="(" separator="," close=")">
+                        #{typeIn}
+                    </foreach>
+                </if>
+            </if>
+            <if test="email != null  and email != ''"> and user.email = #{email}</if>
+            <if test="userName != null  and userName != ''"> and user.userName like concat('%', #{userName}, '%')</if>
+            <if test="realName != null  and realName != ''"> and user.realName like concat('%', #{realName}, '%')</if>
+            <if test="source != null  and source != ''"> and user.source = #{source}</if>
+            <if test="image != null  and image != ''"> and user.image = #{image}</if>
+            <if test="password != null  and password != ''"> and user.password = #{password}</if>
+            <if test="name != null  and name != ''"> and user.name like concat('%', #{name}, '%')</if>
+            <if test="registerUserTypeID != null  and registerUserTypeID != ''">
+                and user.registerUserTypeID
+                <if test="registerUserTypeID.toUpperCase().indexOf('=')==-1">
+                    = #{registerUserTypeID}
+                </if>
+                <if test="registerUserTypeID.toUpperCase().indexOf('=')!=-1">
+                    <if test="registerUserTypeID.toUpperCase().indexOf('NOT')!=-1"> not </if>
+                    <if test="registerUserTypeID.toUpperCase().indexOf('IN')!=-1"> in </if>
+                    <foreach item="typeIn" collection="registerUserTypeID.substring(registerUserTypeID.toUpperCase().indexOf('=')+1,registerUserTypeID.length()).trim().split(',')" open="(" separator="," close=")">
+                        #{typeIn}
+                    </foreach>
+                </if>
+            </if>
+            <if test="manufacturerStatus != null "> and user.manufacturerStatus = #{manufacturerStatus}</if>
+            <if test="shopID != null "> and user.shopID = #{shopID}</if>
+            <if test="auditStatus != null  and auditStatus != ''"> and user.auditStatus = #{auditStatus}</if>
+            <if test="auditTime != null  and auditTime != ''"> and user.auditTime = #{auditTime}</if>
+            <if test="auditNote != null  and auditNote != ''"> and user.auditNote = #{auditNote}</if>
+            <if test="registerTime != null  and registerTime != ''"> and user.registerTime = #{registerTime}</if>
+            <if test="registerIP != null  and registerIP != ''"> and user.registerIP = #{registerIP}</if>
+            <if test="ipAddress != null  and ipAddress != ''"> and user.ipAddress = #{ipAddress}</if>
+            <if test="loginTime != null  and loginTime != ''"> and user.loginTime = #{loginTime}</if>
+            <if test="loginIP != null  and loginIP != ''"> and user.loginIP = #{loginIP}</if>
+            <if test="validFlag != null  and validFlag != ''"> and user.validFlag = #{validFlag}</if>
+            <if test="clubStatus != null "> and user.clubStatus = #{clubStatus}</if>
+            <if test="clubID != null "> and user.clubID = #{clubID}</if>
+            <if test="agreeFlag != null  and agreeFlag != ''"> and user.agreeFlag = #{agreeFlag}</if>
+            <if test="serviceProviderStatus != null "> and user.serviceProviderStatus = #{serviceProviderStatus}</if>
+            <if test="serviceProviderID != null "> and user.serviceProviderID = #{serviceProviderID}</if>
+            <if test="userMoney != null "> and user.userMoney = #{userMoney}</if>
+            <if test="ableUserMoney != null "> and user.ableUserMoney = #{ableUserMoney}</if>
+            <if test="logoffTime != null  and logoffTime != ''"> and user.logoffTime = #{logoffTime}</if>
+            <if test="appKey != null  and appKey != ''"> and user.appKey = #{appKey}</if>
+            <if test="appSecret != null  and appSecret != ''"> and user.appSecret = #{appSecret}</if>
+            <if test="scanFlag != null "> and user.scanFlag = #{scanFlag}</if>
+            <if test="userBeans != null "> and user.userBeans = #{userBeans}</if>
+            <if test="guideFlag != null "> and user.guideFlag = #{guideFlag}</if>
+            <if test="loginFailTime != null "> and user.loginFailTime = #{loginFailTime}</if>
+            <if test="tipStatus != null  and tipStatus != ''"> and user.tipStatus = #{tipStatus}</if>
+            <if test="onlineMoney != null "> and user.onlineMoney = #{onlineMoney}</if>
+        </where>
+        group by user.userID
+        order by user.loginTime desc
+    </select>
 
     <insert id="addUser" parameterType="CmUser" useGeneratedKeys="true" keyProperty="userID">
         insert into user
@@ -364,6 +464,13 @@
         </trim>
         where userID = #{userID}
     </update>
+    <update id="updateClubStatus" parameterType="CmUser">
+        update club
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="status != null">status = #{status},</if>
+        </trim>
+        where userId = #{userId}
+    </update>
 
 
     <resultMap type="CmUser" id="UserResult">
@@ -460,7 +567,7 @@
     <select id="getByUser" parameterType="CmUser" resultMap="UserResult">
         <include refid="selectUserVo"/>
         from user AS user
-        <where>  user.delFlag = 0
+        <where>
             <if test="userID != null  and userID != ''">
                 and user.userID
                 <if test="userID.toUpperCase().indexOf('=')==-1">
@@ -556,5 +663,17 @@
         order by user.loginTime desc
         limit 0,1
     </select>
+    <select id="findUserByMobile"  resultMap="UserResult">
+        <include refid="selectUserVo"/>
+        FROM user user
+        WHERE user.bindMobile=#{mobile}
+        <if test="oldUserId !=null and oldUserId !=''">
+            and user.userId!=#{oldUserId}
+        </if>
+        <if test="userIdentity !=null">
+            and user.userIdentity=#{userIdentity}
+        </if>
+        limit 0,1
+    </select>
 
 </mapper>