BusinessUnitServiceImpl.java 9.08 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
package pwc.taxtech.atms.service.impl;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
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.BusinessUnitMapper;
import pwc.taxtech.atms.dto.BusinessUnitDto;
import pwc.taxtech.atms.dto.BusinessUnitInputDto;
import pwc.taxtech.atms.dto.IdModel;
import pwc.taxtech.atms.dto.OperationLogDto;
import pwc.taxtech.atms.dto.UpdateLogParams;
21 22 23
import pwc.taxtech.atms.entity.BusinessUnit;
import pwc.taxtech.atms.entity.BusinessUnitExample;
import pwc.taxtech.atms.entity.BusinessUnitExample.Criteria;
24 25 26 27 28
import pwc.taxtech.atms.exception.ApplicationException;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
eddie.woo's avatar
eddie.woo committed
29 30 31 32

/**
 */
@Service
33
public class BusinessUnitServiceImpl {
eddie.woo's avatar
eddie.woo committed
34 35 36 37 38 39 40

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

    @Autowired
    private BusinessUnitMapper businessUnitMapper;

    @Autowired
41
    private OperationLogServiceImpl operationLogService;
eddie.woo's avatar
eddie.woo committed
42 43

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

    @Autowired
    private AuthUserHelper authUserHelper;

    public List<BusinessUnitDto> getBusinessUnits() {
        logger.debug("BusinessUnitServiceImpl getBusinessUnits");
        BusinessUnitExample businessUnitExample = new BusinessUnitExample();
        businessUnitExample.setOrderByClause("name ASC");
        List<BusinessUnit> businessUnitList = businessUnitMapper.selectByExample(businessUnitExample);
        return rotateBusinessUnitList(businessUnitList);
    }

    @Transactional
    public void addBusinessUnits(List<BusinessUnitInputDto> businessUnitDtoList) {
        logger.debug("BusinessUnitServiceImpl addBusinessUnits");
        if (businessUnitDtoList.isEmpty()) {
            throw new ApplicationException(CommonConstants.JSONNULLOBJECT);
        }
        for (BusinessUnitInputDto businessUnitDto : businessUnitDtoList) {
            addBusinessUnit(businessUnitDto);
        }
    }

    public void addBusinessUnit(BusinessUnitInputDto businessUnitDto) {
        BusinessUnit businessUnit = rotateBusinessUnitDtoForInput(businessUnitDto);
70
        businessUnit.setId(CommonUtils.getUUID());
eddie.woo's avatar
eddie.woo committed
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
        businessUnit.setCreateTime(new Date());
        businessUnit.setUpdateTime(new Date());
        businessUnitMapper.insert(businessUnit);

        // Log operation
        OperationLogDto operationLogDto = new OperationLogDto();
        operationLogDto.setOperationObject(businessUnitDto.getName());
        operationLogDto.setModule(OperationModule.BasicDataBusinessUnit.value());
        operationLogDto.setAction(OperationAction.New.value());
        operationLogDto.setLogType(OperateLogType.OperationLogBasicData.value());
        operationLogService.addOperationLog(operationLogDto);
    }

    @Transactional
    public Integer deleteBusinessUnit(IdModel idModel) {
        logger.debug("BusinessUnitServiceImpl deleteBusinessUnit");

88
        if (idModel == null || !StringUtils.hasText(idModel.getId())) {
eddie.woo's avatar
eddie.woo committed
89 90 91
            throw new ApplicationException(CommonConstants.JSONNULLOBJECT);
        }

92
        BusinessUnit businessUnit = businessUnitMapper.selectByPrimaryKey(idModel.getId());
eddie.woo's avatar
eddie.woo committed
93 94

        if (businessUnit == null) {
95
            throw new ApplicationException("can't find business unit to delete, id: " + idModel.getId());
eddie.woo's avatar
eddie.woo committed
96
        }
97
        int result = businessUnitMapper.deleteByPrimaryKey(idModel.getId());
eddie.woo's avatar
eddie.woo committed
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

        // Log operation
        OperationLogDto operationLogDto = new OperationLogDto();
        operationLogDto.setModule(OperationModule.BasicDataBusinessUnit.value());
        operationLogDto.setAction(OperationAction.Delete.value());
        operationLogDto.setLogType(OperateLogType.OperationLogBasicData.value());
        operationLogDto.setOperationObject("");
        operationLogService.addOperationLog(operationLogDto);

        return result;
    }

