yangys
2024-03-28 23a939ed820ee32f9a4309f9c81b7bab5a566f30
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
package com.qianwen.smartman.modules.cps.service.impl;
 
import java.util.ArrayList;
import java.util.List;
 
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.qianwen.core.log.exception.ServiceException;
import com.qianwen.core.tool.node.ForestNodeMerger;
import com.qianwen.core.tool.utils.Func;
import com.qianwen.smartman.common.constant.CommonConstant;
import com.qianwen.smartman.common.enums.StatusType;
import com.qianwen.smartman.common.utils.CommonUtil;
import com.qianwen.smartman.common.utils.Lambda;
import com.qianwen.smartman.common.utils.MessageUtils;
import com.qianwen.smartman.modules.cps.convert.OrganizationConvert;
import com.qianwen.smartman.modules.cps.dto.OrganizationDTO;
import com.qianwen.smartman.modules.cps.entity.CommonGroup;
import com.qianwen.smartman.modules.cps.entity.Employee;
import com.qianwen.smartman.modules.cps.excel.OrganizationExcel;
import com.qianwen.smartman.modules.cps.mapper.OrganizationMapper;
import com.qianwen.smartman.modules.cps.service.ICommonGroupService;
import com.qianwen.smartman.modules.cps.service.IOrganizationService;
import com.qianwen.smartman.modules.cps.vo.OrganizationSelectVO;
import com.qianwen.smartman.modules.cps.vo.OrganizationVO;
 
@Service
public class OrganizationServiceImpl implements IOrganizationService {
    private final OrganizationMapper organizationMapper;
    private final ICommonGroupService commonGroupService;
 
    
 
    public OrganizationServiceImpl(final OrganizationMapper organizationMapper, final ICommonGroupService commonGroupService) {
        this.organizationMapper = organizationMapper;
        this.commonGroupService = commonGroupService;
    }
 
    @Override // org.springblade.modules.cps.service.IOrganizationService
    public List<OrganizationDTO> selectList(OrganizationSelectVO organizationSelectVO) {
        List<OrganizationDTO> organizationList = this.organizationMapper.selectOrganizationList(organizationSelectVO);
        return calculateOrganizationPeopleNum(organizationList);
    }
 
    @Override // org.springblade.modules.cps.service.IOrganizationService
    @Transactional(rollbackFor = {Exception.class})
    public Boolean deleteOrganization(String ids, Integer type) {
        if (StatusType.REMOVE.getType().equals(type)) {
            CommonGroup commonGroup = this.commonGroupService.getOne(Lambda.<CommonGroup>create()
                      .eq(CommonGroup::getStatus, 1)
                      .in(CommonGroup::getParentId, Func.toLongList(ids))
                      .limit());
            /*
            CommonGroup commonGroup = (CommonGroup) this.commonGroupService.getOne(((ExtraLambdaQueryWrapper) ((ExtraLambdaQueryWrapper) Lambda.create().eq((v0) -> {
                return v0.getStatus();
            }, 1)).in((v0) -> {
                return v0.getParentId();
            }, Func.toLongList(ids))).limit());*/
            if (Func.isNotEmpty(commonGroup)) {
                throw new ServiceException(MessageUtils.message("cps.organization.delete.sub.dept", new Object[0]));
            }
            Employee employee = this.organizationMapper.getOneEmployeeByOrganizationIdList(Func.toLongList(ids));
            if (Func.isNotEmpty(employee)) {
                throw new ServiceException(MessageUtils.message("cps.organization.delete.failed", new Object[0]));
            }
            return Boolean.valueOf(this.commonGroupService.removeByIds(Func.toLongList(ids)));
        }
        
        List<CommonGroup> groups = this.commonGroupService.list(Wrappers.<CommonGroup>query()
                .lambda()
                .in(CommonGroup::getParentId, Func.toLongList(ids)));
        /*
        List<CommonGroup> groups = this.commonGroupService.list((Wrapper) Wrappers.query().lambda().in((v0) -> {
            return v0.getParentId();
        }, Func.toLongList(ids)));*/
        if (Func.isEmpty(groups)) {
            return this.commonGroupService.changeStatus(Func.toLongList(ids), CommonConstant.DEACTIVATE);
        }
        boolean match = groups.stream().anyMatch(g -> {
            return g.getStatus().equals(1);
        });
        if (match) {
            throw new ServiceException(MessageUtils.message("cps.organization.disable.sub.dept", new Object[0]));
        }
        return this.commonGroupService.changeStatus(Func.toLongList(ids), CommonConstant.DEACTIVATE);
    }
 
    @Override // org.springblade.modules.cps.service.IOrganizationService
    public List<OrganizationExcel> getExportOrganizationData(OrganizationSelectVO organizationSelectVO) {
        List<OrganizationDTO> list = selectList(organizationSelectVO);
        List<OrganizationVO> tree = ForestNodeMerger.merge(OrganizationConvert.INSTANCE.convert(list));
        return OrganizationConvert.INSTANCE.convertToExcel(CommonUtil.treeToList(tree));
    }
 
    private List<OrganizationDTO> calculateOrganizationPeopleNum(List<OrganizationDTO> organizationList) {
        List<OrganizationDTO> result = new ArrayList<>();
        organizationList.forEach(x -> {
            int peopleNum = organizationList.stream().filter(p -> {
                return p.getCode().indexOf(x.getCode()) == 0;
            }).mapToInt((v0) -> {
                return v0.getPeopleNum();
            }).sum();
            OrganizationDTO organizationDTO = OrganizationConvert.INSTANCE.convert(x);
            organizationDTO.setParentName(Func.isEmpty(organizationDTO.getParentName()) ? "——" : organizationDTO.getParentName());
            organizationDTO.setPeopleNum(Integer.valueOf(peopleNum));
            result.add(organizationDTO);
        });
        return result;
    }
}