LgGlBalanceService.java 6.39 KB
Newer Older
eddie.woo's avatar
eddie.woo committed
1 2 3 4 5 6 7 8
package pwc.taxtech.atms.service.impl;

import cn.pwc.soap.client.GLBalanceClient;
import cn.pwc.soap.client.common.BasicUser;
import cn.pwc.soap.client.domain.GLBalanceDto;
import cn.pwc.soap.client.domain.GlBalanceParam;
import cn.pwc.soap.client.domain.SoapResponse;
import com.alibaba.fastjson.JSON;
eddie.woo's avatar
eddie.woo committed
9
import org.apache.commons.collections.CollectionUtils;
eddie.woo's avatar
eddie.woo committed
10 11 12 13
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import pwc.taxtech.atms.common.ServiceException;
import pwc.taxtech.atms.common.config.SystemConfig;
eddie.woo's avatar
eddie.woo committed
14
import pwc.taxtech.atms.common.util.CommonUtil;
eddie.woo's avatar
eddie.woo committed
15
import pwc.taxtech.atms.constant.Constant;
eddie.woo's avatar
eddie.woo committed
16 17
import pwc.taxtech.atms.dao.EnterpriseAccountMapper;
import pwc.taxtech.atms.dao.EnterpriseAccountSetOrgMapper;
eddie.woo's avatar
eddie.woo committed
18
import pwc.taxtech.atms.dao.OrganizationMapper;
eddie.woo's avatar
eddie.woo committed
19 20 21 22 23 24
import pwc.taxtech.atms.entity.*;
import pwc.taxtech.atms.vat.dao.GlBalanceMapper;
import pwc.taxtech.atms.vat.entity.GlBalance;
import pwc.taxtech.atms.vat.entity.GlBalanceExample;

import javax.annotation.Resource;
eddie.woo's avatar
eddie.woo committed
25 26
import java.text.SimpleDateFormat;
import java.util.Calendar;
eddie.woo's avatar
eddie.woo committed
27 28 29 30 31 32 33 34 35 36 37 38 39
import java.util.List;
import java.util.stream.Collectors;

@Service
public class LgGlBalanceService extends BaseService {
    @Resource
    private SystemConfig systemConfig;
    @Resource(name = "enterpriseAccountMapper")
    private EnterpriseAccountMapper accountMapper;
    @Resource(name = "enterpriseAccountSetOrgMapper")
    private EnterpriseAccountSetOrgMapper setOrgMapper;
    @Resource
    private GlBalanceMapper glBalanceMapper;
eddie.woo's avatar
eddie.woo committed
40 41
    @Resource
    private OrganizationMapper organizationMapper;
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 67 68 69 70

