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"