yujian
2019-07-16 a503900f405a39f3aa30a8663ca661cf3c6b55ea
Merge branch 'master' into div
24个文件已修改
1063 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserOrderController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/TaoLiJinControllerV2.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderRepairHistoryMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/taobao/TaoBaoOrderMapper.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/msg/MsgMoneyDetail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderRepairHistoryMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/taobao/TaoBaoOrderMapper.xml 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/tlj/UserTaoLiJinDetailMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/msg/MsgMoneyDetailServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/msg/UserMoneyMsgNotificationServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java 604 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TLJBuyGoodsServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoOrderServiceImpl.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/msg/UserMoneyMsgNotificationService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderRepairService.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/TaoBaoOrderService.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/StringUtil.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/UserMoneyDetailFactory.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/msg/MsgMoneyDetailFactory.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/factory/msg/UserMsgVOFactory.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/resource/spring.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ShareController.java
@@ -205,8 +205,7 @@
            data.put("clickUrl", url);
            data.put("token", taoBaoLink.getTaoToken());
            data.put("rule",
                    "http://apph5.yeshitv.com/apppage/all_help_content.html?id=148&from=singlemessage&isappinstalled=0");
            data.put("rule", configService.get("share_single_goods_rule"));
            data.put("pictUrl", TbImgUtil.getTBSizeImg(taoBaoLink.getGoods().getPictUrl(), 500));
            String shareText = "";
