调整获取最高标准逻辑,根据金额-龚宇杰
This commit is contained in:
parent
92835169dd
commit
402ba55307
|
@ -92,7 +92,6 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
|
||||||
*/
|
*/
|
||||||
private void updateTripAccStd(int parentEntryIndex, int curEntryIndex) {
|
private void updateTripAccStd(int parentEntryIndex, int curEntryIndex) {
|
||||||
IDataModel model = this.getModel();
|
IDataModel model = this.getModel();
|
||||||
DynamicObject company = (DynamicObject) model.getValue("company");
|
|
||||||
DynamicObject tripEntry = model.getEntryRowEntity("tripentry", parentEntryIndex);// 行程信息分录
|
DynamicObject tripEntry = model.getEntryRowEntity("tripentry", parentEntryIndex);// 行程信息分录
|
||||||
DynamicObjectCollection travelers = tripEntry.getDynamicObjectCollection("travelers");// 出差人
|
DynamicObjectCollection travelers = tripEntry.getDynamicObjectCollection("travelers");// 出差人
|
||||||
|
|
||||||
|
@ -113,15 +112,15 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
|
||||||
DynamicObject travelerI = travelers.get(i).getDynamicObject("fbasedataid");
|
DynamicObject travelerI = travelers.get(i).getDynamicObject("fbasedataid");
|
||||||
if (cohabitPersons.containsKey(travelerI.getLong("id"))) continue;
|
if (cohabitPersons.containsKey(travelerI.getLong("id"))) continue;
|
||||||
|
|
||||||
boolean isCohabit = false;
|
boolean isCohabit = false;//是否同住
|
||||||
for (int j = i + 1; j < travelers.size(); j++) {
|
for (int j = i + 1; j < travelers.size(); j++) {
|
||||||
DynamicObject travelerJ = travelers.get(j).getDynamicObject("fbasedataid");
|
DynamicObject travelerJ = travelers.get(j).getDynamicObject("fbasedataid");
|
||||||
travelerI = BusinessDataServiceHelper.loadSingle(travelerI.getPkValue(), "bos_user");
|
travelerI = BusinessDataServiceHelper.loadSingle(travelerI.getPkValue(), "bos_user");
|
||||||
travelerJ = BusinessDataServiceHelper.loadSingle(travelerJ.getPkValue(), "bos_user");
|
travelerJ = BusinessDataServiceHelper.loadSingle(travelerJ.getPkValue(), "bos_user");
|
||||||
|
|
||||||
String genderI = travelerI.getString("gender");
|
String genderI = travelerI.getString("gender");//性别
|
||||||
String genderJ = travelerJ.getString("gender");
|
String genderJ = travelerJ.getString("gender");
|
||||||
if (!genderI.equals("0") && genderI.equals(genderJ)) {
|
if (!genderI.equals("0") && genderI.equals(genderJ)) {//性别不为保密且相等
|
||||||
isCohabit = true;
|
isCohabit = true;
|
||||||
cohabitPersons.put(travelerI.getLong("id"), travelerJ.getLong("id"));
|
cohabitPersons.put(travelerI.getLong("id"), travelerJ.getLong("id"));
|
||||||
cohabitPersons.put(travelerJ.getLong("id"), travelerI.getLong("id"));
|
cohabitPersons.put(travelerJ.getLong("id"), travelerI.getLong("id"));
|
||||||
|
@ -132,23 +131,29 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
|
||||||
stdDetail.append(" | ").append(travelerI.getString("name")).append("和").append(travelerJ.getString("name")).append(":");
|
stdDetail.append(" | ").append(travelerI.getString("name")).append("和").append(travelerJ.getString("name")).append(":");
|
||||||
}
|
}
|
||||||
|
|
||||||
ErTripStdServiceImp tripStdServiceImp = new ErTripStdServiceImp();
|
BigDecimal tripSTDAmount;//标准金额
|
||||||
StdPreCalContext stdPreCalContext = (StdPreCalContext) ThreadCache.get("stdPreCalContext");
|
BigDecimal highSeasonTripSTDAmount;//旺季标准金额
|
||||||
DynamicObject reimburseLevelI = tripStdServiceImp.getReimburseLevelByUserId(travelerI.getLong("id"), company.getLong("id"), stdPreCalContext);
|
|
||||||
DynamicObject reimburseLevelJ = tripStdServiceImp.getReimburseLevelByUserId(travelerJ.getLong("id"), company.getLong("id"), stdPreCalContext);
|
|
||||||
if (reimburseLevelI == null || reimburseLevelJ == null) continue;
|
|
||||||
|
|
||||||
DynamicObject traveler;
|
//根据人员ID、币种ID、出差地域ID、差旅项目ID获取标准
|
||||||
int num = whichIsTopReimburseLevel(reimburseLevelI, reimburseLevelJ);
|
TripStandardDetail tripStdDetailI = TripStandardUtils.getAccmodationStdFromPageCache(travelerI.getLong("id"), this, entryCurrency.getPkValue(), tripArea.getPkValue(), tripExpenseItem.getPkValue(), null);
|
||||||
if (1 == num) {
|
BigDecimal tripSTDAmountI = tripStdDetailI == null ? BigDecimal.ZERO : tripStdDetailI.getStandardamount();
|
||||||
traveler = travelerI;
|
BigDecimal highSeasonTripSTDAmountI = tripStdDetailI == null ? BigDecimal.ZERO : tripStdDetailI.getHighSeasonStandardamount();
|
||||||
|
|
||||||
|
TripStandardDetail tripStdDetailJ = TripStandardUtils.getAccmodationStdFromPageCache(travelerJ.getLong("id"), this, entryCurrency.getPkValue(), tripArea.getPkValue(), tripExpenseItem.getPkValue(), null);
|
||||||
|
BigDecimal tripSTDAmountJ = tripStdDetailJ == null ? BigDecimal.ZERO : tripStdDetailJ.getStandardamount();
|
||||||
|
BigDecimal highSeasonTripSTDAmountJ = tripStdDetailJ == null ? BigDecimal.ZERO : tripStdDetailJ.getHighSeasonStandardamount();
|
||||||
|
|
||||||
|
if (tripSTDAmountI.compareTo(tripSTDAmountJ) > 0) {
|
||||||
|
tripSTDAmount = tripSTDAmountI;
|
||||||
} else {
|
} else {
|
||||||
traveler = travelerJ;
|
tripSTDAmount = tripSTDAmountJ;
|
||||||
}
|
}
|
||||||
|
|
||||||
TripStandardDetail tripStdDetail = TripStandardUtils.getAccmodationStdFromPageCache(traveler.getLong("id"), this, entryCurrency.getPkValue(), tripArea.getPkValue(), tripExpenseItem.getPkValue(), null);
|
if (highSeasonTripSTDAmountI.compareTo(highSeasonTripSTDAmountJ) > 0) {
|
||||||
BigDecimal tripSTDAmount = tripStdDetail == null ? BigDecimal.ZERO : tripStdDetail.getStandardamount();
|
highSeasonTripSTDAmount = highSeasonTripSTDAmountI;
|
||||||
BigDecimal highSeasonTripSTDAmount = tripStdDetail == null ? BigDecimal.ZERO : tripStdDetail.getHighSeasonStandardamount();
|
} else {
|
||||||
|
highSeasonTripSTDAmount = highSeasonTripSTDAmountJ;
|
||||||
|
}
|
||||||
|
|
||||||
getStdDetail(stdDetail, tripSTDAmount, highSeasonTripSTDAmount);
|
getStdDetail(stdDetail, tripSTDAmount, highSeasonTripSTDAmount);
|
||||||
|
|
||||||
|
@ -179,6 +184,7 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
|
||||||
model.setValue("hightripstandardamount", highTripStdSum, curEntryIndex, parentEntryIndex);
|
model.setValue("hightripstandardamount", highTripStdSum, curEntryIndex, parentEntryIndex);
|
||||||
model.setValue("stddetail", stdDetail.toString(), curEntryIndex, parentEntryIndex);
|
model.setValue("stddetail", stdDetail.toString(), curEntryIndex, parentEntryIndex);
|
||||||
|
|
||||||
|
//修改报销金额以触发标品逻辑 判断是否超标
|
||||||
BigDecimal entryAmount = (BigDecimal) model.getValue("orientryamount", curEntryIndex, parentEntryIndex);
|
BigDecimal entryAmount = (BigDecimal) model.getValue("orientryamount", curEntryIndex, parentEntryIndex);
|
||||||
model.setValue("orientryamount", entryAmount.subtract(new BigDecimal(1)), curEntryIndex, parentEntryIndex);
|
model.setValue("orientryamount", entryAmount.subtract(new BigDecimal(1)), curEntryIndex, parentEntryIndex);
|
||||||
model.setValue("orientryamount", entryAmount, curEntryIndex, parentEntryIndex);
|
model.setValue("orientryamount", entryAmount, curEntryIndex, parentEntryIndex);
|
||||||
|
@ -187,34 +193,12 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 比较A、B两用户报销级别,取最高值
|
* 构建标准明细
|
||||||
*
|
*
|
||||||
* @param reimburseLevelI A用户报销级别
|
* @param stdDetail 标准明细
|
||||||
* @param reimburseLevelJ B用户报销级别
|
* @param tripSTDAmount 标准金额
|
||||||
|
* @param highSeasonTripSTDAmount 旺季标准金额
|
||||||
*/
|
*/
|
||||||
private int whichIsTopReimburseLevel(DynamicObject reimburseLevelI, DynamicObject reimburseLevelJ) {
|
|
||||||
String numberI = reimburseLevelI.getString("number");
|
|
||||||
String numberJ = reimburseLevelJ.getString("number");
|
|
||||||
|
|
||||||
String[] reimburseLevels = new String[]{"002", "003", "General-01"};
|
|
||||||
int length = reimburseLevels.length;
|
|
||||||
int i = length;
|
|
||||||
int j = length;
|
|
||||||
|
|
||||||
for (int num = 0; num < reimburseLevels.length; num++) {
|
|
||||||
String reimburseLevel = reimburseLevels[num];
|
|
||||||
if (i == length && numberI.equals(reimburseLevel)) i = num;
|
|
||||||
if (j == length && numberJ.equals(reimburseLevel)) j = num;
|
|
||||||
|
|
||||||
if (i != length && j != length) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i < j) {
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void getStdDetail(StringBuilder stdDetail, BigDecimal tripSTDAmount, BigDecimal highSeasonTripSTDAmount) {
|
private void getStdDetail(StringBuilder stdDetail, BigDecimal tripSTDAmount, BigDecimal highSeasonTripSTDAmount) {
|
||||||
BigDecimal std = tripSTDAmount.setScale(2, RoundingMode.HALF_DOWN);
|
BigDecimal std = tripSTDAmount.setScale(2, RoundingMode.HALF_DOWN);
|
||||||
|
|
Loading…
Reference in New Issue