Index: src/main/java/com/novaone/dao/RequisitionDetailMapper.java
===================================================================
--- src/main/java/com/novaone/dao/RequisitionDetailMapper.java	(revision 29238)
+++ src/main/java/com/novaone/dao/RequisitionDetailMapper.java	(revision 29278)
@@ -5,6 +5,9 @@
 
 import com.novaone.entity.RequisitionDetail;
 
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
 public interface RequisitionDetailMapper {
     int deleteByPrimaryKey(String id);
 
@@ -20,4 +23,14 @@
 
     @Select("select * from requisition_detail rd where rd.bill_id = #{billId} and rd.bill_type = #{billType}")
     RequisitionDetail selectByBillIdAndType(@Param("billId") String billId, @Param("billType") String billType);
+
+
+    /**
+     * 查询指定单据类型，且生成时间在指定时间之后的数据。
+     * @param type 单据类型
+     * @param genDate 查询的单据生起始生成时间。
+     */
+    @Select("SELECT * FROM requisition_detail WHERE bill_type = #{type} AND gen_date_str >= #{genDate}")
+    Set<RequisitionDetail> selectByTypeAndDate(String type, Date genDate);
+
 }
\ No newline at end of file
Index: src/main/java/com/novaone/entity/RequisitionDetail.java
===================================================================
--- src/main/java/com/novaone/entity/RequisitionDetail.java	(revision 29238)
+++ src/main/java/com/novaone/entity/RequisitionDetail.java	(revision 29278)
@@ -1,7 +1,9 @@
 package com.novaone.entity;
 
+import lombok.EqualsAndHashCode;
 import java.math.BigDecimal;
 
+@EqualsAndHashCode(of = {"billId","billType"})
 public class RequisitionDetail {
     private String id;
 
Index: .
===================================================================
--- .	(revision 29238)
+++ .	(revision 29278)

Property changes on: .
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+*.idea
Index: src/main/java/com/novaone/service/impl/RequisitionServiceImpl.java
===================================================================
--- src/main/java/com/novaone/service/impl/RequisitionServiceImpl.java	(revision 29238)
+++ src/main/java/com/novaone/service/impl/RequisitionServiceImpl.java	(revision 29278)
@@ -1,14 +1,12 @@
 package com.novaone.service.impl;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
+import java.text.SimpleDateFormat;
+import java.util.*;
 
 import javax.annotation.Resource;
 
+import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
@@ -115,7 +113,7 @@
             throw e;
         }
         try {
-            String url = makeSendUrl(date, CommonInfo.BILL_TYPE_UNPAID);
+            String url = makeSendUrl(date,date, CommonInfo.BILL_TYPE_UNPAID);
             String resultJson = OkHttpUtil.sendGetMethod(url, rdTime, jessionId);
             log.info("接口返回数据：" + JSON.toJSONString(resultJson));
             // 解析加密返回值--可能有多条
@@ -194,24 +192,22 @@
     }
 
     /**
-     * 
-       
-     * makeSendUrl(构建查询url)    
-       
-     * @return String    DOM对象    
-       
-     * @Exception 异常对象
+     * makeSendUrl(构建查询url)
+     * @param startDate 查询时间范围的开始时间
+     * @param endDate 查询时间范围的结束时间
+     *                当查询时间为同一天时，开始时间和结束时间相同即可。
+     * @return 查询url
      */
