Index: src/main/java/com/novaone/control/ApiControl.java
===================================================================
--- src/main/java/com/novaone/control/ApiControl.java	(revision 31147)
+++ src/main/java/com/novaone/control/ApiControl.java	(revision 31148)
@@ -3,11 +3,13 @@
 import java.text.ParseException;
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-
+import com.novaone.entity.*;
 import com.novaone.service.PaymentService;
+import com.novaone.service.RequisitionSendHistoryService;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
@@ -16,11 +18,6 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.novaone.common.CommonInfo;
-import com.novaone.entity.ApiQuota;
-import com.novaone.entity.JsonModel;
-import com.novaone.entity.RequisitionDetailVO;
-import com.novaone.entity.RetrunMsgDetailVo;
-import com.novaone.entity.ReturnMsgVO;
 import com.novaone.service.GrabPayService;
 import com.novaone.service.RequisitionService;
 import com.novaone.util.CommonUtils;
@@ -35,6 +32,9 @@
 
     @Resource
     private RequisitionService requisitionService;
+
+    @Resource
+    private RequisitionSendHistoryService historyService;
     
     @Resource
     private GrabPayService grabPayService;
@@ -77,6 +77,19 @@
         try {
             requisitionService.saveSuccessMsg(sList);
             requisitionService.saveErrorMsg(eList);
+            //将推送水果通的数据对应记录状态修改为终态。
+            historyService.updateBatch(sList.stream().map(item -> {
+                final RequisitionSendHistory history = new RequisitionSendHistory(item.getId(), RequisitionSendHistory.State.SUCCEED);
+                history.setUpdateTime(new Date());
+                history.setMessage(item.getMsg());
+                return history;
+            }).collect(Collectors.toList()));
+           historyService.updateBatch(eList.stream().map(item -> {
+               final RequisitionSendHistory history = new RequisitionSendHistory(item.getId(), RequisitionSendHistory.State.FAIL);
+               history.setUpdateTime(new Date());
+               history.setMessage(item.getMsg());
+               return history;
+           }).collect(Collectors.toList()));
             model.setCode(CommonInfo.GRAB_STATUS_SUCCESS);
             return model;
         } catch (Exception e) {
@@ -115,16 +128,30 @@
             model.setResult("日期：" + date + "格式不正确!");
             return model;
         }
-        RequisitionDetailVO rdv = requisitionService.queryRequisitionDetail(date);
+        final RequisitionDetailVO rdv = queryDetailAndInsert(date);
         net.sf.json.JSONObject obj = net.sf.json.JSONObject.fromObject(rdv);
-        log.info("=========reSendData 开始执行 参数:" + obj.toString());
+        log.info("=========reSendData 开始执行 推送列表:" + obj.toString());
         try {
-            String json = HttpUtil.postJson(FRUITEASE_URL + CommonInfo.FRUITEASE_HANDLESJDRDATA, obj);
-            // String json = HttpUtil.post(urlStr, parameterMap, null, null);
+            String json = HttpUtil.postJsonThrows(FRUITEASE_URL + CommonInfo.FRUITEASE_HANDLESJDRDATA, obj);
             model = com.alibaba.fastjson.JSONObject.parseObject(json, JsonModel.class);
             log.info("=========reSendData 返回参数:" + com.alibaba.fastjson.JSONObject.toJSONString(model));
+            if (model.getCode().equals("1")) {
+                //水果通调用失败，将数据关联的记录状态改为终态（失败）
+                rdv.getHistories().forEach(historie -> {
+                    historie.setMessage("推送水果通接口响应失败");
+                    historie.setUpdateTime(new Date());
+                    historie.setState(RequisitionSendHistory.State.PUT_FAIL);
+                });
+                historyService.updateBatch(rdv.getHistories());
+            }
         } catch (Exception e) {
             e.printStackTrace();
+            rdv.getHistories().forEach(historie -> {
+                historie.setMessage("水果通接口调用异常");
+                historie.setUpdateTime(new Date());
+                historie.setState(RequisitionSendHistory.State.PUT_FAIL);
+            });
+            historyService.updateBatch(rdv.getHistories());
             log.error("=========reSendData 执行异常:", e);
             model.setCode(CommonInfo.GRAB_STATUS_PROGRAM_ERROR);
             model.setResult("执行异常:" + e.getMessage());
@@ -333,4 +360,16 @@
         long time = System.currentTimeMillis();
         return ((Optional.ofNullable(EXPIRY.put(key,time)).orElse(0L) + 1000 * 60) > time);
     }
