EnterpriseAccountSetServiceImpl.java 25.4 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
package pwc.taxtech.atms.service.impl;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import pwc.taxtech.atms.common.AuthUserHelper;
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.common.message.EnterpriseAccountSetMessage;
import pwc.taxtech.atms.common.message.EnterpriseAccountSetOrgMessage;
import pwc.taxtech.atms.dao.EnterpriseAccountSetMapper;
import pwc.taxtech.atms.dao.EnterpriseAccountSetOrgMapper;
import pwc.taxtech.atms.dao.OrganizationMapper;
18
import pwc.taxtech.atms.dpo.EnterpriseAccountSetOrgDto;
eddie.woo's avatar
eddie.woo committed
19 20 21
import pwc.taxtech.atms.dto.OperationResultDto;
import pwc.taxtech.atms.dto.UpdateLogParams;
import pwc.taxtech.atms.dto.epaccount.EnterpriseAccountSetDto;
22 23 24 25 26 27
import pwc.taxtech.atms.entity.EnterpriseAccountSet;
import pwc.taxtech.atms.entity.EnterpriseAccountSetExample;
import pwc.taxtech.atms.entity.EnterpriseAccountSetOrg;
import pwc.taxtech.atms.entity.EnterpriseAccountSetOrgExample;
import pwc.taxtech.atms.entity.EnterpriseAccountSetOrgExample.Criteria;
import pwc.taxtech.atms.entity.Organization;
eddie.woo's avatar
eddie.woo committed
28

29 30 31 32 33
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

eddie.woo's avatar
eddie.woo committed
34
@Service
35 36 37 38 39 40 41 42 43 44
public class EnterpriseAccountSetServiceImpl {

    @Autowired
    private EnterpriseAccountSetMapper enterpriseAccountSetMapper;
    @Autowired
    private EnterpriseAccountSetOrgMapper enterpriseAccountSetOrgMapper;
    @Autowired
    private OrganizationMapper organizationMapper;

    @Autowired
45
    private OperationLogServiceImpl operationLogService;
46 47 48

    @Autowired
    private AuthUserHelper authUserHelper;
eddie.woo's avatar
eddie.woo committed
49 50 51 52


    /*
     * (non-Javadoc)
53
     *
eddie.woo's avatar
eddie.woo committed
54 55 56 57 58 59 60 61 62 63 64 65 66
     * @see pwc.taxtech.atms.service.EnterpriseAccountSetService#
     * getEnterpriseAccountSetList()
     */
    public List<EnterpriseAccountSetDto> getEnterpriseAccountSetList() {

        EnterpriseAccountSetExample example = new EnterpriseAccountSetExample();
        example.setOrderByClause("name ASC");
        List<EnterpriseAccountSet> enterpriseAccountSetList = enterpriseAccountSetMapper.selectByExample(example);
        return populateEnterpriseAccountSetDtoList(enterpriseAccountSetList);
    }

