java110
2021-07-23 84fe3e6e6ef96f6fbc000c46a9ad64b308b0a85d
优化 欠费催缴功能
5个文件已修改
1个文件已添加
503 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/feeCollectionOrder/FeeCollectionOrderDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/logSystemError/LogSystemErrorDto.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/reportOweFee/ReportOweFeeDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/report/ReportOweFeeServiceDaoImplMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-job/src/main/java/com/java110/job/task/wechat/FeeCollectionPushMessageTemplate.java 481 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/feeCollectionOrder/FeeCollectionOrderDto.java
@@ -20,6 +20,11 @@
    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;
java110-bean/src/main/java/com/java110/dto/logSystemError/LogSystemErrorDto.java
@@ -17,6 +17,7 @@
    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;
java110-bean/src/main/java/com/java110/dto/reportOweFee/ReportOweFeeDto.java
@@ -34,6 +34,7 @@
    private String payerObjType;
    private String payerObjId;
    private String[] payerObjIds;
    private String hasOweFee;
    List<ReportOweFeeItemDto> items;
@@ -210,4 +211,12 @@
    public void setConfigIds(String[] configIds) {
        this.configIds = configIds;
    }
    public String getHasOweFee() {
        return hasOweFee;
    }
    public void setHasOweFee(String hasOweFee) {
        this.hasOweFee = hasOweFee;
    }
}
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>
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
@@ -433,6 +433,7 @@
        return dateStr;
    }
    public static int getYear() {
        Date date = getCurrentDate();
        Calendar calendar = Calendar.getInstance();
service-job/src/main/java/com/java110/job/task/wechat/FeeCollectionPushMessageTemplate.java
New file
@@ -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;
    }
}