调整获取最高标准逻辑,根据金额-龚宇杰
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