调整获取最高标准逻辑,根据金额-龚宇杰

This commit is contained in:
ggxl 2025-04-21 14:12:27 +08:00
parent 92835169dd
commit 402ba55307
1 changed files with 27 additions and 43 deletions

View File

@ -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
}
/**
* 比较AB两用户报销级别取最高值
* 构建标准明细
*
* @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);