fanli/src/main/java/com/yeshi/fanli/controller/client/v1/UserOrderController.java
@@ -111,6 +111,9 @@
            String orderNo, String startTime, String endTime, Integer slotTime, boolean needCount, Integer dateType,
            Integer goodsType, PrintWriter out) {
        if (Constant.IS_TEST)
            uid = 389677L;
        if (uid == null) {
            out.print(JsonUtil.loadFalseResult(1, "用户未登录"));
            return;
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/TaoLiJinControllerV2.java
@@ -233,11 +233,26 @@
        BigDecimal thisMonthWin = userTaoLiJinOriginService.countMoneyByDate(uid, 3);
        BigDecimal lastMonthWin = userTaoLiJinOriginService.countMoneyByDate(uid, 4);
        BigDecimal zero = new BigDecimal(0);
        // 消耗
        BigDecimal todayUse = userTaoLiJinDetailService.countUseMoneyByDate(uid, 1);
        if (todayUse == null || todayUse.compareTo(zero) > 0) {
            todayUse = zero;
        }
        BigDecimal yesterdayUse = userTaoLiJinDetailService.countUseMoneyByDate(uid, 2);
        if (yesterdayUse == null || yesterdayUse.compareTo(zero) > 0) {
            yesterdayUse = zero;
        }
        BigDecimal thisMonthUse = userTaoLiJinDetailService.countUseMoneyByDate(uid, 3);
        if (thisMonthUse == null || thisMonthUse.compareTo(zero) > 0) {
            thisMonthUse = zero;
        }
        BigDecimal lastMonthUse = userTaoLiJinDetailService.countUseMoneyByDate(uid, 4);
        if (lastMonthUse == null || lastMonthUse.compareTo(zero) > 0) {
            lastMonthUse = zero;
        }
        // 问号链接
        String helpLink = configTaoLiJinService.getValueByKey("hongbao_help_link");
@@ -409,6 +424,7 @@
        }
        // 登录用户
        boolean isReceive = false;
        JSONObject data = new JSONObject();
        data.put("icon", configTaoLiJinService.getValueByKey("taolijin_system_icon"));
@@ -443,6 +459,7 @@
            UserTaoLiJinOrigin userTaoLiJin = userTaoLiJinOriginService.getRankByThisMonth(uid, type);
            if (userTaoLiJin != null) { // 已领取
                isRank = true;
                isReceive = true;
                hasMoney = userTaoLiJin.getMoney();
            } else {
                isRank = false;
@@ -479,7 +496,11 @@
                data.put("content", "推广红包,好友福利!");
                data.put("type", 1);
                data.put("money", hasMoney.setScale(2).toString());
                data.put("usage", "领取成功,已存入“我的-推广红包”");
                if (isReceive) {
                    data.put("usage", "本月领取,已存入“我的-推广红包”");
                } else {
                    data.put("usage", "领取成功,已存入“我的-推广红包”");
                }
                data.put("jumpName", "去使用");
                data.put("jumpDetail", jumpDetailV2Service.getByTypeCache("share_goods_hot"));
                data.put("tip", configTaoLiJinService.getValueByKey("hongbao_rank_tip"));
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/order/OrderRepairHistoryMapper.java
@@ -1,9 +1,17 @@
package com.yeshi.fanli.dao.mybatis.order;
import java.util.List;
import com.yeshi.fanli.dao.BaseMapper;
import com.yeshi.fanli.entity.order.OrderRepairHistory;
public interface OrderRepairHistoryMapper extends BaseMapper<OrderRepairHistory> {
    /**
     * 根据用户ID检索
     * @param uid
     * @return
     */
    List<OrderRepairHistory> listByUid(Long uid);
}
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/taobao/TaoBaoOrderMapper.java
@@ -19,10 +19,10 @@
    // 通过订单号获取订单列表
    List<TaoBaoOrder> selectTaoBaoOrderByOrderId(String orderId);
    // 通过交易ID获取订单
    TaoBaoOrder selectTaoBaoOrderByTradeId(String tradeId);
    List<TaoBaoOrder> listByTradeId(String tradeId);
    int updateByPrimaryKeySelective(TaoBaoOrder record);
@@ -31,57 +31,75 @@
    // 根据订单号删除数据
    int deleteByOrderId(String orderId);
    /**
     * 统计--订单类型区分
     *
     * @return
     */
    Map<String, Object> countByOdrerType();
    /**
     * 统计今日订单
     *
     * @return
     */
    int countToday();
    /**
     * 统计昨日订单
     *
     * @return
     */
    int countYesterday();
    /**
     * 统计当日预估收益
     * @param date  2018-09-01
     *
     * @param date
     *            2018-09-01
     * @return
     */
    double countEstimate(@Param("date")String date);
    List<TaoBaoOrder> getStateByOrderIdAndPayment(@Param("orderId")String orderId, @Param("payment")String payment);
    double countEstimate(@Param("date") String date);
    List<TaoBaoOrder> getStateByOrderIdAndPayment(@Param("orderId") String orderId, @Param("payment") String payment);
    TaoBaoOrder selectLatestByAuctionId(long auctionId);
    /**
     *  统计所有订单
     * 统计所有订单
     *
     * @param channel
     * @return
     */
    List<Map<String, Object>> countOrderNumber( @Param("dateType") Integer dateType, @Param("year") String year,
            @Param("startTime")String startTime, @Param("endTime")String endTime);
    List<Map<String, Object>> countOrderNumber(@Param("dateType") Integer dateType, @Param("year") String year,
            @Param("startTime") String startTime, @Param("endTime") String endTime);
    /**
     * 获取长期未更新的订单
     *
     * @param start
     * @param count
     * @return
     */
    List<TaoBaoOrder> listLongTimeNoUpdateOrders(@Param("start")long start,@Param("count")int count);
    List<TaoBaoOrder> listLongTimeNoUpdateOrders(@Param("start") long start, @Param("count") int count);
    /**
     * 获取所有订单列表
     *
     * @param orderNo
     * @param start
     * @param count
     * @return
     */
    List<TaoBaoOrder> listAllOrder(@Param("orderNo") String orderNo, @Param("start") long start,
            @Param("count") int count);
    /**
     * 所有订单数量
     *
     * @param orderNo
     * @return
     */
    long countAllOrder(@Param("orderNo") String orderNo);
}
fanli/src/main/java/com/yeshi/fanli/entity/bus/msg/MsgMoneyDetail.java
@@ -20,7 +20,7 @@
public class MsgMoneyDetail {
    public enum MsgTypeMoneyTypeEnum {
        share("分享奖金"), invite("邀请奖金"), fanli("返利到账"), extract("提现"), extractValid("提现账号验证"), shareWeiQuan(
                "分享奖金扣除"), inviteWeiQuan("邀请奖金扣除"), fanliWeiQuan("返利扣除"),orderReward("返利奖励");
                "分享奖金扣除"), inviteWeiQuan("邀请奖金扣除"), fanliWeiQuan("返利扣除"), orderReward("返利奖励"), systemEqualize("系统补齐");
        private final String desc;
        private MsgTypeMoneyTypeEnum(String desc) {
fanli/src/main/java/com/yeshi/fanli/job/TaoLiJinJob.java
@@ -67,7 +67,7 @@
    /**
     * 每天凌晨过5分钟验证
     */
    @Scheduled(cron = "0 5 0 * * ?")
    @Scheduled(cron = "0 2 0 * * ?")
    public void updateShareTLJGoods() {
        if (!Constant.IS_TASK)
            return;
fanli/src/main/java/com/yeshi/fanli/mapping/order/OrderRepairHistoryMapper.xml
@@ -22,6 +22,14 @@
        <include refid="Base_Column_List" />
        from yeshi_ec_order_repair_history where id = #{id,jdbcType=BIGINT}
    </select>
    <select id="listByUid" resultMap="BaseResultMap" parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_order_repair_history where uid = #{0}
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_order_repair_history where id = #{id,jdbcType=BIGINT}
    </delete>
fanli/src/main/java/com/yeshi/fanli/mapping/taobao/TaoBaoOrderMapper.xml
@@ -74,28 +74,54 @@
        from yeshi_ec_taobao_order where to_auction_id = #{0} order by to_id
        desc limit 1
    </select>
    <select id="selectTaoBaoOrderByTradeId" resultMap="BaseResultMap"
        parameterType="java.lang.String">
        select
        <include refid="Base_Column_List" />
        from yeshi_ec_taobao_order where to_trade_id = #{0}  for update
        from yeshi_ec_taobao_order where to_trade_id = #{0} for update
    </select>
    <select id="listLongTimeNoUpdateOrders" resultMap="BaseResultMap">
        SELECT * FROM yeshi_ec_taobao_order t WHERE t.`to_order_state`='订单付款' AND UNIX_TIMESTAMP(t.`to_create_time`) <![CDATA[  <  ]]> UNIX_TIMESTAMP()-60*60*24*15 AND (t.`to_latest_updatetime` IS NULL OR UNIX_TIMESTAMP(t.`to_latest_updatetime`)<![CDATA[ < ]]>  UNIX_TIMESTAMP()-60*60*24*2) ORDER BY t.`to_create_time` DESC  limit #{start},#{count}
        SELECT * FROM yeshi_ec_taobao_order t WHERE t.`to_order_state`='订单付款'
        AND UNIX_TIMESTAMP(t.`to_create_time`) <![CDATA[  <  ]]>
        UNIX_TIMESTAMP()-60*60*24*15 AND (t.`to_latest_updatetime` IS NULL OR
        UNIX_TIMESTAMP(t.`to_latest_updatetime`)<![CDATA[ < ]]>
        UNIX_TIMESTAMP()-60*60*24*2) ORDER BY t.`to_create_time` DESC limit
        #{start},#{count}
    </select>
    <select id="listByTradeId" resultMap="BaseResultMap" parameterType="java.lang.String">
      select * from yeshi_ec_taobao_order where to_trade_id=#{0}
    <select id="listByTradeId" resultMap="BaseResultMap"
        parameterType="java.lang.String">
        select * from yeshi_ec_taobao_order where
        to_trade_id=#{0}
    </select>
    <select id="listAllOrder" resultMap="BaseResultMap">
        select * from yeshi_ec_taobao_order
        <if test="orderNo!=null">
            where to_order_id=#{orderNo}
        </if>
        order by to_create_time desc
        limit #{start},#{count}
    </select>
    <select id="countAllOrder" resultType="java.lang.Long">
        select count(to_id) from yeshi_ec_taobao_order
        <if test="orderNo!=null">
            where to_order_id=#{orderNo}
        </if>
    </select>
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from
        yeshi_ec_taobao_order where to_id = #{id,jdbcType=BIGINT}</delete>
        yeshi_ec_taobao_order where to_id = #{id,jdbcType=BIGINT}
    </delete>
    <delete id="deleteByOrderId" parameterType="java.lang.String">delete from
        yeshi_ec_taobao_order where to_order_id = #{0}</delete>
        yeshi_ec_taobao_order where to_order_id = #{0}
    </delete>
    <insert id="insert" parameterType="com.yeshi.fanli.entity.taobao.TaoBaoOrder"
        useGeneratedKeys="true" keyProperty="id">insert into yeshi_ec_taobao_order
        (to_id,to_create_time,to_click_time,to_title,to_auction_id,to_manager_wangwang,to_shop,to_count,to_price,to_order_state,to_order_type,to_iratio,to_sratio,to_payment,to_estimate,to_settlement,to_eIncome,to_settlement_time,to_tk_rate,to_tk_money,to_technology_support_percent,to_subsidy_ratio,to_subsidy,to_subsidy_type,to_transaction_platform,to_third_service,to_order_id,to_class_name,to_source_media_id,to_source_media_name,to_ad_position_id,to_ad_position_name,to_latest_updatetime,to_orderby,to_relation_id,to_special_id,to_trade_id)
@@ -103,7 +129,8 @@
        (#{id,jdbcType=BIGINT},#{createTime,jdbcType=VARCHAR},#{clickTime,jdbcType=VARCHAR},#{title,jdbcType=VARCHAR},#{auctionId,jdbcType=BIGINT},#{managerWangWang,jdbcType=VARCHAR},#{shop,jdbcType=VARCHAR},#{count,jdbcType=INTEGER},#{price,jdbcType=DECIMAL},#{orderState,jdbcType=VARCHAR},#{orderType,jdbcType=VARCHAR},#{iRatio,jdbcType=DECIMAL},#{sRatio,jdbcType=DECIMAL},#{payment,jdbcType=DECIMAL},#{estimate,jdbcType=DECIMAL},#{settlement,jdbcType=DECIMAL},#{eIncome,jdbcType=DECIMAL},#{settlementTime,jdbcType=VARCHAR},#{tkRate,jdbcType=DECIMAL},#{tkMoney,jdbcType=DECIMAL},#{technologySupportPercent,jdbcType=DECIMAL},#{subsidyRatio,jdbcType=DECIMAL},#{subsidy,jdbcType=DECIMAL},#{subsidyType,jdbcType=VARCHAR},#{transactionPlatform,jdbcType=VARCHAR},#{thirdService,jdbcType=VARCHAR},#{orderId,jdbcType=VARCHAR},#{className,jdbcType=VARCHAR},#{sourceMediaId,jdbcType=VARCHAR},#{sourceMediaName,jdbcType=VARCHAR},#{adPositionId,jdbcType=VARCHAR},#{adPositionName,jdbcType=VARCHAR},
        #{latestUpdateTime,jdbcType=TIMESTAMP},#{orderBy,jdbcType=INTEGER},
        #{relationId,jdbcType=VARCHAR},#{specialId,jdbcType=VARCHAR}
        ,#{tradeId,jdbcType=VARCHAR})</insert>
        ,#{tradeId,jdbcType=VARCHAR})
    </insert>
    <insert id="insertSelective" parameterType="com.yeshi.fanli.entity.taobao.TaoBaoOrder"
        useGeneratedKeys="true" keyProperty="id">
        insert into yeshi_ec_taobao_order
@@ -332,7 +359,8 @@
        `to_order_state` = '订单成功' THEN 1 ELSE 0 END),0) AS countSettlement,
        IFNULL(SUM(CASE WHEN `to_order_state` = '订单付款' THEN 1 ELSE 0 END),0)
        AS countPayment, IFNULL(SUM(CASE WHEN `to_order_state` = '订单失效' THEN 1
        ELSE 0 END),0) AS countInvalid FROM `yeshi_ec_taobao_order`</select>
        ELSE 0 END),0) AS countInvalid FROM `yeshi_ec_taobao_order`
    </select>
    <select id="countToday" resultType="java.lang.Integer">SELECT
        COUNT(DISTINCT(tb.to_order_id)) FROM `yeshi_ec_taobao_order` tb WHERE <![CDATA[tb.`to_order_state`<>'订单失效'  AND TO_DAYS(tb.`to_create_time`) = TO_DAYS(NOW())]]>
    </select>
fanli/src/main/java/com/yeshi/fanli/mapping/tlj/UserTaoLiJinDetailMapper.xml
@@ -67,8 +67,7 @@
  
  <select id="countUseMoneyByDate" resultType="java.math.BigDecimal">
      SELECT IFNULL(SUM(t.`utd_money`),0) FROM `yeshi_ec_user_taolijin_detail` t
    WHERE t.`utd_uid` = #{uid} AND t.`utd_type` <![CDATA[<>]]>'overdue'
          AND t.`utd_money` <![CDATA[<]]> 0
    WHERE t.`utd_uid` = #{uid} AND (t.`utd_type` = 'reduce' OR  t.`utd_type` = 'refund')
        <if test="dateType == 1"> <!-- 今日  -->
            AND TO_DAYS(t.`utd_create_time`) =  TO_DAYS(NOW());
        </if>
fanli/src/main/java/com/yeshi/fanli/service/impl/msg/MsgMoneyDetailServiceImpl.java
@@ -100,6 +100,13 @@
            detail.setUpdateTime(new Date());
            detail.setRead(false);
            msgMoneyDetailMapper.insertSelective(detail);
        } else if (detail.getMsgType() == MsgTypeMoneyTypeEnum.systemEqualize) {
            if (detail.getMoney() == null || detail.getOrderId() == null || detail.getBalance() == null)
                throw new MsgMoneyDetailException(2, "消息信息不全");
            detail.setCreateTime(new Date());
            detail.setUpdateTime(new Date());
            detail.setRead(false);
            msgMoneyDetailMapper.insertSelective(detail);
        }
        userMsgReadStateService.addMoneyMsgUnReadCount(detail.getUser().getId(), 1);
