解决遗漏不计算不同住人员住宿费问题-龚宇杰

This commit is contained in:
ggxl 2025-04-18 11:45:06 +08:00
parent 27ddcd823f
commit 92835169dd
1 changed files with 45 additions and 20 deletions

View File

@ -43,6 +43,8 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
updateTripAccStd(parentIndex, rowIndex);
break;
}
this.getView().updateView("entryentity");
}
@Override
@ -111,6 +113,7 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
DynamicObject travelerI = travelers.get(i).getDynamicObject("fbasedataid");
if (cohabitPersons.containsKey(travelerI.getLong("id"))) continue;
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");
@ -119,6 +122,7 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
String genderI = travelerI.getString("gender");
String genderJ = travelerJ.getString("gender");
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"));
@ -146,24 +150,29 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
BigDecimal tripSTDAmount = tripStdDetail == null ? BigDecimal.ZERO : tripStdDetail.getStandardamount();
BigDecimal highSeasonTripSTDAmount = tripStdDetail == null ? BigDecimal.ZERO : tripStdDetail.getHighSeasonStandardamount();
BigDecimal std = tripSTDAmount.setScale(2, RoundingMode.HALF_DOWN);
if (std.equals(new BigDecimal(0).setScale(2, RoundingMode.HALF_DOWN))) {
stdDetail.append("未设置").append("");
} else {
stdDetail.append("").append(std).append("/天,");
}
tripStdSum = tripStdSum.add(tripSTDAmount);
getStdDetail(stdDetail, tripSTDAmount, highSeasonTripSTDAmount);
BigDecimal highStd = highSeasonTripSTDAmount.setScale(2, RoundingMode.HALF_DOWN);
if (highStd.equals(new BigDecimal(0).setScale(2, RoundingMode.HALF_DOWN))) {
stdDetail.append("旺季未设置");
} else {
stdDetail.append("旺季¥").append(highStd).append("/天");
}
tripStdSum = tripStdSum.add(tripSTDAmount);
highTripStdSum = highTripStdSum.add(highSeasonTripSTDAmount);
break;
}
}
if (!isCohabit) {
if (stdDetail.length() == 0) {
stdDetail.append(travelerI.getString("name")).append(":");
} else {
stdDetail.append(" | ").append(travelerI.getString("name")).append(":");
}
TripStandardDetail tripStdDetail = TripStandardUtils.getAccmodationStdFromPageCache(travelerI.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();
getStdDetail(stdDetail, tripSTDAmount, highSeasonTripSTDAmount);
tripStdSum = tripStdSum.add(tripSTDAmount);
highTripStdSum = highTripStdSum.add(highSeasonTripSTDAmount);
}
}
model.setValue("tripstandardamount", tripStdSum, curEntryIndex, parentEntryIndex);
@ -184,26 +193,42 @@ public class TripPersonCohabitPlugin extends AbstractBillPlugIn implements Plugi
* @param reimburseLevelJ B用户报销级别
*/
private int whichIsTopReimburseLevel(DynamicObject reimburseLevelI, DynamicObject reimburseLevelJ) {
int i = 0;
int j = 0;
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 == 0 && numberI.equals(reimburseLevel)) i = num;
if (j == 0 && numberJ.equals(reimburseLevel)) j = num;
if (i == length && numberI.equals(reimburseLevel)) i = num;
if (j == length && numberJ.equals(reimburseLevel)) j = num;
if (i != 0 && j != 0) break;
if (i != length && j != length) break;
}
if (i > j) {
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);
if (std.equals(new BigDecimal(0).setScale(2, RoundingMode.HALF_DOWN))) {
stdDetail.append("未设置").append("");
} else {
stdDetail.append("").append(std).append("/天,");
}
BigDecimal highStd = highSeasonTripSTDAmount.setScale(2, RoundingMode.HALF_DOWN);
if (highStd.equals(new BigDecimal(0).setScale(2, RoundingMode.HALF_DOWN))) {
stdDetail.append("旺季未设置");
} else {
stdDetail.append("旺季¥").append(highStd).append("/天");
}
}
}