    /*
     * (non-Javadoc)
67
     *
eddie.woo's avatar
eddie.woo committed
68 69 70 71
     * @see
     * pwc.taxtech.atms.service.EnterpriseAccountService#GetEnterpriseAccountSet(
     * java.lang.String)
     */
72
    public EnterpriseAccountSetDto getEnterpriseAccountSet(String enterpriseAccountSetId) {
eddie.woo's avatar
eddie.woo committed
73
        EnterpriseAccountSet enterpriseAccountSet = enterpriseAccountSetMapper
74
                .selectByPrimaryKey(enterpriseAccountSetId);
eddie.woo's avatar
eddie.woo committed
75 76 77 78 79 80 81 82 83 84 85 86

        EnterpriseAccountSetDto enterpriseAccountSetDto = new EnterpriseAccountSetDto();
        enterpriseAccountSetDto.setEnterpriseAccountSetOrgList(new ArrayList<>());
        enterpriseAccountSetDto.setIsImportAppend(false);
        if (enterpriseAccountSet == null) {
            enterpriseAccountSetDto.setEnterpriseAccountSetOrgList(new ArrayList<>());
            return enterpriseAccountSetDto;
        }

        CommonUtils.copyProperties(enterpriseAccountSet, enterpriseAccountSetDto);

        EnterpriseAccountSetOrgExample enterpriseAccountSetOrgExample = new EnterpriseAccountSetOrgExample();
87
        enterpriseAccountSetOrgExample.createCriteria().andEnterpriseAccountSetIdEqualTo(enterpriseAccountSetId);
eddie.woo's avatar
eddie.woo committed
88 89 90 91 92 93 94 95
        List<EnterpriseAccountSetOrg> enterpriseAccountSetOrgList = enterpriseAccountSetOrgMapper
                .selectByExampleWithAssociation(enterpriseAccountSetOrgExample);
        if (enterpriseAccountSetOrgList != null && !enterpriseAccountSetOrgList.isEmpty()) {
            List<EnterpriseAccountSetOrgDto> enterpriseAccountSetOrgDtoList = new ArrayList<>();
            for (EnterpriseAccountSetOrg entity : enterpriseAccountSetOrgList) {
                EnterpriseAccountSetOrgDto enterpriseAccountSetOrgDto = new EnterpriseAccountSetOrgDto();
                CommonUtils.copyProperties(entity, enterpriseAccountSetOrgDto);
                enterpriseAccountSetOrgDto.setEffectiveDateStr(
96
                        enterpriseAccountSetOrgDto.getEffectiveDate() == null ? "" : new DateTime(entity.getEffectiveDate()).toString("yyyy-MM"));
eddie.woo's avatar
eddie.woo committed
97
                enterpriseAccountSetOrgDto.setExpiredDateStr(
98
                        enterpriseAccountSetOrgDto.getExpiredDate() == null ? "" : new DateTime(entity.getExpiredDate()).toString("yyyy-MM"));
eddie.woo's avatar
eddie.woo committed
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
                enterpriseAccountSetOrgDto.setEnterpriseAccountSetName("");
                enterpriseAccountSetOrgDto.setOrganizationName(
                        entity.getOrganization() == null ? "" : entity.getOrganization().getName());
                enterpriseAccountSetOrgDto.setOverlapList(new ArrayList<>());

                enterpriseAccountSetOrgDtoList.add(enterpriseAccountSetOrgDto);
            }
            enterpriseAccountSetDto.setEnterpriseAccountSetOrgList(enterpriseAccountSetOrgDtoList);
        }
        return enterpriseAccountSetDto;
    }