fanli/src/main/java/com/yeshi/fanli/service/impl/msg/UserMoneyMsgNotificationServiceImpl.java
@@ -139,7 +139,16 @@
        } catch (MsgMoneyDetailException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void systemEqualize(Long uid, String reason, BigDecimal money, BigDecimal balance) {
        MsgMoneyDetail detail = MsgMoneyDetailFactory.createSystemEqualizeMsg(uid, reason, money, balance, null);
        try {
            msgMoneyDetailService.addMsgMoneyDetail(detail);
        } catch (MsgMoneyDetailException e) {
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderRepairServiceImpl.java
@@ -1,5 +1,7 @@
package com.yeshi.fanli.service.impl.order;
import java.io.File;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date;
@@ -7,54 +9,77 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import javax.annotation.Resource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
import com.yeshi.fanli.dao.mybatis.money.ExtractCheckCompensateMapper;
import com.yeshi.fanli.dao.mybatis.order.CommonOrderGoodsMapper;
import com.yeshi.fanli.dao.mybatis.order.CommonOrderMapper;
import com.yeshi.fanli.dao.mybatis.order.CommonOrderTradeIdMapMapper;
import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
import com.yeshi.fanli.dao.mybatis.order.OrderRepairHistoryMapper;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.goods.CommonGoods;
import com.yeshi.fanli.entity.money.ExtractCheckCompensate;
import com.yeshi.fanli.entity.money.UserMoneyDetail;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.order.CommonOrderGoods;
import com.yeshi.fanli.entity.order.CommonOrderTradeIdMap;
import com.yeshi.fanli.entity.order.HongBaoOrder;
import com.yeshi.fanli.entity.order.OrderRepairHistory;
import com.yeshi.fanli.entity.order.ShareGoodsActivityOrder;
import com.yeshi.fanli.entity.push.PushInfo;
import com.yeshi.fanli.entity.push.PushInfo.PushTypeEnum;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
import com.yeshi.fanli.exception.HongBaoException;
import com.yeshi.fanli.exception.PushException;
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
import com.yeshi.fanli.exception.push.PushInfoException;
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.goods.CommonGoodsService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
import com.yeshi.fanli.service.inter.hongbao.HongBaoV2Service;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
import com.yeshi.fanli.service.inter.order.CommonOrderService;
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
import com.yeshi.fanli.service.inter.order.OrderRepairHistoryService;
import com.yeshi.fanli.service.inter.order.OrderRepairService;
import com.yeshi.fanli.service.inter.order.ShareGoodsActivityOrderService;
import com.yeshi.fanli.service.inter.push.PushInfoService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoOrderService;
import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanOrderService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserMoneyService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponRecordService;
import com.yeshi.fanli.service.inter.user.UserSystemCouponService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.factory.CommonOrderGoodsFactory;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import com.yeshi.fanli.util.taobao.TaoBaoOrderUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
import net.sf.json.JSONObject;
@Service
public class OrderRepairServiceImpl implements OrderRepairService {
    @Resource
    private OrderRepairHistoryMapper orderRepairHistoryMapper;
    @Resource
    private TaoBaoOrderService taoBaoOrderService;
@@ -104,19 +129,43 @@
    @Resource
    private OrderRepairHistoryService orderRepairHistoryService;
    @Resource
    private DataSourceTransactionManager dataSourceTransactionManager;
    @Resource
    private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
    @Resource
    private UserMoneyService userMoneyService;
    @Resource
    private PushInfoService pushInfoService;
    @Resource
    private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
    @Resource
    private ExtractCheckCompensateMapper extractCheckCompensateMapper;
    @Transactional
    @Override
    public void repairOrder(String orderId) {
    public void repairOrder(String orderId) throws Exception {
        // 比较CommonOrder与TaoBaoOrder的预估收益
        List<TaoBaoOrder> orderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
        // 统计
        BigDecimal sumMoney = new BigDecimal("0");
        for (TaoBaoOrder order : orderList) {
            // if (order.getOrderState().equalsIgnoreCase("订单付款") ||
            // order.getOrderState().equalsIgnoreCase("订单成功"))
            // return;
            if (order.getSubsidy() == null)
                order.setSubsidy(new BigDecimal(0));
            if (order.geteIncome() == null)
                order.seteIncome(new BigDecimal(0));
            BigDecimal money = order.geteIncome().add(order.getSubsidy());
            sumMoney = sumMoney.add(money);
            if (order.getOrderState().equalsIgnoreCase("订单付款") || order.getOrderState().equalsIgnoreCase("订单成功"))
                return;
        }
        List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
                orderId);
@@ -125,11 +174,12 @@
            commonSumMoney = commonSumMoney.add(commonOrder.geteIncome());
        }
        try {
            processLessFanOrder(orderId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 不处理维权过的订单
        List<TaoBaoWeiQuanOrder> weiQuanOrderList = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
        if (weiQuanOrderList != null && weiQuanOrderList.size() > 0)
            return;
        processLessFanOrder(orderId);
        // if (sumMoney.compareTo(commonSumMoney) > 0) {
        // // 少返了
@@ -140,14 +190,15 @@
    }
    @Transactional
    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
    private void processLessFanOrder(String orderId) throws Exception {
        List<CommonOrder> commonOrderList = commonOrderService.listBySourceTypeAndOrderId(Constant.SOURCE_TYPE_TAOBAO,
        List<CommonOrder> commonOrderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
                orderId);
        // 确定是自购还是分享赚
        if (commonOrderList.size() <= 0)
            return;
        HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrderList.get(0).getId());
        HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrderList.get(0).getId());
        // 统计原来的上下级关系及返利的资金
        Map<Long, BigDecimal> oldMoney = new HashMap<>();
        Long firstUid = null;
@@ -155,7 +206,7 @@
        Long mainUid = null;
        // 统计返利的资金
        for (CommonOrder co : commonOrderList) {
            HongBaoOrder tempHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
            HongBaoOrder tempHongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
            if (tempHongBaoOrder == null || tempHongBaoOrder.getHongBaoV2() == null)
                continue;
            hongBaoOrder = tempHongBaoOrder;
@@ -166,7 +217,7 @@
            if (hongBaoOrder.getHongBaoV2().getState() == HongBaoV2.STATE_YILINGQU)
                oldMoney.put(mainUid, oldMoney.get(mainUid).add(hongBaoOrder.getHongBaoV2().getMoney()));
            // 查询是否有下级
            List<HongBaoV2> childrenList = hongBaoV2Service.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
            List<HongBaoV2> childrenList = hongBaoV2Mapper.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
            for (HongBaoV2 child : childrenList) {
                if (child.getType() == HongBaoV2.TYPE_YIJI || child.getType() == HongBaoV2.TYPE_SHARE_YIJI) {
                    firstUid = child.getUserInfo().getId();
@@ -184,6 +235,29 @@
                }
            }
        }
        // FileWriter fw = null;
        // try {
        // // 如果文件存在,则追加内容;如果文件不存在,则创建文件
        // File f = new File("D:\\three_sale.txt");
        // fw = new FileWriter(f, true);
        // } catch (IOException e) {
        // e.printStackTrace();
        // }
        // PrintWriter pw = new PrintWriter(fw);
        // pw.println(orderId+"#"+firstUid+"-"+oldMoney.get(firstUid)+"#"+secondUid+"-"+(secondUid!=null?
        // oldMoney.get(secondUid):""));
        // pw.flush();
        // try {
        // fw.flush();
        // pw.close();
        // fw.close();
        // } catch (IOException e) {
        // e.printStackTrace();
        // }
        //
        // if (1 > 0)
        // return;
        List<TaoBaoOrder> taoBaoOrderList = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
@@ -244,12 +318,18 @@
        if (newCommonOrderList != null)
            for (CommonOrder co : newCommonOrderList) {
                HongBaoOrder newHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
                if (newHongBaoOrder == null)
                    continue;
                HongBaoV2 hongBao = newHongBaoOrder.getHongBaoV2();
                if (hongBao.getState() == HongBaoV2.STATE_YILINGQU) {
                    Long uid = hongBao.getUserInfo().getId();
                    if (newMap.get(uid) == null)
                        newMap.put(uid, new BigDecimal(0));
                    newMap.put(uid, newMap.get(uid).add(hongBao.getMoney()));
                } else {
                    Long uid = hongBao.getUserInfo().getId();
                    if (newMap.get(uid) == null)
                        newMap.put(uid, new BigDecimal(0));
                }
                List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBao.getId());
                if (children != null)
@@ -518,6 +598,7 @@
        }
    }
    @Transactional
    public void addOrder(CommonOrder commonOrder, int type, Long firstUid, Long secondUid) throws Exception {
        // 增加commonOrder
        commonOrder.setCreateTime(commonOrder.getThirdCreateTime());
@@ -620,7 +701,7 @@
            if (mianDanMoney != null)
                hongBao.setMoney(mianDanMoney);
            UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
            UserInfo user = userInfoService.getUserByIdWithMybatis(commonOrder.getUserInfo().getId());
            hongBao.setUrank(user.getRank());
            hongBaoV2Mapper.insertSelective(hongBao);
            // 添加红包与订单的映射
@@ -651,7 +732,10 @@
                firstHongbao.setVersion(2);
                firstHongbao.setState(hongBao.getState());
                if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
                if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {// ||
                                                                        // hongBao.getState()
                                                                        // ==
                                                                        // HongBaoV2.STATE_YILINGQU
                    firstHongbao.setMoney(
                            MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
                    Calendar calendar = Calendar.getInstance();
@@ -694,7 +778,10 @@
                    secondHongbao.setType(HongBaoV2.TYPE_ERJI);
                    secondHongbao.setVersion(2);
                    secondHongbao.setState(hongBao.getState());
                    if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
                    if (hongBao.getState() == HongBaoV2.STATE_KELINGQU) {// ||
                                                                            // hongBao.getState()
                                                                            // ==
                                                                            // HongBaoV2.STATE_YILINGQU
                        secondHongbao.setMoney(
                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), secondRate.divide(new BigDecimal(100))));
                        Calendar calendar = Calendar.getInstance();
@@ -751,7 +838,7 @@
                    hongBao.setState(HongBaoV2.STATE_YILINGQU);
                }
            }
            UserInfo user = userInfoService.getUserById(commonOrder.getUserInfo().getId());
            UserInfo user = userInfoService.getUserByIdWithMybatis(commonOrder.getUserInfo().getId());
            hongBao.setUrank(user.getRank());
            hongBao.setUserInfo(user);
            hongBaoV2Mapper.insertSelective(hongBao);
@@ -810,19 +897,484 @@
    }
    @Transactional
    @Transactional(propagation = Propagation.REQUIRED)
    private void deleteByCommonOrderId(Long commonOrderId) {
        HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrderId);
        commonOrderMapper.deleteByPrimaryKey(commonOrderId);
        HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrderId);
        if (hongBaoOrder == null || hongBaoOrder.getHongBaoV2() == null)
            return;
        List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
        List<HongBaoV2> children = hongBaoV2Mapper.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
        if (children != null)
            for (HongBaoV2 hongBao : children) {
                hongBaoV2Service.deleteByPrimaryKey(hongBao.getId());
                hongBaoV2Mapper.deleteByPrimaryKey(hongBao.getId());
            }
        hongBaoV2Service.deleteByPrimaryKey(hongBaoOrder.getHongBaoV2().getId());
        hongBaoOrderService.deleteByPrimaryKey(hongBaoOrder.getId());
        commonOrderService.deleteByPrimaryKey(commonOrderId);
        hongBaoV2Mapper.deleteByPrimaryKey(hongBaoOrder.getHongBaoV2().getId());
        hongBaoOrderMapper.deleteByPrimaryKey(hongBaoOrder.getId());
    }
    @Transactional
    @Override
    public void testTransaction() {
        hongBaoV2Mapper.selectByPrimaryKey(1L);
    }
    private static Map<String, OrderInfo> orderInfoMap;
    private OrderInfo getOrderInfo(String orderId) {
        if (orderInfoMap == null) {
            orderInfoMap = new HashMap<>();
            Scanner scanner = null;
            try {
                scanner = new Scanner(new File("C:\\Users\\Administrator\\Desktop\\订单集中排查\\three_sale.txt"));
                while (scanner.hasNext()) {
                    OrderInfo orderInfo = new OrderInfo();
                    String info = scanner.next();
                    if (StringUtil.isNullOrEmpty(info))
                        continue;
                    String[] sts = info.split("#");
                    String orderid = sts[0];
                    orderInfo.setOrderId(orderid);
                    String firstUid = sts[1].split("-")[0];
                    String firstUidMoney = sts[1].split("-")[1];
                    orderInfo.setFirstUid(Long.parseLong(firstUid));
                    orderInfo.setFirstUidMoney(new BigDecimal(firstUidMoney));
                    String secondUid = sts[2].split("-")[0];
                    String secondUidMoney = null;
                    if (sts[2].split("-").length > 1)
                        secondUidMoney = sts[2].split("-")[1];
                    if (!StringUtil.isNullOrEmpty(secondUid))
                        orderInfo.setSecondUid(Long.parseLong(secondUid));
                    if (!StringUtil.isNullOrEmpty(secondUidMoney))
                        orderInfo.setSecondUidMoney(new BigDecimal(secondUidMoney));
                    orderInfoMap.put(orderInfo.getOrderId(), orderInfo);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            scanner.close();
        }
        return orderInfoMap.get(orderId);
    }
    @Transactional
    @Override
    public void repireFirstAndSecondLevel(String orderId) throws Exception {
        repireFirstShare(orderId);
        if (1 > 0)
            return;
        OrderInfo info = getOrderInfo(orderId);
        Map<Long, BigDecimal> oldMoneyMap = new HashMap<>();
        if (info.getFirstUid() != null)
            oldMoneyMap.put(info.getFirstUid(), info.getFirstUidMoney());
        if (info.getSecondUid() != null)
            oldMoneyMap.put(info.getSecondUid(), info.getSecondUidMoney());
        if (info != null) {
            List<CommonOrder> list = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
                    info.getOrderId());
            // 查询是否有子红包
            for (CommonOrder commonOrder : list) {
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                if (hongBaoOrder == null)
                    continue;
                List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
                if (hongBaoList != null && hongBaoList.size() > 0)// 有子红包就不处理了
                    return;
            }
            for (CommonOrder commonOrder : list) {
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                if (hongBaoOrder == null)
                    continue;
                HongBaoV2 hongBao = hongBaoOrder.getHongBaoV2();
                Long firstUid = info.getFirstUid();
                Long secondUid = info.getSecondUid();
                // 加入子红包
                UserInfo boss = null;
                if (firstUid != null)
                    boss = userInfoService.selectByPKey(firstUid);
                if (boss != null && hongBao.getState() != HongBaoV2.STATE_SHIXIAO) {// 1级BOSS存在且红包未失效,免单不支持多级分销
                    // 插入一级子红包
                    BigDecimal firstRate = hongBaoManageService
                            .getFirstInviteRate(boss.getRank() == null ? 0 : boss.getRank());
                    if (firstRate.compareTo(new BigDecimal(0)) <= 0)
                        return;
                    HongBaoV2 firstHongbao = new HongBaoV2();
                    firstHongbao.setBeizhu("2019年7月批量修改");
                    firstHongbao.setUserInfo(boss);
                    firstHongbao.setUrank(boss.getRank());
                    firstHongbao.setParent(hongBao);
                    firstHongbao.setCreateTime(new Date());
                    firstHongbao.setType(HongBaoV2.TYPE_YIJI);
                    firstHongbao.setVersion(2);
                    firstHongbao.setState(hongBao.getState());
                    if (hongBao.getState() == HongBaoV2.STATE_KELINGQU
                            || hongBao.getState() == HongBaoV2.STATE_YILINGQU) {
                        firstHongbao.setMoney(
                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
                        Calendar calendar = Calendar.getInstance();
                        calendar.setTime(commonOrder.getSettleTime());
                        calendar.add(Calendar.MONTH, 1);
                        firstHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
                                calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
                                "yyyy-M-dd")));
                        if (firstHongbao.getPreGetTime().getTime() < System.currentTimeMillis()) {
                            firstHongbao.setGetTime(firstHongbao.getPreGetTime());
                            firstHongbao.setState(HongBaoV2.STATE_YILINGQU);
                        }
                    } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
                        firstHongbao.setMoney(
                                MoneyBigDecimalUtil.mul(hongBao.getMoney(), firstRate.divide(new BigDecimal(100))));
                    }
                    // 返利为0的不通知
                    if (firstHongbao.getMoney() == null || firstHongbao.getMoney().compareTo(new BigDecimal(0)) <= 0)
                        continue;
                    hongBaoV2Mapper.insertSelective(firstHongbao);
                    // 插入二级子红包
                    if (secondUid == null)
                        boss = null;
                    else
                        boss = userInfoService.selectByPKey(secondUid);
                    if (boss != null) {// 二级BOSS存在
                        BigDecimal secondRate = hongBaoManageService
                                .getSecondInviteRate(boss.getRank() == null ? 0 : boss.getRank());
                        if (secondRate.compareTo(new BigDecimal(0)) <= 0)
                            return;
                        HongBaoV2 secondHongbao = new HongBaoV2();
                        secondHongbao.setBeizhu("2019年7月批量修改");
                        secondHongbao.setUserInfo(boss);
                        secondHongbao.setUrank(boss.getRank());
                        secondHongbao.setParent(hongBao);
                        secondHongbao.setCreateTime(new Date());
                        secondHongbao.setType(HongBaoV2.TYPE_ERJI);
                        secondHongbao.setVersion(2);
                        secondHongbao.setState(hongBao.getState());
                        if (hongBao.getState() == HongBaoV2.STATE_KELINGQU
                                || hongBao.getState() == HongBaoV2.STATE_YILINGQU) {
                            secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
                                    secondRate.divide(new BigDecimal(100))));
                            Calendar calendar = Calendar.getInstance();
                            calendar.setTime(commonOrder.getSettleTime());
                            calendar.add(Calendar.MONTH, 1);
                            secondHongbao.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
                                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
                                    "yyyy-M-dd")));
                            if (secondHongbao.getPreGetTime().getTime() < System.currentTimeMillis()) {
                                secondHongbao.setGetTime(secondHongbao.getPreGetTime());
                                secondHongbao.setState(HongBaoV2.STATE_YILINGQU);
                            }
                        } else if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU) {
                            secondHongbao.setMoney(MoneyBigDecimalUtil.mul(hongBao.getMoney(),
                                    secondRate.divide(new BigDecimal(100))));
                        }
                        // 返利为0的不统计
                        if (secondHongbao.getMoney() == null
                                || secondHongbao.getMoney().compareTo(new BigDecimal(0)) <= 0)
                            continue;
                        hongBaoV2Mapper.insertSelective(secondHongbao);
                    }
                }
            }
        }
        // 统计修改后的资金
        List<CommonOrder> newCommonOrderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
                orderId);
        Map<Long, BigDecimal> newMap = new HashMap<>();
        if (newCommonOrderList != null)
            for (CommonOrder co : newCommonOrderList) {
                HongBaoOrder newHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
                if (newHongBaoOrder == null)
                    continue;
                HongBaoV2 hongBao = newHongBaoOrder.getHongBaoV2();
                List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBao.getId());
                if (children != null)
                    for (HongBaoV2 child : children) {
                        if (newMap.get(child.getUserInfo().getId()) == null)
                            newMap.put(child.getUserInfo().getId(), new BigDecimal(0));
                        if (child.getState() == HongBaoV2.STATE_YILINGQU)
                            newMap.put(child.getUserInfo().getId(),
                                    newMap.get(child.getUserInfo().getId()).add(child.getMoney()));
                    }
            }
        for (Iterator<Long> its = newMap.keySet().iterator(); its.hasNext();) {
            Long uid = its.next();
            BigDecimal beforeGetMoney = oldMoneyMap.get(uid);
            BigDecimal afterGetMoney = newMap.get(uid);
            OrderRepairHistory history = new OrderRepairHistory();
            history.setAfterGetMoney(afterGetMoney);
            history.setBeforeGetMoney(beforeGetMoney);
            history.setOrderId(orderId);
            history.setUid(uid);
            orderRepairHistoryService.addOrderRepairHistory(history);
        }
    }
    private void repireFirstShare(String orderId) throws Exception {
        OrderInfo info = getOrderInfo(orderId);
        Long firstUid = info.getFirstUid();
        Map<Long, BigDecimal> oldMoneyMap = new HashMap<>();
        if (info.getFirstUid() != null)
            oldMoneyMap.put(info.getFirstUid(), info.getFirstUidMoney());
        if (info.getSecondUid() != null)
            oldMoneyMap.put(info.getSecondUid(), info.getSecondUidMoney());
        if (info != null) {
            List<CommonOrder> list = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
                    info.getOrderId());
            // 查询是否有子红包
            for (CommonOrder commonOrder : list) {
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                if (hongBaoOrder == null)
                    continue;
                List<HongBaoV2> hongBaoList = hongBaoV2Mapper.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
                if (hongBaoList != null && hongBaoList.size() > 0)// 有子红包就不处理了
                    return;
            }
            for (CommonOrder commonOrder : list) {
                if (commonOrder.getState() == CommonOrder.STATE_SX || commonOrder.getState() == CommonOrder.STATE_WQ)
                    continue;
                // 分享赚
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
                if (hongBaoOrder == null)
                    continue;
                HongBaoV2 hongBao = hongBaoOrder.getHongBaoV2();
                // 4月17日后才有一级分享赚
                if (commonOrder.getThirdCreateTime().getTime() > TimeUtil.convertToTimeTemp("2019-04-17",
                        "yyyy-MM-dd")) {
                    UserInfo boss = null;
                    if (firstUid != null)
                        boss = userInfoService.selectByPKey(firstUid);
                    if (boss != null) {
                        BigDecimal firstLevelRate = hongBaoManageService.getFirstShareRate(1,
                                commonOrder.getThirdCreateTime().getTime());
                        HongBaoV2 child = new HongBaoV2();
                        child.setBeizhu("2019年7月批量修改");
                        child.setParent(hongBao);
                        child.setType(HongBaoV2.TYPE_SHARE_YIJI);
                        if (commonOrder.getState() == CommonOrder.STATE_FK) {
                            child.setState(HongBaoV2.STATE_BUKELINGQU);
                            child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.getEstimate(),
                                    firstLevelRate.divide(new BigDecimal(100))));
                        } else if (commonOrder.getState() == CommonOrder.STATE_JS) {
                            child.setState(HongBaoV2.STATE_KELINGQU);
                            child.setMoney(MoneyBigDecimalUtil.mul(commonOrder.geteIncome(),
                                    firstLevelRate.divide(new BigDecimal(100))));
                            Calendar calendar = Calendar.getInstance();
                            calendar.setTime(commonOrder.getSettleTime());
                            calendar.add(Calendar.MONTH, 1);
                            child.setPreGetTime(new Date(TimeUtil.convertToTimeTemp(
                                    calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-25",
                                    "yyyy-M-dd")));
                            if (child.getPreGetTime().getTime() < System.currentTimeMillis()) {
                                child.setGetTime(child.getPreGetTime());
                                child.setState(HongBaoV2.STATE_YILINGQU);
                            }
                        }
                        child.setUserInfo(boss);
                        child.setUrank(boss.getRank());
                        child.setVersion(2);
                        child.setCreateTime(new Date());
                        hongBaoV2Mapper.insertSelective(child);
                    }
                }
            }
        }
        // 统计修改后的资金
        List<CommonOrder> newCommonOrderList = commonOrderMapper.listBySourceTypeAndOrderNo(Constant.SOURCE_TYPE_TAOBAO,
                orderId);
        Map<Long, BigDecimal> newMap = new HashMap<>();
        if (newCommonOrderList != null)
            for (CommonOrder co : newCommonOrderList) {
                HongBaoOrder newHongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(co.getId());
                if (newHongBaoOrder == null)
                    continue;
                HongBaoV2 hongBao = newHongBaoOrder.getHongBaoV2();
                List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBao.getId());
                if (children != null)
                    for (HongBaoV2 child : children) {
                        if (newMap.get(child.getUserInfo().getId()) == null)
                            newMap.put(child.getUserInfo().getId(), new BigDecimal(0));
                        if (child.getState() == HongBaoV2.STATE_YILINGQU)
                            newMap.put(child.getUserInfo().getId(),
                                    newMap.get(child.getUserInfo().getId()).add(child.getMoney()));
                    }
            }
        for (Iterator<Long> its = newMap.keySet().iterator(); its.hasNext();) {
            Long uid = its.next();
            BigDecimal beforeGetMoney = oldMoneyMap.get(uid);
            BigDecimal afterGetMoney = newMap.get(uid);
            OrderRepairHistory history = new OrderRepairHistory();
            history.setAfterGetMoney(afterGetMoney);
            history.setBeforeGetMoney(beforeGetMoney);
            history.setOrderId(orderId);
            history.setUid(uid);
            orderRepairHistoryService.addOrderRepairHistory(history);
        }
    }
    class OrderInfo {
        private String orderId;
        private Long firstUid;
        private BigDecimal firstUidMoney;
        private Long secondUid;
        private BigDecimal secondUidMoney;
        public String getOrderId() {
            return orderId;
        }
        public void setOrderId(String orderId) {
            this.orderId = orderId;
        }
        public Long getFirstUid() {
            return firstUid;
        }
        public void setFirstUid(Long firstUid) {
            this.firstUid = firstUid;
        }
        public BigDecimal getFirstUidMoney() {
            return firstUidMoney;
        }
        public void setFirstUidMoney(BigDecimal firstUidMoney) {
            this.firstUidMoney = firstUidMoney;
        }
        public Long getSecondUid() {
            return secondUid;
        }
        public void setSecondUid(Long secondUid) {
            this.secondUid = secondUid;
        }
        public BigDecimal getSecondUidMoney() {
            return secondUidMoney;
        }
        public void setSecondUidMoney(BigDecimal secondUidMoney) {
            this.secondUidMoney = secondUidMoney;
        }
    }
    @Override
    public List<OrderRepairHistory> listByUid(Long uid) {
        return orderRepairHistoryMapper.listByUid(uid);
    }
    @Transactional
    @Override
    public void doMoney(Long uid) {
        List<OrderRepairHistory> historyList = listByUid(uid);
        for (int i = 0; i < historyList.size(); i++) {
            if (historyList.get(i).getCreateTime().getTime() < TimeUtil.convertToTimeTemp("2019-07-15 17:00:38",
                    "yyyy-MM-dd HH:mm:ss")) {
                historyList.remove(i);
                i--;
            }
        }
        BigDecimal money = new BigDecimal(0);
        String orders = "";
        for (OrderRepairHistory history : historyList) {
            money = money.add(history.getAfterGetMoney().subtract(history.getBeforeGetMoney()));
            orders += history.getOrderId() + ",";
        }
        if (money.compareTo(new BigDecimal(0)) > 0)// 资金需要增加
        {
            try {
                UserMoneyDetail detail = UserMoneyDetailFactory.createSystemEqualize("订单统计异常修复", money,
                        new UserInfo(uid));
                // 系统补齐
                // 加资金
                userMoneyService.addUserMoney(uid, money, detail);
                pushMsg(uid, "关于近期订单与资金异常的排查与修复结果通知",
                        "尊敬的用户,经仔细核对您账户中的订单,发现您账户中有未统计或错误统计的订单,我们已经为您补齐资金,对应资金已经存入您的账户余额中,敬请查收注查收。感谢信任,返利券App终将成为您最信任的购物省钱助手。");
                userMoneyMsgNotificationService.systemEqualize(uid, "订单统计异常修复", money, userInfoService.getBalance(uid));
            } catch (UserMoneyDetailException e) {
                e.printStackTrace();
            }
        } else {// 资金需要减少,不要扣钱
            pushMsg(uid, "关于近期订单与资金异常的排查与修复结果通知",
                    "尊敬的用户,经仔细核对您账户中的订单,发现您账户中有错误统计的订单,我们已经为您恢复正常,所涉及订单多统计出来的资金,不会被扣除,即您账户中的资金将保持不变,已提现的资金,也不会收回,敬请知晓。感谢信任,返利券App终将成为您最信任的购物省钱助手。");
            // userMoneyMsgNotificationService.systemEqualize(uid, "订单统计异常修复",
            // money, userInfoService.getBalance(uid));
            // 加入提现审核异常保护中
            ExtractCheckCompensate check = new ExtractCheckCompensate();
            check.setBeiZhu("7月订单异常系统处理:" + orders);
            check.setCreateTime(new Date());
            check.setMoney(money);
            check.setUserInfo(new UserInfo(uid));
            check.setUpdateTime(new Date());
            extractCheckCompensateMapper.insertSelective(check);
        }
    }
    private void pushMsg(Long uid, String title, String content) {
        PushInfo pushInfo = new PushInfo();
        pushInfo.setTitle(title);
        pushInfo.setContent(content);
        pushInfo.setUids(uid + "");
        JSONObject jsonData = new JSONObject();
        jsonData.put("url", "");
        jsonData.put("ios", "全推");
        jsonData.put("android", "全推");
        pushInfo.setJsonData(jsonData.toString());
        pushInfo.setType(PushTypeEnum.ZNX);
        pushInfo.setArrayAndroid("[全推]");
        pushInfo.setArrayIOS("[全推]");
        pushInfo.setCreateTime(new Date());
        try {
            pushInfoService.save(pushInfo);
        } catch (PushInfoException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            pushInfoService.handPush(pushInfo.getId());
        } catch (PushInfoException e) {
            e.printStackTrace();
        } catch (PushException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TLJBuyGoodsServiceImpl.java
@@ -118,9 +118,7 @@
        try {
            taoLiJinDTO = TaoKeApiUtil.createTaoLiJin(auctionId, "淘礼金验证", new BigDecimal("1.00"), 1, new Date(),
                    new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 6), new Date(),
                    new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 6),
                    new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
                            TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT));
                    new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 6), TaoBaoConstant.ownBuyApp);
        } catch (TaoKeApiException e) {
            if (e.getCode() == TaoKeApiException.CODE_TLJ_FORBIDDEN) {
                // 该商品不支持创建淘礼金红包
fanli/src/main/java/com/yeshi/fanli/service/impl/taobao/TaoBaoOrderServiceImpl.java
@@ -178,4 +178,19 @@
        return taoBaoOrderMapper.selectTaoBaoOrderByTradeId(tradeId);
    }
    @Override
    public List<TaoBaoOrder> listAllOrder(int page, int pageSize) {
        return taoBaoOrderMapper.listAllOrder(null, (page - 1) * pageSize, pageSize);
    }
    @Override
    public long countAllOrder() {
        return taoBaoOrderMapper.countAllOrder(null);
    }
    @Override
    public TaoBaoOrder selectByPrimaryKey(Long id) {
        return taoBaoOrderMapper.selectByPrimaryKey(id);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/inter/msg/UserMoneyMsgNotificationService.java
@@ -116,4 +116,14 @@
     */
    public void orderReward(Long uid, String orderId, BigDecimal money, BigDecimal balance);
    /**
     * 系统补齐
     *
     * @param uid
     * @param reason
     * @param money
     * @param balance
     */
    public void systemEqualize(Long uid, String reason, BigDecimal money, BigDecimal balance);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/order/OrderRepairService.java
@@ -1,7 +1,12 @@
package com.yeshi.fanli.service.inter.order;
import java.util.List;
import com.yeshi.fanli.entity.order.OrderRepairHistory;
/**
 * 订单修复服务
 *
 * @author Administrator
 *
 *
@@ -11,8 +16,31 @@
    /**
     * 修复订单
     */
    public void repairOrder(String orderId);
    public void repairOrder(String orderId) throws Exception;
    /**
     * 修复一级,二级订单订单
     *
     * @param orderId
     * @throws Exception
     */
    public void repireFirstAndSecondLevel(String orderId) throws Exception;
    public void testTransaction();
    /**
     * 根据用户ID检索
     *
     * @param uid
     * @return
     */
    List<OrderRepairHistory> listByUid(Long uid);
    /**
     * 处理资金
     *
     * @param uid
     */
    public void doMoney(Long uid);
}
fanli/src/main/java/com/yeshi/fanli/service/inter/taobao/TaoBaoOrderService.java
@@ -54,14 +54,37 @@
     * @param realtionId
     */
    public void bindSpecialIdAndRealtionId(String tradeId, String specialId, String realtionId);
    /**
     * 根据交易ID获取订单号
     *
     * @param tradeId
     * @return
     */
    public TaoBaoOrder selectByTradeId(String tradeId);
    /**
     * 检索所有订单列表
     *
     * @param page
     * @param pageSize
     * @return
     */
    public List<TaoBaoOrder> listAllOrder(int page, int pageSize);
    /**
     * 订单总量
     *
     * @return
     */
    public long countAllOrder();
    /**
     * 根据主键检索
     *
     * @param id
     * @return
     */
    public TaoBaoOrder selectByPrimaryKey(Long id);
}
fanli/src/main/java/com/yeshi/fanli/util/StringUtil.java
@@ -303,4 +303,22 @@
            str = str.substring(0, str.length() - sperator.length());
        return str;
    }
    /**
     * 淘口令提取
     *
     * @param str
     * @return
     */
    public static String picUpTaoToken(String str) {
        String pattern = "(₳{1}[A-Za-z0-9]+₳{1})|(¥{1}[A-Za-z0-9]+¥{1})|(¥{1}[A-Za-z0-9]+¥{1})";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(str);
        while (m.find()) {
            String group = m.group(0);
            if (!StringUtil.isNullOrEmpty(group))
                return group;
        }
        return null;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/factory/UserMoneyDetailFactory.java
@@ -467,4 +467,26 @@
        return detail;
    }
    public static UserMoneyDetail createSystemEqualize(String desc, BigDecimal money, UserInfo user)
            throws UserMoneyDetailException {
        if (user == null)
            throw new UserMoneyDetailException(1, "UID不能为空");
        if (money == null)
            throw new UserMoneyDetailException(1, "金额不能为空");
        UserMoneyDetail detail = new UserMoneyDetail();
        detail.setCreateTime(new Date());
        detail.setIdentifyCode(StringUtil.Md5(
                UserMoneyDetailTypeEnum.systemEqualize.name() + "-" + System.currentTimeMillis() + "-" + user.getId()));
        detail.setMoney(money);
        detail.setTitle(UserMoneyDetailTypeEnum.systemEqualize.getDesc());
        detail.setType(UserMoneyDetailTypeEnum.systemEqualize);
        detail.setUpdateTime(new Date());
        detail.setUserInfo(user);
        if (!StringUtil.isNullOrEmpty(desc)) {
            detail.setDescInfo(desc);
        }
        return detail;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/factory/msg/MsgMoneyDetailFactory.java
@@ -278,8 +278,7 @@
        detail.setUser(new UserInfo(uid));
        return detail;
    }
    public static MsgMoneyDetail createOrderRewardMsg(Long uid, String orderId, BigDecimal money, BigDecimal balance,
            String beiZhu) {
        if (money == null || orderId == null || money == null || uid == null)
@@ -297,4 +296,21 @@
        return detail;
    }
    public static MsgMoneyDetail createSystemEqualizeMsg(Long uid, String reason, BigDecimal money, BigDecimal balance,
            String beiZhu) {
        if (money == null || money == null || uid == null)
            return null;
        MsgMoneyDetail detail = new MsgMoneyDetail();
        detail.setBalance(balance);
        detail.setBeiZhu(beiZhu);
        detail.setCreateTime(new Date());
        detail.setMoney(money);
        detail.setMsgType(MsgTypeMoneyTypeEnum.systemEqualize);
        detail.setOrderId(reason);
        detail.setRead(false);
        detail.setUser(new UserInfo(uid));
        return detail;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/factory/msg/UserMsgVOFactory.java
@@ -385,6 +385,27 @@
            return new UserMsgVO("http://img.flqapp.com/resource/msg/icon_msg_order_reward.png",
                    msg.getMsgType().getDesc(), msg.getUpdateTime() == null ? msg.getCreateTime() : msg.getUpdateTime(),
                    items);
        }else if (msg.getMsgType() == MsgTypeMoneyTypeEnum.systemEqualize ) {// 奖励订单
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO("¥" + filterMoney(msg.getMoney()) + "", COLOR_HIGHLIGHT_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("补齐金额", COLOR_TITLE), contentList));
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO(msg.getOrderId()+ "", COLOR_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("补齐原因", COLOR_TITLE), contentList));
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO("¥" + filterMoney(msg.getBalance()) + "", COLOR_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("账户余额", COLOR_TITLE), contentList));
            contentList = new ArrayList<>();
            contentList.add(new ClientTextStyleVO(StringUtil.isNullOrEmpty(msg.getBeiZhu()) ? "无" : msg.getBeiZhu(),
                    COLOR_CONTENT));
            items.add(new CommonMsgItemVO(new ClientTextStyleVO("备注", COLOR_TITLE), contentList));
            return new UserMsgVO("http://img.flqapp.com/resource/money_detail/icon_system.png",
                    msg.getMsgType().getDesc(), msg.getUpdateTime() == null ? msg.getCreateTime() : msg.getUpdateTime(),
                    items);
        }
        return null;
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoKeApiUtil.java
@@ -1392,7 +1392,7 @@
        map.put("page_no", page + "");
        map.put("page_size", pageSize + "");
        map.put("material_id", materialId + "");
