EquityServiceImpl.java 17.5 KB
Newer Older
gary's avatar
gary committed
1 2 3 4 5 6 7 8 9
package pwc.taxtech.atms.service.impl;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pwc.taxtech.atms.common.OperateLogType;
import pwc.taxtech.atms.common.OperationAction;
import pwc.taxtech.atms.common.OperationModule;
import pwc.taxtech.atms.common.message.LogMessage;
gary's avatar
gary committed
10
import pwc.taxtech.atms.common.util.CommonUtil;
gary's avatar
gary committed
11 12
import pwc.taxtech.atms.dao.EquityInformationHistoryMapper;
import pwc.taxtech.atms.dao.EquityInformationMapper;
gary's avatar
gary committed
13
import pwc.taxtech.atms.dao.OrganizationMapper;
gary's avatar
gary committed
14 15 16
import pwc.taxtech.atms.dto.equity.EquityInfoDto;
import pwc.taxtech.atms.dto.OperationLogDto;
import pwc.taxtech.atms.dto.OperationResultDto;
gary's avatar
gary committed
17
import pwc.taxtech.atms.entity.*;
gary's avatar
gary committed
18 19
import pwc.taxtech.atms.exception.ApplicationException;

20
import javax.annotation.Resource;
gary's avatar
gary committed
21 22 23 24 25 26
import java.util.*;

import static pwc.taxtech.atms.common.CommonConstants.CommonFail;
import static pwc.taxtech.atms.common.CommonConstants.SystemError;

@Service
Cheng C Yang's avatar
Cheng C Yang committed
27
public class EquityServiceImpl extends BaseService {
gary's avatar
gary committed
28 29 30 31

    @Autowired
    private OperationLogServiceImpl operationLogServiceImpl;

32
    @Resource
gary's avatar
gary committed
33
    private EquityInformationMapper equityInformationMapper;
gary's avatar
gary committed
34

35
    @Resource
gary's avatar
gary committed
36 37
    private EquityInformationHistoryMapper equityInformationHistoryMapper;

gary's avatar
gary committed
38 39 40
    @Resource
    private OrganizationMapper organizationMapper;

gary's avatar
gary committed
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
    public List<EquityInfoDto> getEquityListByOrgId(String orgId) {
        List<EquityInfoDto> equityInfoDtos = new ArrayList<>();
        try {
            EquityInformationExample equityInformationExample = new EquityInformationExample();
            equityInformationExample.createCriteria().andOrganizationIdEqualTo(orgId);
            List<EquityInformation> equityInformations = equityInformationMapper.selectByExample(equityInformationExample);
            equityInformations.forEach(equityInformation -> {
                        EquityInfoDto equityInfoDto = new EquityInfoDto();
                        // 可能需要补充一些处理
                        BeanUtils.copyProperties(equityInformation, equityInfoDto);
                        equityInfoDtos.add(equityInfoDto);
                    }
            );
        } catch (Exception e) {
            logger.error(String.format("根据机构ID获取全部股东信息异常:%s", e.getMessage()));
            return null;
        }
        return equityInfoDtos;
    }

    public OperationResultDto<Object> insertAll(List<EquityInfoDto> equityInfoDtos) {
Cheng C Yang's avatar
Cheng C Yang committed
62
        try {
gary's avatar
gary committed
63
            // todo opt insertAll
Cheng C Yang's avatar
Cheng C Yang committed
64
            if (equityInfoDtos.get(0).getId() == null) {
gary's avatar
gary committed
65 66 67 68 69
                equityInfoDtos.get(0).setId(idService.nextId());
                equityInfoDtos.get(0).seteNum(1);
            }
            for (EquityInfoDto equityInfoDto : equityInfoDtos) {
                EquityInformation equityInformation = new EquityInformation();
Cheng C Yang's avatar
Cheng C Yang committed
70
                BeanUtils.copyProperties(equityInfoDto, equityInformation);
gary's avatar
gary committed
71 72
                equityInformationMapper.insert(equityInformation);
            }
Cheng C Yang's avatar
Cheng C Yang committed
73
            AddOrgEquityLog(OperationAction.New.value(), LogMessage.AddOrganizationEquity, equityInfoDtos.get(0).getOrganizationId(), OperationModule.Equity.value());
gary's avatar
gary committed
74
            return new OperationResultDto(true);
Cheng C Yang's avatar
Cheng C Yang committed
75
        } catch (Exception e) {
76 77
            logger.error(String.format("写入全部股东信息异常:%s", e.getMessage()));
            return new OperationResultDto(false, CommonFail + SystemError);
gary's avatar
gary committed
78 79 80 81
        }
    }

