⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vouchernumserviceimpl.java

📁 一个关于tlms的一个小程序 看看能否帮助到别人
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            return;
        }

        // The pattern of sap voucher number is ^\d{2}-[a-zA-Z]{2}\d{2}-\d+$
        // for example : 06-PE02-1
        String voucherTypePattern = "^\\d{2}-[a-zA-Z]{2}\\d{2}-\\d+$";
        Pattern pattern = Pattern.compile(voucherTypePattern);
        Matcher matcher;

        VoucherHeader voucherHeader;
        for (int i = 0; i < voucherHeaderList.size(); i ++) {
            voucherHeader = (VoucherHeader) voucherHeaderList.get(i);
            if (voucherHeader != null) {
                voucherHeader.setVoucherNo(voucherHeader.getSapVoucherNo());

                matcher = pattern.matcher(voucherHeader.getVoucherNo());
                if (!matcher.matches()) {
                    if (this.logger.isErrorEnabled()) {
                        this.logger.error("voucher type pattern unmatched! ==> " + voucherHeader.getVoucherNo());
                    }

                    throw new TlmsServiceException(TlmsServiceErrorCodes.SERVICE_ERROR_FI022);
                }
            } else {
                voucherHeaderList.remove(i --);
            }
        }
    }

    /**
     * This method splits voucher headers to map structure by company.
     *
     * @param voucherHeaderList  list of voucher headers
     * @return Map  key          value
     *              companyId    a list whose elems are voucherheaders with the companyid of the key value
     *
     *    exmaple:
     *              key  value
     *              1    list(companyId  voucherType  voucherNum)
     *                        1          PE           06-PE01-1
     *                        1          PE           06-PE01-2
     *                        1          PE           06-PE01-2
     *                        1          PE           06-PE01-10
     *                        1          PE           06-PE01-12
     *                        1          PE           06-PE01-12
     *              2    list(companyId  voucherType  voucherNum)
     *                        2          AE           06-AE01-2
     *                        2          AE           06-AE01-3
     */
    private Map splistVoucherHeaderListByCompanyId(List voucherHeaderList) {
        Map voucherHeaderByCompanyIdMap = new HashMap();

        if (voucherHeaderList == null || voucherHeaderList.size() == 0) {
            return voucherHeaderByCompanyIdMap;
        }

        Long companyId = null;
        VoucherHeader voucherHeader;
        List voucherHeaderByCompanyIdList = new ArrayList();

        for (int i = 0; i < voucherHeaderList.size(); i ++) {
            voucherHeader = (VoucherHeader) voucherHeaderList.get(i);

            if (voucherHeader != null && voucherHeader.getCompany().getId() != null) {
                if (companyId == null) {
                    companyId = voucherHeader.getCompany().getId();
                }

                if (!voucherHeader.getCompany().getId().equals(companyId)) {
                    voucherHeaderByCompanyIdMap.put(companyId, voucherHeaderByCompanyIdList);

                    voucherHeaderByCompanyIdList = new ArrayList();
                    companyId = voucherHeader.getCompany().getId();
                }

                voucherHeaderByCompanyIdList.add(voucherHeader);
            }
        }
        if (voucherHeaderByCompanyIdList.size() > 0) {
            voucherHeaderByCompanyIdMap.put(companyId, voucherHeaderByCompanyIdList);
        }

        return voucherHeaderByCompanyIdMap;
    }

    /**
     * This method splits voucher header of one company to map structure by voucher type.
     *
     * @param oneCompanyVoucherHeaderList
     * @return Map  key               value
     *              voucher type      a list of voucherHeaders whose voucher type is the key value
     *
     *    example:
     *              key  value
     *              PE   list(companyId  voucherType  voucherNum)
     *                        1          PE           06-PE01-1
     *                        1          PE           06-PE01-2
     *                        1          PE           06-PE01-2
     *                        1          PE           06-PE01-10
     *                        1          PE           06-PE01-12
     *                        1          PE           06-PE01-12
     */
    private Map splitOneCompanyVoucherHeaderListByVoucherType(List oneCompanyVoucherHeaderList) {
        Map oneCompanyVoucherHeaderByVoucherTypeMap = new HashMap();

        if (oneCompanyVoucherHeaderList == null || oneCompanyVoucherHeaderList.size() == 0) {
            return oneCompanyVoucherHeaderByVoucherTypeMap;
        }

        String voucherType = null;
        VoucherHeader voucherHeader;
        List oneCompanyVoucherHeaderByVoucherTypeList = new ArrayList();

        for (int i = 0; i < oneCompanyVoucherHeaderList.size(); i ++) {
            voucherHeader = (VoucherHeader) oneCompanyVoucherHeaderList.get(i);

            if (voucherHeader != null && voucherHeader.getVoucherType() != null) {
                if (voucherType == null) {
                    voucherType = voucherHeader.getVoucherType();
                }

                if (!voucherHeader.getVoucherType().equals(voucherType)) {
                    oneCompanyVoucherHeaderByVoucherTypeMap.put(voucherType, oneCompanyVoucherHeaderByVoucherTypeList);

                    oneCompanyVoucherHeaderByVoucherTypeList = new ArrayList();
                    voucherType = voucherHeader.getVoucherType();
                }

                oneCompanyVoucherHeaderByVoucherTypeList.add(voucherHeader);
            }
        }
        if (oneCompanyVoucherHeaderByVoucherTypeList.size() > 0) {
            oneCompanyVoucherHeaderByVoucherTypeMap.put(voucherType, oneCompanyVoucherHeaderByVoucherTypeList);
        }

        return oneCompanyVoucherHeaderByVoucherTypeMap;
    }

    /**
     * This method verifies voucher numbers of voucher type of one company.
     *
     * @param oneCompanyVoucherHeaderByVoucherTypeMap
     * @return Map  key   value
     *              voucher type      a list of voucherHeaders whose voucher type is the key value
     *
     *    example:
     *              key  value
     *              PE   list(companyId  voucherType  voucherNum)
     *                        1          PE           06-PE01-1
     *                        1          PE           06-PE01-2
     *                        1          PE           06-PE01-3
     *                        1          PE           06-PE01-4
     *                        1          PE           06-PE01-5
     *                        1          PE           06-PE01-6
     */
    private Map verifyOneCompanyVoucherNumByVoucherType(Map oneCompanyVoucherHeaderByVoucherTypeMap) {
        Set voucherTypeSet = oneCompanyVoucherHeaderByVoucherTypeMap.keySet();
        Iterator voucherTypeIt = voucherTypeSet.iterator();
        List oneCompanyVoucherHeaderOfOneVoucherTypeList;

        while (voucherTypeIt.hasNext()) {
            // the voucher number has been ordered by asc in hql
            oneCompanyVoucherHeaderOfOneVoucherTypeList =
                    (List) oneCompanyVoucherHeaderByVoucherTypeMap.get(voucherTypeIt.next());

            if (oneCompanyVoucherHeaderOfOneVoucherTypeList != null
             && oneCompanyVoucherHeaderOfOneVoucherTypeList.size() > 0) {
                // get voucher number prefix excluding flowNo for current voucher type, for example : 06-PE02-
                String someVoucheNo =
                        ((VoucherHeader)oneCompanyVoucherHeaderOfOneVoucherTypeList.get(0)).getVoucherNo();
                String voucheNoPrefix = someVoucheNo.substring(0, someVoucheNo.lastIndexOf("-") + 1);

                int size = oneCompanyVoucherHeaderOfOneVoucherTypeList.size();
                int currentPos = 0;
                int nextPos;
                VoucherHeader currentVoucher;
                VoucherHeader nextVoucher;
                VoucherHeader lastVoucher;
                String currentVoucherNum;
                String nextVoucherNum;
                String lastVoucherNum;
                String newVoucherNum;
                int currentFlowNo;
                int nextFlowNo;
                int lastFlowNo;

                if (oneCompanyVoucherHeaderOfOneVoucherTypeList.size() >= 1) {
                    // if there is only one voucher for current voucher type,
                    // then check whether its flowNo is 1 or not
                    currentVoucher = (VoucherHeader) oneCompanyVoucherHeaderOfOneVoucherTypeList.get(currentPos);
                    currentVoucherNum = currentVoucher.getVoucherNo();
                    currentFlowNo = Integer.parseInt(
                            currentVoucherNum.substring(currentVoucherNum.lastIndexOf("-") + 1));
                    if (1 != currentFlowNo) {
                        currentVoucher.setVoucherNo(voucheNoPrefix + 1);
                    }
                }

                if (oneCompanyVoucherHeaderOfOneVoucherTypeList.size() > 1) {
                    // number of voucher is more than 1
                    do {
                        nextPos = currentPos + 1;
                        currentVoucher = (VoucherHeader) oneCompanyVoucherHeaderOfOneVoucherTypeList.get(currentPos);
                        nextVoucher = (VoucherHeader) oneCompanyVoucherHeaderOfOneVoucherTypeList.get(nextPos);
                        currentVoucherNum = currentVoucher.getVoucherNo();
                        nextVoucherNum = nextVoucher.getVoucherNo();
                        currentFlowNo =
                                Integer.parseInt(currentVoucherNum.substring(currentVoucherNum.lastIndexOf("-") + 1));
                        nextFlowNo = Integer.parseInt(nextVoucherNum.substring(nextVoucherNum.lastIndexOf("-") + 1));

                        if (nextFlowNo == currentFlowNo) {
                            // Firstly, replace the dunplicate voucherNo
                            lastVoucher = (VoucherHeader) oneCompanyVoucherHeaderOfOneVoucherTypeList.get(size - 1);
                            lastVoucherNum = lastVoucher.getVoucherNo();
                            lastFlowNo =
                                    Integer.parseInt(lastVoucherNum.substring(lastVoucherNum.lastIndexOf("-") + 1));
                            newVoucherNum = voucheNoPrefix + (lastFlowNo + 1);

                            // Secondly, put it to the list tail
                            nextVoucher.setVoucherNo(newVoucherNum);
                            oneCompanyVoucherHeaderOfOneVoucherTypeList.remove(nextPos);
                            oneCompanyVoucherHeaderOfOneVoucherTypeList.add(nextVoucher);
                        } else if (nextFlowNo - currentFlowNo == 1) {
                            // right status
                            currentPos ++;
                        } else if (nextFlowNo - currentFlowNo > 1) {
                            // make the voucherNo sequencial

                            // get the flowNo following with the precious one
                            newVoucherNum = voucheNoPrefix +  (++ currentFlowNo);

                            // fill in the blank with the trailing one
                            lastVoucher = (VoucherHeader) oneCompanyVoucherHeaderOfOneVoucherTypeList.get(size - 1);
                            lastVoucher.setVoucherNo(newVoucherNum);
                            oneCompanyVoucherHeaderOfOneVoucherTypeList.remove(size - 1);
                            oneCompanyVoucherHeaderOfOneVoucherTypeList.add(++ currentPos, lastVoucher);
                        }
                    } while (currentPos < size - 1);
                }
            }
        }

        return oneCompanyVoucherHeaderByVoucherTypeMap;
    }

    /**
     * This method saves current flow number of every voucher type.
     *
     * @param oneCompanyVoucherHeaderList
     * @param calendarPeriod
     * @param companySysId
     */
    private void saveOneCompanyVoucherNumByVoucherType(Map oneCompanyVoucherHeaderList,
                                                       CalendarPeriod calendarPeriod,
                                                       Long companySysId) throws TlmsServiceException {
        SalesOrg company = salesOrgService.getSalesOrg(String.valueOf(companySysId));
        if (company == null) {
            if (this.logger.isWarnEnabled()) {
                this.logger.warn("Needn't to initiate period voucher number. Invalid company id !");
            }

            throw new TlmsServiceException(TlmsServiceErrorCodes.SERVICE_ERROR_FI022);
        }

        List updatedVoucherNumList = new ArrayList();

        Set voucherTypeSet = oneCompanyVoucherHeaderList.keySet();
        Iterator voucherTypeIt = voucherTypeSet.iterator();

        while (voucherTypeIt.hasNext()) {
            String voucherType = (String) voucherTypeIt.next();
            List list = (List) oneCompanyVoucherHeaderList.get(voucherType);

            if (list != null) {
                List voucherNumList =
                        ((VoucherNumDao) baseDao).searchVoucherNum(company, calendarPeriod, voucherType);
                if (voucherNumList != null && voucherNumList.size() > 0) {
                    VoucherNum voucherNum = (VoucherNum) voucherNumList.get(0);
                    voucherNum.setFlowNo(new Integer(list.size()));

                    updatedVoucherNumList.add(voucherNum);
                }
            }
        }

        ((VoucherNumDao) baseDao).saveOrUpdateAllVoucherNum(updatedVoucherNumList);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -