1. 扫码登录业务,登录功能新增跳转申请加入业务 .5
  2. 配置管理入口:在个人主页添加“用户组管理”(支持修改名入口名)和隐藏显示逻辑 .5
  3. 分享二维码:分享组件调用 .5
  4. 添加人员:通过网页调用原生界面添加成员功能 .5
  5. 用户组管理页: 2 显示默认分组,支持分页 删除管理员用户条件(最后一个管理页不可删除) 三个菜单入口: 创建分组/编辑分组入口跳转逻辑 收到申请加入个数及跳转逻辑
  6. bug联调 1.5天

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
title 
用户组管理工期
创建时间:2019-07-05 08:26:09+0800 
endtitle
left header
通过甘特图梳理工作进度安排
endheader
project starts 2019-07-03 
Sunday are closed
Saturday are closed
--依赖组件模块--
[扫码邀请] as [scan] on {hsg} lasts 1 days
then [用户组管理入口] as [groupMenu] on {hsg} lasts 1 days
then [分享组件] on {hsg} lasts 1 days
then [人员选择器] as [selecter] on {hsg} lasts 1 days
[依赖结束] happens at [selecter]'s end
--用户组管理组件--
then [默认组逻辑] as [defaultGroup] on {hsg} lasts 1 days
then [删除业务] as [deleteAction] on {hsg} lasts 1 days
then [三个菜单] on {hsg:100%} lasts 1 days
then [待审核业务] as [verfy] on {hsg:100%} lasts 1 days
[迭代结束] happens at [verfy]'s end

业务流程

活动图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
title
用户组管理功能流程梳理
创建时间:2019-07-09 07:17:54+0800 
endtitle
left header
入口控制逻辑,列表展示,导航条菜单,组菜单,待审核业务
endheader
start
:用户组;
if (管理员) then (YES) 
    :组列表;
    if (多个组) then (YES)
        :分组菜单;
    else(NO)
        :默认组;
    endif
    :当前组;
    fork
    :组菜单;
    if (管理员) then (YES)
        if () then 
            :邀请加入;
            :分享组件;
            detach
        elseif()
            :编辑分组;
        else
            :创建分组;
        endif
    else(NO)
        if () then
            :编辑分组;
        else
            :邀请加入;
            :分享组件;
            detach
        endif
    endif
    fork again
    :待审核入口;
    end fork
    :web页;
else(NO)
:隐藏入口;
stop
endif
stop

用户组管理类图结构

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
title
梳理H5调用原生人员选择器
创建时间:2019-07-09 20:28:33+0800 
endtitle
left header
问题:
1. `GetDeptAndUserInfo`问题: 组织架构的API的数据结构和域名绑定,当域名不同返回的json结构不同
2. 原生选择器多版本: 
    1. setGroupAdmini :用户组管理中,web拦截器监听的方法
    2. JHSelectCCPPeople: 旧版本选择人员的监听器
endheader

page 2x2
'package,node,folder,frame,cloud,database'
package "JinherCCP" as CCP {
class "H5UseSelectPeopleViewController" as h5VC {
    --属性组 --
    + var :String=""	
    __ js回调方法__
    - (IBAction)clcikOKButton:(id)sender
}
class "OrganizationSelectViewController" as origin {
    --属性组 --
    + var :String=""	
    __ 函数组__
}
note bottom of h5VC
    用于h5调用原生的界面 
end note
note bottom of origin 
     通讯录原生界面的调用方法
end note
} 
'package,node,folder,frame,cloud,database'
package "JHWebCore" as web {
    class "WVDispatcher" as wvd {
        --属性组 --
        + var :String=""	
        __拦截jsURL__
        - (BOOL)webView:shouldStartLoadWithRequest:navigationType:
    }
    class "WVH5SelectCCPPeople" as ccph5 {
        __ 函数组__
        - (BOOL)webViewShouldStartLoadRequest;
    }
    class "WVUGMCCPPeople" as ugmWeb {
        __ 函数组__
        - (BOOL)webViewShouldStartLoadRequest;
    }
    note left of wvd
        用于注册监听接口的类 
    end note
    note bottom of ugmWeb
      实现web拦截器中跳转到人员选择器的方法   
    end note
    wvd --> ugmWeb
    ugmWeb ----> h5VC
    wvd --> ccph5
    ccph5 ----> h5VC
}

'package,node,folder,frame,cloud,database'
package "RichScanLib" as scan {
    class "JNQRViewController" as qr {
        __ 函数组__
        - (BOOL)shouldMoveToSuperController
        -(NSDictionary *) parameterWithURL:(NSString *) url
    }
    note top of qr
        扫描二维码的组件,直接在反射类中分发定制业务 
    end note
}

'package,node,folder,frame,cloud,database'
package "HPPersonalPagelib" as person {
    class "JHPersonalViewController" as personVC {
        --属性组 --
        -BOOL isUGMAdmin
        __ 函数组__
        //网络获取用户信息:用户心情、头像、昵称
        - (void)getUserInfoFromServer
        //接口GetIsShowMyAppGroup
        - (void)loadUGMIsAdmin
    }
    note top of personVC
        解析personalNewPage.plist菜单配置信息,加载功能
        动态加载菜单
    end note
}
'package,node,folder,frame,cloud,database'
package "JHUGManagerSDK" as ugm {
    class "JHUGMViewController" as ugmVC {
        --属性组 --
        - UIView *numView;
        - UITableView *tableView;
        --数据模型属性组--
        - ReqUGMPageModel *reqUGM;
        - OrgAdminModel *adminModel;
        - NSMutableArray<JHUGManModel *> *dataArray;
        - NSArray *groupArray;
        --分组列表属性--
        - NSString *curGroupId;
        - UIButton *navBut;
        - UGMGroupLView *groupView;
        - UGMGroupModel *defaultGroup;
        - UIImageView *arrowImgView;
        __分组管理菜单属性组__
        - UIView *moreView;
        - UIButton *moreBut;
        - UIButton *createGroupBut;
        - UIView *firstGroupline;
        - MASConstraint *createButHeight;
        - MASConstraint *editButTop;
        --分享组件属性组--
        - JHUGMOrgItemModel *myOrg;

        __ 函数组__
        + func (:,:)
        -(void)loadGroupList
        -(void)loadUserList
        -(void)loadVerifyCount
        -(void)loadOrgAdmin
        -(void)loadRemoveUser:(JHUGManModel *)user
    }
    'package,node,folder,frame,cloud,database'
    cloud "服务器" {
        class "UGManagerServer" as ugmserver {
        --属性组 --
        + (id)shared;
        + JHURLRequest * request;
        __ 函数组__
        -(void)reqGetVerifyCount:handler:
        -(void)requestGroupListHandler:
        -(void)requestUGMList:handler:
        -(void)reqGetIsUGMAdmin:handler:
        -(void)reqRemoveUserFromGroup:userId:handler:
       }
       ugmVC ..> ugmserver
    }
    
    'package,node,folder,frame,cloud,database'
    folder "用户组列表" as UI {
        class "UGMGroupLView" as groupview {
        --属性组 --
        + NSArray *dataArray;
        __ 函数组__
        - (instancetype)initWithHandler:
    }
    class "UGMGroupLCell" as groupcell {
        --属性组 --
        UGMGroupModel *model;
    }
    class "UGMGroupModel" as cellmodel {
        --属性组 --
        + NSString *Id;
        + NSString *Name;
        + NSString *AppId;
        + NSNumber *IsVerify;
        + NSString *QrCodeSource;
        + NSString *QrCodeImage;
        + BOOL isGSeleced;
    }

    groupview *-up-> ugmVC
    groupview ..> groupcell
    groupcell ..> cellmodel 
    }
    

}

APP ---down-> personVC
APP ---down-> scan
personVC --> ugmVC
ugm -down-> web 

添加消息的脑图

替换接口域名

替换以下相关接口的域名:将sns.iuoooo.com替换为api.iuoooo.com/ugm.api

1
2
3
4
5
Jinher.AMP.SNS.SV.AppGroupUserQuerySV.svc/GetExistGroupsOfUser
Jinher.AMP.SNS.SV.AppGroupUserQuerySV.svc/GetGroupsOfUser
Jinher.AMP.SNS.SV.AppGroupUserQuerySV.svc/GetExistTypesOfUser
Jinher.AMP.SNS.SV.AppGroupUserQuerySV.svc/UpdateUserGroup
Jinher.AMP.SNS.SV.AppGroupUserQuerySV.svc/IsUserInGroup

域名获取三种方式

  1. 配置文件方式iPFile.plist 无需编译
  2. 宏定义方式 需要编译相关组件
  3. 主工程源码方式 无需编译

通过配置文件iPFile.plist获取:api_host_GroupChat

1
2

[[HttpIpFileService shareInstance] getIpFile:@"api_host_GroupQuery"];//服务器地址

经排查分析,接口Jinher.AMP.SNS.SV.AppSceneUserQuerySV.svc/ExistSceneUser用到了上述方式: 所以不能修改iPfile.plistapi_host_GroupChat的值.

采用替换方式解决问题: JHLayoutParser组件中的文件LPUpdateView读取plist文件:api_host_GroupQuery获取域名 在iPfile.plist新增一个字段

1
api_host_GroupQuery:api.iuoooo.com/ugm.api

依赖JHAcrossNetEngin组件的头文件NetEngin.h定义的宏方式

1
2
/AppGroupUser
#define AppGroupUserHttpHead [NSString stringWithFormat:@"%@%@api.iuoooo.com/ugm.api/Jinher.AMP.SNS.SV.AppGroupUserQuerySV.svc", JHTWREQUESTPROTOCOL, NetFormat]

只需替换JHAcrossNetEngin组件NetEngin.h的宏定义,将sns.iuoooo.com替换为api.iuoooo.com/ugm.api 然后,重新编译JHAcrossNetEngin组件库,并提交到主工程中.

图文组件组件中的接口GetExistTypesOfUser引用AppGroupUserHttpHead,需要重新编译库,并提交到主工程中.

主工程相关的域名替换

无需编译,直接替换,提交源码即可
涉及到的相关文件:commitID c0a320ec86bf612260028fec2e8b7b19646c83c7

1
2
3
4
5
6
modified:   JHUniversalApp/JHUniversalApp/Categories/AccessRelevantLayoutData.m
modified:   JHUniversalApp/JHUniversalApp/Components/Libs/JH/AcrossNetEngin/NetEngine.h
modified:   JHUniversalApp/JHUniversalApp/Components/Libs/JH/JinherUniversalStaticLib/ipFile.plist
modified:   JHUniversalApp/JHUniversalApp/ViewControllers/HomePage/Controller/HomeChannelController.m
modified:   JHUniversalApp/JHUniversalApp/ViewControllers/LayoutEngine/LayoutEngineViewController.m
modified:   JHUniversalApp/JHUniversalApp/ViewControllers/LayoutEngine/LayoutSecondEngineViewController.m