zhuguifei
2026-03-10 58402bd5e762361363a0f7d7907153c77dbb819f
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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
package com.shlanbao.tzsc.pms.sys.org.service.impl;
 
import java.util.ArrayList;
import java.util.List;
 
import com.shlanbao.tzsc.utils.tools.FillUserInfoUtil;
import com.shlanbao.tzsc.utils.tools.LogAnno;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.shlanbao.tzsc.base.dao.SysOrganizationDaoI;
import com.shlanbao.tzsc.base.dao.SysOrganizationResourceDaoI;
import com.shlanbao.tzsc.base.dao.SysResourceDaoI;
import com.shlanbao.tzsc.base.dao.SysUserDaoI;
import com.shlanbao.tzsc.base.dao.SysUserOrganizationDaoI;
import com.shlanbao.tzsc.base.mapping.SysOrganization;
import com.shlanbao.tzsc.base.mapping.SysOrganizationResource;
import com.shlanbao.tzsc.base.mapping.SysResource;
import com.shlanbao.tzsc.base.mapping.SysUser;
import com.shlanbao.tzsc.base.mapping.SysUserOrganization;
import com.shlanbao.tzsc.base.model.Tree;
import com.shlanbao.tzsc.base.service.BaseService;
import com.shlanbao.tzsc.pms.sys.org.beans.OrgBean;
import com.shlanbao.tzsc.pms.sys.org.service.OrgServiceI;
import com.shlanbao.tzsc.pms.sys.resource.beans.ResourceBean;
import com.shlanbao.tzsc.pms.sys.user.beans.UserBean;
import com.shlanbao.tzsc.utils.tools.BeanConvertor;
import com.shlanbao.tzsc.utils.tools.StringUtil;
 
import javax.servlet.http.HttpServletRequest;
 
/**
 * 组织机构业务实现类
 * @author Leejean
 * @create 2014年9月16日上午10:41:43
 */
@Service
public class OrgServiceImpl extends BaseService implements OrgServiceI {
    @Autowired
    private SysOrganizationDaoI sysOrganizationDao;
    @Autowired
    private SysOrganizationResourceDaoI sysOrganizationResourceDao;    
    @Autowired
    private SysResourceDaoI sysResourceDao;    
    @Autowired
    private SysUserDaoI sysUserDao;
    @Autowired
    private SysUserOrganizationDaoI sysUserOrganizationDao;
    @Autowired
    private HttpServletRequest request;
    @Override
    public List<OrgBean> getAllUnDelOrgs() throws Exception {
        String hql="from SysOrganization o where o.del=0 order by o.seq asc";
        List<SysOrganization> sysOrganizations=sysOrganizationDao.query(hql);
        List<OrgBean> orgBeans= new ArrayList<OrgBean>();
        for (SysOrganization sysOrganization : sysOrganizations) {
            OrgBean orgBean=BeanConvertor.copyProperties(sysOrganization, OrgBean.class);
            if(sysOrganization.getSysOrganization()!=null){
                orgBean.setPid(sysOrganization.getSysOrganization().getId());
                orgBean.setPname(sysOrganization.getSysOrganization().getName());
            }
            orgBeans.add(orgBean);
        }
        return orgBeans;
    }
    @Override
    public List<OrgBean> getAllEnableOrgs() throws Exception {
        String hql="from SysOrganization o where o.del=0 and enable=1 order by o.seq asc";
        List<SysOrganization> sysOrganizations=sysOrganizationDao.query(hql);
        List<OrgBean> orgBeans= new ArrayList<OrgBean>();
        for (SysOrganization sysOrganization : sysOrganizations) {
            OrgBean orgBean=BeanConvertor.copyProperties(sysOrganization, OrgBean.class);
            if(sysOrganization.getSysOrganization()!=null){
                orgBean.setPid(sysOrganization.getSysOrganization().getId());
                orgBean.setPname(sysOrganization.getSysOrganization().getName());
            }
            orgBeans.add(orgBean);
        }
        return orgBeans;
    }
    @Override
    public List<Tree> getAllOrgsSelfNotIn(String id) throws Exception {
        String hql="from SysOrganization o where o.del=0 and o.enable=1 and o.id<>? order by o.seq asc";
        List<SysOrganization> sysOrganizations=sysOrganizationDao.query(hql,id);
        List<Tree> trees= new ArrayList<Tree>();
        for (SysOrganization sysOrganization : sysOrganizations) {
            Tree tree= new Tree();
            tree.setIconCls(sysOrganization.getIconCls());
            tree.setId(sysOrganization.getId());
            tree.setText(sysOrganization.getName());
            if(sysOrganization.getSysOrganization()!=null){
                tree.setPid(sysOrganization.getSysOrganization().getId());
                /*orgBean.setPname(sysOrganization.getSysOrganization().getName());*/
            }
            trees.add(tree);
        }
        return trees;
    }
 