    public OperationResultDto<Object> update(EquityInfoDto equityInfoDto) {
Cheng C Yang's avatar
Cheng C Yang committed
82
        try {
gary's avatar
gary committed
83
            EquityInformation equityInformation = new EquityInformation();
Cheng C Yang's avatar
Cheng C Yang committed
84
            BeanUtils.copyProperties(equityInfoDto, equityInformation);
gary's avatar
gary committed
85 86
            EquityInformationExample example = new EquityInformationExample();
            example.createCriteria().andIdEqualTo(equityInformation.getId()).andENumEqualTo(equityInformation.geteNum());
Cheng C Yang's avatar
Cheng C Yang committed
87 88
            equityInformationMapper.updateByExampleSelective(equityInformation, example);
            AddOrgEquityLog(OperationAction.Update.value(), LogMessage.UpdateOrganizationEquity, equityInfoDto.getOrganizationId(), OperationModule.Equity.value());
gary's avatar
gary committed
89
            return new OperationResultDto(true);
Cheng C Yang's avatar
Cheng C Yang committed
90
        } catch (Exception e) {
91 92
            logger.error(String.format("更新股东信息异常:%s", e.getMessage()));
            return new OperationResultDto(false, CommonFail + SystemError);
gary's avatar
gary committed
93 94 95 96 97 98 99 100 101 102 103 104 105 106
        }
    }

    public OperationResultDto<Object> delete(Long id, List<Integer> eNums) {
        try {
            if (null == id) {
                return new OperationResultDto(false, CommonFail + SystemError);
            }
            EquityInformationExample example = new EquityInformationExample();
            example.createCriteria().andIdEqualTo(id).andENumIn(eNums);
            int delRes = equityInformationMapper.deleteByExample(example);
            if (delRes > 0) {
                refreshEquityList(id);
            }
Cheng C Yang's avatar
Cheng C Yang committed
107
            AddOrgEquityLog(OperationAction.Delete.value(), LogMessage.DeleteOrganizationEquity, String.valueOf(id), OperationModule.Equity.value());
gary's avatar
gary committed
108 109
            return new OperationResultDto(true);
        } catch (Exception e) {
110
            logger.error(String.format("删除股东信息异常:%s", e.getMessage()));
gary's avatar
gary committed
111 112 113 114 115 116 117 118
            return new OperationResultDto(false, CommonFail + e.getMessage());
        }
    }

    /**
     * 17/01/2019 15:51
     * 变更当前股权信息时,刷新股权信息的序号
     * [id]
Cheng C Yang's avatar
Cheng C Yang committed
119
     *
gary's avatar
gary committed
120
     * @return
Cheng C Yang's avatar
Cheng C Yang committed
121
     * @author Gary J Li
gary's avatar
gary committed
122 123 124 125 126 127 128 129 130 131
     */
    private void refreshEquityList(Long id) {
        EquityInformationExample exampleForENumUp = new EquityInformationExample();
        exampleForENumUp.createCriteria().andIdEqualTo(id);
        exampleForENumUp.setOrderByClause(" e_num ASC");
        List<EquityInformation> equityInformations = equityInformationMapper.selectByExample(exampleForENumUp);
        if (equityInformations.size() == 0) {
            return;
        }
        List<EquityInformation> resList = new ArrayList<>();
Cheng C Yang's avatar
Cheng C Yang committed
132
        int i = 1;
gary's avatar
gary committed
133
        for (EquityInformation record : equityInformations) {
Cheng C Yang's avatar
Cheng C Yang committed
134
            if (record.geteNum() != i) {
gary's avatar
gary committed
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
                record.seteNum(i);
            }
            resList.add(record);
            i++;
        }
        EquityInformationExample delAllExample = new EquityInformationExample();
        delAllExample.createCriteria().andIdEqualTo(id);
        int delRes2 = equityInformationMapper.deleteByExample(delAllExample);
        if (delRes2 > 0) {
            // todo opt insertAll
            for (EquityInformation equityInfo : resList) {
                equityInformationMapper.insert(equityInfo);
            }
        }
    }

