Przeglądaj źródła

优化 欠费催缴功能

java110 4 lat temu
rodzic
commit
84fe3e6e6e

+ 5 - 0
java110-bean/src/main/java/com/java110/dto/feeCollectionOrder/FeeCollectionOrderDto.java

@@ -20,6 +20,11 @@ public class FeeCollectionOrderDto extends PageDto implements Serializable {
     public static final String STATE_DOING = "D";
     public static final String STATE_FINISH = "F";
 
+    //催缴方式,001 仅短信方式  002 短信微信方式 003 仅微信方式
+    public static final String COLLECTION_WAY_SMS = "001";
+    public static final String COLLECTION_WAY_WECHAT = "002";
+    public static final String COLLECTION_WAY_WECHAT_SMS = "003";
+
     private String orderId;
     private String staffName;
     private String state;

+ 1 - 0
java110-bean/src/main/java/com/java110/dto/logSystemError/LogSystemErrorDto.java

@@ -17,6 +17,7 @@ public class LogSystemErrorDto extends PageDto implements Serializable {
 
 
     public static final String ERR_TYPE_JOB = "JOB";
+    public static final String ERR_TYPE_OWE_FEE = "OWE_FEE";
     public static final String ERR_TYPE_ACCOUNT = "ACCOUNT";
 
     private String msg;

+ 9 - 0
java110-bean/src/main/java/com/java110/dto/reportOweFee/ReportOweFeeDto.java

@@ -34,6 +34,7 @@ public class ReportOweFeeDto extends PageDto implements Serializable {
     private String payerObjType;
     private String payerObjId;
     private String[] payerObjIds;
+    private String hasOweFee;
     List<ReportOweFeeItemDto> items;
 
 
@@ -210,4 +211,12 @@ public class ReportOweFeeDto extends PageDto implements Serializable {
     public void setConfigIds(String[] configIds) {
         this.configIds = configIds;
     }
+
+    public String getHasOweFee() {
+        return hasOweFee;
+    }
+
+    public void setHasOweFee(String hasOweFee) {
+        this.hasOweFee = hasOweFee;
+    }
 }

+ 6 - 0
java110-db/src/main/resources/mapper/report/ReportOweFeeServiceDaoImplMapper.xml

@@ -43,6 +43,9 @@
         <if test="amountOwed !=null and amountOwed != ''">
             and t.amount_owed= #{amountOwed}
         </if>
+        <if test='hasOweFee !=null and hasOweFee == "Y"'>
+            and t.amount_owed &gt; 0
+        </if>
         <if test="payerObjName !=null and payerObjName != ''">
             and t.payer_obj_name= #{payerObjName}
         </if>
@@ -182,6 +185,9 @@
         <if test="amountOwed !=null and amountOwed != ''">
             and t.amount_owed= #{amountOwed}
         </if>
+        <if test='hasOweFee !=null and hasOweFee == "Y"'>
+            and t.amount_owed &gt; 0
+        </if>
         <if test="payerObjName !=null and payerObjName != ''">
             and t.payer_obj_name= #{payerObjName}
         </if>

+ 1 - 0
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java

@@ -433,6 +433,7 @@ public class DateUtil {
         return dateStr;
     }
 
+
     public static int getYear() {
         Date date = getCurrentDate();
         Calendar calendar = Calendar.getInstance();

+ 481 - 0
service-job/src/main/java/com/java110/job/task/wechat/FeeCollectionPushMessageTemplate.java

@@ -0,0 +1,481 @@
+package com.java110.job.task.wechat;
+
+import com.alibaba.fastjson.JSON;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.factory.WechatFactory;
+import com.java110.dto.community.CommunityDto;
+import com.java110.dto.fee.FeeDto;
+import com.java110.dto.feeCollectionOrder.FeeCollectionOrderDto;
+import com.java110.dto.logSystemError.LogSystemErrorDto;
+import com.java110.dto.owner.OwnerAppUserDto;
+import com.java110.dto.reportOweFee.ReportOweFeeDto;
+import com.java110.dto.reportOweFee.ReportOweFeeItemDto;
+import com.java110.dto.smallWeChat.SmallWeChatDto;
+import com.java110.dto.smallWechatAttr.SmallWechatAttrDto;
+import com.java110.dto.task.TaskDto;
+import com.java110.entity.wechat.Content;
+import com.java110.entity.wechat.Data;
+import com.java110.entity.wechat.Miniprogram;
+import com.java110.entity.wechat.PropertyFeeTemplateMessage;
+import com.java110.intf.fee.IFeeCollectionOrderInnerServiceSMO;
+import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.intf.report.IReportOweFeeInnerServiceSMO;
+import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
+import com.java110.intf.store.ISmallWechatAttrInnerServiceSMO;
+import com.java110.intf.user.IOwnerAppUserInnerServiceSMO;
+import com.java110.job.quartz.TaskSystemQuartz;
+import com.java110.po.logSystemError.LogSystemErrorPo;
+import com.java110.service.smo.ISaveSystemErrorSMO;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.WechatConstant;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.ExceptionUtil;
+import com.java110.utils.util.StringUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @program: MicroCommunity
+ * @description: 费用催缴信息模板
+ * @author: zcc
+ * @create: 2020-06-15 13:35
+ **/
+@Component
+public class FeeCollectionPushMessageTemplate extends TaskSystemQuartz {
+
+    private static Logger logger = LoggerFactory.getLogger(FeeCollectionPushMessageTemplate.class);
+
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
+
+    @Autowired
+    private ISmallWechatAttrInnerServiceSMO smallWechatAttrInnerServiceSMOImpl;
+
+    @Autowired
+    private IOwnerAppUserInnerServiceSMO ownerAppUserInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeCollectionOrderInnerServiceSMO feeCollectionOrderInnerServiceSMOImpl;
+
+
+    @Autowired
+    private IReportOweFeeInnerServiceSMO reportOweFeeInnerServiceSMOImpl;
+
+    @Autowired
+    private RestTemplate outRestTemplate;
+
+    @Autowired
+    private ISaveSystemErrorSMO saveSystemErrorSMOImpl;
+
+    //模板信息推送地址
+    private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
+
+    //模板id
+    private static String DEFAULT_TEMPLATE_ID = "ZF4j_ug2XW-UGwW1F-Gi4M1-51lpiu-PM89Oa6oZv6w";
+
+    private static final int DEFAULT_FEE_COUNT = 200;
+
+
+    @Override
+    protected void process(TaskDto taskDto) {
+        logger.debug("开始执行微信模板信息推送" + taskDto.toString());
+
+        // 获取小区
+        List<CommunityDto> communityDtos = getAllCommunity();
+
+        for (CommunityDto communityDto : communityDtos) {
+            try {
+                publishMsg(taskDto, communityDto);
+            } catch (Exception e) {
+                logger.error("推送消息失败", e);
+            }
+        }
+    }
+
+    private void publishMsg(TaskDto taskDto, CommunityDto communityDto) throws Exception {
+
+        FeeCollectionOrderDto feeCollectionOrderDto = new FeeCollectionOrderDto();
+        feeCollectionOrderDto.setCommunityId(communityDto.getCommunityId());
+        feeCollectionOrderDto.setState(FeeCollectionOrderDto.STATE_WAIT);
+        List<FeeCollectionOrderDto> feeCollectionOrderDtos = feeCollectionOrderInnerServiceSMOImpl.queryFeeCollectionOrders(feeCollectionOrderDto);
+
+        if (feeCollectionOrderDtos == null || feeCollectionOrderDtos.size() < 1) {
+            return;
+        }
+
+        ReportOweFeeDto reportOweFeeDto = new ReportOweFeeDto();
+        reportOweFeeDto.setCommunityId(communityDto.getCommunityId());
+        reportOweFeeDto.setHasOweFee("Y");
+        long oweCount = reportOweFeeInnerServiceSMOImpl.queryReportOweFeesCount(reportOweFeeDto);
+        if (oweCount == 0) {
+            return;
+        }
+
+        double maxPage = Math.ceil(oweCount / DEFAULT_FEE_COUNT);
+
+        for (int roomIndex = 0; roomIndex < maxPage; roomIndex++) {
+            try {
+                doReportOweFeePushMessage(roomIndex * DEFAULT_FEE_COUNT, (roomIndex + 1) * DEFAULT_FEE_COUNT, communityDto, feeCollectionOrderDtos.get(0));
+            } catch (Exception e) {
+                LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo();
+                logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId));
+                logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_OWE_FEE);
+                logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e));
+                saveSystemErrorSMOImpl.saveLog(logSystemErrorPo);
+                logger.error("欠费推送失败" + communityDto.getCommunityId(), e);
+            }
+        }
+    }
+
+    private void doReportOweFeePushMessage(int page, int row, CommunityDto communityDto, FeeCollectionOrderDto feeCollectionOrderDto) {
+        ReportOweFeeDto reportOweFeeDto = new ReportOweFeeDto();
+        reportOweFeeDto.setCommunityId(communityDto.getCommunityId());
+        reportOweFeeDto.setHasOweFee("Y");
+        reportOweFeeDto.setPage(page);
+        reportOweFeeDto.setRow(row);
+        List<ReportOweFeeDto> reportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportOweFees(reportOweFeeDto);
+        refreshReportOwe(reportOweFeeDtos);
+
+        pushMessage(reportOweFeeDtos, feeCollectionOrderDto);
+    }
+
+    private void pushMessage(List<ReportOweFeeDto> reportOweFeeDtos, FeeCollectionOrderDto feeCollectionOrderDto) {
+        for (ReportOweFeeDto reportOweFeeDo : reportOweFeeDtos) {
+            try {
+                doPushMessage(reportOweFeeDo, feeCollectionOrderDto);
+            } catch (Exception e) {
+                LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo();
+                logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId));
+                logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_OWE_FEE);
+                logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e));
+                saveSystemErrorSMOImpl.saveLog(logSystemErrorPo);
+                logger.error("欠费推送失败" + feeCollectionOrderDto.getCollectionName(), e);
+            }
+        }
+    }
+
+    /**
+     * 推送消息
+     *
+     * @param reportOweFeeDo
+     * @param feeCollectionOrderDto
+     */
+    private void doPushMessage(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) {
+
+        switch (feeCollectionOrderDto.getCollectionWay()) {
+            case FeeCollectionOrderDto.COLLECTION_WAY_SMS:
+                doSendSms(reportOweFeeDo, feeCollectionOrderDto);
+                break;
+            case FeeCollectionOrderDto.COLLECTION_WAY_WECHAT:
+                doSendWechat(reportOweFeeDo, feeCollectionOrderDto);
+                break;
+            case FeeCollectionOrderDto.COLLECTION_WAY_WECHAT_SMS:
+                doSendWechatOrSms(reportOweFeeDo, feeCollectionOrderDto);
+                break;
+        }
+
+    }
+
+    /**
+     * 微信或者 短信推送
+     *
+     * @param reportOweFeeDo
+     * @param feeCollectionOrderDto
+     */
+    private void doSendWechatOrSms(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) {
+        Map paramInfo = getOwnerAppUserDto(feeCollectionOrderDto.getCommunityId(), reportOweFeeDo.getOwnerId());
+        if (paramInfo == null) {
+            doSendSms(reportOweFeeDo, feeCollectionOrderDto);
+            return;
+        }
+        doSendWechat(reportOweFeeDo, feeCollectionOrderDto, paramInfo);
+    }
+
+    /**
+     * 微信方式推送
+     *
+     * @param reportOweFeeDo
+     * @param feeCollectionOrderDto
+     */
+    private void doSendWechat(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) {
+        Map paramInfo = getOwnerAppUserDto(feeCollectionOrderDto.getCommunityId(), reportOweFeeDo.getOwnerId());
+        if (paramInfo == null) {
+            return;
+        }
+        doSendWechat(reportOweFeeDo, feeCollectionOrderDto, paramInfo);
+    }
+
+    /**
+     * 微信方式推送
+     *
+     * @param reportOweFeeDo
+     * @param feeCollectionOrderDto
+     */
+    private void doSendWechat(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto, Map paramInfo) {
+        if (paramInfo == null) {
+            return;
+        }
+        String templateId = paramInfo.get("templateId").toString();
+        String accessToken = paramInfo.get("accessToken").toString();
+        String url = paramInfo.get("url").toString();
+        String oweRoomUrl = paramInfo.get("oweCarUrl").toString();
+        String oweCarUrl = paramInfo.get("oweCarUrl").toString();
+        SmallWeChatDto weChatDto = (SmallWeChatDto)paramInfo.get("weChatDto");
+        Miniprogram miniprogram = paramInfo.get("oweCarUrl") == null ? null : (Miniprogram) paramInfo.get("oweCarUrl");
+        List<OwnerAppUserDto> ownerAppUserDtos = (List<OwnerAppUserDto>) paramInfo.get("ownerAppUserDtos");
+
+        List<ReportOweFeeItemDto> itemDtos = reportOweFeeDo.getItems();
+        String oweUrl = "";
+        for (ReportOweFeeItemDto itemDto : itemDtos) {
+            oweUrl = FeeDto.PAYER_OBJ_TYPE_ROOM.equals(reportOweFeeDo.getPayerObjType()) ? oweRoomUrl : oweCarUrl;
+            for (OwnerAppUserDto appUserDto : ownerAppUserDtos) {
+                try {
+
+                    Data data = new Data();
+                    PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage();
+                    templateMessage.setTemplate_id(templateId);
+                    templateMessage.setTouser(appUserDto.getOpenId());
+                    /*data.setFirst(new Content("物业费缴费提醒"));*/
+                    data.setFirst(new Content(itemDto.getFeeName() + "提醒"));
+                    data.setKeyword1(new Content(itemDto.getPayerObjName()));
+                    data.setKeyword2(new Content(itemDto.getAmountOwed()));
+                    data.setKeyword3(new Content(
+                            DateUtil.getFormatTimeString(itemDto.getStartTime(), DateUtil.DATE_FORMATE_STRING_B)
+                                    + "至"
+                                    + DateUtil.getFormatTimeString(itemDto.getEndTime(), DateUtil.DATE_FORMATE_STRING_B)));
+                    data.setRemark(new Content("请您及时缴费,如有疑问请联系相关物业人员"));
+                    if (!StringUtil.isEmpty(oweUrl)) {
+                        if (miniprogram == null) {
+                            templateMessage.setUrl(oweUrl + itemDto.getPayerObjId() + "&wAppId=" + weChatDto.getAppId());
+                        } else {
+                            miniprogram.setPagepath(oweUrl.split("@@")[1] + itemDto.getPayerObjId() + "&wAppId=" + weChatDto.getAppId());
+                            templateMessage.setMiniprogram(miniprogram);
+                        }
+                    }
+                    templateMessage.setData(data);
+                    logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage));
+                    ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class);
+                    logger.info("微信模板返回内容:{}", responseEntity);
+                } catch (Exception e) {
+                    LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo();
+                    logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId));
+                    logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_OWE_FEE);
+                    logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e));
+                    saveSystemErrorSMOImpl.saveLog(logSystemErrorPo);
+                    logger.error("欠费推送失败" + feeCollectionOrderDto.getCollectionName(), e);
+                }
+            }
+        }
+    }
+
+    /**
+     * 短信方式推送
+     *
+     * @param reportOweFeeDo
+     * @param feeCollectionOrderDto
+     */
+    private void doSendSms(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) {
+
+    }
+
+    private Map getOwnerAppUserDto(String communityId, String memberId) {
+        SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
+        smallWeChatDto.setWeChatType("1100");
+        smallWeChatDto.setObjType(SmallWeChatDto.OBJ_TYPE_COMMUNITY);
+        smallWeChatDto.setObjId(communityId);
+        List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
+
+        if (smallWeChatDto == null || smallWeChatDtos.size() <= 0) {
+            logger.info("未配置微信公众号信息,定时任务执行结束");
+            return null;
+        }
+        SmallWeChatDto weChatDto = smallWeChatDtos.get(0);
+
+
+        SmallWechatAttrDto smallWechatAttrDto = new SmallWechatAttrDto();
+        smallWechatAttrDto.setCommunityId(communityId);
+        smallWechatAttrDto.setWechatId(weChatDto.getWeChatId());
+        smallWechatAttrDto.setSpecCd(SmallWechatAttrDto.SPEC_CD_OWE_FEE_TEMPLATE);
+        List<SmallWechatAttrDto> smallWechatAttrDtos = smallWechatAttrInnerServiceSMOImpl.querySmallWechatAttrs(smallWechatAttrDto);
+
+        if (smallWechatAttrDtos == null || smallWechatAttrDtos.size() <= 0) {
+            logger.info("未配置微信公众号消息模板");
+            return null;
+        }
+
+        String templateId = smallWechatAttrDtos.get(0).getValue();
+
+        String accessToken = WechatFactory.getAccessToken(weChatDto.getAppId(), weChatDto.getAppSecret());
+
+        if (StringUtil.isEmpty(accessToken)) {
+            logger.info("推送微信模板,获取accessToken失败:{}", accessToken);
+            return null;
+        }
+
+        //根据小区id查询业主与公众号绑定信息
+        OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto();
+        ownerAppUserDto.setCommunityId(weChatDto.getObjId());
+        ownerAppUserDto.setAppType(OwnerAppUserDto.APP_TYPE_WECHAT);
+        List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto);
+
+        if (ownerAppUserDtos == null || ownerAppUserDtos.size() < 1) {
+            return null;
+        }
+
+        String sendTemplate = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.SEND_TEMPLATE_URL);
+        if (StringUtil.isEmpty(sendTemplate)) {
+            sendTemplate = sendMsgUrl;
+        }
+        String url = sendTemplate + accessToken;
+
+        String oweRoomUrl = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.OWE_FEE_PAGE);
+        String oweCarUrl = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, WechatConstant.OWE_CAR_FEE_PAGE);
+        Miniprogram miniprogram = null;
+        if (oweRoomUrl.contains("@@")) {
+            miniprogram = new Miniprogram();
+            miniprogram.setAppid(oweRoomUrl.split("@@")[0]);
+        }
+        //车辆费用
+        if (oweCarUrl.contains("@@")) {
+            miniprogram = new Miniprogram();
+            miniprogram.setAppid(oweCarUrl.split("@@")[0]);
+        }
+
+        Map paramInfo = new HashMap();
+        paramInfo.put("templateId", templateId);
+        paramInfo.put("accessToken", accessToken);
+        paramInfo.put("url", url);
+        paramInfo.put("miniprogram", miniprogram);
+        paramInfo.put("oweCarUrl", oweCarUrl);
+        paramInfo.put("oweRoomUrl", oweRoomUrl);
+        paramInfo.put("ownerAppUserDtos", ownerAppUserDtos);
+        paramInfo.put("weChatDto", weChatDto);
+        return paramInfo;
+    }
+
+    private void refreshReportOwe(List<ReportOweFeeDto> oldReportOweFeeDtos) {
+        List<String> payObjIds = new ArrayList<>();
+
+        if (oldReportOweFeeDtos == null || oldReportOweFeeDtos.size() < 1) {
+            return;
+        }
+
+        for (ReportOweFeeDto reportOweFeeDto : oldReportOweFeeDtos) {
+            payObjIds.add(reportOweFeeDto.getPayerObjId());
+        }
+        ReportOweFeeDto reportOweFeeDto = new ReportOweFeeDto();
+        reportOweFeeDto.setPayerObjIds(payObjIds.toArray(new String[payObjIds.size()]));
+        List<ReportOweFeeDto> allReportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFees(reportOweFeeDto);
+        List<ReportOweFeeDto> reportOweFeeDtos = new ArrayList<>();
+        for (ReportOweFeeDto reportOweFee : allReportOweFeeDtos) {
+            ReportOweFeeDto reportOwe = new ReportOweFeeDto();
+            reportOwe.setOweId(reportOweFee.getOweId());
+            reportOweFee.setPayerObjType(reportOweFee.getPayerObjType());
+            if (reportOweFee.getPayerObjType().equals("3333")) {
+                List<ReportOweFeeDto> reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByRoom(reportOwe);
+                reportOweFee.setOweId(reportOweFees.get(0).getOweId());
+                reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName());
+            } else if (reportOweFee.getPayerObjType().equals("6666")) {
+                List<ReportOweFeeDto> reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByCar(reportOwe);
+                reportOweFee.setOweId(reportOweFees.get(0).getOweId());
+                reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName());
+            }
+            reportOweFeeDtos.add(reportOweFee);
+        }
+        for (ReportOweFeeDto tmpReportOweFeeDto : oldReportOweFeeDtos) {
+            dealItem(tmpReportOweFeeDto, reportOweFeeDtos);
+        }
+
+    }
+
+    private void dealItem(ReportOweFeeDto oldReportOweFeeDto, List<ReportOweFeeDto> allReportOweFeeDtos) {
+        List<ReportOweFeeItemDto> items = new ArrayList<>();
+        if (allReportOweFeeDtos == null || allReportOweFeeDtos.size() < 1) {
+            return;
+        }
+
+        ReportOweFeeItemDto reportOweFeeItemDto = null;
+        for (ReportOweFeeDto reportOweFeeDto : allReportOweFeeDtos) {
+            if (!oldReportOweFeeDto.getPayerObjId().equals(reportOweFeeDto.getPayerObjId())) {
+                continue;
+            }
+            reportOweFeeItemDto = hasItem(items, reportOweFeeDto.getConfigId());
+            if (reportOweFeeItemDto == null) {
+                reportOweFeeItemDto = new ReportOweFeeItemDto();
+                reportOweFeeItemDto.setConfigId(reportOweFeeDto.getConfigId());
+                reportOweFeeItemDto.setFeeName(reportOweFeeDto.getFeeName());
+                reportOweFeeItemDto.setAmountOwed(reportOweFeeDto.getAmountOwed());
+                reportOweFeeItemDto.setPayerObjId(reportOweFeeDto.getPayerObjId());
+                reportOweFeeItemDto.setPayerObjName(reportOweFeeDto.getPayerObjName());
+                reportOweFeeItemDto.setConfigName(reportOweFeeDto.getConfigName());
+                try {
+                    reportOweFeeItemDto.setStartTime(DateUtil.getDateFromString(reportOweFeeDto.getEndTime(), DateUtil.DATE_FORMATE_STRING_A));
+                    reportOweFeeItemDto.setEndTime(DateUtil.getDateFromString(reportOweFeeDto.getDeadlineTime(), DateUtil.DATE_FORMATE_STRING_A));
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                }
+                items.add(reportOweFeeItemDto);
+            } else {
+                BigDecimal oldAmount = new BigDecimal(Double.parseDouble(reportOweFeeItemDto.getAmountOwed()));
+                oldAmount = oldAmount.add(new BigDecimal(Double.parseDouble(reportOweFeeDto.getAmountOwed()))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+                reportOweFeeItemDto.setAmountOwed(oldAmount.doubleValue() + "");
+            }
+            if (!StringUtil.isEmpty(reportOweFeeDto.getOwnerName()) && StringUtil.isEmpty(oldReportOweFeeDto.getOwnerName())) {
+                oldReportOweFeeDto.setOwnerName(reportOweFeeDto.getOwnerName());
+            }
+            oldReportOweFeeDto.setUpdateTime(reportOweFeeDto.getUpdateTime());
+            oldReportOweFeeDto.setConfigName(reportOweFeeDto.getConfigName());
+        }
+
+        //计算总金额
+        BigDecimal totalAmount = new BigDecimal(0);
+        Date startTime = null;
+        Date endTime = null;
+        for (ReportOweFeeItemDto tempReportOweFeeItemDto : items) {
+            if (startTime == null) {
+                startTime = tempReportOweFeeItemDto.getStartTime();
+            }
+            if (startTime.getTime() > tempReportOweFeeItemDto.getStartTime().getTime()) {
+                startTime = tempReportOweFeeItemDto.getStartTime();
+            }
+            if (endTime == null) {
+                endTime = tempReportOweFeeItemDto.getEndTime();
+            }
+            if (endTime.getTime() < tempReportOweFeeItemDto.getEndTime().getTime()) {
+                endTime = tempReportOweFeeItemDto.getEndTime();
+            }
+            totalAmount = totalAmount.add(new BigDecimal(Double.parseDouble(tempReportOweFeeItemDto.getAmountOwed()))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+        }
+        oldReportOweFeeDto.setEndTime(DateUtil.getFormatTimeString(startTime, DateUtil.DATE_FORMATE_STRING_A));
+        oldReportOweFeeDto.setDeadlineTime(DateUtil.getFormatTimeString(endTime, DateUtil.DATE_FORMATE_STRING_A));
+        oldReportOweFeeDto.setItems(items);
+        oldReportOweFeeDto.setPayerObjName(items.get(0).getPayerObjName());
+        oldReportOweFeeDto.setAmountOwed(totalAmount.doubleValue() + "");
+
+    }
+
+    private ReportOweFeeItemDto hasItem(List<ReportOweFeeItemDto> reportOweFeeItemDtos, String configId) {
+        if (reportOweFeeItemDtos == null || reportOweFeeItemDtos.size() < 1) {
+            return null;
+        }
+        for (ReportOweFeeItemDto reportOweFeeItemDto : reportOweFeeItemDtos) {
+            if (reportOweFeeItemDto.getConfigId().equals(configId)) {
+                return reportOweFeeItemDto;
+            }
+        }
+
+        return null;
+    }
+}