    /**
     * 科目余额数据同步
     *
     * @param org    Organization
     * @param period YYYY-MM
     * @throws ServiceException ex
     */
    public void queryGlBalance(Organization org, String period) throws ServiceException {
        if (StringUtils.isBlank(systemConfig.getLongiApiGlBalance())) {
            throw new ServiceException("EmptyUrlError");
        }
        //查找mapping
        EnterpriseAccountSetOrgExample setOrgExample = new EnterpriseAccountSetOrgExample();
        setOrgExample.createCriteria().andOrganizationIdEqualTo(org.getId());
        EnterpriseAccountSetOrg accountSetOrg = setOrgMapper.selectByExample(setOrgExample).get(0);
        //查找企业账套
        EnterpriseAccountExample accountExample = new EnterpriseAccountExample();
        accountExample.createCriteria().andEnterpriseAccountSetIdEqualTo(accountSetOrg.getEnterpriseAccountSetId());
        List<EnterpriseAccount> accountList = accountMapper.selectByExample(accountExample);
        for (EnterpriseAccount account : accountList) {
            SoapResponse<List<GLBalanceDto>> response = GLBalanceClient.queryGLBalance(systemConfig.getLongiApiGlBalance(),
                    new GlBalanceParam(org.getClientCode(), period, account.getCode()),
                    StringUtils.isAnyBlank(systemConfig.getLongiApiBasicUser(), systemConfig.getLongiApiBasicPwd()) ?
                            null : new BasicUser(systemConfig.getLongiApiBasicUser(), systemConfig.getLongiApiBasicPwd()));
            if (response.getStatus() != SoapResponse.SUCCESS) {
                logger.error("queryGLBalance error." + JSON.toJSONString(response));
                throw new ServiceException("ErrorResponse");
            }
eddie.woo's avatar
eddie.woo committed
71
            //分组求和 需求确认by  sherry
eddie.woo's avatar
eddie.woo committed
72 73 74
            response.getData().stream().collect(Collectors.groupingBy(o -> StringUtils.joinWith("_",
                    o.getSegment1(), o.getSegment3(), o.getSegment4()))).values().forEach(list -> {
                GlBalance glBalance = new GlBalance();
eddie.woo's avatar
eddie.woo committed
75 76
                GLBalanceDto sum = sum(list);
                beanUtil.copyProperties(sum, glBalance);
eddie.woo's avatar
eddie.woo committed
77

eddie.woo's avatar
eddie.woo committed
78
                glBalance.setPeriodName(period);
eddie.woo's avatar
eddie.woo committed
79 80
                GlBalanceExample example = new GlBalanceExample();
                example.createCriteria().andSegment1EqualTo(glBalance.getSegment1()).andSegment3EqualTo(glBalance.getSegment3())
eddie.woo's avatar
eddie.woo committed
81
                        .andSegment4EqualTo(glBalance.getSegment4()).andPeriodNameEqualTo(period);
eddie.woo's avatar
eddie.woo committed
82 83 84 85 86 87 88 89 90 91 92 93 94
                List<GlBalance> tmpList;
                if ((tmpList = glBalanceMapper.selectByExample(example)).size() > 0) {
                    glBalance.setId(tmpList.get(0).getId());
                    glBalanceMapper.updateByPrimaryKeySelective(glBalance);
                } else {
                    glBalance.setId(idService.nextId());
                    glBalanceMapper.insertSelective(glBalance);
                }
            });

        }
    }

eddie.woo's avatar
eddie.woo committed
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
    /**
     * 科目余额数据同步
     *
     * @param orgId  String
     * @param period YYYY-MM
     * @throws ServiceException ex
     */
    public void queryGlBalance(String orgId, String period) throws ServiceException {
        Organization org = organizationMapper.selectByPrimaryKey(orgId);
        if (null == org) {
            return;
        }
        queryGlBalance(org, period);
    }

    /**
     * @param orgId      String
     * @param fromPeriod Integer
     * @param toPeriod   Integer
     * @throws ServiceException ex
     */
    public void queryGlBalance(String orgId, Integer fromPeriod, Integer toPeriod) throws ServiceException {
        Calendar calendar = Calendar.getInstance();
        for (int i = fromPeriod; i <= toPeriod; i++) {
            calendar.set(Calendar.MONTH, i - 1);
            SimpleDateFormat dateFormat = new SimpleDateFormat(Constant.DateFormat.YEAR_MONTH);
            queryGlBalance(orgId, dateFormat.format(calendar.getTime()));
        }
    }

eddie.woo's avatar
eddie.woo committed
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
    private GLBalanceDto sum(List<GLBalanceDto> list) {
        if (CollectionUtils.isEmpty(list)) {
            return null;
        }
        GLBalanceDto result = list.get(0);
        list.subList(1, list.size()).forEach(o -> {
            result.setBeginCrBalance(CommonUtil.add(result.getBeginCrBalance(), o.getBeginCrBalance()));
            result.setBeginDrBalance(CommonUtil.add(result.getBeginDrBalance(), o.getBeginDrBalance()));
            result.setEndCrBalance(CommonUtil.add(result.getEndCrBalance(), o.getEndCrBalance()));
            result.setEndDrBalance(CommonUtil.add(result.getEndDrBalance(), o.getEndDrBalance()));
            result.setPtdCr(CommonUtil.add(result.getPtdCr(), o.getPtdCr()));
            result.setPtdDr(CommonUtil.add(result.getPtdDr(), o.getPtdDr()));
            result.setYtdCr(CommonUtil.add(result.getYtdCr(), o.getYtdCr()));
            result.setYtdDr(CommonUtil.add(result.getYtdDr(), o.getYtdDr()));
        });
        return result;
    }

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