//        map.put("content_id", "561388751621");
        // map.put("content_id", "561388751621");
        String resultStr = TaoKeBaseUtil.baseRequestForThreeTimes(map, true);
        System.out.println(resultStr);
@@ -1946,9 +1946,38 @@
    }
    /**
     * 淘口令转商品ID
     *
     * @param token
     * @return
     */
    public static Long tokenConvertAuctionId(String token) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.tpwd.convert");
        map.put("password_content", token);
        map.put("adzone_id", TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT.split("_")[3]);
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            JSONObject json = TaoKeBaseUtil.baseRequest(map, app);
            try {
                return json.optJSONObject("tbk_tpwd_convert_response").optJSONObject("data").optLong("num_iid");
            } catch (Exception e) {
                return null;
            }
        } catch (TaoKeApiException e) {
            e.printStackTrace();
        }
        return null;
    }
    // 淘礼金创建
    public static TaoLiJinDTO createTaoLiJin(Long auctionId, String name, BigDecimal perface, int totalNum,
            Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime,TaoKeAppInfo app) throws TaoKeApiException{
            Date sendStartTime, Date sendEndTime, Date useStartTime, Date useEndTime, TaoKeAppInfo app)
            throws TaoKeApiException {
        Map<String, String> map = new HashMap<>();
        map.put("method", "taobao.tbk.dg.vegas.tlj.create");
        map.put("adzone_id", app.getPid().split("_")[3]);
@@ -1959,17 +1988,16 @@
        map.put("security_switch", "false");
        map.put("per_face", perface.toString());
        map.put("send_start_time", TimeUtil.getGernalTime(sendStartTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if(sendEndTime != null)
        if (sendEndTime != null)
            map.put("send_end_time", TimeUtil.getGernalTime(sendEndTime.getTime(), "yyyy-MM-dd HH:mm:ss"));
        if(useEndTime != null) {
        if (useEndTime != null) {
            map.put("use_end_time", TimeUtil.getGernalTime(useEndTime.getTime(), "yyyy-MM-dd"));
            map.put("use_end_time_mode", "2");
        }
        if(useStartTime != null)
        if (useStartTime != null)
            map.put("use_start_time", TimeUtil.getGernalTime(useStartTime.getTime(), "yyyy-MM-dd"));
        try {
            String result = TaoKeBaseUtil.baseRequestForThreeTimes(map, app);
@@ -1977,40 +2005,39 @@
            System.out.println(json);
            JSONObject root = json.optJSONObject("tbk_dg_vegas_tlj_create_response");
            if (root != null && root.optJSONObject("result") != null) {
                if (root.optJSONObject("result").optBoolean("success")) {
                    JSONObject modelJson = root.optJSONObject("result").optJSONObject("model");
                    TaoLiJinDTO dto = new TaoLiJinDTO();
                    dto.setRightsId(modelJson.optString("rights_id"));
                    dto.setSendUrl(modelJson.optString("send_url"));
                    return dto;
                }else{
                } else {
                    LogHelper.error(json);
                }
                // 接口返回异常
                String msgCode = root.optJSONObject("result").optString("msg_code");
                if (!StringUtil.isNullOrEmpty(msgCode)) {
                     switch(msgCode){
                     case "FAIL_BIZ_ITEM_FORBIDDEN":
                         throw new TaoKeApiException(TaoKeApiException.CODE_TLJ_FORBIDDEN, "该商品不支持创建淘礼金红包");
                     case "FAIL_BIZ_ACCOUNT_UN_PAID":
                     case "PRE_FREEZE_ASSET_ACCOUNT_ERROR":
                         throw new TaoKeApiException(TaoKeApiException.CODE_TLJ_NO_MONEY, "官方玩法钱包余额不足");
                     default:
                         return null;
                   }
                    switch (msgCode) {
                    case "FAIL_BIZ_ITEM_FORBIDDEN":
                        throw new TaoKeApiException(TaoKeApiException.CODE_TLJ_FORBIDDEN, "该商品不支持创建淘礼金红包");
                    case "FAIL_BIZ_ACCOUNT_UN_PAID":
                    case "PRE_FREEZE_ASSET_ACCOUNT_ERROR":
                        throw new TaoKeApiException(TaoKeApiException.CODE_TLJ_NO_MONEY, "官方玩法钱包余额不足");
                    default:
                        return null;
                    }
                }
            }
        } catch (TaoKeApiException e) {
             throw e;
            throw e;
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
        return null;
    }
    // 淘礼金报告
    public static UserTaoLiJinReport getTaoLiJinEffective(String rightsId) {
@@ -2021,19 +2048,18 @@
        TaoKeAppInfo app = new TaoKeAppInfo();
        app.setAppKey(TaoBaoConstant.TAOBAO_AUTH_APPKEY);
        app.setAppSecret(TaoBaoConstant.TAOBAO_AUTH_APPSECRET);
        try {
            String result = TaoKeBaseUtil.baseRequestForThreeTimes(map, app);
            JSONObject json = JSONObject.fromObject(result);
            System.out.println(json);
            JSONObject root = json.optJSONObject("tbk_dg_vegas_tlj_instance_report_response");
            if (root != null && root.optJSONObject("result") != null) {
                if (root.optJSONObject("result").optBoolean("success")) {
                    JSONObject modelJson = root.optJSONObject("result").optJSONObject("model");
                    if (modelJson != null && modelJson.size() > 0) {
                        UserTaoLiJinReport report = new UserTaoLiJinReport();
                        report.setId(rightsId);
@@ -2048,7 +2074,7 @@
                        report.setWinNum(modelJson.optInt("win_num"));
                        report.setPreCommissionAmount(new BigDecimal(modelJson.optString("pre_commission_amount")));
                        return report;
                    }
                    }
                }
            }
        } catch (Exception e) {
fanli/src/main/resource/spring.xml
@@ -142,8 +142,8 @@
    <!-- 事物 -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <tx:annotation-driven transaction-manager="transactionManager"