+
+
+    public synchronized RequisitionDetailVO queryDetailAndInsert(String date){
+        RequisitionDetailVO rdv = requisitionService.queryRequisitionDetail(date);
+        //将待发送水果通的数据写入一条关联记录，记将录状态为等待水果通处理。
+        final ArrayList<RequisitionDetail> details = new ArrayList<>();
+        details.addAll(rdv.getNoList());
+        details.addAll(rdv.getYesList());
+        rdv.setHistories(details.stream().map(item -> RequisitionSendHistory.getInstance(item.getId(), RequisitionSendHistory.State.WAIT)).collect(Collectors.toList()));
+        historyService.insertOrUpdate(rdv.getHistories());
+        return rdv;
+    }
 }
Index: src/main/java/com/novaone/control/Cron.java
===================================================================
--- src/main/java/com/novaone/control/Cron.java	(revision 31147)
+++ src/main/java/com/novaone/control/Cron.java	(revision 31148)
@@ -10,10 +10,10 @@
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
-
 import javax.annotation.Resource;
-
+import com.novaone.entity.*;
 import com.novaone.service.PaymentService;
+import com.novaone.service.RequisitionSendHistoryService;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -23,11 +23,6 @@
 import com.alibaba.fastjson.JSON;
 import com.novaone.common.CommonInfo;
 import com.novaone.dao.RequisitionErrorInfoMapper;
-import com.novaone.entity.JsonModel;
-import com.novaone.entity.PayDetail;
-import com.novaone.entity.PayMain;
-import com.novaone.entity.RequisitionDetailVO;
-import com.novaone.entity.RequisitionErrorInfo;
 import com.novaone.service.GrabPayService;
 import com.novaone.service.RequisitionService;
 import com.novaone.util.CommonUtils;
@@ -52,10 +47,12 @@
     }
     
     @Resource
+    private RequisitionSendHistoryService historyService;
+    @Resource
     private GrabPayService grabPayService;
     
     @Resource
-    private StringRedisTemplate stringRedisTemplate;
+    private ApiControl apiControl;
 
     @Resource
     private RequisitionErrorInfoMapper errorDao;
