OrganizationStructureServiceImpl.java 9.6 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1 2
package pwc.taxtech.atms.service.impl;

3
import com.alibaba.fastjson.JSON;
eddie.woo's avatar
eddie.woo committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import pwc.taxtech.atms.common.AuthUserHelper;
import pwc.taxtech.atms.common.CommonConstants;
import pwc.taxtech.atms.common.CommonUtils;
import pwc.taxtech.atms.common.OperateLogType;
import pwc.taxtech.atms.common.OperationAction;
import pwc.taxtech.atms.common.OperationModule;
import pwc.taxtech.atms.dao.OrganizationStructureMapper;
import pwc.taxtech.atms.dto.IdModel;
import pwc.taxtech.atms.dto.OperationLogDto;
import pwc.taxtech.atms.dto.OrganizationStructureDto;
import pwc.taxtech.atms.dto.OrganizationStructureInputDto;
import pwc.taxtech.atms.dto.UpdateLogParams;
21 22
import pwc.taxtech.atms.entity.OrganizationStructure;
import pwc.taxtech.atms.entity.OrganizationStructureExample;
23
import pwc.taxtech.atms.exception.ApplicationException;
eddie.woo's avatar
eddie.woo committed
24

25 26 27 28
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

eddie.woo's avatar
eddie.woo committed
29
@Service
30
public class OrganizationStructureServiceImpl {
eddie.woo's avatar
eddie.woo committed
31 32 33 34 35 36 37

    private static final Logger logger = LoggerFactory.getLogger(OrganizationStructureServiceImpl.class);

    @Autowired
    private OrganizationStructureMapper organizationStructureMapper;

    @Autowired
38
    private OperationLogServiceImpl operationLogService;
eddie.woo's avatar
eddie.woo committed
39 40

    @Autowired
41
    private OrganizationServiceImpl organizationService;
eddie.woo's avatar
eddie.woo committed
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

    @Autowired
    private AuthUserHelper authUserHelper;

    public List<OrganizationStructureDto> getOrganizationStructures() {
        logger.debug("OrganizationStructureService getOrganizationStructures");
        OrganizationStructureExample organizationStructureExample = new OrganizationStructureExample();
        organizationStructureExample.setOrderByClause("name ASC");
        List<OrganizationStructure> organizationStructureList = organizationStructureMapper
                .selectByExample(organizationStructureExample);
        return rotateOrganizationStructureList(organizationStructureList);
    }

    public void addOrganizationStructures(List<OrganizationStructureInputDto> organizationStructureDtoList) {
        logger.debug("OrganizationStructureService addOrganizationStructure");
        logger.debug("organization structure to add: {}", JSON.toJSONString(organizationStructureDtoList, true));
        if (organizationStructureDtoList.isEmpty()) {
            throw new ApplicationException(CommonConstants.JSONNULLOBJECT);
        }

        for (OrganizationStructureInputDto organizationStructureDto : organizationStructureDtoList) {
            addOrganizationStructure(organizationStructureDto);
        }

    }
67

eddie.woo's avatar
eddie.woo committed
68 69
    public void addOrganizationStructure(OrganizationStructureInputDto organizationStructureDto) {
        OrganizationStructure organizationStructure = rotateOrganizationStructureDto(organizationStructureDto);
70
        organizationStructure.setId(CommonUtils.getUUID());
eddie.woo's avatar
eddie.woo committed
71 72 73 74 75 76 77 78 79 80 81
        organizationStructure.setCreateTime(new Date());
        organizationStructure.setUpdateTime(new Date());
        organizationStructureMapper.insert(organizationStructure);

        // operation log
        OperationLogDto operationLogDto = new OperationLogDto();
        makeUpOperationLogDto(operationLogDto);
        operationLogDto.setOperationObject(organizationStructureDto.getName());
        operationLogDto.setAction(OperationAction.New.value());
        operationLogService.addOperationLog(operationLogDto);
    }
82

eddie.woo's avatar
eddie.woo committed
83 84 85 86 87 88 89
    private void makeUpOperationLogDto(OperationLogDto operationLogDto) {
        operationLogDto.setModule(OperationModule.BasicDataOrganizationStructure.value());
        operationLogDto.setLogType(OperateLogType.OperationLogBasicData.value());
    }

    public Integer deleteOrganizationStructure(IdModel idModel) {
        logger.debug("OrganizationStructureService deleteOrganizationStructure");
90
        logger.debug("organization structure to delete, id: {}", JSON.toJSONString(idModel, true));
91

92
        if (idModel == null || idModel.getId() == null) {
eddie.woo's avatar
eddie.woo committed
93 94 95
            throw new ApplicationException(CommonConstants.JSONNULLOBJECT);
        }

96
        OrganizationStructure organizationStructure = organizationStructureMapper.selectByPrimaryKey(idModel.getId());
eddie.woo's avatar
eddie.woo committed
97 98

        if (organizationStructure == null) {
99
            throw new ApplicationException("can't find OrganizationStructure to delete, id: " + idModel.getId());
eddie.woo's avatar
eddie.woo committed
100
        }
101
        int result = organizationStructureMapper.deleteByPrimaryKey(idModel.getId());
eddie.woo's avatar
eddie.woo committed
102 103 104 105 106 107 108 109 110 111 112 113 114

        // operation log
        OperationLogDto operationLogDto = new OperationLogDto();
        makeUpOperationLogDto(operationLogDto);
        operationLogDto.setAction(OperationAction.Delete.value());
        operationLogService.addOperationLog(operationLogDto);

        return result;
    }