-    private String makeSendUrl(String date, String type) {
+    private String makeSendUrl(String startDate, String endDate,String type) {
         if (CommonInfo.BILL_TYPE_UNPAID.equals(type)) {
             StringBuffer bf = new StringBuffer(CommonInfo.UNPAID_URL_HEAD);
             bf.append("%7B%22entryId%22%3A%22%22%2C%22taxId%22%3A%22%22%2C%22genDate%22%3A%22");
-            bf.append(date + "+-+" + date);
+            bf.append(startDate + "+-+" + endDate);//"genDate":"
             bf.append(
                     "%22%2C%22dealTime%22%3A%22%22%2C%22updateTime%22%3A%22%22%2C%22billNo%22%3A%22%22%2C%22contrNo%22%3A%22%22%2C%22tradeName%22%3A%22%22%2C%22ownerName%22%3A%22%22%2C%22agentName%22%3A%22%22%2C%22taxType%22%3A%22%22%2C%22taxTypeName%22%3A%22%22%2C%22declPort%22%3A%22%22%2C%22declPortName%22%3A%22%22%2C%22transStatus%22%3A%22N%22%2C%22transStatusName%22%3A%22%22%2C%22extendField1%22%3A%221%22%2C%22extendField1Name%22%3A%22%E6%B1%87%E6%80%BB%E7%BA%B3%E7%A8%8E%22%2C%22genDateStart%22%3A%22");
-            bf.append(date);
+            bf.append(startDate); //genDateStart":"
             bf.append("%22%2C%22genDateEnd%22%3A%22");
-            bf.append(date);
+            bf.append(endDate);//","genDateEnd":"
             bf.append("%22%7D&_=");
             bf.append(System.currentTimeMillis());
             return bf.toString();
@@ -219,9 +215,9 @@
             StringBuffer bf = new StringBuffer(CommonInfo.PAID_URL_HEAD);
             bf.append(
                     "%7B%22entryId%22%3A%22%22%2C%22taxId%22%3A%22%22%2C%22billNo%22%3A%22%22%2C%22contrNo%22%3A%22%22%2C%22taxType%22%3A%22%22%2C%22declPort%22%3A%22%22%2C%22transStatus%22%3A%22S%22%2C%22protocolNo%22%3A%22%22%2C%22handOrgName%22%3A%22%22%2C%22dealTimeStart%22%3A%22");
-            bf.append(date);
+            bf.append(startDate);
             bf.append("%22%2C%22dealTimeEnd%22%3A%22");
-            bf.append(date);
+            bf.append(endDate);
             bf.append("%22%2C%22transStatusList%22%3A%22S%22%7D&_=");
             bf.append(System.currentTimeMillis());
             return bf.toString();
@@ -228,12 +224,12 @@
         } else if (CommonInfo.BILL_TYPE_DEPOSIT.equals(type)) {
             StringBuffer bf = new StringBuffer(CommonInfo.DEPOSIT_URL_HEAD);
             bf.append("%7B%22entryId%22%3A%22%22%2C%22genDate%22%3A%22");
-            bf.append(date + "+-+" + date);
+            bf.append(startDate + "+-+" + endDate);
             bf.append(
                     "%22%2C%22updateTime%22%3A%22%22%2C%22guaId%22%3A%22%22%2C%22ownerName%22%3A%22%22%2C%22taxType%22%3A%22%22%2C%22taxTypeName%22%3A%22%22%2C%22declPort%22%3A%22%22%2C%22declPortName%22%3A%22%22%2C%22transStatus%22%3A%22%22%2C%22transStatusName%22%3A%22%22%2C%22extendField1%22%3A%22%22%2C%22extendField1Name%22%3A%22%22%2C%22genDateStart%22%3A%22");
-            bf.append(date);
+            bf.append(startDate);
             bf.append("%22%2C%22genDateEnd%22%3A%22");
-            bf.append(date);
+            bf.append(endDate);
             bf.append("%22%2C%22isNeedCount%22%3A%220%22%2C%22transStatusList%22%3A%5B%22S%22%5D%7D&_=");
             bf.append(System.currentTimeMillis());
             return bf.toString();
@@ -287,7 +283,7 @@
             throw e;
         }
         try {
-            String url = makeSendUrl(date, CommonInfo.BILL_TYPE_PAID);
+            String url = makeSendUrl(date,date, CommonInfo.BILL_TYPE_PAID);
             String resultJson = OkHttpUtil.sendGetMethod(url, rdTime, jessionId);
             log.info("接口返回数据：" + JSON.toJSONString(resultJson));
             // 解析加密返回值--可能有多条
@@ -407,8 +403,12 @@
                     "getUnpaidPageData 获取登录信息失败:" + e.getMessage());
             throw e;
         }
+        Date startDate = null;
         try {
-            String url = makeSendUrl(date, CommonInfo.BILL_TYPE_DEPOSIT);
+            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+            startDate = DateUtils.addDays(format.parse(date), -89);
+            String startDateStr = format.format(startDate);
+            String url = makeSendUrl(startDateStr, date, CommonInfo.BILL_TYPE_DEPOSIT);
             String resultJson = OkHttpUtil.sendGetMethod(url, rdTime, jessionId);
             log.info("接口返回数据：" + JSON.toJSONString(resultJson));
             // 解析加密返回值--可能有多条
@@ -450,8 +450,8 @@
                 String taxPayName = data.getString("taxPayName");
                 String entryId = data.getString("entryId");
                 String taxId = num + "";
-                String billId = entryId + taxId;
                 String guaId = data.getString("guaId");
+                String billId = entryId + guaId;    //todo billID修改为报关单号+保函号。
                 if (taxPayName.contains("欧恒") || taxPayName.contains("上海易赉") || taxPayName.contains("普莱克思")
                         || taxPayName.contains("上海神骋")) {
                     String dealTimeStr = data.getString("dealTimeStr");
@@ -476,12 +476,16 @@
                     continue;
                 }
             }
+            //去重
+            Set<RequisitionDetail> removeDuplication = new HashSet<>(details);
+            removeDuplication.removeAll(detailDao.selectByTypeAndDate(CommonInfo.BILL_TYPE_DEPOSIT, startDate));
             RequisitionMain main = new RequisitionMain();
-            main.setCrtDate(date);
-            main.setTaxPayName(CURRENT_COMPANY_NAME);
-            main.setDepositNum(details.size());
+            main.setCrtDate(date);//创建日期
+            main.setTaxPayName(CURRENT_COMPANY_NAME);//交款单位名称
+            main.setDepositNum(removeDuplication.size());//保证金数量
+            //主表数据和对应的每一条明细。
             dataMap.put("main", main);
-            dataMap.put("details", details);
+            dataMap.put("details", new ArrayList<RequisitionDetail>(removeDuplication));
         } catch (Exception e) {
             e.printStackTrace();
             log.error("getDepositPageData 数据组装出现异常:", e);
@@ -492,6 +496,8 @@
         return dataMap;
     }
 