@@ -349,12 +346,13 @@
     public void sendDetailDataToFruitease() {
         Date yesterday = DateUtils.addDays(new Date(), -1);
         String date = new SimpleDateFormat("yyyy-MM-dd").format(yesterday);
-        RequisitionDetailVO rdv = requisitionService.queryRequisitionDetail(date);
+        //查询待发送水果通的数据并写入一条关联记录，记将录状态为等待水果通处理。
+        final RequisitionDetailVO rdv = apiControl.queryDetailAndInsert(date);
+        //请求水果通。
         JSONObject obj = JSONObject.fromObject(rdv);
         log.info("=========sendDetailDataToFruitease 开始执行 参数:" + obj.toString());
         try {
-            String json = HttpUtil.postJson(FRUITEASE_URL + CommonInfo.FRUITEASE_HANDLESJDRDATA, obj);
-            // String json = HttpUtil.post(urlStr, parameterMap, null, null);
+            String json = HttpUtil.postJsonThrows(FRUITEASE_URL + CommonInfo.FRUITEASE_HANDLESJDRDATA, obj);
             JsonModel model = com.alibaba.fastjson.JSONObject.parseObject(json, JsonModel.class);
             log.info("=========sendDetailDataToFruitease 返回参数:" + com.alibaba.fastjson.JSONObject.toJSONString(model));
             if (model.getCode().equals("1")) {
@@ -365,6 +363,13 @@
                 errorInfo.setErrorStatus(CommonInfo.GRAB_STATUS_PUSH_ERROR);
                 errorInfo.setMsg("水果通收到的数据为空");
                 errorDao.insert(errorInfo);
+                //水果通调用失败，将数据关联的记录状态改为终态（失败）
+                rdv.getHistories().forEach(historie -> {
+                    historie.setMessage("推送水果通接口响应失败");
+                    historie.setUpdateTime(new Date());
+                    historie.setState(RequisitionSendHistory.State.PUT_FAIL);
+                });
+                historyService.updateBatch(rdv.getHistories());
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -376,6 +381,13 @@
             errorInfo.setErrorStatus(CommonInfo.GRAB_STATUS_PUSH_ERROR);
             errorInfo.setMsg("调用水果通接口异常:" + e.getMessage());
             errorDao.insert(errorInfo);
+            //水果通调用失败，将数据关联的记录状态改为终态（失败）
+            rdv.getHistories().forEach(historie -> {
+                historie.setMessage("水果通接口调用异常");
+                historie.setUpdateTime(new Date());
+                historie.setState(RequisitionSendHistory.State.PUT_FAIL);
+            });
+            historyService.updateBatch(rdv.getHistories());
         }
     }
     /**
@@ -433,4 +445,5 @@
     	System.out.println(resSubList);
     	return resSubList;
 	}
+
 }
Index: src/main/java/com/novaone/dao/Mapper/RequisitionSendHistoryMapper.xml
===================================================================
--- src/main/java/com/novaone/dao/Mapper/RequisitionSendHistoryMapper.xml	(revision 0)
+++ src/main/java/com/novaone/dao/Mapper/RequisitionSendHistoryMapper.xml	(revision 31148)
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.novaone.dao.RequisitionSendHistoryMapper">
+  <resultMap id="BaseResultMap" type="com.novaone.entity.RequisitionSendHistory">
+    <!--@mbg.generated-->
+    <!--@Table requisition_send_history-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="detail_id" jdbcType="VARCHAR" property="detailId" />
+    <result column="state" jdbcType="INTEGER" property="state" />
+    <result column="message" jdbcType="VARCHAR" property="message" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, detail_id, `state`, message, create_time, update_time
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
+    <!--@mbg.generated-->
+    select 
+    <include refid="Base_Column_List" />
+    from requisition_send_history
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+    <!--@mbg.generated-->
+    delete from requisition_send_history
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.novaone.entity.RequisitionSendHistory" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into requisition_send_history (detail_id, `state`, message, 
+      create_time, update_time)
+    values (#{detailId,jdbcType=VARCHAR}, #{state,jdbcType=INTEGER}, #{message,jdbcType=VARCHAR}, 
+      #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP})
+  </insert>
+  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.novaone.entity.RequisitionSendHistory" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into requisition_send_history
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="detailId != null and detailId != ''">
+        detail_id,
+      </if>
+      <if test="state != null">
+        `state`,
+      </if>
+      <if test="message != null and message != ''">
+        message,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="detailId != null and detailId != ''">
+        #{detailId,jdbcType=VARCHAR},
+      </if>
+      <if test="state != null">
+        #{state,jdbcType=INTEGER},
+      </if>
+      <if test="message != null and message != ''">
+        #{message,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.novaone.entity.RequisitionSendHistory">
+    <!--@mbg.generated-->
+    update requisition_send_history
+    <set>
+      <if test="detailId != null and detailId != ''">
+        detail_id = #{detailId,jdbcType=VARCHAR},
+      </if>
+      <if test="state != null">
+        `state` = #{state,jdbcType=INTEGER},
+      </if>
+      <if test="message != null and message != ''">
+        message = #{message,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        create_time = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.novaone.entity.RequisitionSendHistory">
+    <!--@mbg.generated-->
+    update requisition_send_history
+    set detail_id = #{detailId,jdbcType=VARCHAR},
+      `state` = #{state,jdbcType=INTEGER},
+      message = #{message,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateBatch" parameterType="java.util.List">
+    <!--@mbg.generated-->
+    update requisition_send_history
+    <trim prefix="set" suffixOverrides=",">
+      <trim prefix="`state` = case" suffix="end,">
+        <foreach collection="list" index="index" item="item">
+          when detail_id = #{item.detailId,jdbcType=BIGINT} then #{item.state,jdbcType=INTEGER}
+        </foreach>
+      </trim>
+      <trim prefix="message = case" suffix="end,">
+        <foreach collection="list" index="index" item="item">
+          when detail_id = #{item.detailId,jdbcType=BIGINT} then #{item.message,jdbcType=VARCHAR}
+        </foreach>
+      </trim>
+      <trim prefix="create_time = case" suffix="end,">
+        <foreach collection="list" index="index" item="item">
+          when detail_id = #{item.detailId,jdbcType=BIGINT} then #{item.createTime,jdbcType=TIMESTAMP}
+        </foreach>
+      </trim>
+      <trim prefix="update_time = case" suffix="end,">
+        <foreach collection="list" index="index" item="item">
+          when detail_id = #{item.detailId,jdbcType=BIGINT} then #{item.updateTime,jdbcType=TIMESTAMP}
+        </foreach>
+      </trim>
+    </trim>
+    where detail_id in
+    <foreach close=")" collection="list" item="item" open="(" separator=", ">
+      #{item.detailId,jdbcType=BIGINT}
+    </foreach>
+  </update>
+
+  <update id="updateBatchSelective" parameterType="java.util.List">
+    <!--@mbg.generated-->
+    update requisition_send_history
+    <trim prefix="set" suffixOverrides=",">
+      <trim prefix="`state` = case" suffix="end,">
+        <foreach collection="list" index="index" item="item">
+          <if test="item.state != null">
+            when detail_id = #{item.detailId,jdbcType=BIGINT} then #{item.state,jdbcType=INTEGER}
+          </if>
+        </foreach>
+      </trim>
+      <trim prefix="message = case" suffix="end,">
+        <foreach collection="list" index="index" item="item">
+          <if test="item.message != null">
+            when detail_id = #{item.detailId,jdbcType=BIGINT} then #{item.message,jdbcType=VARCHAR}
+          </if>
+        </foreach>
+      </trim>
+      <trim prefix="create_time = case" suffix="end,">
+        <foreach collection="list" index="index" item="item">
+          <if test="item.createTime != null">
+            when detail_id = #{item.detailId,jdbcType=BIGINT} then #{item.createTime,jdbcType=TIMESTAMP}
+          </if>
+        </foreach>
+      </trim>
+      <trim prefix="update_time = case" suffix="end,">
+        <foreach collection="list" index="index" item="item">
+          <if test="item.updateTime != null">
+            when detail_id = #{item.detailId,jdbcType=BIGINT} then #{item.updateTime,jdbcType=TIMESTAMP}
+          </if>
+        </foreach>
+      </trim>
+    </trim>
+    where detail_id in
+    <foreach close=")" collection="list" item="item" open="(" separator=", ">
+      #{item.detailId,jdbcType=BIGINT}
+    </foreach>
+  </update>
+
+  <insert id="batchInsert" keyColumn="id" keyProperty="id" parameterType="map" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into requisition_send_history
+    (detail_id, `state`, message, create_time, update_time)
+    values
+    <foreach collection="list" item="item" separator=",">
+      (#{item.detailId,jdbcType=VARCHAR}, #{item.state,jdbcType=INTEGER}, #{item.message,jdbcType=VARCHAR}, 
+        #{item.createTime,jdbcType=TIMESTAMP}, #{item.updateTime,jdbcType=TIMESTAMP})
+    </foreach>
+  </insert>
+
+
+  <insert id="insertOrUpdate" keyColumn="id" keyProperty="id" parameterType="com.novaone.entity.RequisitionSendHistory" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into requisition_send_history
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      detail_id,
+      `state`,
+      message,
+      create_time,
+      update_time,
+    </trim>
+    values
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      #{detailId,jdbcType=VARCHAR},
+      #{state,jdbcType=INTEGER},
+      #{message,jdbcType=VARCHAR},
+      #{createTime,jdbcType=TIMESTAMP},
+      #{updateTime,jdbcType=TIMESTAMP},
+    </trim>
+    on duplicate key update 
+    <trim suffixOverrides=",">
+      <if test="id != null">
+        id = #{id,jdbcType=BIGINT},
+      </if>
+      detail_id = #{detailId,jdbcType=VARCHAR},
+      `state` = #{state,jdbcType=INTEGER},
+      message = #{message,jdbcType=VARCHAR},
+      create_time = #{createTime,jdbcType=TIMESTAMP},
+      update_time = #{updateTime,jdbcType=TIMESTAMP},
+    </trim>
+  </insert>
+  <insert id="insertOrUpdateSelective" keyColumn="id" keyProperty="id" parameterType="com.novaone.entity.RequisitionSendHistory" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into requisition_send_history
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        id,
+      </if>
+      <if test="detailId != null">
+        detail_id,
+      </if>
+      <if test="state != null">
+        `state`,
+      </if>
+      <if test="message != null">
+        message,
+      </if>
+      <if test="createTime != null">
+        create_time,
+      </if>
+      <if test="updateTime != null">
+        update_time,
+      </if>
+    </trim>
+    values
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="id != null">
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="detailId != null">
+        #{detailId,jdbcType=VARCHAR},
+      </if>
+      <if test="state != null">
+        #{state,jdbcType=INTEGER},
+      </if>
+      <if test="message != null">
+        #{message,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateTime != null">
+        #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+    on duplicate key update 
+    <trim suffixOverrides=",">
+      <if test="id != null">
+        id = #{id,jdbcType=BIGINT},
+      </if>
+      <if test="detailId != null">
+        detail_id = #{detailId,jdbcType=VARCHAR},
+      </if>
+      <if test="state != null">
+        `state` = #{state,jdbcType=INTEGER},
+      </if>
+      <if test="message != null">
+        message = #{message,jdbcType=VARCHAR},
+      </if>
+      <if test="updateTime != null">
+        update_time = #{updateTime,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+</mapper>
\ No newline at end of file
Index: src/main/java/com/novaone/dao/RequisitionDetailMapper.java
===================================================================
--- src/main/java/com/novaone/dao/RequisitionDetailMapper.java	(revision 31147)
+++ src/main/java/com/novaone/dao/RequisitionDetailMapper.java	(revision 31148)
@@ -27,13 +27,15 @@
     /*
      * 所有汇总纳税的明细记录
      */
-    @Select("SELECT * from requisition_detail rd where rd.taxation_mark = '1' and status in ('0','2')")
+//    @Select("SELECT * from requisition_detail rd where rd.taxation_mark = '1' and status in ('0','2')")
+    @Select("SELECT rd.* from requisition_detail rd LEFT JOIN requisition_send_history rsh ON rd.id = rsh.detail_id where rd.taxation_mark = '1' AND rd.status in ('0','2') AND IFNULL(rsh.state,-1) NOT IN (1,3)")
     List<RequisitionDetail> selectTaxationYes(@Param("date") String date);
 
     /*
      * 所有非汇总纳税的明细记录
      */
-    @Select("SELECT * from requisition_detail rd where rd.taxation_mark = '0' and status in ('0','2')")
+    @Select("SELECT rd.* from requisition_detail rd LEFT JOIN requisition_send_history rsh ON rd.id = rsh.detail_id where rd.taxation_mark = '0' and rd.status in ('0','2') AND IFNULL(rsh.state,-1) NOT IN (1,3)")
+//    @Select("SELECT * from requisition_detail rd where rd.taxation_mark = '0' and status in ('0','2')")
     List<RequisitionDetail> selectTaxationNot(@Param("date") String date);
 
     @Update("update requisition_detail set status = #{status} where id = #{id}")
Index: src/main/java/com/novaone/dao/RequisitionSendHistoryMapper.java
===================================================================
--- src/main/java/com/novaone/dao/RequisitionSendHistoryMapper.java	(revision 0)
+++ src/main/java/com/novaone/dao/RequisitionSendHistoryMapper.java	(revision 31148)
@@ -0,0 +1,29 @@
+package com.novaone.dao;
+
+import com.novaone.entity.RequisitionSendHistory;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface RequisitionSendHistoryMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(RequisitionSendHistory record);
+
+    int insertOrUpdate(RequisitionSendHistory record);
+
+    int insertOrUpdateSelective(RequisitionSendHistory record);
+
+    int insertSelective(RequisitionSendHistory record);
+
+    RequisitionSendHistory selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(RequisitionSendHistory record);
+
+    int updateByPrimaryKey(RequisitionSendHistory record);
+
+    int updateBatch(List<RequisitionSendHistory> list);
+
+    int updateBatchSelective(List<RequisitionSendHistory> list);
+
+    int batchInsert(@Param("list") List<RequisitionSendHistory> list);
+}
\ No newline at end of file
Index: src/main/java/com/novaone/entity/RequisitionDetailVO.java
===================================================================
--- src/main/java/com/novaone/entity/RequisitionDetailVO.java	(revision 31147)
+++ src/main/java/com/novaone/entity/RequisitionDetailVO.java	(revision 31148)
@@ -12,4 +12,6 @@
     private List<RequisitionDetail> noList;
 
     private List<RequisitionDetail> yesList;
