Browse Source

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into saas_zouxuan_04_24_course

zouxuan 3 years ago
parent
commit
8849e0c7cf
34 changed files with 1920 additions and 185 deletions
  1. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantProxyDividendDao.java
  2. 69 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantProxyInfoDao.java
  3. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantProxyUserRelationDao.java
  4. 11 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java
  5. 75 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantProxyDto.java
  6. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantInfo.java
  7. 96 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProxyDividend.java
  8. 94 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProxyInfo.java
  9. 84 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProxyRelation.java
  10. 94 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProxyUserRelation.java
  11. 89 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ProxyDividendInfoVo.java
  12. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ProxyDividendVo.java
  13. 98 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ProxyUserVo.java
  14. 2 7
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantContractTemplateService.java
  15. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java
  16. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantOrderRecordService.java
  17. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantProxyDividendService.java
  18. 80 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantProxyInfoService.java
  19. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TenantProxyUserRelationService.java
  20. 3 20
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  21. 108 127
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantContractTemplateServiceImpl.java
  22. 8 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  23. 60 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java
  24. 125 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantProxyDividendServiceImpl.java
  25. 221 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantProxyInfoServiceImpl.java
  26. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantProxyUserRelationServiceImpl.java
  27. 2 1
      mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml
  28. 63 0
      mec-biz/src/main/resources/config/mybatis/TenantProxyDividendMapper.xml
  29. 107 0
      mec-biz/src/main/resources/config/mybatis/TenantProxyInfoMapper.xml
  30. 27 0
      mec-biz/src/main/resources/config/mybatis/TenantProxyUserRelationMapper.xml
  31. 5 4
      mec-web/src/main/java/com/ym/mec/web/controller/TenantPreJoinController.java
  32. 59 0
      mec-web/src/main/java/com/ym/mec/web/controller/TenantProxyDividendController.java
  33. 106 0
      mec-web/src/main/java/com/ym/mec/web/controller/TenantProxyInfoController.java
  34. 29 0
      mec-web/src/main/java/com/ym/mec/web/controller/TenantProxyUserRelationController.java

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantProxyDividendDao.java

@@ -0,0 +1,36 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ym.mec.biz.dal.entity.TenantProxyDividend;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 代理商分润表(TenantProxyDividend)表数据库访问层
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:19
+ */
+public interface TenantProxyDividendDao extends BaseMapper<TenantProxyDividend> {
+
+    int insertBatch(@Param("entities") List<TenantProxyDividend> entities);
+
+    /**
+     * 代理商分润查询
+     *
+     * @param param 传入参数
+     *              <p> -  proxyId 代理商id
+     *              <p> -  recommenderId 推荐人id
+     *              <p> -  startData 开始日期 年月日
+     *              <p> -  endData 结束日期 年月日
+     */
+    <T> IPage<T> queryProxyDividendInfo(Page<T> page, @Param("param") Map<String, Object> param);
+
+   int queryProxyDividendCount();
+
+}
+

+ 69 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantProxyInfoDao.java

@@ -0,0 +1,69 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.TenantProxyInfo;
+import com.ym.mec.biz.dal.vo.ProxyUserVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 机构代理商信息表(TenantProxyInfo)表数据库访问层
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:20
+ */
+public interface TenantProxyInfoDao extends BaseMapper<TenantProxyInfo> {
+
+    int insertBatch(@Param("entities") List<TenantProxyInfo> entities);
+
+    /**
+     * 在sysuser表添加代理商人员信息
+     */
+    int insertProxySysUser(SysUser sysUser);
+
+    /**
+     * 冻结字段
+     * 修改sysuser表 lock字段
+     * 9 冻结 0解冻
+     */
+    int updateProxySysUserLock(@Param("id") Integer id, @Param("lock") Integer lock);
+
+    /**
+     * 修改sysUser表
+     *
+     * @param id    人员id
+     * @param phone 手机号
+     */
+    int updateSysUserPhone(@Param("id") Integer id, @Param("phone") String phone, @Param("name") String name);
+
+    /**
+     * 查询代理商下级人员数据
+     *
+     * @param id 代理商负责人id
+     */
+    List<ProxyUserVo> queryProxyUserStaff(@Param("id") Integer id);
+
+    /**
+     * 分页查询代理商负责人数据
+     *
+     * @param param 传入参数
+     *              <p> - state  状态 0正常 1冻结
+     *              <p> - search 模糊搜索关键字
+     */
+    <T> IPage<T> queryProxyUser(Page<T> page, @Param("param") Map<String, Object> param);
+
+    /**
+     * 根据手机号/姓名模糊查询所有平台账号信息
+     *
+     * @param param 传入参数
+     *              <p> - search 模糊搜索关键字
+     */
+    List<SysUser> queryUserList(@Param("param") Map<String, Object> param);
+
+}
+

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TenantProxyUserRelationDao.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.TenantProxyUserRelation;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 机构代理商人员关系表(TenantProxyUserRelation)表数据库访问层
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:21
+ */
+public interface TenantProxyUserRelationDao extends BaseMapper<TenantProxyUserRelation> {
+
+    int insertBatch(@Param("entities") List<TenantProxyUserRelation> entities);
+
+}
+

+ 11 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java