    @Override
    public List<Tree> getAllOrgsTree() {
        String hql="from SysOrganization o where o.del=0 and o.enable=1 order by o.seq asc";
        List<SysOrganization> sysOrganizations=sysOrganizationDao.query(hql);
        List<Tree> trees = new ArrayList<Tree>();
        for (SysOrganization sysOrganization : sysOrganizations) {
            Tree tree = new Tree();
            tree.setText(sysOrganization.getName());
            tree.setIconCls(sysOrganization.getIconCls());
            tree.setId(sysOrganization.getId());
            if(sysOrganization.getSysOrganization()!=null){
                tree.setPid(sysOrganization.getSysOrganization().getId());
            }
            trees.add(tree);
        }
        return trees;
    }
 
    @LogAnno(operateType = "新增组织机构")
    @Override
    public Long addOrg(OrgBean OrgBean) throws Exception {
        if(!StringUtil.notNull(OrgBean.getPid())&&sysOrganizationDao.unique("from SysOrganization o where o.del=0 and o.enable=1 and o.sysOrganization=null")
                !=null){
            //查询到未禁用,未删除,父级别为空的机构即为根机构
            return 1L;
        }
        SysOrganization sysOrganization=BeanConvertor.copyProperties(OrgBean, SysOrganization.class);
        if(StringUtil.notNull(OrgBean.getPid())){
            sysOrganization.setSysOrganization(new SysOrganization(OrgBean.getPid()));
        }
        FillUserInfoUtil.fillCreateUserInfo(sysOrganization,request);
        sysOrganizationDao.save(sysOrganization);
        return 0L;
    }
 
    @LogAnno(operateType = "删除组织机构")
    @Override
    public void deleteOrg(String id) throws Exception {
        sysOrganizationDao.findById(SysOrganization.class, id).setDel(1L);
    }
 
    @Override
    public void batchDeleteOrg(String ids) throws Exception {
        for (String id : StringUtil.splitToStringList(ids, ",")) {
            this.deleteOrg(id);
        }
    }
 
    @LogAnno(operateType = "编辑组织机构")
    @Override
    public void editOrg(OrgBean OrgBean) throws Exception {
        SysOrganization sysOrganization=sysOrganizationDao.findById(SysOrganization.class, OrgBean.getId());
        BeanConvertor.copyProperties(OrgBean, sysOrganization);
        if(StringUtil.notNull(OrgBean.getPid())){
            sysOrganization.setSysOrganization(new SysOrganization(OrgBean.getPid()));
        }
        FillUserInfoUtil.fillUpdateUserInfo(sysOrganization,request);
    }
 
    @Override
    public OrgBean getOrgById(String id) throws Exception {
        SysOrganization sysOrganization = sysOrganizationDao.findById(SysOrganization.class, id);
        OrgBean orgBean=BeanConvertor.copyProperties(sysOrganization,OrgBean.class);
        if(sysOrganization.getSysOrganization()!=null){
            orgBean.setPid(sysOrganization.getSysOrganization().getId());
            orgBean.setPname(sysOrganization.getSysOrganization().getName());
        }
        return orgBean;
    }
 