    /**
     * 17/01/2019 20:18 股权变更
Cheng C Yang's avatar
Cheng C Yang committed
153 154 155 156 157 158 159 160 161
     * 1、根据id(原始)查出旧数据 equity_infomation
     * 2、旧数据插入历史表 equity_infomation_history
     * 3、equityInfoDtos 生成新id、createTime、updateTime 插入equity_infomation
     * 4、根据id(原始)删除旧数据 equity_infomation
     * 5、记录日志  id(原始)
     * <p>
     * remark:
     * 1、无股权记录时,为初始变更只进行3、5
     * 2、// todo 事务过长并发时,可能出现问题
gary's avatar
gary committed
162
     * [equityInfoDtos]
Cheng C Yang's avatar
Cheng C Yang committed
163
     *
gary's avatar
gary committed
164
     * @return OperationResultDto<Object>
Cheng C Yang's avatar
Cheng C Yang committed
165
     * @author Gary J Li
gary's avatar
gary committed
166 167 168 169 170 171 172 173 174
     */
    public OperationResultDto<Object> change(String orgName, String comment, List<EquityInfoDto> equityInfoDtos) {

        EquityInformationExample exampleForOldData = new EquityInformationExample();
        Long oldId = equityInfoDtos.get(0).getId();
        Long newId = idService.nextId();

        // remark-1 无股权记录时,初始变更为新增
        String orgId = equityInfoDtos.get(0).getOrganizationId();
gary's avatar
gary committed
175 176 177

        Organization org = organizationMapper.selectByPrimaryKey(orgId);

gary's avatar
gary committed
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
        List<EquityInformation> oldData = null;
        if (null != oldId) {
            // 1、根据id(原始)查出旧数据 equity_infomation
            exampleForOldData.createCriteria().andIdEqualTo(oldId);
            oldData = equityInformationMapper.selectByExample(exampleForOldData);
            // 2、旧数据插入历史表 equity_infomation_history
            for (EquityInformation equityInformation : oldData) {
                int insOldRes = equityInformationHistoryMapper.insert(equityInformation);
                if (insOldRes < 1) {
                    throw new ApplicationException("变更股权-2 写入历史数据异常");
                }
            }
        }
        // 3、equityInfoDtos 生成新id、createTime、updateTime 插入equity_infomation
        int i = 1;
        List<EquityInformation> newDataList = new ArrayList<>();
        for (EquityInfoDto equityInfoDto : equityInfoDtos) {
            EquityInformation newData = new EquityInformation();
            BeanUtils.copyProperties(equityInfoDto, newData);
            newData.setId(newId);
            newData.seteNum(i);
gary's avatar
gary committed
199
            float investRadio = 0L;
Cheng C Yang's avatar
Cheng C Yang committed
200 201
            if (CommonUtil.hasDigit(org.getRegistrationCapital()) && null != newData.getInvestmentAmount()) {
                investRadio = (float) newData.getInvestmentAmount() / (float) CommonUtil.getNum(org.getRegistrationCapital());
gary's avatar
gary committed
202 203
            }
            newData.setInvestmentRadio(investRadio);
gary's avatar
gary committed
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
            newData.setOrganizationId(orgId);
            Date now = new Date();
            newData.setCreateTime(now);
            newData.setUpdateTime(now);
            int insNewRes = equityInformationMapper.insert(newData);
            if (insNewRes < 1) {
                throw new ApplicationException("变更股权-3 写入新数据异常");
            }
            newDataList.add(newData);
            i++;
        }
        // 4、根据id(原始)删除旧数据 equity_infomation
        if (null != oldId) {
            EquityInformationExample example = new EquityInformationExample();
            example.createCriteria().andIdEqualTo(oldId);
            int delRes = equityInformationMapper.deleteByExample(example);
            if (delRes < 1) {
                throw new ApplicationException("变更股权-4 删除旧数据异常");
            }
        }
        // todo 5、记录日志  id(原始) 补充变更日期
        OperationLogDto opLog = new OperationLogDto();
        opLog.setId(String.valueOf(newId));
        if (null != oldId) {
            opLog.setAction(OperationAction.NewEquity.value());
        } else {
            opLog.setAction(OperationAction.ChangeEquity.value());
        }
gary's avatar
gary committed
232
        opLog.setOperationContent(LogMessage.ChangeOrganizationEquity);
gary's avatar
gary committed
233 234 235 236 237 238 239 240 241
        opLog.setOperationObject(orgName);
        opLog.setOriginalState(oldId == null ? "" : String.valueOf(oldId));
        opLog.setUpdateState(String.valueOf(newId));
        opLog.setIp(authUserHelper.getClientIp());
        opLog.setModule(OperationModule.ChangeEquity.value());
        opLog.setComment(comment);
        opLog.setLogType(OperateLogType.OperationLogEquity.value());
        opLog.setEquityLog(true);
        operationLogService.addOperationLog(opLog);
Cheng C Yang's avatar
Cheng C Yang committed
242
        AddOrgEquityLog(OperationAction.Update.value(), LogMessage.ChangeOrganizationEquity, orgName, OperationModule.Equity.value());
gary's avatar
gary committed
243 244 245 246 247 248 249
        return new OperationResultDto(true, "变更成功!", oldId);
    }

