📄 vouchernumserviceimpl.java
字号:
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 + -