    @LogAnno(operateType = "给组织机构配权限")
    @Override
    public void assignResourceToOrg(String id, String ids) throws Exception {
        //清除
        sysOrganizationResourceDao.deleteByParams("delete from SysOrganizationResource o where o.sysOrganization.id = ?",id);
        for (String resid : StringUtil.splitToStringList(ids, ",")) {
            SysOrganizationResource o = new SysOrganizationResource(new SysResource(resid), new SysOrganization(id));
            FillUserInfoUtil.fillCreateUserInfo(o,request);
            sysOrganizationResourceDao.save(o);
        }
    }
 
 
    @Override
    public List<ResourceBean> getResourcesByOrg(String id) throws Exception {
        //查询所有目录资源
        List<SysResource> menuResources = sysResourceDao.query("from SysResource o where o.del=0 and o.enable=1 and o.typ=1 order by o.seq asc");
        //查询所有功能资源
        List<SysResource> funcResources = sysResourceDao.query("from SysResource o where o.del=0 and o.enable=1 and o.typ=2 order by o.seq asc");
                
        //查询当前机构拥有目录资源
        List<SysResource> orgOwnMenuResources = sysResourceDao.query(
        "select o.sysResource from SysOrganizationResource o where o.sysResource.typ=1 and o.sysOrganization.id = ?",id);
        //查询当前机构拥有目录资源
                List<SysResource> orgOwnFuncResources = sysResourceDao.query(
                "select o.sysResource from SysOrganizationResource o where o.sysResource.typ=2 and o.sysOrganization.id = ?",id);
                
        List<ResourceBean> resourceBeans = new ArrayList<ResourceBean>();
        
        for (SysResource sysResource : menuResources) {
            
            ResourceBean resourceBean = BeanConvertor.copyProperties(sysResource, ResourceBean.class);
            
            if(sysResource.getSysResource() != null){
                resourceBean.setPid(sysResource.getSysResource().getId());
                resourceBean.setPname(sysResource.getSysResource().getText());                
            }
            //判断当前机构是否拥有这个目录权限,如果有checked=true
            resourceBean.setChecked(isAssignedResource(orgOwnMenuResources,sysResource.getId()));
            //设置该目录下面的功能,并判断是否拥有该权限
            resourceBean.setFunctions(fmtFuncsToMenus(sysResource.getId(),funcResources,orgOwnFuncResources));
            
            resourceBeans.add(resourceBean);
        }
        //
        return resourceBeans;
    }
    
    private List<ResourceBean> fmtFuncsToMenus(String menuId,List<SysResource> funcResources,List<SysResource> roleOwnFuncResources) throws Exception{
        if(funcResources == null){
            return null;
        }
        List<ResourceBean> functions = new ArrayList<ResourceBean>();
        for(SysResource func:funcResources){
            if(func.getSysResource().getId().equals(menuId)){//该功能属于这个模块
                ResourceBean funcBean = BeanConvertor.copyProperties(func, ResourceBean.class);                
                //判断当前角色是否拥有这个功能权限
                funcBean.setChecked(isOwnFunc(roleOwnFuncResources,func.getId()));
                functions.add(funcBean);
            }
        }
        
        return functions;
    }
    /**
     * 判断角色是否拥有该功能权限
     * @author Leejean
     * @create 2014年8月26日上午9:44:25
     * @param roleOwnFuncResources 用户拥有的功能列表
     * @param id 功能id
     * @return
     */
    private boolean isOwnFunc(List<SysResource> roleOwnFuncResources, String id) {
        for (SysResource sysResource : roleOwnFuncResources) {
            if(sysResource.getId().equals(id)){
                return true;
            }
        }
        return false;
    }
    /**
     * 判断角色是否拥有此目录权限
     * @author Leejean
     * @create 2014年8月26日上午9:40:16
     * @param sysResources 目录s
     * @param id 
     * @return
     */
    private boolean isAssignedResource(List<SysResource> roleOwnMenuResources, String id) {
        for (SysResource sysResource : roleOwnMenuResources) {
            if(sysResource.getId().equals(id)){
                return true;
            }
        }
        return false;
    }
 
    /*@Override
    public List<UserBean> getOrgUsers(String id) throws Exception {        
        //获得所有用户
        List<SysUser> allUsers = sysUserDao.query("from SysUser o where o.del=0 and o.enable=1 ");
        //获得属于该机构的用户
        List<SysUser> assignedUsers =sysUserDao.query("select o.sysUser from SysUserOrganization o where o.sysOrganization.id=? ",id);
        
        List<UserBean> userBeans = new ArrayList<UserBean>();
        
        for (SysUser sysUser : allUsers) {
            
            UserBean userBean = new UserBean();
            String uid=sysUser.getId();
            userBean.setId(id);
            userBean.setGender(sysUser.getGender());
            userBean.setEno(sysUser.getEno());
            userBean.setName(sysUser.getName());
            
            userBean.setAssigned(userIsAssigned(assignedUsers,uid));
            
            userBeans.add(userBean);
            
        }
        
        return userBeans;
    }*/
    @Override
    public List<UserBean> getOrgUnAssignedUsers(String oid,String name) throws Exception {
        if(name==null)name="";
        
        String hql= "from SysUser o where o.del=0 and o.enable=1 and (o.name like '%"+name+"%' or o.loginName like '%"+name+"%' or o.eno like '%"+name+"%' ) and o.id not in (select oo.sysUser.id from SysUserOrganization oo where oo.sysOrganization.id=?)";
        //获得所有用户
        List<SysUser> rows = sysUserDao.query(hql,oid);
        
        return BeanConvertor.copyList(rows,UserBean.class);
    }
    /**
     * 辨别用户是否属于某个机构
     * @author Leejean
     * @create 2014年8月28日下午6:47:48
     * @param assignedUsers 
     * @param id 用户id
     * @return
     */
    /*private boolean userIsAssigned(List<SysUser> assignedUsers, String id) {
        for (SysUser sysUser : assignedUsers) {
            if(sysUser.getId().equals(id)){
                return true;
            }
        }
        return false;
    }*/
 