    @Transactional
    public Boolean updateBusinessUnits(List<BusinessUnitDto> businessUnitDtoList) {
        logger.debug("BusinessUnitServiceImpl updateBusinessUnits");

        if (businessUnitDtoList.isEmpty()) {
            throw new ApplicationException(CommonConstants.JSONNULLOBJECT);
        }

        for (BusinessUnitDto businessUnitDto : businessUnitDtoList) {
            // isActive changed or not
            boolean isStatusChangeOperation = false;

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

            // current businessUnit
127
            BusinessUnit businessUnit = businessUnitMapper.selectByPrimaryKey(businessUnitDto.getId());
eddie.woo's avatar
eddie.woo committed
128
            if (businessUnit == null) {
129
                throw new ApplicationException("can't find business unit, id: " + businessUnitDto.getId());
eddie.woo's avatar
eddie.woo committed
130 131 132 133 134 135 136 137 138 139 140 141
            }

            // copy current businessUnit as tmp
            BusinessUnit originBusinessUnit = new BusinessUnit();
            CommonUtils.copyProperties(businessUnit, originBusinessUnit);

            if (businessUnitDto.getIsActive() != businessUnit.getIsActive()
                    || businessUnitDto.getName() != businessUnit.getName()) {
                isStatusChangeOperation = true;
                businessUnit.setIsActive(businessUnitDto.getIsActive());
                businessUnit.setName(businessUnitDto.getName());
                if (!businessUnitDto.getIsActive()
142
                        && organizationService.isOrganizationStructureExists(businessUnitDto.getId())) {
eddie.woo's avatar
eddie.woo committed
143 144 145 146 147 148 149 150 151 152 153
                    continue;
                }
            }
            businessUnit.setUpdateTime(new Date());
            businessUnitMapper.updateByPrimaryKey(businessUnit);

            if (isStatusChangeOperation) {
                UpdateLogParams updateLogParams = new UpdateLogParams();
                updateLogParams.setOperationObject(originBusinessUnit.getName());
                updateLogParams.setOriginalState(originBusinessUnit);
                updateLogParams.setUpdateState(businessUnit);
154
                updateLogParams.setOperationUser(authUserHelper.getCurrentAuditor().get());
eddie.woo's avatar
eddie.woo committed
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
                updateLogParams.setOperationModule(OperationModule.BasicDataBusinessUnit.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 List<BusinessUnitDto> rotateBusinessUnitList(List<BusinessUnit> businessUnitList) {
        List<BusinessUnitDto> businessUnitDtoList = new ArrayList<>();
        if (businessUnitList != null && !businessUnitList.isEmpty()) {
            for (BusinessUnit businessUnit : businessUnitList) {
                businessUnitDtoList.add(rotateBusinessUnit(businessUnit));
            }
        }
        return businessUnitDtoList;
    }

    private BusinessUnitDto rotateBusinessUnit(BusinessUnit businessUnit) {
        BusinessUnitDto businessUnitDto = new BusinessUnitDto();
178
        businessUnitDto.setId(businessUnit.getId());
eddie.woo's avatar
eddie.woo committed
179 180 181 182 183 184 185
        businessUnitDto.setIsActive(businessUnit.getIsActive());
        businessUnitDto.setName(businessUnit.getName());
        return businessUnitDto;
    }

    private BusinessUnit rotateBusinessUnitDto(BusinessUnitDto businessUnitDto) {
        BusinessUnit businessUnit = new BusinessUnit();
186
        businessUnit.setId(businessUnitDto.getId());
eddie.woo's avatar
eddie.woo committed
187 188 189 190
        businessUnit.setName(businessUnitDto.getName());
        businessUnit.setIsActive(businessUnitDto.getIsActive());
        return businessUnit;
    }
191

eddie.woo's avatar
eddie.woo committed
192 193
    private BusinessUnit rotateBusinessUnitDtoForInput(BusinessUnitInputDto businessUnitDto) {
        BusinessUnit businessUnit = new BusinessUnit();
194
        businessUnit.setId(businessUnitDto.getId());
eddie.woo's avatar
eddie.woo committed
195 196 197 198 199 200 201 202 203 204 205 206 207 208
        businessUnit.setName(businessUnitDto.getName());
        businessUnit.setIsActive(businessUnitDto.getIsActive());
        return businessUnit;
    }

    public List<BusinessUnit> findByNameAndIsActive(String name, Boolean isActive) {
        logger.debug("This is a method similar to JPA which find business units by name and isActive");
        BusinessUnitExample example = new BusinessUnitExample();
        Criteria criteria = example.createCriteria();
        criteria.andNameEqualTo(name);
        criteria.andIsActiveEqualTo(isActive);

        return businessUnitMapper.selectByExample(example);
    }
209

eddie.woo's avatar
eddie.woo committed
210 211 212 213 214 215 216
    public List<BusinessUnit> findByIsActiveTrue() {
        BusinessUnitExample example = new BusinessUnitExample();
        example.createCriteria().andIsActiveEqualTo(true);
        return businessUnitMapper.selectByExample(example);
    }

}