+
+    private List<RequisitionSendHistory> histories;
 }
Index: src/main/java/com/novaone/entity/RequisitionSendHistory.java
===================================================================
--- src/main/java/com/novaone/entity/RequisitionSendHistory.java	(revision 0)
+++ src/main/java/com/novaone/entity/RequisitionSendHistory.java	(revision 31148)
@@ -0,0 +1,80 @@
+package com.novaone.entity;
+
+import java.util.Date;
+import lombok.Data;
+
+@Data
+public class RequisitionSendHistory {
+    private Long id;
+
+    /**
+    * detail表数据id
+    */
+    private String detailId;
+
+    /**
+    * 水果通处理状态。1:处理成功；2:处理失败；3:处理中
+    */
+    private Integer state;
+
+    /**
+     * 描述
+     */
+    private String message;
+
+    /**
+    * 创建时间
+    */
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    private Date updateTime;
+
+
+    public RequisitionSendHistory() {
+    }
+
+    public RequisitionSendHistory(String detailId) {
+        this.detailId = detailId;
+    }
+
+    public RequisitionSendHistory(String detailId, Integer state) {
+        this.detailId = detailId;
+        this.state = state;
+    }
+
+    public static RequisitionSendHistory getInstance(String detailId, Integer state){
+        return getInstance(detailId,state,null);
+    }
+
+
+    public static RequisitionSendHistory getInstance(String detailId, Integer state,String message){
+        final RequisitionSendHistory history = new RequisitionSendHistory(detailId, state);
+        history.setCreateTime(new Date());
+        history.setUpdateTime(new Date());
+        history.setMessage(message);
+        return history;
+    }
+
+    public static class State{
+        /**
+         * 水果通接口调用失败
+         */
+        public static final int PUT_FAIL = 0;
+        /**
+         * 水果通处理成功
+         */
+        public static final int SUCCEED = 1;
+        /**
+         * 水果通处理失败
+         */
+        public static final int FAIL = 2;
+        /**
+         * 等待水果通处理中
+         */
+        public static final int WAIT = 3;
+    }
+
+}
\ No newline at end of file
Index: src/main/java/com/novaone/service/RequisitionSendHistoryService.java
===================================================================
--- src/main/java/com/novaone/service/RequisitionSendHistoryService.java	(revision 0)
+++ src/main/java/com/novaone/service/RequisitionSendHistoryService.java	(revision 31148)
@@ -0,0 +1,23 @@
+package com.novaone.service;
+
+import com.novaone.entity.RequisitionDetail;
+import com.novaone.entity.RequisitionDetailVO;
+import com.novaone.entity.RequisitionSendHistory;
+import com.novaone.entity.RetrunMsgDetailVo;
+
+import java.util.List;
+
+/*
+ * @program: paycontrol
+ * @description:
+ * @author: Ma.ChengJian
+ * @create: 2022-05-30 16:55
+ */
+public interface RequisitionSendHistoryService {
+
+    public void insertOrUpdate(List<RequisitionSendHistory> lists);
+
+    public void updateBatch(List<RequisitionSendHistory> lists);
+
+
+}