    @Override
    public List<UserBean> getOrgAssignedUsers(String oid) throws Exception {        
        String hql= "from SysUserOrganization o where o.sysOrganization.id=?";
        //获得所有用户
        List<SysUser> rows = sysUserDao.query("select o.sysUser ".concat(hql), oid);
        
        return BeanConvertor.copyList(rows,UserBean.class);
    }
 
    @LogAnno(operateType = "给机构分配用户")
    @Override
    public void assignUsersToOrg(String id, String ids) throws Exception {
        //清除
        sysUserOrganizationDao.deleteByParams("delete from SysUserOrganization o where o.sysOrganization.id = ?",id);
        for (String uid : StringUtil.splitToStringList(ids, ",")) {
            SysUserOrganization o = new SysUserOrganization(new SysUser(uid), new SysOrganization(id));
            FillUserInfoUtil.fillCreateUserInfo(o,request);
            sysUserOrganizationDao.save(o);
        }
    }
    @Override
    public List<Tree> getOrgsByUser(String id) throws Exception {
        //查询所有组织机构
        List<SysOrganization> sysOrganizations=
            sysOrganizationDao.query("from SysOrganization o where o.del=0 and o.enable=1 order by o.seq asc");
        //查询当前用户拥有的组织机构
        List<SysOrganization> organizations =  
            sysOrganizationDao.query("select o.sysOrganization from  SysUserOrganization o where o.sysUser.id = ?",id);
        List<Tree> trees = new ArrayList<Tree>();
        for (SysOrganization organization : sysOrganizations) {
            Tree tree = new Tree();
            tree.setText(organization.getName());
            tree.setId(organization.getId());
            tree.setIconCls(organization.getIconCls());
            tree.setChecked(isAssignedOrg(organizations,organization.getId()));
            if(organization.getSysOrganization()!=null){
                tree.setPid(organization.getSysOrganization().getId());
            }
            trees.add(tree);
        }
        return trees;
    }
    /**
     * 是否拥有此组织机构
     * @author Leejean
     * @create 2014-8-19下午06:36:21
     * @param sysUserRoles
     * @param id
     * @return
     */
    private boolean isAssignedOrg(List<SysOrganization> organizations, String id) {
        for (SysOrganization organization : organizations) {
            if(organization.getId().equals(id)){
                return true;
            }
        }
        return false;
    }
 
    @LogAnno(operateType = "给用户分配组织机构")
    @Override
    public void assignOrg(String id, String ids) {
        //清除用户所有组织机构
        sysUserOrganizationDao.deleteByParams("delete from SysUserOrganization o where o.sysUser.id = ?",id);
        //批量添加
        for (String oid : StringUtil.splitToStringList(ids, ",")) {
            SysUserOrganization o = new SysUserOrganization(new SysUser(id), new SysOrganization(oid));
            FillUserInfoUtil.fillCreateUserInfo(o,request);
            sysUserOrganizationDao.save(o);
        }
    }
 
    @LogAnno(operateType = "用户组织机构批量分配")
    @Override
    public void batchAssignOrg(String uids, String oids) {
        //清除用户所有组织机构
        //批量添加
        for (String uid : StringUtil.splitToStringList(uids, ",")) {
            sysUserOrganizationDao.deleteByParams("delete from SysUserOrganization o where o.sysUser.id = ?",uid);
            for (String oid : StringUtil.splitToStringList(oids, ",")) {
                SysUserOrganization o = new SysUserOrganization(new SysUser(uid), new SysOrganization(oid));
                FillUserInfoUtil.fillCreateUserInfo(o,request);
                sysUserOrganizationDao.save(o);
            }
        }
    }
}