+
+
     private String getJsessionId() {
         return stringRedisTemplate.opsForValue().get(CommonInfo.CURRENT_COMPANY_REDISNAME + CURRENT_COMPANY_CODE);
     }
@@ -509,6 +515,7 @@
             mainDao.insert(main);
         } else {
             main.setId(query.getId());
+            main.setDepositNum(Optional.ofNullable(main.getDepositNum()).orElse(0) + Optional.ofNullable(query.getDepositNum()).orElse(0));
             mainDao.updateByPrimaryKeySelective(main);
         }
         return main;
Index: src/test/java
===================================================================
--- src/test/java	(revision 29238)
+++ src/test/java	(revision 29278)

Property changes on: src/test/java
___________________________________________________________________
Added: svn:ignore
## -0,0 +1 ##
+com
Index: src/main/resources/application.yml
===================================================================
--- src/main/resources/application.yml	(revision 29238)
+++ src/main/resources/application.yml	(revision 29278)
@@ -16,6 +16,7 @@
       master:
         driver-class-name: com.mysql.cj.jdbc.Driver
         url: jdbc:mysql://rm-bp13i26r6189ex0l2o.mysql.rds.aliyuncs.com:3306/tax_payment_rpa?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
+#        url: jdbc:mysql://42.193.118.215:3306/tax_payment_rpa?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
         username: nova123
         password: novax0l2#
         validation-query: SELECT 1 FROM DUAL