Index: src/main/java/com/novaone/service/impl/RequisitionSendHistoryServiceImpl.java
===================================================================
--- src/main/java/com/novaone/service/impl/RequisitionSendHistoryServiceImpl.java	(revision 0)
+++ src/main/java/com/novaone/service/impl/RequisitionSendHistoryServiceImpl.java	(revision 31148)
@@ -0,0 +1,34 @@
+package com.novaone.service.impl;
+
+import com.google.common.collect.Lists;
+import com.novaone.dao.RequisitionSendHistoryMapper;
+import com.novaone.entity.RequisitionSendHistory;
+import com.novaone.service.RequisitionSendHistoryService;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+
+/*
+ * @program: paycontrol
+ * @description:
+ * @author: Ma.ChengJian
+ * @create: 2022-05-30 16:58
+ */
+@Service
+public class RequisitionSendHistoryServiceImpl implements RequisitionSendHistoryService {
+
+    @Resource
+    private RequisitionSendHistoryMapper historyMapper;
+
+    @Override
+    public void insertOrUpdate(List<RequisitionSendHistory> lists) {
+        lists.forEach(item -> historyMapper.insertOrUpdateSelective(item));
+    }
+
+
+
+    @Override
+    public void updateBatch(List<RequisitionSendHistory> lists) {
+        Lists.partition(lists, 20).forEach(item -> historyMapper.updateBatchSelective(item));
+    }
+}
Index: src/main/java/com/novaone/service/impl/RequisitionServiceImpl.java
===================================================================
--- src/main/java/com/novaone/service/impl/RequisitionServiceImpl.java	(revision 31147)
+++ src/main/java/com/novaone/service/impl/RequisitionServiceImpl.java	(revision 31148)
@@ -6,6 +6,8 @@
 
 import javax.annotation.Resource;
 
