Authored by tanling

Merge branch 'hotfix_1018_返利活动' into test6.9.13

package com.yohoufo.common.config;
import com.alibaba.fastjson.JSON;
import com.yoho.core.config.ConfigReader;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
... ... @@ -32,6 +34,30 @@ public class UfoOrderPayConfigReader {
return new BigDecimal(configReader.getDouble("ufo.order.pay.depositRebatePerAmount", 30));
}
/**
* 返利活动的开始时间结束时间(对应的申售时间)
* @return
*/
public DepositRebateActivity getDepositRebateActivityTime(){
try {
String activity = configReader.getString("ufo.order.pay.depositRebateActivity", null);
if (activity == null) {
return null;
}
return JSON.parseObject(activity, DepositRebateActivity.class);
} catch (Exception e) {
log.error("getDepositRebateActivityTime {}", e);
return null;
}
}
@Data
public static class DepositRebateActivity{
int startTime;
int endTime;
}
public boolean transferWithWalletSwitch() {
return configReader.getBoolean("ufo.order.pay.transferWithWalletSwitch", true);
}
... ...
... ... @@ -15,7 +15,8 @@ public interface OrdersPayTransferMapper {
OrdersPayTransfer selectByPrimaryKey(Integer id);
int selectByUidAndTransferType(@Param("uid") Integer uid, @Param("transferType") Integer transferType);
int selectByUidAndTransferType(@Param("uid") Integer uid, @Param("transferType") Integer transferType,
@Param("startTime") Integer startTime, @Param("endTime") Integer endTime);
int updateByPrimaryKeySelective(OrdersPayTransfer record);
... ...
... ... @@ -53,9 +53,13 @@
<select id="selectByUidAndTransferType" resultType="java.lang.Integer" parameterType="java.lang.Integer" >
select
count(1)
from orders_pay_transfer
where uid = #{uid,jdbcType=INTEGER}
and transfer_type = #{transferType,jdbcType=INTEGER}
from orders_pay_transfer transfer, appraise_order appraise
where
transfer.buyer_order_code = appraise.order_code
and <![CDATA[appraise.create_time<=#{startTime,jdbcType=INTEGER}]]>
and <![CDATA[appraise.create_time<=#{endTime,jdbcType=INTEGER}]]>
and transfer.uid = #{uid,jdbcType=INTEGER}
and transfer.transfer_type = #{transferType,jdbcType=INTEGER}
</select>
<insert id="insert" parameterType="com.yohoufo.dal.order.model.OrdersPayTransfer" useGeneratedKeys="true" keyProperty="id" >
... ...
... ... @@ -63,7 +63,15 @@ public abstract class AbsGoodsServiceOrderService implements IGoodsService {
logger.info("depositRebate param is {}", orderCodeList);
UfoOrderPayConfigReader.DepositRebateActivity depositRebateActivity = ufoOrderPayConfigReader.getDepositRebateActivityTime();
if (depositRebateActivity == null || depositRebateActivity.getStartTime() == 0 || depositRebateActivity.getEndTime() ==0){
logger.info("deposit rebate activity not exist");
return;
}
logger.info("deposit rebate startTime is {}, endTime is {}",depositRebateActivity.getStartTime(), depositRebateActivity.getEndTime());
if (CollectionUtils.isEmpty(orderCodeList)){
logger.info("deposit rebate param null");
return;
}
... ... @@ -78,18 +86,29 @@ public abstract class AbsGoodsServiceOrderService implements IGoodsService {
if (CollectionUtils.isEmpty(appraiseOrderList)){
return;
}
List<AppraiseOrder> depositCodeList = appraiseOrderList.stream()
.filter(appraiseOrder -> appraiseOrder.getAttributes() == OrderAttributes.DEPOSITE.getCode())
.filter(appraiseOrder -> appraiseOrder.getCreateTime()<=depositRebateActivity.getEndTime() && appraiseOrder.getCreateTime()>=depositRebateActivity.getStartTime())
.collect(Collectors.toList());
if (CollectionUtils.isEmpty(depositCodeList)){
return;
}
final ExecutorService executorService = ThreadPoolFactory.getDepositRebateExecutorService();
// 只返4单
int DEFAULT_REBATE_CNT = ufoOrderPayConfigReader.depositRebateCnt();
BigDecimal rebate = ufoOrderPayConfigReader.depositRebatePerAmount();
executorService.execute(() -> {
// 只返4单
int DEFAULT_REBATE_CNT = ufoOrderPayConfigReader.depositRebateCnt();
BigDecimal rebate = ufoOrderPayConfigReader.depositRebatePerAmount();
depositCodeList.stream().forEach(depositCode -> {
int rebateCnt = ordersPayTransferMapper.selectByUidAndTransferType(depositCode.getUid(), TransferCase.DEPOSIT_REBATE_TO_USER.getCode());
// 商品的申请寄售时间(非转账时间) 在活动时间范围内返利次数上线
int rebateCnt = ordersPayTransferMapper.selectByUidAndTransferType(depositCode.getUid(), TransferCase.DEPOSIT_REBATE_TO_USER.getCode(),
depositRebateActivity.getStartTime(), depositRebateActivity.getEndTime());
logger.info("rebate transfer cnt {}, uid {}", rebateCnt, depositCode.getUid());
if (rebateCnt < DEFAULT_REBATE_CNT){
TransferCase transferCase = TransferCase.DEPOSIT_REBATE_TO_USER;
... ...