    /**
     * 18/01/2019 14:03
     * 根据id查询出所有日志,时间排序
     * [ids]
Cheng C Yang's avatar
Cheng C Yang committed
250
     *
gary's avatar
gary committed
251
     * @return List<OperationLogBasicData>
Cheng C Yang's avatar
Cheng C Yang committed
252
     * @author Gary J Li
gary's avatar
gary committed
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
     */
    public List<OperationLogBasicData> getChangeLogByOrgName(String orgName) {
        List<OperationLogBasicData> logListByIds = null;
        try {
            logListByIds = operationLogServiceImpl.getEquityChangeLogByOrgName(orgName);
        } catch (Exception e) {
            logger.error(String.format("根据ID获取股权日志信息异常:%s", e.getMessage()));
            return null;
        }
        return logListByIds;
    }

    /**
     * 18/01/2019 13:58 撤销变更
     * 1、根据oldId历史数据查出来equityInfomations  equity_infomation_history
     * 2、equityInfomations存入新表   equity_infomation
     * 3、根据newId删除 equity_infomation
     * 4、根据oldId删除历史数据   equity_infomation_history
     * 5、根据oldId删除操作日志   operation_log_equity
     * remark : 最初的记录撤销变更仅做3、5
     * [id]
Cheng C Yang's avatar
Cheng C Yang committed
274
     *
gary's avatar
gary committed
275
     * @return OperationResultDto<Object>
Cheng C Yang's avatar
Cheng C Yang committed
276
     * @author Gary J Li
gary's avatar
gary committed
277 278
     */
    public OperationResultDto<Object> cancelChange(Long oldId, Long newId) {
279 280 281 282 283 284 285 286 287
        if (null != oldId) {
            //        1、根据oldId历史数据查出来equityInfomations  equity_infomation_history
            EquityInformationExample exampleForOldData = new EquityInformationExample();
            exampleForOldData.createCriteria().andIdEqualTo(oldId);
            List<EquityInformation> equityInformations = equityInformationHistoryMapper.selectByExample(exampleForOldData);
            //        2、equityInfomations存入新表   equity_infomation
            int insRes = 0;
            for (EquityInformation equityInformation : equityInformations) {
                insRes += equityInformationMapper.insert(equityInformation);
gary's avatar
gary committed
288
            }
289 290 291
            if (insRes < 1) {
                logger.warn(String.format("撤销变更-2 表equity_infomation 存入新表数据异常.id: [ %s ]", newId));
                throw new ApplicationException("撤销变更-2 存入新表数据异常");
gary's avatar
gary committed
292
            }
293 294 295 296 297 298 299 300 301
        }
//        3、根据newId删除 equity_infomation
        EquityInformationExample exampleDeleteOld = new EquityInformationExample();
        exampleDeleteOld.createCriteria().andIdEqualTo(newId);
        if (equityInformationMapper.deleteByExample(exampleDeleteOld) < 1) {
            logger.warn(String.format("撤销变更-3 表equity_infomation 删除股权数据异常.id: [ %s ]", newId));
            throw new ApplicationException("撤销变更-3 删除股权数据异常");
        }
        if (null != oldId) {
gary's avatar
gary committed
302
//        4、根据oldId删除历史数据   equity_infomation_history
303 304 305 306 307
            EquityInformationExample exampleDeleteNew = new EquityInformationExample();
            exampleDeleteNew.createCriteria().andIdEqualTo(oldId);
            if (equityInformationHistoryMapper.deleteByExample(exampleDeleteNew) < 1) {
                logger.warn(String.format("撤销变更-3 表equity_infomation_history 删除股权数据异常.id: [ %s ]", oldId));
                throw new ApplicationException("撤销变更-4 删除历史数据异常");
gary's avatar
gary committed
308
            }
309
        }
gary's avatar
gary committed
310
//        5、根据oldId删除操作日志   operation_log_equity
311 312 313
        if (operationLogServiceImpl.deleteById(newId) < 1) {
            logger.warn(String.format("撤销变更-3 表operation_log_equity 删除操作日志异常.id: [ %s ]", oldId));
            throw new ApplicationException("撤销变更-5 删除操作日志异常");
gary's avatar
gary committed
314
        }
Cheng C Yang's avatar
Cheng C Yang committed
315
        AddOrgEquityLog(OperationAction.Update.value(), LogMessage.CancelChangeUpdateOrganizationEquity, String.valueOf(newId), OperationModule.Equity.value());
gary's avatar
gary committed
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
        return new OperationResultDto(true);
    }