+import com.novaone.dao.RequisitionSendHistoryMapper;
+import com.novaone.entity.*;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -13,10 +15,6 @@
 import com.novaone.common.CommonInfo;
 import com.novaone.dao.RequisitionDetailMapper;
 import com.novaone.dao.RequisitionErrorInfoMapper;
-import com.novaone.entity.RequisitionDetail;
-import com.novaone.entity.RequisitionDetailVO;
-import com.novaone.entity.RequisitionErrorInfo;
-import com.novaone.entity.RetrunMsgDetailVo;
 import com.novaone.fdao.HddzMapper;
 import com.novaone.service.RequisitionService;
 
@@ -33,6 +31,9 @@
     private RequisitionErrorInfoMapper errorDao;
 
     @Resource
+    private RequisitionSendHistoryMapper sendHistoryMappern;
+
+    @Resource
     private HddzMapper hddzDao;
 
     @Transactional(propagation = Propagation.NOT_SUPPORTED, readOnly = true)
@@ -46,6 +47,11 @@
         return rdv;
     }
 
+
+    /**
+     * 更新水果通处理成功的数据状态
+     * @param list 水果通处理成功的数据列表
+     */
     @Transactional
     @Override
     public void saveSuccessMsg(List<RetrunMsgDetailVo> list) {
Index: src/main/java/com/novaone/util/HttpUtil.java
===================================================================
--- src/main/java/com/novaone/util/HttpUtil.java	(revision 31147)
+++ src/main/java/com/novaone/util/HttpUtil.java	(revision 31148)
@@ -105,6 +105,38 @@
         }
     }
 
+    public static String postJsonThrows(String url, JSONObject obj) throws IOException {
+        URL u;
+        HttpURLConnection con = null;
+        DataOutputStream osw = null;
+        try {
+            StringBuffer buffer = new StringBuffer();
+            u = new URL(url);
+            con = (HttpURLConnection) u.openConnection();
+            con.setDoInput(true);
+            con.setDoOutput(true);
+            con.setRequestMethod("POST");
+            con.setUseCaches(false);
+            con.setInstanceFollowRedirects(true);
+            con.setRequestProperty("Content-Type", "application/json;charset=utf-8");
+            osw = new DataOutputStream(con.getOutputStream());
+            osw.write(obj.toString().getBytes("UTF-8"));
+            osw.flush();
+            osw.close();
+            BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
+            String temp;
+            while ((temp = br.readLine()) != null) {
+                buffer.append(temp);
+                buffer.append('\n');
+            }
+            return buffer.toString();
+        } finally {
+            if (osw != null) {
+                osw.close();
+            }
+        }
+    }
+
     public static String postJson(String url, JSONObject obj) throws IOException {
         URL u;
         HttpURLConnection con = null;