    /* (non-Javadoc)
     * @see pwc.taxtech.atms.service.EnterpriseAccountService#updateEnterpriseAccountSet(pwc.taxtech.atms.service.dto.EnterpriseAccountSetDto)
     */
    @Transactional
    public OperationResultDto<?> updateEnterpriseAccountSet(EnterpriseAccountSetDto enterpriseAccountSetDto) {

118
        EnterpriseAccountSet entity = enterpriseAccountSetMapper.selectByPrimaryKey(enterpriseAccountSetDto.getId());
eddie.woo's avatar
eddie.woo committed
119 120
        EnterpriseAccountSet updateToEntity = new EnterpriseAccountSet();
        CommonUtils.copyProperties(entity, updateToEntity);
121

eddie.woo's avatar
eddie.woo committed
122 123
        boolean isChangeEnterpriseAccountSetName = false;
        boolean isChangeEnterpriseAccountSetCode = false;
124

eddie.woo's avatar
eddie.woo committed
125
        //name change
126
        if (!entity.getName().equals(enterpriseAccountSetDto.getName())) {
eddie.woo's avatar
eddie.woo committed
127
            OperationResultDto<?> validate = enterpriseAccountSetNameValidate(enterpriseAccountSetDto);
128
            if (!validate.getResult()) {
eddie.woo's avatar
eddie.woo committed
129 130 131 132 133
                return validate;
            }
            updateToEntity.setName(enterpriseAccountSetDto.getName());
            isChangeEnterpriseAccountSetName = true;
        }
134

eddie.woo's avatar
eddie.woo committed
135
        //code change
136
        if (!entity.getCode().equals(enterpriseAccountSetDto.getCode())) {
eddie.woo's avatar
eddie.woo committed
137
            OperationResultDto<?> validate = enterpriseAccountSetCodeValidate(enterpriseAccountSetDto);
138
            if (!validate.getResult()) {
eddie.woo's avatar
eddie.woo committed
139 140 141 142 143
                return validate;
            }
            updateToEntity.setCode(enterpriseAccountSetDto.getCode());
            isChangeEnterpriseAccountSetCode = true;
        }
144

eddie.woo's avatar
eddie.woo committed
145 146
        //update DB
        enterpriseAccountSetMapper.updateByPrimaryKeySelective(updateToEntity);
147

eddie.woo's avatar
eddie.woo committed
148
        //add operation log
149 150
        if (isChangeEnterpriseAccountSetName || isChangeEnterpriseAccountSetCode) {

eddie.woo's avatar
eddie.woo committed
151
            UpdateLogParams updateLogParams = new UpdateLogParams();
152
            updateLogParams.setOperationUser(authUserHelper.getCurrentAuditor().get());
eddie.woo's avatar
eddie.woo committed
153 154 155 156 157 158 159 160
            updateLogParams.setUpdateState(updateToEntity);
            updateLogParams.setOriginalState(entity);
            updateLogParams.setOperationContent("");
            updateLogParams.setOperationModule(OperationModule.BasicDataEnterpriceAccount.value());
            updateLogParams.setComment("");
            updateLogParams.setOperateLogType(OperateLogType.OperationLogEnterPrise.value());
            updateLogParams.setOperationAction(OperationAction.UpdateEnterpriseAccountSet.value());
            updateLogParams.setOperationObject(entity.getCode());
161

eddie.woo's avatar
eddie.woo committed
162 163 164 165 166
            operationLogService.updateDataAddLog(updateLogParams);
        }
        return new OperationResultDto<>(true);
    }

167

eddie.woo's avatar
eddie.woo committed
168 169 170 171
    /* (non-Javadoc)
     * @see pwc.taxtech.atms.service.EnterpriseAccountService#enterpriseAccountSetNameValidate(pwc.taxtech.atms.service.dto.EnterpriseAccountSetDto)
     */
    public OperationResultDto<?> enterpriseAccountSetNameValidate(EnterpriseAccountSetDto enterpriseAccountSetDto) {
172

eddie.woo's avatar
eddie.woo committed
173 174
        EnterpriseAccountSetExample example = new EnterpriseAccountSetExample();
        EnterpriseAccountSetExample.Criteria criteria = example.createCriteria();
175
        if (enterpriseAccountSetDto.getId() != null) {
176
            criteria.andIdNotEqualTo(enterpriseAccountSetDto.getId());
eddie.woo's avatar
eddie.woo committed
177 178 179
        }
        criteria.andNameEqualTo(enterpriseAccountSetDto.getName());
        List<EnterpriseAccountSet> enterpriseAccountSetList = enterpriseAccountSetMapper.selectByExample(example);
180

eddie.woo's avatar
eddie.woo committed
181 182 183 184 185
        if (enterpriseAccountSetList != null && !enterpriseAccountSetList.isEmpty()) {
            return new OperationResultDto<>(false, EnterpriseAccountSetMessage.EnterpriseAccountSetNameRepeat);
        }
        return new OperationResultDto<>(true);
    }
186

eddie.woo's avatar
eddie.woo committed
187 188 189 190
    /* (non-Javadoc)
     * @see pwc.taxtech.atms.service.EnterpriseAccountService#enterpriseAccountSetCodeValidate(pwc.taxtech.atms.service.dto.EnterpriseAccountSetDto)
     */
    public OperationResultDto<?> enterpriseAccountSetCodeValidate(EnterpriseAccountSetDto enterpriseAccountSetDto) {
191

eddie.woo's avatar
eddie.woo committed
192 193
        EnterpriseAccountSetExample example = new EnterpriseAccountSetExample();
        EnterpriseAccountSetExample.Criteria criteria = example.createCriteria();
194
        if (enterpriseAccountSetDto.getId() != null) {
195
            criteria.andIdNotEqualTo(enterpriseAccountSetDto.getId());
eddie.woo's avatar
eddie.woo committed
196 197 198
        }
        criteria.andCodeEqualTo(enterpriseAccountSetDto.getCode());
        List<EnterpriseAccountSet> enterpriseAccountSetList = enterpriseAccountSetMapper.selectByExample(example);
199

eddie.woo's avatar
eddie.woo committed
200 201 202 203 204
        if (enterpriseAccountSetList != null && !enterpriseAccountSetList.isEmpty()) {
            return new OperationResultDto<>(false, EnterpriseAccountSetMessage.EnterpriseAccountSetCodeRepeat);
        }
        return new OperationResultDto<>(true);
    }
205 206


eddie.woo's avatar
eddie.woo committed
207 208 209 210
    /* (non-Javadoc)
     * @see pwc.taxtech.atms.service.EnterpriseAccountService#enterpriseAccountSetOrgValidate(pwc.taxtech.atms.service.dto.EnterpriseAccountSetDto)
     */
    public OperationResultDto<?> enterpriseAccountSetOrgValidate(EnterpriseAccountSetDto enterpriseAccountSetDto) {
211

eddie.woo's avatar
eddie.woo committed
212
        List<EnterpriseAccountSetOrgDto> enterpriseAccountSetOrgDtoList = enterpriseAccountSetDto.getEnterpriseAccountSetOrgList();
213
        if (enterpriseAccountSetOrgDtoList == null) {
eddie.woo's avatar
eddie.woo committed
214 215
            enterpriseAccountSetOrgDtoList = new ArrayList<>();
        }
216

eddie.woo's avatar
eddie.woo committed
217
        //effective date > expire date
218 219 220
        if (enterpriseAccountSetOrgDtoList.stream()
                .anyMatch(sa -> sa.getEffectiveDate() != null && sa.getExpiredDate() != null
                        && sa.getEffectiveDate().compareTo(sa.getExpiredDate()) > 0)) {
eddie.woo's avatar
eddie.woo committed
221 222
            return new OperationResultDto<>(false, EnterpriseAccountSetOrgMessage.EffectiveDateAreaProblem);
        }
223

eddie.woo's avatar
eddie.woo committed
224
        //set org name
225
        for (EnterpriseAccountSetOrgDto enterpriseAccountSetOrgDto : enterpriseAccountSetOrgDtoList) {
226
            Organization organization = organizationMapper.selectByPrimaryKey(enterpriseAccountSetOrgDto.getOrganizationId());
227
            if (organization != null) {
eddie.woo's avatar
eddie.woo committed
228 229 230
                enterpriseAccountSetOrgDto.setOrganizationName(organization.getName());
            }
        }
231

eddie.woo's avatar
eddie.woo committed
232
        //validate by each organization
233
        //Map<organizationId, count>
eddie.woo's avatar
eddie.woo committed
234
        Map<String, Long> countByOrganization = enterpriseAccountSetOrgDtoList.stream()
235 236 237
                .collect(Collectors.groupingBy(sa -> sa.getOrganizationId(), Collectors.counting()));
        List<String> enterpriseAccountSetOrgIdInDtoList = new ArrayList<>();
        enterpriseAccountSetOrgIdInDtoList = enterpriseAccountSetOrgDtoList.stream()
238
                .filter(sa -> sa.getId() != null)
239
                .map(sa -> sa.getId()).collect(Collectors.toList());
240 241


eddie.woo's avatar
eddie.woo committed
242 243
        for (Map.Entry<String, Long> organiztionCount : countByOrganization.entrySet()) {
            List<EnterpriseAccountSetOrgDto> organiztionAccountSetList = enterpriseAccountSetOrgDtoList.stream()
244
                    .filter(sa -> sa.getOrganizationId().equals(organiztionCount.getKey()))
eddie.woo's avatar
eddie.woo committed
245 246 247
                    .collect(Collectors.toList());
            EnterpriseAccountSetOrgExample example = new EnterpriseAccountSetOrgExample();
            Criteria criteria = example.createCriteria();
248
            criteria.andOrganizationIdEqualTo(organiztionCount.getKey());
249
            if (!enterpriseAccountSetOrgIdInDtoList.isEmpty()) {
250
                criteria.andIdNotIn(enterpriseAccountSetOrgIdInDtoList);
251
            }
eddie.woo's avatar
eddie.woo committed
252
            List<EnterpriseAccountSetOrg> organiztionAccountSetInDBList = enterpriseAccountSetOrgMapper.selectByExample(example);
253
            if (organiztionAccountSetInDBList != null && !organiztionAccountSetInDBList.isEmpty()) {
eddie.woo's avatar
eddie.woo committed
254
                organiztionAccountSetInDBList.stream().forEach(enterpriseAccountSetOrg -> {
255 256 257 258 259
                    EnterpriseAccountSetOrgDto enterpriseAccountSetOrgDto = new EnterpriseAccountSetOrgDto();
                    CommonUtils.copyProperties(enterpriseAccountSetOrg, enterpriseAccountSetOrgDto);
                    enterpriseAccountSetOrgDto.setOverlapList(new ArrayList<>());
                    organiztionAccountSetList.add(enterpriseAccountSetOrgDto);
                });
eddie.woo's avatar
eddie.woo committed
260 261
            }
            //同一个机构下的账套的时间段,是不能重叠的
262
            if (CommonUtils.isOrganizationDateTimeOverlap(organiztionAccountSetList)) {
eddie.woo's avatar
eddie.woo committed
263 264 265 266
                List<EnterpriseAccountSetOrgDto> overlapList = organiztionAccountSetList.stream()
                        .filter(sa -> !sa.getOverlapList().isEmpty()).collect(Collectors.toList());
                return new OperationResultDto<>(false, EnterpriseAccountSetOrgMessage.EnterpriseAccountSetOrgDateTimeOverlap, overlapList);
            }
267

eddie.woo's avatar
eddie.woo committed
268 269 270 271 272
            // 一年之内不能设置两个一样的账套,即:不能设置这种,账套A,2017年1月到3月,账套A,2017年4月到5月
            if (!CommonUtils.validateOnlyOncePerYear(organiztionAccountSetList)) {
                return new OperationResultDto<>(false, EnterpriseAccountSetOrgMessage.EnterpriseAccountSetOrgOnlyOncePerYear);
            }
        }
273

eddie.woo's avatar
eddie.woo committed
274 275
        return OperationResultDto.success();
    }
276 277


eddie.woo's avatar
eddie.woo committed
278 279 280 281 282 283 284 285 286 287
    /* 
     * 1、判断传入的数据是否有时间段重叠
       2、判断传入的数据与现有数据库中的数据,是否有时间段的重叠
     * (non-Javadoc)
     * @see pwc.taxtech.atms.service.EnterpriseAccountService#addEnterpriseAccountSetOrg(pwc.taxtech.atms.service.dto.EnterpriseAccountSetDto)
     */
    @Transactional
    public OperationResultDto<?> addEnterpriseAccountSetOrg(EnterpriseAccountSetDto enterpriseAccountSetDto) {

        List<EnterpriseAccountSetOrgDto> enterpriseAccountSetOrgDtoList = enterpriseAccountSetDto.getEnterpriseAccountSetOrgList();
288
        if (enterpriseAccountSetOrgDtoList == null || enterpriseAccountSetOrgDtoList.isEmpty()) {
eddie.woo's avatar
eddie.woo committed
289 290
            return OperationResultDto.success();
        }
291

eddie.woo's avatar
eddie.woo committed
292
        enterpriseAccountSetOrgDtoList.stream().forEach(sa -> {
293
            if (sa.getEffectiveDateStr() != null && !"".equals(sa.getEffectiveDateStr())) {
eddie.woo's avatar
eddie.woo committed
294
                sa.setEffectiveDate(
295
                        DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime(sa.getEffectiveDateStr() + "-01").toDate());
eddie.woo's avatar
eddie.woo committed
296
            }
297 298
            if (sa.getExpiredDateStr() != null && !"".equals(sa.getExpiredDateStr())) {
                sa.setExpiredDate(DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime(sa.getExpiredDateStr() + "-01")
eddie.woo's avatar
eddie.woo committed
299 300 301
                        .plusMonths(1).minusDays(1).toDate());
            }
        });
302

eddie.woo's avatar
eddie.woo committed
303
        OperationResultDto<?> checkResult = enterpriseAccountSetOrgValidate(enterpriseAccountSetDto);
304
        if (!checkResult.getResult()) {
eddie.woo's avatar
eddie.woo committed
305 306
            return checkResult;
        }
307 308 309

        if (!enterpriseAccountSetOrgDtoList.isEmpty()) {
            for (EnterpriseAccountSetOrgDto setOrgDto : enterpriseAccountSetOrgDtoList) {
eddie.woo's avatar
eddie.woo committed
310 311
                EnterpriseAccountSetOrg setOrg = new EnterpriseAccountSetOrg();
                CommonUtils.copyProperties(setOrgDto, setOrg);
312 313
                setOrg.setId(CommonUtils.getUUID());
                setOrg.setEnterpriseAccountSetId(enterpriseAccountSetDto.getId());
eddie.woo's avatar
eddie.woo committed
314 315 316
                enterpriseAccountSetOrgMapper.insert(setOrg);
            }
        }
317

eddie.woo's avatar
eddie.woo committed
318 319
        //operational log
        List<UpdateLogParams> updateLogParamsList = new ArrayList<>();
320
        for (EnterpriseAccountSetOrgDto enterpriseAccountSetOrgDto : enterpriseAccountSetOrgDtoList) {
eddie.woo's avatar
eddie.woo committed
321
            UpdateLogParams updateLogParams = new UpdateLogParams();
322
            updateLogParams.setOperationUser(authUserHelper.getCurrentAuditor().get());
eddie.woo's avatar
eddie.woo committed
323 324 325 326 327 328 329 330 331 332 333 334
            updateLogParams.setUpdateState("");
            updateLogParams.setOriginalState("");
            updateLogParams.setOperationContent(enterpriseAccountSetOrgDto.getOrganizationName());
            updateLogParams.setOperationObject(enterpriseAccountSetDto.getName());
            updateLogParams.setOperationModule(OperationModule.BasicDataEnterpriceAccount.value());
            updateLogParams.setOperateLogType(OperateLogType.OperationLogEnterPrise.value());
            updateLogParams.setComment("");
            updateLogParams.setOperationAction(OperationAction.AddRelevantOrgAction.value());

            updateLogParamsList.add(updateLogParams);
        }
        operationLogService.addOrDeleteDataAddLog(updateLogParamsList);
335

eddie.woo's avatar
eddie.woo committed
336 337 338
        return OperationResultDto.success();
    }

339

eddie.woo's avatar
eddie.woo committed
340 341 342 343 344
    /* (non-Javadoc)
     * @see pwc.taxtech.atms.service.EnterpriseAccountService#updateEnterpriseAccountSetOrg(pwc.taxtech.atms.service.dto.EnterpriseAccountSetOrgDto)
     */
    @Transactional
    public OperationResultDto<?> updateEnterpriseAccountSetOrg(EnterpriseAccountSetOrgDto enterpriseAccountSetOrgDto) {
345 346

        if (enterpriseAccountSetOrgDto.getEffectiveDateStr() != null && !"".equals(enterpriseAccountSetOrgDto.getEffectiveDateStr())) {
eddie.woo's avatar
eddie.woo committed
347
            enterpriseAccountSetOrgDto.setEffectiveDate(
348
                    DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime(enterpriseAccountSetOrgDto.getEffectiveDateStr() + "-01").toDate());
eddie.woo's avatar
eddie.woo committed
349
        }
350 351
        if (enterpriseAccountSetOrgDto.getExpiredDateStr() != null && !"".equals(enterpriseAccountSetOrgDto.getExpiredDateStr())) {
            enterpriseAccountSetOrgDto.setExpiredDate(DateTimeFormat.forPattern("yyyy-MM-dd").parseDateTime(enterpriseAccountSetOrgDto.getExpiredDateStr() + "-01")
eddie.woo's avatar
eddie.woo committed
352 353 354
                    .plusMonths(1).minusDays(1).toDate());
        }
        EnterpriseAccountSetDto enterpriseAccountSetDto = new EnterpriseAccountSetDto();
355
        enterpriseAccountSetDto.setId(enterpriseAccountSetOrgDto.getEnterpriseAccountSetId());
eddie.woo's avatar
eddie.woo committed
356 357 358
        enterpriseAccountSetDto.setName(enterpriseAccountSetOrgDto.getEnterpriseAccountSetName());
        enterpriseAccountSetDto.setEnterpriseAccountSetOrgList(new ArrayList<>());
        enterpriseAccountSetDto.getEnterpriseAccountSetOrgList().add(enterpriseAccountSetOrgDto);
359

eddie.woo's avatar
eddie.woo committed
360 361
        //validate enterpriseAccountSetOrg
        OperationResultDto<?> checkResult = enterpriseAccountSetOrgValidate(enterpriseAccountSetDto);
362
        if (!checkResult.getResult()) {
eddie.woo's avatar
eddie.woo committed
363 364
            return checkResult;
        }
365

366
        EnterpriseAccountSetOrg originalEntity = enterpriseAccountSetOrgMapper.selectByPrimaryKey(enterpriseAccountSetOrgDto.getId());
367
        if (originalEntity == null) {
eddie.woo's avatar
eddie.woo committed
368 369
            return new OperationResultDto<>(false, EnterpriseAccountSetOrgMessage.NoOrgSetOrOrgExist);
        }
370

eddie.woo's avatar
eddie.woo committed
371 372
        EnterpriseAccountSetOrg updateEntity = new EnterpriseAccountSetOrg();
        CommonUtils.copyProperties(originalEntity, updateEntity);
373
        updateEntity.setOrganizationId(enterpriseAccountSetOrgDto.getOrganizationId());
eddie.woo's avatar
eddie.woo committed
374 375 376
        updateEntity.setEffectiveDate(enterpriseAccountSetOrgDto.getEffectiveDate());
        updateEntity.setExpiredDate(enterpriseAccountSetOrgDto.getExpiredDate());
        enterpriseAccountSetOrgMapper.updateByPrimaryKey(updateEntity);
377

eddie.woo's avatar
eddie.woo committed
378 379
        //operational log
        UpdateLogParams updateLogParams = new UpdateLogParams();
380
        updateLogParams.setOperationUser(authUserHelper.getCurrentAuditor().get());
eddie.woo's avatar
eddie.woo committed
381 382 383 384 385
        updateLogParams.setOperationObject(enterpriseAccountSetOrgDto.getEnterpriseAccountSetName());
        updateLogParams.setOperationModule(OperationModule.BasicDataEnterpriceAccount.value());
        updateLogParams.setOperateLogType(OperateLogType.OperationLogEnterPrise.value());
        updateLogParams.setComment("");
        updateLogParams.setOperationAction(OperationAction.UpdateRelevantOrg.value());
386 387
        if (originalEntity.getOrganizationId().equals(updateEntity.getOrganizationId())) {
            updateLogParams.setUpdateState(enterpriseAccountSetOrgDto.getEffectiveDateStr() + "," + enterpriseAccountSetOrgDto.getExpiredDateStr());
eddie.woo's avatar
eddie.woo committed
388 389
            updateLogParams.setOriginalState(getEnterpriseAccountSetOrgTimeLog(originalEntity));
            updateLogParams.setOperationContent(enterpriseAccountSetOrgDto.getOrganizationName());
390
        } else {
391
            Organization originalOrganization = organizationMapper.selectByPrimaryKey(originalEntity.getOrganizationId());
392 393
            String originalOrganizationName = originalOrganization == null ? "" : originalOrganization.getName();
            updateLogParams.setUpdateState(enterpriseAccountSetOrgDto.getOrganizationName() + ":"
eddie.woo's avatar
eddie.woo committed
394 395 396 397 398
                    + enterpriseAccountSetOrgDto.getEffectiveDateStr() + "," + enterpriseAccountSetOrgDto.getExpiredDateStr());
            updateLogParams.setOriginalState(originalOrganizationName + ":" + getEnterpriseAccountSetOrgTimeLog(originalEntity));
            updateLogParams.setOperationContent(originalOrganizationName);
        }
        operationLogService.addOrDeleteDataAddLog(updateLogParams);
399

eddie.woo's avatar
eddie.woo committed
400 401 402 403 404 405 406 407 408 409
        return OperationResultDto.success();
    }

