Bladeren bron

修改创建商户的代码 , 在创建商户的同事, 给对应的负责人创建一个账号
账号名称为:手机号
密码为:zxpt@+手机号

gaohp 11 maanden geleden
bovenliggende
commit
4529026773
14 gewijzigde bestanden met toevoegingen van 152 en 33 verwijderingen
  1. 7 1
      feifan-module-sale/feifan-module-sale-biz/pom.xml
  2. 18 5
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/MerchantController.java
  3. 3 2
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/vo/MerchantPageReqVO.java
  4. 2 2
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/vo/MerchantRespVO.java
  5. 21 0
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/vo/MerchantSaveReqByMobileVO.java
  6. 5 5
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/vo/MerchantSaveReqVO.java
  7. 0 10
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/dal/dataobject/merchant/MerchantDO.java
  8. 1 2
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/dal/mysql/merchant/MerchantMapper.java
  9. 20 0
      feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/service/merchant/MerchantServiceImpl.java
  10. 9 0
      feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/controller/admin/user/vo/user/UserSaveReqVO.java
  11. 14 5
      feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/dal/dataobject/permission/RoleDO.java
  12. 11 0
      feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/user/AdminUserService.java
  13. 40 0
      feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/user/AdminUserServiceImpl.java
  14. 1 1
      feifan-server/src/main/resources/application-local.yaml

+ 7 - 1
feifan-module-sale/feifan-module-sale-biz/pom.xml

@@ -17,7 +17,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
     <description> <!-- 4. 新增 description 为该模块的描述 -->
-        sale 模块,主要实现  商户 店铺 等功能。
+        sale 模块,主要实现 商户 店铺 等功能。
     </description>
 
     <dependencies>
@@ -43,6 +43,12 @@
             <version>${revision}</version>
         </dependency>
 
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-system-biz</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
         <!-- 业务组件 -->
         <dependency>
             <groupId>cn.newfeifan.zx</groupId>

+ 18 - 5
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/MerchantController.java

@@ -4,13 +4,17 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.newfeifan.mall.framework.common.enums.UserTypeEnum;
 import cn.newfeifan.mall.framework.security.core.LoginUser;
 import cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils;
+import cn.newfeifan.mall.module.system.service.user.AdminUserService;
 import cn.newfeifan.mall.sale.controller.admin.merchant.vo.MerchantPageReqVO;
 import cn.newfeifan.mall.sale.controller.admin.merchant.vo.MerchantRespVO;
+import cn.newfeifan.mall.sale.controller.admin.merchant.vo.MerchantSaveReqByMobileVO;
 import cn.newfeifan.mall.sale.controller.admin.merchant.vo.MerchantSaveReqVO;
 import cn.newfeifan.mall.sale.dal.dataobject.merchant.MerchantDO;
 import cn.newfeifan.mall.sale.service.merchant.MerchantService;
 import org.springframework.web.bind.annotation.*;
+
 import javax.annotation.Resource;
+
 import org.springframework.validation.annotation.Validated;
 import org.springframework.security.access.prepost.PreAuthorize;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -35,6 +39,7 @@ import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
 import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
 
 import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
+
 import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.*;
 
 
@@ -44,6 +49,8 @@ import static cn.newfeifan.mall.framework.operatelog.core.enums.OperateTypeEnum.
 @Validated
 public class MerchantController {
 
+    @Resource
+    private AdminUserService adminUserService;
     @Resource
     private MerchantService merchantService;
 
@@ -54,6 +61,15 @@ public class MerchantController {
         return success(merchantService.createMerchant(createReqVO));
     }
 
+    @PostMapping("/createByMobile")
+    @Operation(summary = "通过手机号创建一个用户")
+    @PreAuthorize("@ss.hasPermission('sale:merchant:create')")
+    public CommonResult<String> createByMobile(@RequestBody MerchantSaveReqByMobileVO createReqVO) {
+        adminUserService.createUserByMobile(createReqVO.getContactNumber(), createReqVO.getContact());
+        return success("创建成功");
+    }
+
+
     @PutMapping("/update")
     @Operation(summary = "更新商户")
     @PreAuthorize("@ss.hasPermission('sale:merchant:update')")
@@ -89,9 +105,6 @@ public class MerchantController {
     }
 
 
-
-
-
     @GetMapping("/page")
     @Operation(summary = "获得商户分页")
     @PreAuthorize("@ss.hasPermission('sale:merchant:query')")
@@ -105,12 +118,12 @@ public class MerchantController {
     @PreAuthorize("@ss.hasPermission('sale:merchant:export')")
     @OperateLog(type = EXPORT)
     public void exportMerchantExcel(@Valid MerchantPageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
+                                    HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<MerchantDO> list = merchantService.getMerchantPage(pageReqVO).getList();
         // 导出 Excel
         ExcelUtils.write(response, "商户.xls", "数据", MerchantRespVO.class,
-                        BeanUtils.toBean(list, MerchantRespVO.class));
+                BeanUtils.toBean(list, MerchantRespVO.class));
     }
 
 }

