jiangping
2024-12-11 a48e7b67abb5bac5c02e28a59821c2360aa2b324
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
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
package com.doumee.service.business.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.MemberRoleJoinMapper;
import com.doumee.dao.business.model.DeviceRole;
import com.doumee.dao.business.model.Empower;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.MemberRole;
import com.doumee.dao.web.response.DeviceRoleVO;
import com.doumee.service.business.DeviceRoleService;
import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
 
/**
 * 门禁角色信息表Service实现
 * @author 江蹄蹄
 * @date 2023/11/30 15:33
 */
@Service
@Slf4j
public class DeviceRoleServiceImpl implements DeviceRoleService {
 
    @Autowired
    private DeviceRoleMapper deviceRoleMapper;
    @Autowired
    private MemberCardMapper memberCardMapper;
    @Autowired
    private EmpowerMapper empowerMapper;
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private MemberRoleJoinMapper memberRoleMapper;
    @Autowired
    private MemberMapper memberMapper;
 
 
    @Override
    public Integer create(DeviceRole deviceRole) {
        if(Objects.isNull(deviceRole)
            || StringUtils.isBlank(deviceRole.getName())
            || Objects.isNull(deviceRole.getType())
            || Objects.isNull(deviceRole.getIsDefault())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        // 获取之前是否存在默认门禁组
        DeviceRole newDeviceRole = null;
        if(null != deviceRole.getType()) {
            newDeviceRole = getDeviceRole(deviceRole.getType());
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        if(loginUserInfo ==null){
            loginUserInfo = deviceRole.getLoginUserInfo();
        }
        if(null != newDeviceRole && deviceRole.getIsDefault().equals(Constants.ZERO)) {
            DeviceRole updateDeviceRole = new DeviceRole();
            // 若现在新增数据设置默认门禁组;那么先把之前的默认门禁组状态改为不是默认的
            updateDeviceRole.setId(newDeviceRole.getId());
            updateDeviceRole.setEdirot(loginUserInfo.getId().toString());
            updateDeviceRole.setEditDate(new Date());
            updateDeviceRole.setIsDefault(Constants.ONE);
            deviceRoleMapper.updateById(updateDeviceRole);
        }
        DeviceRole insert = new DeviceRole();
        insert.setCreator(loginUserInfo.getId().toString());
        insert.setCreateDate(new Date());
        insert.setEdirot(loginUserInfo.getId().toString());
        insert.setEditDate(new Date());
        insert.setIsdeleted(Constants.ZERO);
        insert.setRemark(deviceRole.getRemark());
        insert.setName(deviceRole.getName());
        insert.setIsDefault(deviceRole.getIsDefault());
        insert.setType(deviceRole.getType());
        insert.setDoorIds(deviceRole.getDoorIds());
        insert.setDoorNames(deviceRole.getDoorNames());
        insert.setParkIds(deviceRole.getParkIds());
        insert.setParkNames(deviceRole.getParkNames());
        insert.setStatus(deviceRole.getStatus());
        insert.setHkId(deviceRole.getHkId());
        insert.setHkStatus(deviceRole.getHkStatus());
        insert.setHkDate(deviceRole.getHkDate());
 
        deviceRoleMapper.insert(insert);
        return insert.getId();
    }
 
    @Override
    public void deleteById(Integer id) {
        deviceRoleMapper.deleteById(id);
    }
 
    @Override
    public void delete(DeviceRole deviceRole) {
        UpdateWrapper<DeviceRole> deleteWrapper = new UpdateWrapper<>(deviceRole);
        deviceRoleMapper.delete(deleteWrapper);
    }
 
    @Override
    public void deleteByIdInBatch(List<Integer> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            return;
        }
        deviceRoleMapper.deleteBatchIds(ids);
    }
 
    @Override
    public void updateById(DeviceRole deviceRole) {
        DeviceRole model = deviceRoleMapper.selectById(deviceRole.getId());
        if(model == null){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        DeviceRole newDeviceRole = null;
        if(null != deviceRole.getType()) {
            newDeviceRole = getDeviceRole(deviceRole.getType());
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        if(loginUserInfo ==null){
            loginUserInfo = deviceRole.getLoginUserInfo();
        }
        if(null != newDeviceRole  && deviceRole.getIsDefault().equals(Constants.ZERO)) {
            DeviceRole update = new DeviceRole();
            update.setEdirot(loginUserInfo.getId().toString());
            update.setEditDate(new Date());
            update.setId(newDeviceRole.getId());
            update.setIsDefault(Constants.ONE);
            deviceRoleMapper.updateById(update);
        }
       int t = deviceRoleMapper.updateById(deviceRole);
       if(t>0){
            Thread tt = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        startUpdateMemberEmpower(model,deviceRole);
                    }catch (Exception e){
                        log.error("======门禁分组修改,更新人员权限失败==="+e.getMessage());
                    }
                }
            });
            tt.start();
       }
    }
    @Override
    public  void updateMemberRole(DeviceRole deviceRole) {
        deviceRole.setType("2");
        deviceRole.setIsdeleted(Constants.ZERO);
        List<DeviceRole> list =findList(deviceRole);
        if(list == null || list.size()==0){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        for(DeviceRole model :list){
            updateMemberRoleDO(model);
        }
    }
    public  void updateMemberRoleDO(DeviceRole model) {
        if(model.getDoorIds()  == null){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        String[] newIds =StringUtils.defaultString(model.getDoorIds()).split(",");
        List<Integer>  allids = getChangeIdsByArray(new String[]{},newIds);//最新设备
        List<MemberRole> memberRoleList = memberRoleMapper.selectList(new QueryWrapper<MemberRole>().lambda()
                .eq(MemberRole::getRoleId,model.getId())
                .eq(MemberRole::getIsdeleted,Constants.ZERO)
        );
        if(memberRoleList!=null && memberRoleList.size()>0) {
            int num =1;
            for (MemberRole memberRole : memberRoleList) {
                Member member = memberMapper.selectById(memberRole.getMemberId());
                if(member==null || member.getIsdeleted().equals(Constants.ONE)){
                    continue;
                }
                List<Integer>  addIds = new ArrayList<>();
                for(Integer did : allids){
                    Empower empower = empowerMapper.selectOne(new QueryWrapper<Empower>().lambda()
                            .eq(Empower::getMemberId,member.getId())
                            .eq(Empower::getDeviceId,did )
                            .orderByDesc(Empower::getId)
                            .last("limit 1"));
                    if(empower ==null || Constants.equalsInteger(empower.getIsdeleted(),Constants.ONE)){
                        addIds.add(did);
                    }
                }
                try {
                    HkSyncOrgUserToHKServiceImpl.dealChangeDeviceRoleEmpower(member,addIds,null,deviceRoleMapper,empowerMapper,deviceMapper);
                }catch (Exception e){
                    e.printStackTrace();
                }
                System.out.println("正在处理【"+model.getName()+"】======门禁数据【"+addIds.size()+"】====进度:【"+num+"|"+memberRoleList.size()+"】");
                num ++;
            }
        }
    }
 
    /**
     * 更新该权限下相关的人员最新全新下发
     * @param model
     * @param deviceRole
     */
    private void startUpdateMemberEmpower(DeviceRole model, DeviceRole deviceRole) {
        String[] ids = StringUtils.defaultString(model.getDoorIds()).split(",");
        String[] newIds =StringUtils.defaultString(deviceRole.getDoorIds()).split(",");
        List<Integer>  delIds = getChangeIdsByArray(newIds,ids);//删除的设备
        List<Integer>  addIds = getChangeIdsByArray(ids,newIds);//最新设备
        if((addIds==null ||addIds.size()==0)&&( delIds ==null || delIds.size() == 0 )){
            //如果没有变化,不做处理
            return;
        }
        List<Integer>  allids = getChangeIdsByArray(new String[]{},newIds);//最新设备
        List<MemberRole> memberRoleList = memberRoleMapper.selectList(new QueryWrapper<MemberRole>().lambda()
                .eq(MemberRole::getRoleId,model.getId())
                .eq(MemberRole::getIsdeleted,Constants.ZERO)
        );
        if(memberRoleList!=null && memberRoleList.size()>0){
            for(MemberRole memberRole : memberRoleList){
                //如果有人员授权了该权限
                Member member = memberMapper.selectById(memberRole.getMemberId());
                if(member==null || member.getIsdeleted().equals(Constants.ONE)){
                    continue;
                }
                MPJLambdaWrapper<MemberRole> queryWrapper = new MPJLambdaWrapper<>();
                queryWrapper.leftJoin(DeviceRole.class,DeviceRole::getId,MemberRole::getRoleId );
                queryWrapper.selectAll(MemberRole.class)
                        .selectAs(DeviceRole::getDoorIds, MemberRole::getDoorIds)
                        .eq(MemberRole::getMemberId,memberRole.getMemberId())
                        .eq(MemberRole::getIsdeleted,Constants.ZERO)
                        .ne(MemberRole::getRoleId,deviceRole.getId());
                List<MemberRole> tLis = memberRoleMapper.selectJoinList(MemberRole.class,queryWrapper);
                List<Integer>  actDelIds = getActChangeDoorIds(tLis,delIds);
                List<Integer>  actAddIds = getActChangeDoorIds(tLis,allids);
                HkSyncOrgUserToHKServiceImpl.dealChangeDeviceRoleEmpower(member,actAddIds,actDelIds,deviceRoleMapper,empowerMapper,deviceMapper);
            }
        }
    }
 
    /**
     * 根据用户当前最新的门禁角色,查询实际应该删除或者增加的门禁点权限
     * @param tLis
     * @param changeIds
     * @return
     */
    private List<Integer> getActChangeDoorIds(List<MemberRole> tLis, List<Integer> changeIds) {
        List<Integer> list = new ArrayList<>();
        for(MemberRole memberRole : tLis){
            String[] ids = StringUtils.defaultString(memberRole.getDoorIds()).split(",");
            if(ids!=null && ids.length>0){
                for (String s:ids){
                    list.add(Integer.parseInt(s));
                }
            }
        }
        List<Integer> actList = new ArrayList<>();
        if(list.size()>0){
            Flag:
            for (Integer t : changeIds){
                for (Integer tt : list){
                    if(Constants.equalsInteger(t,tt)){
                        continue Flag;
                    }
                }
                actList.add(t);
            }
        }
        return  actList;
    }
 
    private List<Integer> getChangeIdsByArray(String[] ids, String[] newIds) {
        List<Integer> list = new ArrayList<>();
        if(newIds!=null){
            FLAG :
            for(String s :newIds){
                for(String s1 :ids){
                    if(StringUtils.equals(s,s1)){
                        continue FLAG;
                    }
                }
                try {
                    list.add(Integer.parseInt(s));
                }catch (Exception e){
                        e.printStackTrace();
                }
            }
        }
        return list;
    }
    @Override
    public void updateStatusById(DeviceRole deviceRole) {
        // 获取之前是否存在默认门禁组
        DeviceRole newDeviceRole = null;
        if(null != deviceRole.getType()) {
            newDeviceRole = getDeviceRole(deviceRole.getType());
        }
        LoginUserInfo loginUserInfo = (LoginUserInfo)SecurityUtils.getSubject().getPrincipal();
        if(loginUserInfo ==null){
            loginUserInfo = deviceRole.getLoginUserInfo();
        }
        List<DeviceRole> deviceRoleList = new ArrayList<>();
        if(null != newDeviceRole) {
            DeviceRole update = new DeviceRole();
            update.setEdirot(loginUserInfo.getId().toString());
            update.setEditDate(new Date());
            update.setId(newDeviceRole.getId());
            update.setStatus(newDeviceRole.getStatus());
            update.setIsDefault(Constants.ONE);
            deviceRoleList.add(update);
        }
        DeviceRole updateTwo = new DeviceRole();
        updateTwo.setEdirot(loginUserInfo.getId().toString());
        updateTwo.setEditDate(new Date());
        updateTwo.setId(deviceRole.getId());
        updateTwo.setStatus(deviceRole.getStatus());
        updateTwo.setIsDefault(deviceRole.getIsDefault());
        deviceRoleList.add(updateTwo);
        // 最多2条,所有就没有写批量修改了
        for (DeviceRole data:deviceRoleList) {
            deviceRoleMapper.updateById(data);
        }
    }
 
    private DeviceRole getDeviceRole(String type) {
        LambdaQueryWrapper<DeviceRole> query = new LambdaQueryWrapper<>();
        query.eq(DeviceRole::getIsdeleted,Constants.ZERO)
                .eq(DeviceRole::getIsDefault,Constants.ZERO)
                .eq(DeviceRole::getType,type)
                .last(" limit 1");
        // 查询是否有默认门禁组,只能有一组默认门禁组
        DeviceRole getDeviceRole = deviceRoleMapper.selectOne(query);
        return getDeviceRole;
    }
 
    @Override
    public void updateByIdInBatch(List<DeviceRole> deviceRoles) {
        if (CollectionUtils.isEmpty(deviceRoles)) {
            return;
        }
        for (DeviceRole deviceRole: deviceRoles) {
            this.updateById(deviceRole);
        }
    }
 
    @Override
    public DeviceRole findById(Integer id) {
        return deviceRoleMapper.selectById(id);
    }
 
    @Override
    public DeviceRole findOne(DeviceRole deviceRole) {
        QueryWrapper<DeviceRole> wrapper = new QueryWrapper<>(deviceRole);
        return deviceRoleMapper.selectOne(wrapper);
    }
 
    @Override
    public List<DeviceRole> findList(DeviceRole deviceRole) {
        deviceRole.setIsdeleted(Constants.ZERO);
        QueryWrapper<DeviceRole> wrapper = new QueryWrapper<>(deviceRole);
        return deviceRoleMapper.selectList(wrapper);
    }
 
    @Override
    public PageData<DeviceRole> findPage(PageWrap<DeviceRole> pageWrap) {
        IPage<DeviceRole> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<DeviceRole> queryWrapper = new QueryWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        pageWrap.getModel().setIsdeleted(Constants.ZERO);
        queryWrapper.select("*,(select count(1) from member_role b where b.isdeleted=0 and b.role_id=device_role.id ) as memberNum");
        if (pageWrap.getModel().getId() != null) {
            queryWrapper.lambda().eq(DeviceRole::getId, pageWrap.getModel().getId());
        }
        if (pageWrap.getModel().getCreator() != null) {
            queryWrapper.lambda().eq(DeviceRole::getCreator, pageWrap.getModel().getCreator());
        }
        if (pageWrap.getModel().getCreateDate() != null) {
            queryWrapper.lambda().ge(DeviceRole::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
            queryWrapper.lambda().le(DeviceRole::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
        }
        if (pageWrap.getModel().getEdirot() != null) {
            queryWrapper.lambda().eq(DeviceRole::getEdirot, pageWrap.getModel().getEdirot());
        }
        if (pageWrap.getModel().getEditDate() != null) {
            queryWrapper.lambda().ge(DeviceRole::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
            queryWrapper.lambda().le(DeviceRole::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
        }
        if (pageWrap.getModel().getIsdeleted() != null) {
            queryWrapper.lambda().eq(DeviceRole::getIsdeleted, pageWrap.getModel().getIsdeleted());
        }
        if (pageWrap.getModel().getRemark() != null) {
            queryWrapper.lambda().eq(DeviceRole::getRemark, pageWrap.getModel().getRemark());
        }
        if (pageWrap.getModel().getName() != null) {
            queryWrapper.lambda().like(DeviceRole::getName, pageWrap.getModel().getName());
        }
        if (pageWrap.getModel().getIsDefault() != null) {
            queryWrapper.lambda().eq(DeviceRole::getIsDefault, pageWrap.getModel().getIsDefault());
        }
        if (StringUtils.isNotBlank(pageWrap.getModel().getType())) {
            if(pageWrap.getModel().getType().length() > 1) {
                String[] types = pageWrap.getModel().getType().split(",");
                queryWrapper.lambda().and(p-> p.eq(DeviceRole::getType, types[0])
                        .or()
                        .eq(DeviceRole::getType, types[1]));
            }else {
                queryWrapper.lambda().eq(DeviceRole::getType, pageWrap.getModel().getType());
            }
        }
        if (pageWrap.getModel().getDoorIds() != null) {
            queryWrapper.lambda().eq(DeviceRole::getDoorIds, pageWrap.getModel().getDoorIds());
        }
        if (pageWrap.getModel().getDoorNames() != null) {
            queryWrapper.lambda().eq(DeviceRole::getDoorNames, pageWrap.getModel().getDoorNames());
        }
        if (pageWrap.getModel().getParkIds() != null) {
            queryWrapper.lambda().eq(DeviceRole::getParkIds, pageWrap.getModel().getParkIds());
        }
        if (pageWrap.getModel().getParkNames() != null) {
            queryWrapper.lambda().eq(DeviceRole::getParkNames, pageWrap.getModel().getParkNames());
        }
        if (pageWrap.getModel().getStatus() != null) {
            queryWrapper.lambda().eq(DeviceRole::getStatus, pageWrap.getModel().getStatus());
        }
        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                queryWrapper.orderByDesc(sortData.getProperty());
            } else {
                queryWrapper.orderByAsc(sortData.getProperty());
            }
        }
        queryWrapper.lambda().orderByAsc( DeviceRole::getName);
        IPage<DeviceRole> newPage = deviceRoleMapper.selectPage(page, queryWrapper);
        if(null != newPage && newPage.getRecords().size() > 0) {
          List<DeviceRole> deviceRoleList = newPage.getRecords();
          /*    for (DeviceRole dto:deviceRoleList) {
                Member member = new Member();
                member.setIsdeleted(Constants.ZERO);
                member.setRoleIdParam("["+dto.getId()+"]");
                dto.setMemberNum( memberMapper.selectCount(new QueryWrapper<>(member)));
            }*/
            newPage.setRecords(deviceRoleList);
        }
        return PageData.from(newPage);
    }
 
    @Override
    public long count(DeviceRole deviceRole) {
        QueryWrapper<DeviceRole> wrapper = new QueryWrapper<>(deviceRole);
        return deviceRoleMapper.selectCount(wrapper);
    }
 
    @Override
    public List<DeviceRoleVO> findListByType(Integer type) {
        List<DeviceRole> deviceRoleList = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
                .eq(DeviceRole::getType,type)
                .eq(DeviceRole::getIsdeleted, Constants.ZERO)
                .eq(DeviceRole::getStatus, Constants.ONE)
        );
        List<DeviceRoleVO> deviceRoleVOList = new ArrayList<>();
        for (DeviceRole deviceRole:deviceRoleList) {
            DeviceRoleVO deviceRoleVO = new DeviceRoleVO();
            BeanUtils.copyProperties(deviceRole,deviceRoleVO);
            deviceRoleVOList.add(deviceRoleVO);
        }
        return deviceRoleVOList;
    }
 
 
 
 
 
 
 
}