    /* (non-Javadoc)
     * @see pwc.taxtech.atms.service.EnterpriseAccountService#deleteEnterpriseAccountSetOrg(pwc.taxtech.atms.service.dto.EnterpriseAccountSetDto)
     */
    @Transactional
    public OperationResultDto<?> deleteEnterpriseAccountSetOrg(EnterpriseAccountSetDto enterpriseAccountSetDto) {

        List<EnterpriseAccountSetOrgDto> enterpriseAccountSetOrgDtoList = enterpriseAccountSetDto.getEnterpriseAccountSetOrgList();
410
        if (enterpriseAccountSetOrgDtoList == null) {
eddie.woo's avatar
eddie.woo committed
411 412
            return OperationResultDto.success();
        }
413

414 415
        List<String> enterpriseAccountSetOrgIdList = enterpriseAccountSetOrgDtoList.stream()
                .map(sa -> sa.getId()).collect(Collectors.toList());
eddie.woo's avatar
eddie.woo committed
416
        EnterpriseAccountSetOrgExample example = new EnterpriseAccountSetOrgExample();
417
        example.createCriteria().andIdIn(enterpriseAccountSetOrgIdList);
eddie.woo's avatar
eddie.woo committed
418
        enterpriseAccountSetOrgMapper.deleteByExample(example);
419

420
        EnterpriseAccountSet enterpriseAccountSet = enterpriseAccountSetMapper.selectByPrimaryKey(enterpriseAccountSetDto.getId());
eddie.woo's avatar
eddie.woo committed
421
        enterpriseAccountSetDto.setName(enterpriseAccountSet.getName());
422

eddie.woo's avatar
eddie.woo committed
423
        List<UpdateLogParams> updateLogParamsList = new ArrayList<>();
424
        for (EnterpriseAccountSetOrgDto enterpriseAccountSetOrgDto : enterpriseAccountSetOrgDtoList) {
eddie.woo's avatar
eddie.woo committed
425
            UpdateLogParams updateLogParams = new UpdateLogParams();
426
            updateLogParams.setOperationUser(authUserHelper.getCurrentAuditor().get());
eddie.woo's avatar
eddie.woo committed
427 428
//            updateLogParams.setUpdateState("");
//            updateLogParams.setOriginalState("");
eddie.woo's avatar
eddie.woo committed
429 430 431 432
            updateLogParams.setOperationContent(enterpriseAccountSetOrgDto.getOrganizationName());
            updateLogParams.setOperationObject(enterpriseAccountSetDto.getName());
            updateLogParams.setOperationModule(OperationModule.BasicDataEnterpriceAccount.value());
            updateLogParams.setOperateLogType(OperateLogType.OperationLogEnterPrise.value());
eddie.woo's avatar
eddie.woo committed
433
//            updateLogParams.setComment("");
eddie.woo's avatar
eddie.woo committed
434 435 436 437
            updateLogParams.setOperationAction(OperationAction.DeleteRelevantOrg.value());
            updateLogParamsList.add(updateLogParams);
        }
        operationLogService.addOrDeleteDataAddLog(updateLogParamsList);
438

eddie.woo's avatar
eddie.woo committed
439 440
        return OperationResultDto.success();
    }
441

eddie.woo's avatar
eddie.woo committed
442 443 444