+ 3 - 2
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/vo/MerchantPageReqVO.java

@@ -58,11 +58,12 @@ public class MerchantPageReqVO extends PageParam {
 
     @Schema(description = "logo地址", example = "https://www.zhongxing.cn")
     private String logoUrl;
-    @Schema(description = "商户负责人姓名", example = "芋艿")
+
+/*    @Schema(description = "商户负责人姓名", example = "芋艿")
     private String contactName;
 
     @Schema(description = "商户负责人手机")
-    private String contactMobile;
+    private String contactMobile;*/
 
     @Schema(description = "服务套餐", example = "8463")
     private Integer packageId;

+ 2 - 2
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/vo/MerchantRespVO.java

@@ -74,13 +74,13 @@ public class MerchantRespVO {
     private String logoUrl;
 
 
-    @Schema(description = "商户负责人姓名", example = "芋艿")
+/*    @Schema(description = "商户负责人姓名", example = "芋艿")
     @ExcelProperty("商户负责人姓名")
     private String contactName;
 
     @Schema(description = "商户负责人手机")
     @ExcelProperty("商户负责人手机")
-    private String contactMobile;
+    private String contactMobile;*/
 
     @Schema(description = "服务套餐", example = "8463")
     @ExcelProperty("服务套餐")

+ 21 - 0
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/vo/MerchantSaveReqByMobileVO.java

@@ -0,0 +1,21 @@
+package cn.newfeifan.mall.sale.controller.admin.merchant.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 商户新增/修改 Request VO")
+@Data
+public class MerchantSaveReqByMobileVO {
+
+    @Schema(description = "负责人")
+    private String contact;
+
+    @Schema(description = "负责人电话")
+    private String contactNumber;
+
+
+}

+ 5 - 5
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/controller/admin/merchant/vo/MerchantSaveReqVO.java

@@ -55,11 +55,11 @@ public class MerchantSaveReqVO {
     @Schema(description = "logo地址", example = "https://www.zhongxing.cn")
     private String logoUrl;
 
-    @Schema(description = "商户负责人姓名", example = "芋艿")
-    private String contactName;
-
-    @Schema(description = "商户负责人手机")
-    private String contactMobile;
+//    @Schema(description = "商户负责人姓名", example = "芋艿")
+//    private String contactName;
+//
+//    @Schema(description = "商户负责人手机")
+//    private String contactMobile;
 
     @Schema(description = "服务套餐", example = "8463")
     private Integer packageId;

+ 0 - 10
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/dal/dataobject/merchant/MerchantDO.java

@@ -81,16 +81,6 @@ public class MerchantDO extends BaseDO {
      */
     private String logoUrl;
 
-
-
-    /**
-     * 商户负责人姓名
-     */
-    private String contactName;
-    /**
-     * 商户负责人手机
-     */
-    private String contactMobile;
     /**
      * 服务套餐
      */

+ 1 - 2
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/dal/mysql/merchant/MerchantMapper.java

@@ -31,8 +31,7 @@ public interface MerchantMapper extends BaseMapperX<MerchantDO> {
                 .betweenIfPresent(MerchantDO::getCreateTime, reqVO.getCreateTime())
                 .eqIfPresent(MerchantDO::getLogoUrl, reqVO.getLogoUrl())
                 .eqIfPresent(MerchantDO::getContact, reqVO.getContact())
-                .likeIfPresent(MerchantDO::getContactName, reqVO.getContactName())
-                .eqIfPresent(MerchantDO::getContactMobile, reqVO.getContactMobile())
+
                 .eqIfPresent(MerchantDO::getPackageId, reqVO.getPackageId())
                 .eqIfPresent(MerchantDO::getShopCount, reqVO.getShopCount())
                 .eqIfPresent(MerchantDO::getAreaId, reqVO.getAreaId())

+ 20 - 0
feifan-module-sale/feifan-module-sale-biz/src/main/java/cn/newfeifan/mall/sale/service/merchant/MerchantServiceImpl.java

@@ -1,12 +1,17 @@
 package cn.newfeifan.mall.sale.service.merchant;
 
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
+import cn.newfeifan.mall.module.system.dal.dataobject.user.AdminUserDO;
+import cn.newfeifan.mall.module.system.dal.mysql.user.AdminUserMapper;
+import cn.newfeifan.mall.module.system.service.user.AdminUserService;
 import cn.newfeifan.mall.sale.controller.admin.merchant.vo.MerchantPageReqVO;
 import cn.newfeifan.mall.sale.controller.admin.merchant.vo.MerchantSaveReqVO;
 import cn.newfeifan.mall.sale.dal.dataobject.merchant.MerchantDO;
 import cn.newfeifan.mall.sale.dal.mysql.merchant.MerchantMapper;
 import org.springframework.stereotype.Service;
+
 import javax.annotation.Resource;
+
 import org.springframework.validation.annotation.Validated;
 
 import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
@@ -14,6 +19,7 @@ import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.module.enums.ErrorCodeConstants.MERCHANT_NOT_EXISTS;
+import static cn.newfeifan.mall.module.system.enums.ErrorCodeConstants.USER_MOBILE_EXISTS;
 
 /**
  * 商户 Service 实现类
@@ -27,11 +33,25 @@ public class MerchantServiceImpl implements MerchantService {
     @Resource
     private MerchantMapper merchantMapper;
 
+    @Resource
+    private AdminUserMapper userMapper;
+    @Resource
+    private AdminUserService adminUserService;
+
     @Override
     public Long createMerchant(MerchantSaveReqVO createReqVO) {
         // 插入
         MerchantDO merchant = BeanUtils.toBean(createReqVO, MerchantDO.class);
         merchantMapper.insert(merchant);
+
+        // 创建商户的时候, 根据手机号, 创建一个新的账号
+        // 如果这个手机号已经存在, 则提示该手机号已经存在
+        AdminUserDO adminUserDO = userMapper.selectByMobile(merchant.getContactNumber());
+        if (adminUserDO != null) {
+            throw exception(USER_MOBILE_EXISTS);
+        }
+        adminUserService.createUserByMobile(merchant.getContactNumber(), merchant.getContact());
+        // todo 设置直推人关联关系
         // 返回
         return merchant.getId();
     }

+ 9 - 0
feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/controller/admin/user/vo/user/UserSaveReqVO.java

@@ -4,7 +4,10 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.newfeifan.mall.framework.common.validation.Mobile;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 import org.hibernate.validator.constraints.Length;
 
 import javax.validation.constraints.*;
@@ -12,6 +15,9 @@ import java.util.Set;
 
 @Schema(description = "管理后台 - 用户创建/修改 Request VO")
 @Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
 public class UserSaveReqVO {
 
     @Schema(description = "用户编号", example = "1024")
@@ -36,6 +42,9 @@ public class UserSaveReqVO {
     @Schema(description = "岗位编号数组", example = "1")
     private Set<Long> postIds;
 
+    @Schema(description = "角色编号数组", example = "1")
+    private Set<Long> roleIds;
+
     @Schema(description = "用户邮箱", example = "feifan@iocoder.cn")
     @Email(message = "邮箱格式不正确")
     @Size(max = 50, message = "邮箱长度不能超过 50 个字符")

+ 14 - 5
feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/dal/dataobject/permission/RoleDO.java

@@ -36,7 +36,7 @@ public class RoleDO extends TenantBaseDO {
     private String name;
     /**
      * 角色标识
-     *
+     * <p>
      * 枚举
      */
     private String code;
@@ -46,13 +46,13 @@ public class RoleDO extends TenantBaseDO {
     private Integer sort;
     /**
      * 角色状态
-     *
+     * <p>
      * 枚举 {@link CommonStatusEnum}
      */
     private Integer status;
     /**
      * 角色类型
-     *
+     * <p>
      * 枚举 {@link RoleTypeEnum}
      */
     private Integer type;
@@ -63,16 +63,25 @@ public class RoleDO extends TenantBaseDO {
 
     /**
      * 数据范围
-     *
+     * <p>
      * 枚举 {@link DataScopeEnum}
      */
     private Integer dataScope;
     /**
      * 数据范围(指定部门数组)
-     *
+     * <p>
      * 适用于 {@link #dataScope} 的值为 {@link DataScopeEnum#DEPT_CUSTOM} 时
      */
     @TableField(typeHandler = JsonLongSetTypeHandler.class)
     private Set<Long> dataScopeDeptIds;
 
+
+    /**
+     * 用户类型
+     * <p>
+     * 枚举 {@link DataScopeEnum}
+     */
+    private Integer categoryId;
+
+
 }

+ 11 - 0
feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/user/AdminUserService.java

@@ -204,4 +204,15 @@ public interface AdminUserService {
     List<AdminUserDO> getUserByShopId(Long id);
 
     List<AdminUserDO> getUserByShopIds(List<Long> shopIds);
+
+
+    /**
+     * 根据手机号创建用户
+     *
+     * @param contactMobile
+     * @param contactName
+     */
+    void createUserByMobile(String contactMobile, String contactName);
+
+
 }

+ 40 - 0
feifan-module-system/feifan-module-system-biz/src/main/java/cn/newfeifan/mall/module/system/service/user/AdminUserServiceImpl.java

@@ -19,8 +19,12 @@ import cn.newfeifan.mall.module.system.controller.admin.user.vo.user.UserPageReq
 import cn.newfeifan.mall.module.system.controller.admin.user.vo.user.UserSaveReqVO;
 import cn.newfeifan.mall.module.system.dal.dataobject.dept.DeptDO;
 import cn.newfeifan.mall.module.system.dal.dataobject.dept.UserPostDO;
+import cn.newfeifan.mall.module.system.dal.dataobject.permission.RoleDO;
+import cn.newfeifan.mall.module.system.dal.dataobject.permission.UserRoleDO;
 import cn.newfeifan.mall.module.system.dal.dataobject.user.AdminUserDO;
 import cn.newfeifan.mall.module.system.dal.mysql.dept.UserPostMapper;
+import cn.newfeifan.mall.module.system.dal.mysql.permission.RoleMapper;
+import cn.newfeifan.mall.module.system.dal.mysql.permission.UserRoleMapper;
 import cn.newfeifan.mall.module.system.dal.mysql.user.AdminUserMapper;
 import cn.newfeifan.mall.module.system.service.dept.DeptService;
 import cn.newfeifan.mall.module.system.service.dept.PostService;
@@ -75,9 +79,15 @@ public class AdminUserServiceImpl implements AdminUserService {
     @Resource
     private UserPostMapper userPostMapper;
 
+    @Resource
+    private RoleMapper roleMapper;
     @Resource
     private FileApi fileApi;
 
+    @Resource
+    private UserRoleMapper userRoleMapper;
+
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createUser(UserSaveReqVO createReqVO) {
@@ -101,6 +111,12 @@ public class AdminUserServiceImpl implements AdminUserService {
             userPostMapper.insertBatch(convertList(user.getPostIds(),
                     postId -> new UserPostDO().setUserId(user.getId()).setPostId(postId)));
         }
+        // 插入关联角色
+        if (CollectionUtil.isNotEmpty(createReqVO.getRoleIds())) {
+            userRoleMapper.insertBatch(convertList(createReqVO.getRoleIds(),
+                    roleId -> new UserRoleDO().setUserId(user.getId()).setRoleId(roleId)));
+        }
+
         return user.getId();
     }
 
@@ -312,6 +328,7 @@ public class AdminUserServiceImpl implements AdminUserService {
             deptService.validateDeptList(CollectionUtils.singleton(deptId));
             // 校验岗位处于开启状态
             postService.validatePostList(postIds);
+
         });
     }
 
@@ -460,6 +477,29 @@ public class AdminUserServiceImpl implements AdminUserService {
         return userMapper.selectList(new LambdaQueryWrapper<AdminUserDO>().in(AdminUserDO::getShopId, shopIds));
     }
 
+    @Override
+    public void createUserByMobile(String contactMobile, String contactName) {
+        Set<Long> roleIds = new HashSet<>();
+
+        // 查询商户管理员的ID
+        RoleDO shanghuAdmin = roleMapper.selectOne(new LambdaQueryWrapper<RoleDO>().eq(RoleDO::getCode, "shanghu_admin")
+                .eq(RoleDO::getCategoryId, 3));
+
+        if (shanghuAdmin != null) {
+            roleIds.add(shanghuAdmin.getId());
+        }
+        UserSaveReqVO build = UserSaveReqVO
+                .builder()
+                .mobile(contactMobile)
+                .nickname(contactName)
+                .username(contactMobile)
+                .password("zxpt@" + contactMobile)
+                .categoryId(3L)
+                .roleIds(roleIds)
+                .build();
+        createUser(build);
+    }
+
     /**
      * 对密码进行加密
      *

+ 1 - 1
feifan-server/src/main/resources/application-local.yaml

@@ -47,7 +47,7 @@ spring:
       primary: master
       datasource:
         master:
-          name: mall-feifan-dev
+          name: mall-feifan
           url: jdbc:mysql://10.0.5.229:3306/${spring.datasource.dynamic.datasource.master.name}?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true # MySQL Connector/J 8.X 连接的示例
           username: wendao9t
           password: PA55W0RD