    public List<EquityInfoDto> getEquityListById(Long id) {
        List<EquityInfoDto> equityInfoDtos = new ArrayList<>();
        try {
            EquityInformationExample equityInformationExample = new EquityInformationExample();
            equityInformationExample.createCriteria().andIdEqualTo(id);
            List<EquityInformation> equityInformations = equityInformationMapper.selectByExample(equityInformationExample);
            equityInformations.forEach(equityInformation -> {
                        EquityInfoDto equityInfoDto = new EquityInfoDto();
                        // 可能需要补充一些处理
                        BeanUtils.copyProperties(equityInformation, equityInfoDto);
                        equityInfoDtos.add(equityInfoDto);
                    }
            );
        } catch (Exception e) {
            logger.error(String.format("根据ID获取全部股东信息异常:%s", e.getMessage()));
            return null;
        }
        return equityInfoDtos;
    }

    public List<EquityInfoDto> getEquityHisListById(Long id) {
        List<EquityInfoDto> equityInfoDtos = new ArrayList<>();
        try {
            EquityInformationExample equityInformationExample = new EquityInformationExample();
            equityInformationExample.createCriteria().andIdEqualTo(id);
            List<EquityInformation> equityInformations = equityInformationHistoryMapper.selectByExample(equityInformationExample);
            equityInformations.forEach(equityInformation -> {
                        EquityInfoDto equityInfoDto = new EquityInfoDto();
                        // 可能需要补充一些处理
                        BeanUtils.copyProperties(equityInformation, equityInfoDto);
                        equityInfoDtos.add(equityInfoDto);
                    }
            );
        } catch (Exception e) {
            logger.error(String.format("根据ID获取历史全部股东信息异常:%s", e.getMessage()));
            return null;
        }
        return equityInfoDtos;
    }
358 359 360 361 362

    /**
     * 25/01/2019 14:39
     * [增删改查,操作描述,操作对象,操作模块] 更新、删除需补充oldData、newData
     * [actionValue, content, object, module]
Cheng C Yang's avatar
Cheng C Yang committed
363
     *
364
     * @return
Cheng C Yang's avatar
Cheng C Yang committed
365
     * @author Gary J Li
366
     */
Cheng C Yang's avatar
Cheng C Yang committed
367
    private void AddOrgEquityLog(int actionValue, String content, String object, Integer module) {
368 369 370 371 372 373 374 375 376 377 378 379
        OperationLogDto opLog = new OperationLogDto();
        opLog.setAction(actionValue);
        opLog.setOperationContent(content);
        opLog.setOperationObject(object);
        opLog.setOriginalState("");
        opLog.setUpdateState("");
        opLog.setIp("");
        opLog.setModule(module);
        opLog.setComment("");
        opLog.setLogType(OperateLogType.OperationLogOrganization.value());
        operationLogService.addOperationLog(opLog);
    }
gary's avatar
gary committed
380
}