    public Boolean updateOrganizationStructures(List<OrganizationStructureInputDto> organizationStructureDtoList) {
        logger.debug("OrganizationStructureService updateOrganizationStructures");
        logger.debug("organization structure to update: {}", JSON.toJSONString(organizationStructureDtoList, true));
115

eddie.woo's avatar
eddie.woo committed
116 117 118 119 120 121 122
        if (organizationStructureDtoList.isEmpty()) {
            throw new ApplicationException(CommonConstants.JSONNULLOBJECT);
        }

        for (OrganizationStructureInputDto organizationStructureDto : organizationStructureDtoList) {
            //isActive changed or not
            boolean isStatusChangeOperation = false;
123

124
            if (organizationStructureDto == null || !StringUtils.hasText(organizationStructureDto.getId())) {
eddie.woo's avatar
eddie.woo committed
125 126
                throw new ApplicationException("primary key can't be null");
            }
127

eddie.woo's avatar
eddie.woo committed
128 129
            // current OrganizationStructure
            OrganizationStructure organizationStructure = organizationStructureMapper
130
                    .selectByPrimaryKey(organizationStructureDto.getId());
eddie.woo's avatar
eddie.woo committed
131
            if (organizationStructure == null) {
132
                throw new ApplicationException("can't find organizationStructure, id: " + organizationStructureDto.getId());
eddie.woo's avatar
eddie.woo committed
133
            }
134

eddie.woo's avatar
eddie.woo committed
135 136 137
            //copy current OrganizationStructure as tmp
            OrganizationStructure originOrganizationStructure = new OrganizationStructure();
            CommonUtils.copyProperties(organizationStructure, originOrganizationStructure);
138

eddie.woo's avatar
eddie.woo committed
139 140 141 142 143
            if (organizationStructureDto.getIsActive() != organizationStructure.getIsActive() || organizationStructureDto.getName() != organizationStructure.getName()) {
                isStatusChangeOperation = true;
                organizationStructure.setIsActive(organizationStructureDto.getIsActive());
                organizationStructure.setName(organizationStructureDto.getName());
                if (!organizationStructureDto.getIsActive()
144
                        && organizationService.isOrganizationStructureExists(organizationStructureDto.getId())) {
sherlock's avatar
sherlock committed
145 146 147
//                    continue;
//                    return false;
                    throw new ApplicationException("the organization must not contain sub-organization!");
eddie.woo's avatar
eddie.woo committed
148 149 150 151
                }
            }
            organizationStructure.setUpdateTime(new Date());
            organizationStructureMapper.updateByPrimaryKey(organizationStructure);
152

eddie.woo's avatar
eddie.woo committed
153
            //add operation log
154
            if (isStatusChangeOperation) {
eddie.woo's avatar
eddie.woo committed
155 156 157 158
                UpdateLogParams updateLogParams = new UpdateLogParams();
                updateLogParams.setOperationObject(originOrganizationStructure.getName());
                updateLogParams.setOriginalState(originOrganizationStructure);
                updateLogParams.setUpdateState(organizationStructure);
159
                updateLogParams.setOperationUser(authUserHelper.getCurrentAuditor().get());
eddie.woo's avatar
eddie.woo committed
160 161 162 163 164 165 166 167 168 169 170 171 172 173
                updateLogParams.setOperationModule(OperationModule.BasicDataOrganizationStructure.value());
                updateLogParams.setOperationAction(OperationAction.Update.value());
                updateLogParams.setOperateLogType(OperateLogType.OperationLogBasicData.value());
                //check how many properties being updated and the log number should be same
                operationLogService.updateDataAddLog(updateLogParams);
            }
        }

        return true;
    }


    private OrganizationStructure rotateOrganizationStructureDto(OrganizationStructureInputDto organizationStructureDto) {
        OrganizationStructure organizationStructure = new OrganizationStructure();
174
        organizationStructure.setId(organizationStructureDto.getId());
eddie.woo's avatar
eddie.woo committed
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
        organizationStructure.setName(organizationStructureDto.getName());
        organizationStructure.setIsActive(organizationStructureDto.getIsActive());
        return organizationStructure;
    }

    private List<OrganizationStructureDto> rotateOrganizationStructureList(
            List<OrganizationStructure> organizationStructureList) {
        List<OrganizationStructureDto> organizationStructureDtoList = new ArrayList<>();
        if (organizationStructureList != null && !organizationStructureList.isEmpty()) {
            for (OrganizationStructure organizationStructure : organizationStructureList) {
                organizationStructureDtoList.add(rotateOrganizationStructure(organizationStructure));
            }
        }
        return organizationStructureDtoList;
    }

    private OrganizationStructureDto rotateOrganizationStructure(OrganizationStructure organizationStructure) {
        OrganizationStructureDto organizationStructureDto = new OrganizationStructureDto();
193
        organizationStructureDto.setId(organizationStructure.getId());
eddie.woo's avatar
eddie.woo committed
194 195 196 197 198
        organizationStructureDto.setIsActive(organizationStructure.getIsActive());
        organizationStructureDto.setName(organizationStructure.getName());
        return organizationStructureDto;
    }
}