调整获取最高标准逻辑,根据金额-龚宇杰
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) {
|
||||
IDataModel model = this.getModel();
|
||||
DynamicObject company = (DynamicObject) model.getValue("company");
|
||||
DynamicObject tripEntry = model.getEntryRowEntity("tripentry", parentEntryIndex);// 行程信息分录
|
||||
DynamicObjectCollection travelers = tripEntry.getDynamicObjectCollection("travelers");// 出差人
|
||||
|
||||
|
@ -113,15 +112,15 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
|
|||
DynamicObject travelerI = travelers.get(i).getDynamicObject("fbasedataid");
|
||||
if (cohabitPersons.containsKey(travelerI.getLong("id"))) continue;
|
||||
|
||||
boolean isCohabit = false;
|
||||
boolean isCohabit = false;//是否同住
|
||||
for (int j = i + 1; j < travelers.size(); j++) {
|
||||
DynamicObject travelerJ = travelers.get(j).getDynamicObject("fbasedataid");
|
||||
travelerI = BusinessDataServiceHelper.loadSingle(travelerI.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");
|
||||
if (!genderI.equals("0") && genderI.equals(genderJ)) {
|
||||
if (!genderI.equals("0") && genderI.equals(genderJ)) {//性别不为保密且相等
|
||||
isCohabit = true;
|
||||
cohabitPersons.put(travelerI.getLong("id"), travelerJ.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(":");
|
||||
}
|
||||
|
||||
ErTripStdServiceImp tripStdServiceImp = new ErTripStdServiceImp();
|
||||
StdPreCalContext stdPreCalContext = (StdPreCalContext) ThreadCache.get("stdPreCalContext");
|
||||
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;
|
||||
BigDecimal tripSTDAmount;//标准金额
|
||||
BigDecimal highSeasonTripSTDAmount;//旺季标准金额
|
||||
|
||||
DynamicObject traveler;
|
||||
int num = whichIsTopReimburseLevel(reimburseLevelI, reimburseLevelJ);
|
||||
if (1 == num) {
|
||||
traveler = travelerI;
|
||||
//根据人员ID、币种ID、出差地域ID、差旅项目ID获取标准
|
||||
TripStandardDetail tripStdDetailI = TripStandardUtils.getAccmodationStdFromPageCache(travelerI.getLong("id"), this, entryCurrency.getPkValue(), tripArea.getPkValue(), tripExpenseItem.getPkValue(), null);
|
||||
BigDecimal tripSTDAmountI = tripStdDetailI == null ? BigDecimal.ZERO : tripStdDetailI.getStandardamount();
|
||||
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 {
|
||||
traveler = travelerJ;
|
||||
tripSTDAmount = tripSTDAmountJ;
|
||||
}
|
||||
|
||||
TripStandardDetail tripStdDetail = TripStandardUtils.getAccmodationStdFromPageCache(traveler.getLong("id"), this, entryCurrency.getPkValue(), tripArea.getPkValue(), tripExpenseItem.getPkValue(), null);
|
||||
BigDecimal tripSTDAmount = tripStdDetail == null ? BigDecimal.ZERO : tripStdDetail.getStandardamount();
|
||||
BigDecimal highSeasonTripSTDAmount = tripStdDetail == null ? BigDecimal.ZERO : tripStdDetail.getHighSeasonStandardamount();
|
||||
if (highSeasonTripSTDAmountI.compareTo(highSeasonTripSTDAmountJ) > 0) {
|
||||
highSeasonTripSTDAmount = highSeasonTripSTDAmountI;
|
||||
} else {
|
||||
highSeasonTripSTDAmount = highSeasonTripSTDAmountJ;
|
||||
}
|
||||
|
||||
getStdDetail(stdDetail, tripSTDAmount, highSeasonTripSTDAmount);
|
||||
|
||||
|
@ -179,6 +184,7 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
|
|||
model.setValue("hightripstandardamount", highTripStdSum, curEntryIndex, parentEntryIndex);
|
||||
model.setValue("stddetail", stdDetail.toString(), curEntryIndex, parentEntryIndex);
|
||||
|
||||
//修改报销金额以触发标品逻辑 判断是否超标
|
||||
BigDecimal entryAmount = (BigDecimal) model.getValue("orientryamount", curEntryIndex, parentEntryIndex);
|
||||
model.setValue("orientryamount", entryAmount.subtract(new BigDecimal(1)), 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 reimburseLevelJ B用户报销级别
|
||||
* @param stdDetail 标准明细
|
||||
* @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) {
|
||||
BigDecimal std = tripSTDAmount.setScale(2, RoundingMode.HALF_DOWN);
|
||||
|
|
Loading…
Reference in New Issue