    /**
     * Populate EnterpriseAccountSetDto list from EnterpriseAccountSet entity list
445
     *
eddie.woo's avatar
eddie.woo committed
446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
     * @param enterpriseAccountSetList
     * @return
     */
    private List<EnterpriseAccountSetDto> populateEnterpriseAccountSetDtoList(
            List<EnterpriseAccountSet> enterpriseAccountSetList) {

        List<EnterpriseAccountSetDto> enterpriseAccountSetDtoList = new ArrayList<>();
        if (null == enterpriseAccountSetList || enterpriseAccountSetList.isEmpty()) {
            return enterpriseAccountSetDtoList;
        }
        for (EnterpriseAccountSet enterpriseAccountSet : enterpriseAccountSetList) {
            enterpriseAccountSetDtoList.add(populateEnterpriseAccountSetDto(enterpriseAccountSet));
        }
        return enterpriseAccountSetDtoList;
    }

    /**
     * Populate EnterpriseAccountSetDto object from EnterpriseAccountSet entity
464
     *
eddie.woo's avatar
eddie.woo committed
465 466 467 468 469 470 471 472 473 474 475 476 477 478 479
     * @param enterpriseAccountSet
     * @return
     */
    private EnterpriseAccountSetDto populateEnterpriseAccountSetDto(EnterpriseAccountSet enterpriseAccountSet) {

        EnterpriseAccountSetDto enterpriseAccountSetDto = new EnterpriseAccountSetDto();
        CommonUtils.copyProperties(enterpriseAccountSet, enterpriseAccountSetDto);
        enterpriseAccountSetDto.setEnterpriseAccountSetOrgList(new ArrayList<>());
        enterpriseAccountSetDto.setIsImportAppend(false);

        return enterpriseAccountSetDto;
    }

    /**
     * Populate a string in the format of effectiveDateStr,expiredDateStr
480
     *
eddie.woo's avatar
eddie.woo committed
481 482 483
     * @param setOrg
     * @return String
     */
484
    private String getEnterpriseAccountSetOrgTimeLog(EnterpriseAccountSetOrg setOrg) {
eddie.woo's avatar
eddie.woo committed
485 486 487 488
        String effectiveDateStr = setOrg.getEffectiveDate() == null ? "" : new DateTime(setOrg.getEffectiveDate()).toString("yyyy-MM");
        String expiredDateStr = setOrg.getExpiredDate() == null ? "" : new DateTime(setOrg.getExpiredDate()).toString("yyyy-MM");
        return effectiveDateStr + "," + expiredDateStr;
    }
489 490


eddie.woo's avatar
eddie.woo committed
491
}