@@ -13,8 +13,6 @@ import java.io.Serializable;
 @ApiModel(value = "机构参数")
 public class TenantInfoDto implements Serializable {
 
-    private static final long serialVersionUID = 1L;
-
     /**
      * 机构id
      */
@@ -115,6 +113,9 @@ public class TenantInfoDto implements Serializable {
     @ApiModelProperty(value = "人数上线")
     private Integer studentUpLimit;
 
+    @ApiModelProperty(value = "推荐人")
+    private Integer recommender;
+
     public Integer getId() {
         return id;
     }
@@ -258,4 +259,12 @@ public class TenantInfoDto implements Serializable {
     public void setStudentUpLimit(Integer studentUpLimit) {
         this.studentUpLimit = studentUpLimit;
     }
+
+    public Integer getRecommender() {
+        return recommender;
+    }
+
+    public void setRecommender(Integer recommender) {
+        this.recommender = recommender;
+    }
 }

+ 75 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantProxyDto.java

@@ -0,0 +1,75 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * @author hgw
+ */
+@ApiModel(value = "代理商信息参数")
+public class TenantProxyDto implements Serializable {
+
+    @ApiModelProperty(value = "人员id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "父级人员id")
+    private Integer parentId;
+
+    @ApiModelProperty(value = "代理商名称")
+    private String proxyName;
+
+    @NotBlank(message = "人员名称不能为空")
+    @ApiModelProperty(value = "人员名称")
+    private String name;
+
+    @NotBlank(message = "手机号不能为空")
+    @Size(max = 11, message = "手机号最高11位,请核实后在填写!")
+    @Pattern(regexp = "^[0-9]*$", message = "手机只能填写数字,请核实后在填写!")
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getProxyName() {
+        return proxyName;
+    }
+
+    public void setProxyName(String proxyName) {
+        this.proxyName = proxyName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Integer getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantInfo.java

@@ -101,6 +101,10 @@ public class TenantInfo implements Serializable {
     @ApiModelProperty(value = "更新时间")
     private Date updatedTime;
 
+    @TableField("recommender_")
+    @ApiModelProperty(value = "推荐人")
+    private Integer recommender;
+
     private static final long serialVersionUID = 1L;
 
     public Integer getId() {
@@ -271,6 +275,14 @@ public class TenantInfo implements Serializable {
         this.updatedTime = updatedTime;
     }
 
+    public Integer getRecommender() {
+        return recommender;
+    }
+
+    public void setRecommender(Integer recommender) {
+        this.recommender = recommender;
+    }
+
     @Override
     public String toString() {
         return ToStringBuilder.reflectionToString(this);

+ 96 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProxyDividend.java

@@ -0,0 +1,96 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 代理商分润表(TenantProxyDividend)表实体类
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:19
+ */
+@ApiModel(value = "tenant_proxy_dividend-代理商分润表")
+public class TenantProxyDividend implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("proxy_id_")
+    @ApiModelProperty(value = "代理商id")
+    private Integer proxyId;
+
+    @TableField("tenant_id_")
+    @ApiModelProperty(value = "机构id")
+    private Integer tenantId;
+
+    @TableField("total_month_")
+    @ApiModelProperty(value = "本次激活总月份")
+    private Integer totalMonth;
+
+    @TableField("active_time_")
+    @ApiModelProperty(value = "激活时间")
+    private Date activeTime;
+
+    @TableField("order_id_")
+    @ApiModelProperty(value = "激活团练宝的订单id")
+    private Integer orderId;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getProxyId() {
+        return proxyId;
+    }
+
+    public void setProxyId(Integer proxyId) {
+        this.proxyId = proxyId;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public Integer getTotalMonth() {
+        return totalMonth;
+    }
+
+    public void setTotalMonth(Integer totalMonth) {
+        this.totalMonth = totalMonth;
+    }
+
+    public Date getActiveTime() {
+        return activeTime;
+    }
+
+    public void setActiveTime(Date activeTime) {
+        this.activeTime = activeTime;
+    }
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+}
+

+ 94 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProxyInfo.java

@@ -0,0 +1,94 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 机构代理商信息表(TenantProxyInfo)表实体类
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:20
+ */
+@ApiModel(value = "tenant_proxy_info-机构代理商信息表")
+public class TenantProxyInfo implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("proxy_name_")
+    @ApiModelProperty(value = "代理商名称")
+    private String proxyName;
+
+    @TableField("proxy_user_id_")
+    @ApiModelProperty(value = "代理商负责人id")
+    private Integer proxyUserId;
+
+    @TableField("state_")
+    @ApiModelProperty(value = "状态 0正常 1冻结 2删除")
+    private Integer state;
+
+    @TableField("create_by_")
+    @ApiModelProperty(value = "创建人")
+    private Integer createBy;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getProxyName() {
+        return proxyName;
+    }
+
+    public void setProxyName(String proxyName) {
+        this.proxyName = proxyName;
+    }
+
+    public Integer getProxyUserId() {
+        return proxyUserId;
+    }
+
+    public void setProxyUserId(Integer proxyUserId) {
+        this.proxyUserId = proxyUserId;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Integer getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(Integer createBy) {
+        this.createBy = createBy;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+}
+

+ 84 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProxyRelation.java

@@ -0,0 +1,84 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 机构与代理商人员关系表(TenantProxyRelation)表实体类
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:21
+ */
+@ApiModel(value = "tenant_proxy_relation-机构与代理商人员关系表")
+public class TenantProxyRelation implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("proxy_id_")
+    @ApiModelProperty(value = "代理商id")
+    private String proxyId;
+
+    @TableField("user_id_")
+    @ApiModelProperty(value = "人员id")
+    private Integer userId;
+
+    @TableField("tenant_id_")
+    @ApiModelProperty(value = "机构id")
+    private Integer tenantId;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getProxyId() {
+        return proxyId;
+    }
+
+    public void setProxyId(String proxyId) {
+        this.proxyId = proxyId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+}
+

+ 94 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TenantProxyUserRelation.java

@@ -0,0 +1,94 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 机构代理商人员关系表(TenantProxyUserRelation)表实体类
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:21
+ */
+@ApiModel(value = "tenant_proxy_user_relation-机构代理商人员关系表")
+public class TenantProxyUserRelation implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("proxy_id_")
+    @ApiModelProperty(value = "代理商id")
+    private Integer proxyId;
+
+    @TableField("user_id_")
+    @ApiModelProperty(value = "人员id")
+    private Integer userId;
+
+    @TableField("parent_id_")
+    @ApiModelProperty(value = "父级人员id")
+    private Integer parentId;
+
+    @TableField("rank_")
+    @ApiModelProperty(value = "等级,负责人是顶级默认0")
+    private Integer rank;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
+
+    public Integer getRank() {
+        return rank;
+    }
+
+    public void setRank(Integer rank) {
+        this.rank = rank;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getProxyId() {
+        return proxyId;
+    }
+
+    public void setProxyId(Integer proxyId) {
+        this.proxyId = proxyId;
+    }
+}
+

+ 89 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ProxyDividendInfoVo.java

@@ -0,0 +1,89 @@
+package com.ym.mec.biz.dal.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@ApiModel(value = "代理商人分润信息")
+public class ProxyDividendInfoVo implements Serializable {
+    @ApiModelProperty(value = "代理商id")
+    private Integer proxyId;
+
+    @ApiModelProperty(value = "代理商名称")
+    private String proxyName;
+
+    @ApiModelProperty(value = "机构id")
+    private Integer tenantId;
+
+    @ApiModelProperty(value = "机构名称")
+    private String tenantName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "激活时间")
+    private Date activeDate;
+
+    @ApiModelProperty(value = "激活数量")
+    private Integer activeCount;
+
+    @ApiModelProperty(value = "推荐人")
+    private String recommenderName;
+
+    public Integer getProxyId() {
+        return proxyId;
+    }
+
+    public void setProxyId(Integer proxyId) {
+        this.proxyId = proxyId;
+    }
+
+    public String getProxyName() {
+        return proxyName;
+    }
+
+    public void setProxyName(String proxyName) {
+        this.proxyName = proxyName;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getTenantName() {
+        return tenantName;
+    }
+
+    public void setTenantName(String tenantName) {
+        this.tenantName = tenantName;
+    }
+
+    public Date getActiveDate() {
+        return activeDate;
+    }
+
+    public void setActiveDate(Date activeDate) {
+        this.activeDate = activeDate;
+    }
+
+    public Integer getActiveCount() {
+        return activeCount;
+    }
+
+    public void setActiveCount(Integer activeCount) {
+        this.activeCount = activeCount;
+    }
+
+    public String getRecommenderName() {
+        return recommenderName;
+    }
+
+    public void setRecommenderName(String recommenderName) {
+        this.recommenderName = recommenderName;
+    }
+}

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ProxyDividendVo.java

@@ -0,0 +1,41 @@
+package com.ym.mec.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+@ApiModel(value = "代理商人分润")
+public class ProxyDividendVo implements Serializable {
+    @ApiModelProperty(value = "意向机构")
+    private Integer tenantAgency;
+    @ApiModelProperty(value = "入驻机构")
+    private Integer preTenant;
+    @ApiModelProperty(value = "团练宝销售数")
+    private Integer memberCount;
+
+    public Integer getTenantAgency() {
+        return tenantAgency;
+    }
+
+    public void setTenantAgency(Integer tenantAgency) {
+        this.tenantAgency = tenantAgency;
+    }
+
+    public Integer getPreTenant() {
+        return preTenant;
+    }
+
+    public void setPreTenant(Integer preTenant) {
+        this.preTenant = preTenant;
+    }
+
+    public Integer getMemberCount() {
+        return memberCount;
+    }
+
+    public void setMemberCount(Integer memberCount) {
+        this.memberCount = memberCount;
+    }
+
+}

+ 98 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ProxyUserVo.java

@@ -0,0 +1,98 @@
+package com.ym.mec.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+@ApiModel(value = "代理商人员信息")
+public class ProxyUserVo implements Serializable {
+
+    @ApiModelProperty(value = "当前人员id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "当前人员父级id")
+    private Integer parentId;
+
+    @ApiModelProperty(value = "代理商id")
+    private Integer proxyId;
+
+    @ApiModelProperty(value = "代理商名称")
+    private String proxyName;
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "职位")
+    private String role;
+
+    @ApiModelProperty(value = "状态 0正常 1冻结 ")
+    private Integer state;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Integer parentId) {
+        this.parentId = parentId;
+    }
+
+    public Integer getProxyId() {
+        return proxyId;
+    }
+
+    public void setProxyId(Integer proxyId) {
+        this.proxyId = proxyId;
+    }
+
+    public String getProxyName() {
+        return proxyName;
+    }
+
+    public void setProxyName(String proxyName) {
+        this.proxyName = proxyName;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getRole() {
+        return role;
+    }
+
+    public void setRole(String role) {
+        this.role = role;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+}

+ 2 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/TenantContractTemplateService.java

@@ -24,12 +24,6 @@ public interface TenantContractTemplateService extends BaseService<Integer, Tena
 	boolean enableContract(Integer id, Integer userId);
 
 	/**
-	 * 更新协议版本
-	 * @return
-	 */
-	boolean updateContractVersion();
-	
-	/**
 	 * 查询最新协议模板
 	 * @param tenantId
 	 * @param owner
@@ -41,5 +35,6 @@ public interface TenantContractTemplateService extends BaseService<Integer, Tena
 	boolean createContractTemplate(TenantContractTemplate tenantContractTemplate);
 	
 	boolean updateContractTempalte(TenantContractTemplate tenantContractTemplate);
-	
+
+    void upgradeContractVersion(Integer tenantId);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantInfoService.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.dto.TenantInfoDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
@@ -14,6 +15,8 @@ import java.util.Map;
 
 public interface TenantInfoService extends IService<TenantInfo> {
 
+    TenantInfoDao getDao();
+
     void addTenantInfo(TenantInfoDto dto);
 
     void updateTenantInfo(TenantInfoDto dto);

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantOrderRecordService.java

@@ -23,6 +23,11 @@ public interface TenantOrderRecordService extends IService<TenantOrderRecord> {
 
     void checkTenantOrder();
 
+    /**
+     * 激活团练宝成功
+     *
+     * @param record     机构订单记录
+     */
     void activeCloudTeacher(TenantOrderRecord record);
 
     void rechargeSuccess(TenantOrderRecord record);

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantProxyDividendService.java

@@ -0,0 +1,42 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.dao.TenantProxyDividendDao;
+import com.ym.mec.biz.dal.entity.TenantProxyDividend;
+import com.ym.mec.biz.dal.vo.ProxyDividendInfoVo;
+import com.ym.mec.biz.dal.vo.ProxyDividendVo;
+import com.ym.mec.common.page.PageInfo;
+
+import java.util.Map;
+
+/**
+ * 代理商分润表(TenantProxyDividend)表服务接口
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:19
+ */
+public interface TenantProxyDividendService extends IService<TenantProxyDividend> {
+
+    TenantProxyDividendDao getDao();
+
+    /**
+     * 代理商分润汇总查询
+     */
+    ProxyDividendVo queryProxyDividend();
+
+    /**
+     * 代理商分润查询
+     *
+     * @param param 传入参数
+     *
+     *              <p> -  proxyId 代理商id
+     *              <p> -  recommenderId 推荐人id
+     *              <p> -  startData 开始日期 年月日
+     *              <p> -  endData 结束日期 年月日
+     *              <p> - row 条数
+     *              <p> - page 页数
+     */
+    PageInfo<ProxyDividendInfoVo> queryProxyDividendInfo(Map<String, Object> param);
+
+}
+

+ 80 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantProxyInfoService.java

@@ -0,0 +1,80 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TenantProxyInfoDao;
+import com.ym.mec.biz.dal.dto.TenantProxyDto;
+import com.ym.mec.biz.dal.entity.TenantProxyInfo;
+import com.ym.mec.biz.dal.vo.ProxyUserVo;
+import com.ym.mec.common.page.PageInfo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 机构代理商信息表(TenantProxyInfo)表服务接口
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:20
+ */
+public interface TenantProxyInfoService extends IService<TenantProxyInfo> {
+
+    TenantProxyInfoDao getDao();
+
+    /**
+     * 后台-添加代理商信息
+     */
+    void addProxyInfo(TenantProxyDto dto);
+
+    /**
+     * 添加代理商下面的员工
+     */
+    void addProxyStaff(TenantProxyDto dto);
+
+    /**
+     * 查询代理商下级人员数据
+     *
+     * @param userId 代理人id
+     */
+    List<ProxyUserVo> queryProxyUserStaff(Integer userId);
+
+    /**
+     * 分页查询代理商负责人数据
+     *
+     * @param param 传入参数
+     *              <p> - state  状态 0正常 1冻结
+     *              <p> - row 条数
+     *              <p> - page 页数
+     *              <p> - search 模糊搜索关键字
+     */
+    PageInfo<ProxyUserVo> queryProxyUser(Map<String, Object> param);
+
+    /**
+     * 冻结/解冻代理商
+     *
+     * @param userId 代理负责人id
+     * @param state  状态 0正常 1冻结
+     */
+    void freezeProxy(Integer userId, Integer state);
+
+    /**
+     * 修改人员信息
+     */
+    void updateProxyUserInfo(TenantProxyDto dto);
+
+    /**
+     * 根据手机号/姓名模糊查询所有平台账号信息
+     *
+     * @param param 传入参数
+     *              <p> - search 模糊搜索关键字
+     */
+    List<SysUser> queryUserList(Map<String, Object> param);
+
+    /**
+     * 根据token查询用户信息-代理商专用
+     *
+     * @return
+     */
+    SysUser queryUserList();
+}
+

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TenantProxyUserRelationService.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.dao.TenantProxyUserRelationDao;
+import com.ym.mec.biz.dal.entity.TenantProxyUserRelation;
+
+/**
+ * 机构代理商人员关系表(TenantProxyUserRelation)表服务接口
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:21
+ */
+public interface TenantProxyUserRelationService extends IService<TenantProxyUserRelation> {
+
+    TenantProxyUserRelationDao getDao();
+}
+

+ 3 - 20
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java

@@ -2,13 +2,13 @@ package com.ym.mec.biz.service.impl;
 
 import static com.ym.mec.biz.dal.enums.SysUserRoleEnum.EDUCATION;
 
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -25,16 +25,11 @@ import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.entity.Teacher;
-import com.ym.mec.biz.dal.entity.TenantContractTemplate;
 import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.dal.enums.FivePlusGradeEnum;
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.SixPlusGradeEnum;
 import com.ym.mec.biz.dal.page.EducationBaseQueryInfo;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.OrganizationService;
-import com.ym.mec.biz.service.SysEmployeePositionService;
-import com.ym.mec.biz.service.TenantInfoService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -62,7 +57,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 	private TenantInfoDao tenantInfoDao;
 	
 	@Autowired
-	private TenantContractTemplateDao tenantContractTemplateDao;
+	private TenantContractTemplateService tenantContractTemplateService;
 
 	@Override
 	public BaseDAO<Integer, Organization> getDAO() {
@@ -212,19 +207,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
         	
         	Integer tenantId = organization.getTenantId();
             //升级机构协议版本号
-            TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(null, null, tenantId);
-            if (tenantContractTemplate != null) {
-            	tenantInfoDao.getLocked(tenantId);
-
-                Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
-                int version = maxVersion == null ? 1 : maxVersion + 1;
-
-                tenantContractTemplate.setVersion(version);
-                Date date = new Date();
-                tenantContractTemplate.setUpdateTime(date);
-
-                tenantContractTemplateDao.update(tenantContractTemplate);
-            }
+            tenantContractTemplateService.upgradeContractVersion(tenantId);
             
 			if (StringUtils.isNotBlank(organization.getCorporateName()) && StringUtils.isNotBlank(organization.getCorporateCode())) {
 				// 添加签章信息

+ 108 - 127
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantContractTemplateServiceImpl.java

@@ -1,142 +1,123 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.ym.mec.biz.dal.dao.TenantContractTemplateDao;
-import com.ym.mec.biz.dal.dao.TenantInfoDao;
 import com.ym.mec.biz.dal.dto.TenantContractTemplateDto;
 import com.ym.mec.biz.dal.entity.TenantContractTemplate;
 import com.ym.mec.biz.service.TenantContractTemplateService;
+import com.ym.mec.biz.service.TenantInfoService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
 
 @Service
-public class TenantContractTemplateServiceImpl extends BaseServiceImpl<Integer, TenantContractTemplate>  implements TenantContractTemplateService {
-	
-	@Autowired
-	private TenantContractTemplateDao tenantContractTemplateDao;
-	
-	@Autowired
-	private TenantInfoDao tenantInfoDao;
-
-	@Override
-	public BaseDAO<Integer, TenantContractTemplate> getDAO() {
-		return tenantContractTemplateDao;
-	}
-
-	@Override
-	public PageInfo<TenantContractTemplateDto> queryPageList(QueryInfo queryInfo) {
-		PageInfo<TenantContractTemplateDto> pageInfo = new PageInfo<TenantContractTemplateDto>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-		
-		List<TenantContractTemplateDto> dataList = null;
-		int count = this.findCount(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = tenantContractTemplateDao.queryPageList(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<TenantContractTemplateDto>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
-	}
-
-	@Override
-	@Transactional
-	public boolean enableContract(Integer id, Integer userId) {
-		TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.get(id);
-		
-		if(tenantContractTemplate == null){
-			throw new BizException("未查询到协议模板");
-		}
-		
-		if(tenantContractTemplate.getStatus()){
-			return true;
-		}
-		
-		tenantInfoDao.getLocked(tenantContractTemplate.getTenantId());
-		
-		Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
-		int version = maxVersion == null ? 1 : maxVersion + 1;
-		
-		tenantContractTemplate.setVersion(version);
-		
-		tenantContractTemplateDao.disableContract(tenantContractTemplate.getOwner(), tenantContractTemplate.getType(), tenantContractTemplate.getTenantId());
-		
-		Date date = new Date();
-		
-		tenantContractTemplate.setStatus(true);
-		tenantContractTemplate.setUpdateTime(date);
-		tenantContractTemplate.setModifyBy(userId);
-		
-		tenantContractTemplateDao.update(tenantContractTemplate);
-		
-		return true;
-	}
-
-	@Override
-	public boolean updateContractVersion() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public TenantContractTemplate queryLatestContractTemplate(Integer tenantId, String owner, String type) {
-		TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(owner, type, tenantId);
-		
-		return tenantContractTemplate;
-	}
-
-	@Override
-	@Transactional
-	public boolean createContractTemplate(TenantContractTemplate tenantContractTemplate) {
-		
-		Integer tenantId = tenantContractTemplate.getTenantId();
-		tenantInfoDao.getLocked(tenantId);
-		
-		Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
-		int version = maxVersion == null ? 1 : maxVersion + 1;
-		
-		tenantContractTemplate.setVersion(version);
-		Date date = new Date();
-		tenantContractTemplate.setCreateTime(date);
-		tenantContractTemplate.setUpdateTime(date);
-		insert(tenantContractTemplate);
-		
-		return true;
-	}
-
-	@Override
-	@Transactional
-	public boolean updateContractTempalte(TenantContractTemplate tenantContractTemplate) {
-		
-		Integer tenantId = tenantContractTemplate.getTenantId();
-		tenantInfoDao.getLocked(tenantId);
-		
-		Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
-		int version = maxVersion == null ? 1 : maxVersion + 1;
-		
-		tenantContractTemplate.setVersion(version);
-		Date date = new Date();
-		tenantContractTemplate.setUpdateTime(date);
-		
-		update(tenantContractTemplate);
-		return true;
-	}
-	
+public class TenantContractTemplateServiceImpl extends BaseServiceImpl<Integer, TenantContractTemplate> implements TenantContractTemplateService {
+
+    @Autowired
+    private TenantContractTemplateDao tenantContractTemplateDao;
+
+    @Autowired
+    private TenantInfoService tenantInfoService;
+
+    @Override
+    public BaseDAO<Integer, TenantContractTemplate> getDAO() {
+        return tenantContractTemplateDao;
+    }
+
+    @Override
+    public PageInfo<TenantContractTemplateDto> queryPageList(QueryInfo queryInfo) {
+        PageInfo<TenantContractTemplateDto> pageInfo = new PageInfo<TenantContractTemplateDto>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<TenantContractTemplateDto> dataList = null;
+        int count = this.findCount(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = tenantContractTemplateDao.queryPageList(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<TenantContractTemplateDto>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    @Transactional
+    public boolean enableContract(Integer id, Integer userId) {
+        TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.get(id);
+
+        if (tenantContractTemplate == null) {
+            throw new BizException("未查询到协议模板");
+        }
+
+        if (tenantContractTemplate.getStatus()) {
+            return true;
+        }
+
+        updateVersion(tenantContractTemplate);
+
+        tenantContractTemplateDao.disableContract(tenantContractTemplate.getOwner(), tenantContractTemplate.getType(), tenantContractTemplate.getTenantId());
+
+        tenantContractTemplate.setStatus(true);
+        tenantContractTemplate.setUpdateTime(new Date());
+        tenantContractTemplate.setModifyBy(userId);
+
+        tenantContractTemplateDao.update(tenantContractTemplate);
+
+        return true;
+    }
+
+    @Override
+    public TenantContractTemplate queryLatestContractTemplate(Integer tenantId, String owner, String type) {
+        return tenantContractTemplateDao.queryLatestContractTemplate(owner, type, tenantId);
+    }
+
+    @Override
+    @Transactional
+    public boolean createContractTemplate(TenantContractTemplate tenantContractTemplate) {
+        updateVersion(tenantContractTemplate);
+        Date date = new Date();
+        tenantContractTemplate.setCreateTime(date);
+        tenantContractTemplate.setUpdateTime(date);
+        insert(tenantContractTemplate);
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public boolean updateContractTempalte(TenantContractTemplate tenantContractTemplate) {
+        updateVersion(tenantContractTemplate);
+        tenantContractTemplate.setUpdateTime(new Date());
+        this.update(tenantContractTemplate);
+        return true;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void upgradeContractVersion(Integer tenantId) {
+        TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(null, null, tenantId);
+        if (Objects.nonNull(tenantContractTemplate)) {
+            updateVersion(tenantContractTemplate);
+            tenantContractTemplate.setUpdateTime(new Date());
+            this.update(tenantContractTemplate);
+        }
+    }
+
+    private void updateVersion(TenantContractTemplate tenantContractTemplate) {
+        Integer tenantId = tenantContractTemplate.getTenantId();
+        tenantInfoService.getDao().getLocked(tenantId);
+        Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
+        int version = maxVersion == null ? 1 : maxVersion + 1;
+        tenantContractTemplate.setVersion(version);
+    }
 }

+ 8 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -119,9 +119,9 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     @Autowired
     private TenantContractRecordService tenantContractRecordService;
     @Autowired
-    private TenantContractTemplateDao tenantContractTemplateDao;
-    @Autowired
     private SysUserTenantService sysUserTenantService;
+    @Autowired
+    private TenantContractTemplateService tenantContractTemplateService;
 
     @Value("${contract.baseDir:/var/pdf}")
     private String contractBaseDir;
@@ -136,6 +136,11 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     //超过1人的则需要这样的样式
     public static final String rowspan = "<tr>" + defSpan + "</tr>";
 
+    @Override
+    public TenantInfoDao getDao() {
+        return this.baseMapper;
+    }
+
     /**
      * 新增机构
      */
@@ -212,19 +217,7 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
         //是否修改了机构名称或机构编码
         if (!StringUtils.equals(dto.getTsignName(), tenantInfo.getTsignName()) || !StringUtils.equals(dto.getTsignCode(), tenantInfo.getTsignCode())) {
             //升级机构协议版本号
-            TenantContractTemplate tenantContractTemplate = tenantContractTemplateDao.queryLatestContractTemplate(null, null, tenantId);
-            if (tenantContractTemplate != null) {
-                baseMapper.getLocked(tenantId);
-
-                Integer maxVersion = tenantContractTemplateDao.queryMaxVersion();
-                int version = maxVersion == null ? 1 : maxVersion + 1;
-
-                tenantContractTemplate.setVersion(version);
-                Date date = new Date();
-                tenantContractTemplate.setUpdateTime(date);
-
-                tenantContractTemplateDao.update(tenantContractTemplate);
-            }
+            tenantContractTemplateService.upgradeContractVersion(tenantId);
             //添加签章信息
             contractService.addTsign(tenantInfo.getUserId(), dto.getTsignCode(), dto.getTsignName(), tenantId);
         }
@@ -626,7 +619,6 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      * 获取协议变量参数
      */
     private Map<String, Object> getContractParam(TenantInfoPageVo tenantInfo) {
-        Date now = new Date();
         //将数据转换为Map
         Map<String, Object> param = WrapperUtil.toMap(tenantInfo);
         //购买服务的时长单位

+ 60 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantOrderRecordServiceImpl.java

@@ -2,16 +2,14 @@ package com.ym.mec.biz.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dao.TenantOrderRecordDao;
 import com.ym.mec.biz.dal.dto.TenantOrderRecordDto;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
-import com.ym.mec.biz.dal.enums.TenantOrderRecordEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -20,7 +18,6 @@ import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.thirdparty.adapay.Payment;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
-import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.joda.time.LocalDateTime;
@@ -32,6 +29,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
@@ -67,7 +65,10 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
     @Autowired
     private CloudTeacherOrderService cloudTeacherOrderService;
     @Autowired
-    private StudentService studentService;
+    private TenantProxyDividendService tenantProxyDividendService;
+    @Autowired
+    private TenantProxyUserRelationService tenantProxyUserRelationService;
+
     //订单不存在
     private static final String PAYMENT_ID_NOT_EXISTS = "payment_id_not_exists";
 
@@ -197,10 +198,15 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         tenantInfoService.renewSuccess(val, productInfo, record.getActualAmount());
     }
 
-    //激活团练宝成功
+    /**
+     * 激活团练宝成功
+     *
+     * @param record 机构订单记录
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void activeCloudTeacher(TenantOrderRecord record) {
+        log.info("activeCloudTeacher>>> record : {}", JSON.toJSONString(record));
         if (record.getId() == null) {
             throw new BizException("订单未找到");
         }
@@ -211,10 +217,56 @@ public class TenantOrderRecordServiceImpl extends ServiceImpl<TenantOrderRecordD
         List<CloudTeacherOrder> cloudTeacherOrders = cloudTeacherOrderDao.findByPlatformOrderId(record.getId());
         for (CloudTeacherOrder cto : cloudTeacherOrders) {
             //激活团练宝
-            cloudTeacherOrderService.activationMember(now,cto);
+            cloudTeacherOrderService.activationMember(now, cto);
         }
         //发信息
         cloudTeacherOrderService.sendSms(record);
+        log.info("activeCloudTeacher>>> cloudTeacherOrders : {}", JSON.toJSONString(cloudTeacherOrders));
+        //消费大于0元则且有代理商的机构则写入分润表
+        if (record.getActualAmount().compareTo(BigDecimal.ZERO) > 0) {
+            log.info("activeCloudTeacher>>> proxy {}", record.getActualAmount());
+            //根据机构id查询对应的推荐人
+            TenantInfo tenantInfo = tenantInfoService.getById(record.getTenantId());
+            log.info("activeCloudTeacher>>> proxy tenantInfo {}", JSON.toJSONString(tenantInfo));
+            if (Objects.isNull(tenantInfo) || Objects.isNull(tenantInfo.getRecommender())) {
+                return;
+            }
+            //根据推荐人查询代理商
+            TenantProxyUserRelation proxyUserRelation = tenantProxyUserRelationService.getOne(Wrappers.<TenantProxyUserRelation>lambdaQuery()
+                    .eq(TenantProxyUserRelation::getUserId, tenantInfo.getRecommender()));
+            log.info("activeCloudTeacher>>> proxy proxyUserRelation {}", JSON.toJSONString(proxyUserRelation));
+            if (Objects.isNull(proxyUserRelation)) {
+                return;
+            }
+            //获取总激活月份
+            Integer totalMonth = cloudTeacherOrders.stream()
+                    .map(this::getTotalMonth)
+                    .reduce(0, Integer::sum);
+            //写入分润表
+            TenantProxyDividend dividend = new TenantProxyDividend();
+            dividend.setProxyId(proxyUserRelation.getProxyId());
+            dividend.setTenantId(record.getTenantId());
+            dividend.setTotalMonth(totalMonth);
+            dividend.setActiveTime(now);
+            dividend.setOrderId(record.getId());
+            tenantProxyDividendService.save(dividend);
+            log.info("activeCloudTeacher>>> proxy proxyUserRelation {}", JSON.toJSONString(dividend));
+        }
+    }
+
+    private Integer getTotalMonth(CloudTeacherOrder order) {
+        PeriodEnum type = order.getType();
+        if (type.equals(PeriodEnum.MONTH)) {
+            return order.getTime();
+        } else if (type.equals(PeriodEnum.QUARTERLY)) {
+            return order.getTime() * 3;
+        } else if (type.equals(PeriodEnum.YEAR_HALF)) {
+            return order.getTime() * 6;
+        } else if (type.equals(PeriodEnum.YEAR)) {
+            return order.getTime() * 12;
+        } else {
+            return 1;
+        }
     }
 
     //充值成功

+ 125 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantProxyDividendServiceImpl.java

@@ -0,0 +1,125 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TenantProxyDividendDao;
+import com.ym.mec.biz.dal.entity.TenantPreJoin;
+import com.ym.mec.biz.dal.entity.TenantProxyDividend;
+import com.ym.mec.biz.dal.entity.TenantProxyUserRelation;
+import com.ym.mec.biz.dal.vo.ProxyDividendInfoVo;
+import com.ym.mec.biz.dal.vo.ProxyDividendVo;
+import com.ym.mec.biz.service.TenantPreJoinService;
+import com.ym.mec.biz.service.TenantProxyDividendService;
+import com.ym.mec.biz.service.TenantProxyUserRelationService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.BiConsumer;
+
+/**
+ * 代理商分润表(TenantProxyDividend)表服务实现类
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:19
+ */
+@Service("tenantProxyDividendService")
+public class TenantProxyDividendServiceImpl extends ServiceImpl<TenantProxyDividendDao, TenantProxyDividend> implements TenantProxyDividendService {
+
+    private final static Logger log = LoggerFactory.getLogger(TenantProxyDividendServiceImpl.class);
+
+    @Autowired
+    private TenantPreJoinService tenantPreJoinService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private TenantProxyUserRelationService tenantProxyUserRelationService;
+
+    @Override
+    public TenantProxyDividendDao getDao() {
+        return this.baseMapper;
+    }
+
+    /**
+     * 代理商分润汇总查询
+     */
+    @Override
+    public ProxyDividendVo queryProxyDividend() {
+        ProxyDividendVo result = new ProxyDividendVo();
+        result.setPreTenant(0);
+        result.setTenantAgency(0);
+        //查询入驻信息
+        List<TenantPreJoin> preJoinsList = tenantPreJoinService.list();
+        if (CollectionUtils.isNotEmpty(preJoinsList)) {
+            result.setTenantAgency(preJoinsList.size());
+            long count = preJoinsList.stream()
+                    .filter(a -> Objects.nonNull(a.getState()) && a.getState() == 1)
+                    .count();
+            result.setPreTenant((int) count);
+        }
+
+        //团练宝销售数
+        int count = baseMapper.queryProxyDividendCount();
+        result.setMemberCount(count);
+        return result;
+    }
+
+    /**
+     * 代理商分润查询
+     *
+     * @param param 传入参数
+     *              <p> -  proxyId 代理商id
+     *              <p> -  recommenderId 推荐人id
+     *              <p> -  startData 开始日期 年月日
+     *              <p> -  endData 结束日期 年月日
+     *              <p> - row 条数
+     *              <p> - page 页数
+     * @return
+     */
+    @Override
+    public PageInfo<ProxyDividendInfoVo> queryProxyDividendInfo(Map<String, Object> param) {
+        Optional.ofNullable(param.get("startData")).orElseThrow(() -> new BizException("查询的开始日期不能为空!"));
+        Optional.ofNullable(param.get("endData")).orElseThrow(() -> new BizException("查询的结束日期不能为空!"));
+        //拼接时分秒
+        BiConsumer<String, String> addTimeCons = (key, time) -> Optional.ofNullable(param.get(key)).map(String::valueOf)
+                .ifPresent(date -> param.put(key, date + " " + time));
+        addTimeCons.accept("startData", "00:00:00");
+        addTimeCons.accept("endData", "23:59:59");
+
+        SysUser user = getUser();
+        //当前登录人是代理商账号类型,需要做数据隔离
+        if (user.getUserType().equalsIgnoreCase("PROXY")) {
+            //查询代理商
+            TenantProxyUserRelation proxyUserRelation = tenantProxyUserRelationService.getOne(Wrappers.<TenantProxyUserRelation>lambdaQuery()
+                    .eq(TenantProxyUserRelation::getUserId, user.getId()));
+            if (Objects.nonNull(proxyUserRelation)) {
+                param.put("proxyId", proxyUserRelation.getProxyId());
+            }
+        }
+        //分页查询分润记录
+        Page<ProxyDividendInfoVo> pageInfo = PageUtil.getPageInfo(param);
+        pageInfo.setAsc("a.active_time_");
+        IPage<ProxyDividendInfoVo> tiPage = baseMapper.queryProxyDividendInfo(pageInfo, param);
+        return PageUtil.pageInfo(tiPage);
+    }
+
+    private SysUser getUser() {
+        //修改机构基础信息
+        return Optional.ofNullable(sysUserFeignService.queryUserInfo())
+                .orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
+    }
+}
+

+ 221 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantProxyInfoServiceImpl.java

@@ -0,0 +1,221 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TenantProxyInfoDao;
+import com.ym.mec.biz.dal.dto.TenantProxyDto;
+import com.ym.mec.biz.dal.entity.TenantProxyInfo;
+import com.ym.mec.biz.dal.entity.TenantProxyUserRelation;
+import com.ym.mec.biz.dal.vo.ProxyUserVo;
+import com.ym.mec.biz.service.TenantProxyInfoService;
+import com.ym.mec.biz.service.TenantProxyUserRelationService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * 机构代理商信息表(TenantProxyInfo)表服务实现类
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:20
+ */
+@Service("tenantProxyInfoService")
+public class TenantProxyInfoServiceImpl extends ServiceImpl<TenantProxyInfoDao, TenantProxyInfo> implements TenantProxyInfoService {
+
+    private final static Logger log = LoggerFactory.getLogger(TenantProxyInfoServiceImpl.class);
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private TenantProxyUserRelationService proxyUserRelationService;
+
+    @Override
+    public TenantProxyInfoDao getDao() {
+        return this.baseMapper;
+    }
+
+    /**
+     * 后台-添加代理商信息
+     *
+     * @param dto
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addProxyInfo(TenantProxyDto dto) {
+        Optional.ofNullable(dto.getProxyName())
+                .orElseThrow(() -> new RuntimeException("代理商名称不能为空"));
+        //当前操作人id
+        Integer opsUserId = getUser().getId();
+        Date now = new Date();
+        //添加sysUser人员信息
+        Integer userId = addSysUser(dto, "PROXY");
+        //添加代理商信息表
+        TenantProxyInfo proxyInfo = new TenantProxyInfo();
+        proxyInfo.setProxyName(dto.getProxyName());
+        proxyInfo.setProxyUserId(userId);
+        proxyInfo.setState(0);
+        proxyInfo.setCreateBy(opsUserId);
+        proxyInfo.setCreateTime(now);
+        this.save(proxyInfo);
+        //添加代理商人员关系表
+        TenantProxyUserRelation userRelation = new TenantProxyUserRelation();
+        userRelation.setProxyId(proxyInfo.getId());
+        userRelation.setUserId(userId);
+        userRelation.setRank(0);
+        userRelation.setCreateTime(now);
+        proxyUserRelationService.save(userRelation);
+    }
+
+    /**
+     * 添加代理商下面的员工
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void addProxyStaff(TenantProxyDto dto) {
+        //获取父级Id
+        Integer parentId = Optional.ofNullable(dto.getParentId()).orElseGet(() -> getUser().getId());
+        //员工id
+        Integer userId = addSysUser(dto, null);
+        //查询父级信息
+        TenantProxyUserRelation parentProxyUser = proxyUserRelationService.getOne(Wrappers.<TenantProxyUserRelation>lambdaQuery()
+                .eq(TenantProxyUserRelation::getUserId, parentId)
+                .isNull(TenantProxyUserRelation::getParentId)
+        );
+        //添加代理商人员关系表
+        TenantProxyUserRelation userRelation = new TenantProxyUserRelation();
+        userRelation.setProxyId(parentProxyUser.getProxyId());
+        userRelation.setParentId(parentId);
+        userRelation.setUserId(userId);
+        userRelation.setRank(parentProxyUser.getRank() + 1);
+        userRelation.setCreateTime(new Date());
+        proxyUserRelationService.save(userRelation);
+    }
+
+    /**
+     * 添加sysUser人员信息
+     *
+     * @return id
+     */
+    private Integer addSysUser(TenantProxyDto dto, String userType) {
+        SysUser sysUser = sysUserFeignService.queryUserByMobile(dto.getPhone());
+        if (Objects.nonNull(sysUser)) {
+            throw new BizException("该手机号在系统已存在!");
+        }
+        sysUser = new SysUser();
+        sysUser.setTenantId(-1);
+        sysUser.setUsername(dto.getName());
+        sysUser.setPhone(dto.getPhone());
+        sysUser.setUserType(userType);
+        sysUser.setRealName(dto.getName());
+        baseMapper.insertProxySysUser(sysUser);
+        return sysUser.getId();
+    }
+
+    /**
+     * 查询代理商下级人员数据
+     *
+     * @param userId 代理人id
+     */
+    public List<ProxyUserVo> queryProxyUserStaff(Integer userId) {
+        return baseMapper.queryProxyUserStaff(userId);
+    }
+
+    /**
+     * 分页查询代理商负责人数据
+     *
+     * @param param 传入参数
+     *              <p> - state  状态 0正常 1冻结
+     *              <p> - row 条数
+     *              <p> - page 页数
+     *              <p> - search 模糊搜索关键字
+     */
+    public PageInfo<ProxyUserVo> queryProxyUser(Map<String, Object> param) {
+        Page<ProxyUserVo> pageInfo = PageUtil.getPageInfo(param);
+        pageInfo.setAsc("c.create_time_");
+        return PageUtil.pageInfo(baseMapper.queryProxyUser(pageInfo, param));
+    }
+
+    /**
+     * 冻结/解冻代理商
+     *
+     * @param userId 代理负责人id
+     * @param state  状态 0正常 1冻结
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void freezeProxy(Integer userId, Integer state) {
+        //sysUser表 lock字段 9冻结 0解冻
+        Integer lockFlag = state == 0 ? state : 9;
+        //先冻结sysUser表
+        baseMapper.updateProxySysUserLock(userId, lockFlag);
+        //在修改代理商表
+        TenantProxyInfo tenantProxyInfo = this.getOne(Wrappers.<TenantProxyInfo>lambdaUpdate()
+                .eq(TenantProxyInfo::getProxyUserId, userId));
+        tenantProxyInfo.setState(state);
+        this.updateById(tenantProxyInfo);
+    }
+
+    /**
+     * 修改人员信息
+     */
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void updateProxyUserInfo(TenantProxyDto dto) {
+        Optional.ofNullable(dto.getUserId()).orElseThrow(() -> new BizException("人员id不能为空"));
+        //查询父级信息
+        TenantProxyUserRelation parentProxyUser = proxyUserRelationService.getOne(Wrappers.<TenantProxyUserRelation>lambdaQuery()
+                .eq(TenantProxyUserRelation::getUserId, dto.getUserId()));
+        //判断本次修改的是不是代理商负责人,如果是负责人可能要修改代理商名称
+        if (Objects.isNull(parentProxyUser.getParentId())) {
+            TenantProxyInfo tenantProxyInfo = this.getOne(Wrappers.<TenantProxyInfo>lambdaUpdate()
+                    .eq(TenantProxyInfo::getProxyUserId, dto.getUserId()));
+            tenantProxyInfo.setProxyName(dto.getProxyName());
+            this.updateById(tenantProxyInfo);
+        }
+        baseMapper.updateSysUserPhone(dto.getUserId(), dto.getPhone(), dto.getName());
+    }
+
+    /**
+     * 根据手机号/姓名模糊查询所有平台账号信息
+     *
+     * @param param 传入参数
+     *              <p> - search 模糊搜索关键字
+     */
+    public List<SysUser> queryUserList(Map<String, Object> param) {
+        log.info("queryUserList>>>>>> {}", JSON.toJSONString(param));
+        return baseMapper.queryUserList(param);
+    }
+
+    /**
+     * 根据token查询用户信息-代理商专用
+     *
+     * @return
+     */
+    public SysUser queryUserList() {
+        SysUser user = getUser();
+        SysUser result = new SysUser();
+        result.setRealName(user.getRealName());
+        result.setId(user.getId());
+        result.setPhone(user.getPhone());
+        return result;
+    }
+
+    private SysUser getUser() {
+        //修改机构基础信息
+        return Optional.ofNullable(sysUserFeignService.queryUserInfo())
+                .orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
+    }
+
+}
+

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantProxyUserRelationServiceImpl.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.TenantProxyUserRelationDao;
+import com.ym.mec.biz.dal.entity.TenantProxyUserRelation;
+import com.ym.mec.biz.service.TenantProxyUserRelationService;
+import org.springframework.stereotype.Service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 机构代理商人员关系表(TenantProxyUserRelation)表服务实现类
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:22
+ */
+@Service("tenantProxyUserRelationService")
+public class TenantProxyUserRelationServiceImpl extends ServiceImpl<TenantProxyUserRelationDao, TenantProxyUserRelation> implements TenantProxyUserRelationService {
+
+    private final static Logger log = LoggerFactory.getLogger(TenantProxyUserRelationServiceImpl.class);
+
+    @Override
+    public TenantProxyUserRelationDao getDao() {
+        return this.baseMapper;
+    }
+
+}
+

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -20,6 +20,7 @@
         <result column="pay_state_" jdbcType="INTEGER" property="payState"/>
         <result column="state_" jdbcType="INTEGER" property="state"/>
         <result column="user_id_" jdbcType="INTEGER" property="userId"/>
+        <result column="recommender_" jdbcType="INTEGER" property="recommender"/>
         <result column="created_by_" jdbcType="INTEGER" property="createdBy"/>
         <result column="created_time_" jdbcType="TIMESTAMP" property="createdTime"/>
         <result column="updated_by_" jdbcType="INTEGER" property="updatedBy"/>
@@ -30,7 +31,7 @@
         id_
         , name_, contacts_, phone_, address_, email_, logo_, customer_service_phone_, remark_, domain_name_,
         data_source_, pay_state_, state_, created_by_, created_time_, updated_by_, updated_time_, tsign_code_, tsign_name_,
-        area_id_,user_id_
+        area_id_,user_id_,recommender_
     </sql>
     <update id="updatePhone">
         update tenant_info set phone_ = #{newPhone} where phone_ = #{oldPhone}

+ 63 - 0
mec-biz/src/main/resources/config/mybatis/TenantProxyDividendMapper.xml

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.TenantProxyDividendDao">
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.TenantProxyDividend">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="proxy_id_" jdbcType="INTEGER" property="proxyId"/>
+        <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
+        <result column="total_month_" jdbcType="INTEGER" property="totalMonth"/>
+        <result column="active_time_" jdbcType="TIMESTAMP" property="activeTime"/>
+        <result column="order_id_" jdbcType="INTEGER" property="orderId"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_
+        , proxy_id_, tenant_id_, total_month_, active_time_, order_id_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.ym.mec.biz.dal.entity.TenantProxyDividend">
+        insert into tenant_proxy_dividend(proxy_id_, tenant_id_, total_month_, active_time_, order_id_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.proxyId}, #{entity.tenantId}, #{entity.totalMonth}, #{entity.activeTime}, #{entity.orderId})
+        </foreach>
+    </insert>
+
+    <select id="queryProxyDividendInfo"  parameterType="map" resultType="com.ym.mec.biz.dal.vo.ProxyDividendInfoVo">
+        select a.proxy_id_ as proxyId,
+        b.proxy_name_ as proxyName,
+        c.id_ as tenantId,
+        c.name_ as tenantName,
+        a.active_time_ as activeDate,
+        a.total_month_ as activeCount,
+        d.real_name_ as recommenderName
+        from tenant_proxy_dividend as a
+        left join tenant_proxy_info as b on a.proxy_id_ = b.id_
+        left join tenant_info as c on a.tenant_id_ = c.id_
+        left join sys_user as d on c.recommender_ = d.id_
+        <where>
+            <if test="param.proxyId != null">
+               AND a.proxy_id_ = #{param.proxyId}
+            </if>
+            <if test="param.recommenderId != null">
+                AND c.recommender_ = #{param.recommenderId}
+            </if>
+            <if test="param.startData != null and param.startData != ''">
+                AND a.active_time_ <![CDATA[ >= ]]> #{param.startData}
+            </if>
+            <if test="param.endData != null and param.endData != ''">
+                AND a.active_time_ <![CDATA[ <= ]]> #{param.endData}
+            </if>
+        </where>
+    </select>
+
+    <select id="queryProxyDividendCount" resultType="int">
+        select IFNULL(SUM(a.total_month_), 0)  as activeCount
+        from tenant_proxy_dividend as a
+        left join tenant_proxy_info as b on a.proxy_id_ = b.id_
+        left join tenant_info as c on a.tenant_id_ = c.id_
+        left join sys_user as d on c.recommender_ = d.id_
+    </select>
+
+</mapper>

+ 107 - 0
mec-biz/src/main/resources/config/mybatis/TenantProxyInfoMapper.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.TenantProxyInfoDao">
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.TenantProxyInfo">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="proxy_name_" jdbcType="VARCHAR" property="proxyName"/>
+        <result column="proxy_user_id_" jdbcType="INTEGER" property="proxyUserId"/>
+        <result column="state_" jdbcType="INTEGER" property="state"/>
+        <result column="create_by_" jdbcType="INTEGER" property="createBy"/>
+        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_
+        , proxy_name_, proxy_user_id_, state_, create_by_, create_time_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.ym.mec.biz.dal.entity.TenantProxyInfo">
+        insert into tenant_proxy_info(proxy_name_, proxy_user_id_, state_, create_by_, create_time_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.proxyName}, #{entity.proxyUserId}, #{entity.state}, #{entity.createBy}, #{entity.createTime})
+        </foreach>
+    </insert>
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insertProxySysUser" parameterType="com.ym.mec.auth.api.entity.SysUser" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        INSERT INTO sys_user
+        (tenant_id_,username_,phone_,password_,create_time_,user_type_,real_name_)
+        VALUES(#{tenantId},#{username},#{phone},#{password},now(),#{userType},#{realName})
+    </insert>
+
+    <update id="updateProxySysUserLock" parameterType="object">
+        update sys_user set lock_flag_ = #{lock} where id_ = #{id}
+    </update>
+
+    <update id="updateSysUserPhone" parameterType="object">
+        update sys_user
+        set phone_     = #{phone},
+            username_  = #{name},
+            real_name_ = #{name}
+        where id_ = #{id}
+    </update>
+
+    <select id="queryProxyUserStaff" resultType="com.ym.mec.biz.dal.vo.ProxyUserVo">
+        select
+            b.id_ as userId,
+            a.parent_id_ as parentId,
+            c.id_ as proxyId,
+            c.proxy_name_ as proxyName,
+            b.real_name_ as `name`,
+            b.phone_ as `phone`,
+            '员工' as `role`,
+            c.state_ as state
+        from tenant_proxy_user_relation as a
+                 left join tenant_proxy_info as c on a.parent_id_ = c.proxy_user_id_
+                 left join sys_user as b  on a.user_id_ = b.id_
+        where a.parent_id_ = #{id}
+    </select>
+
+    <select id="queryProxyUser" parameterType="map" resultType="com.ym.mec.biz.dal.vo.ProxyUserVo">
+        select
+            b.id_ as userId,
+            c.id_ as proxyId,
+            c.proxy_name_ as proxyName,
+            b.real_name_ as `name`,
+            b.phone_ as `phone`,
+            '负责人' as `role`,
+            c.state_ as state
+        from tenant_proxy_user_relation as a
+                 left join tenant_proxy_info as c on a.user_id_ = c.proxy_user_id_
+                 left join sys_user as b  on a.user_id_ = b.id_
+        <where>
+            a.parent_id_ is null
+            <if test="param.state != null ">
+               AND c.state_ = #{param.state}
+            </if>
+            <if test="param.search != null ">
+                AND (
+                c.proxy_name_ LIKE CONCAT('%', #{param.search},'%')
+                OR b.`real_name_` LIKE CONCAT('%', #{param.search},'%')
+                OR b.`phone_` LIKE CONCAT('%', #{param.search},'%')
+                )
+            </if>
+        </where>
+    </select>
+
+    <select id="queryUserList" parameterType="map" resultType="com.ym.mec.auth.api.entity.SysUser">
+        select id_ as id,
+               real_name_ as realName,
+               phone_ as phone
+        from sys_user
+        where tenant_id_ = -1
+        <if test="param.id != null ">
+            AND id_ = #{param.id}
+        </if>
+        <if test="param.search != null and param.search != ''">
+          AND (
+               `real_name_` LIKE CONCAT('%', #{param.search},'%')
+                OR `phone_` LIKE CONCAT('%', #{param.search},'%')
+            )
+        </if>
+    </select>
+
+</mapper>

+ 27 - 0
mec-biz/src/main/resources/config/mybatis/TenantProxyUserRelationMapper.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.TenantProxyUserRelationDao">
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.TenantProxyUserRelation">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <id column="proxy_id_" jdbcType="INTEGER" property="proxyId"/>
+        <result column="user_id_" jdbcType="INTEGER" property="userId"/>
+        <result column="parent_id_" jdbcType="INTEGER" property="parentId"/>
+        <result column="rank_" jdbcType="INTEGER" property="rank"/>
+        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_,proxy_id_
+        , user_id_, parent_id_, rank_, create_time_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.ym.mec.biz.dal.entity.TenantProxyUserRelation">
+        insert into tenant_proxy_user_relation(user_id_, proxy_id_,parent_id_, rank_, create_time_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.userId},#{proxyId}, #{entity.parentId}, #{entity.rank}, #{entity.createTime})
+        </foreach>
+    </insert>
+
+</mapper>

+ 5 - 4
mec-web/src/main/java/com/ym/mec/web/controller/TenantPreJoinController.java

@@ -45,10 +45,11 @@ public class TenantPreJoinController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('tenantPreJoin/queryPage')")
     public HttpResponseResult<PageInfo<TenantPreJoinVo>> queryPage(@RequestBody Map<String, Object> param) {
         //如果不是超管,那么只能看到推荐人自己的机构
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(!sysUser.getIsSuperAdmin()){
-            param.put("recommender",sysUser.getId());
-        }
+        //2022年4月26日 需求要求变更为平台账号就看所有数据
+//        SysUser sysUser = sysUserFeignService.queryUserInfo();
+//        if(!sysUser.getIsSuperAdmin()){
+//            param.put("recommender",sysUser.getId());
+//        }
         return succeed(tenantPreJoinService.queryPage(param));
     }
 

+ 59 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TenantProxyDividendController.java

@@ -0,0 +1,59 @@
+package com.ym.mec.web.controller;
+
+
+import com.ym.mec.biz.dal.vo.ProxyDividendInfoVo;
+import com.ym.mec.biz.dal.vo.ProxyDividendVo;
+import com.ym.mec.biz.service.TenantProxyDividendService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+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;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 代理商分润表(TenantProxyDividend)表控制层
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:18
+ */
+@Api(tags = "代理商分润表")
+@RestController
+@RequestMapping("/tenantProxyDividend")
+public class TenantProxyDividendController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TenantProxyDividendService tenantProxyDividendService;
+
+    @ApiOperation("代理商分润汇总查询")
+    @PostMapping(value = "/queryProxyDividend")
+    public HttpResponseResult<ProxyDividendVo> queryProxyDividend() {
+        return succeed(tenantProxyDividendService.queryProxyDividend());
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "proxyId", dataType = "Integer", value = "代理商id"),
+            @ApiImplicitParam(name = "recommenderId", dataType = "Integer", value = "推荐人id"),
+            @ApiImplicitParam(name = "startData", dataType = "String", value = "开始日期 年月日"),
+            @ApiImplicitParam(name = "endData", dataType = "String", value = "结束日期 年月日"),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("代理商分润明细查询")
+    @PostMapping(value = "/queryProxyDividendInfo")
+    public HttpResponseResult<PageInfo<ProxyDividendInfoVo>> queryProxyDividendInfo(@RequestBody Map<String, Object> param) {
+        return succeed(tenantProxyDividendService.queryProxyDividendInfo(param));
+    }
+
+}
+

+ 106 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TenantProxyInfoController.java

@@ -0,0 +1,106 @@
+package com.ym.mec.web.controller;
+
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.TenantProxyDto;
+import com.ym.mec.biz.dal.vo.ProxyUserVo;
+import com.ym.mec.biz.service.TenantProxyInfoService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 机构代理商信息表(TenantProxyInfo)表控制层
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:20
+ */
+@Api(tags = "机构代理商信息表")
+@RestController
+@RequestMapping("/tenantProxyInfo")
+public class TenantProxyInfoController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TenantProxyInfoService tenantProxyInfoService;
+
+    @ApiOperation("添加代理商信息")
+    @PostMapping(value = "/addProxyInfo")
+    public HttpResponseResult<Object> addProxyInfo(@Valid @RequestBody TenantProxyDto dto) {
+        tenantProxyInfoService.addProxyInfo(dto);
+        return succeed();
+    }
+
+    @ApiOperation("添加代理商下面的员工")
+    @PostMapping(value = "/addProxyStaff")
+    public HttpResponseResult<Object> addProxyStaff(@RequestBody TenantProxyDto dto) {
+        tenantProxyInfoService.addProxyStaff(dto);
+        return succeed();
+    }
+
+    @ApiOperation("查询代理商下级人员数据")
+    @ApiImplicitParam(name = "id", value = "代理商负责人id", required = true, dataType = "Integer")
+    @GetMapping("/queryProxyUserStaff")
+    public HttpResponseResult<List<ProxyUserVo>> queryProxyUserStaff(Integer id) {
+        return succeed(tenantProxyInfoService.queryProxyUserStaff(id));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "关键字"),
+            @ApiImplicitParam(name = "state", dataType = "Integer", value = "状态 0正常 1冻结"),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("分页查询代理商负责人数据")
+    @PostMapping(value = "/queryProxyUser")
+    public HttpResponseResult<PageInfo<ProxyUserVo>> queryPage(@RequestBody Map<String, Object> param) {
+        return succeed(tenantProxyInfoService.queryProxyUser(param));
+    }
+
+    @ApiOperation("冻结/解冻代理商")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", dataType = "Integer", value = "代理商负责人id"),
+            @ApiImplicitParam(name = "state", dataType = "Integer", value = "状态 0正常 1冻结"),
+    })
+    @GetMapping("/freezeProxy")
+    public HttpResponseResult<Object> freezeProxy(Integer id, Integer state) {
+        tenantProxyInfoService.freezeProxy(id, state);
+        return succeed();
+    }
+
+    @ApiOperation("修改人员信息")
+    @PostMapping(value = "/updateProxyUserInfo")
+    public HttpResponseResult<Object> updateProxyUserInfo(@RequestBody TenantProxyDto dto) {
+        tenantProxyInfoService.updateProxyUserInfo(dto);
+        return succeed();
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "手机号/姓名模糊查询条件"),
+    })
+    @ApiOperation("手机号/姓名模糊查询所有平台账号信息手机号/姓名模糊查询所有平台账号信息")
+    @PostMapping(value = "/queryUserList")
+    public HttpResponseResult<List<SysUser>> queryUserList(@RequestBody Map<String, Object> param) {
+        return succeed(tenantProxyInfoService.queryUserList(param));
+    }
+
+    @ApiOperation("根据token查询用户信息-代理商专用")
+    @GetMapping("/queryUserListByToken")
+    public HttpResponseResult<SysUser> queryUserList() {
+        return succeed(tenantProxyInfoService.queryUserList());
+    }
+
+}
+

+ 29 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TenantProxyUserRelationController.java

@@ -0,0 +1,29 @@
+package com.ym.mec.web.controller;
+
+
+import com.ym.mec.biz.dal.entity.TenantProxyUserRelation;
+import com.ym.mec.biz.service.TenantProxyUserRelationService;
+import org.springframework.web.bind.annotation.*;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+
+import javax.annotation.Resource;
+
+/**
+ * 机构代理商人员关系表(TenantProxyUserRelation)表控制层
+ *
+ * @author hgw
+ * @since 2022-04-22 14:08:21
+ */
+@Api(tags = "机构代理商人员关系表")
+@RestController
+@RequestMapping("/tenantProxyUserRelation")
+public class TenantProxyUserRelationController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TenantProxyUserRelationService tenantProxyUserRelationService;
+
+}
+