Sfoglia il codice sorgente

tt

release_toaliyun_real
xhxu 5 anni fa
parent
commit
2b43cc460f
10 ha cambiato i file con 130 aggiunte e 48 eliminazioni
  1. +3
    -1
      mallinkAdmin/src/main/resources/db/migration/V202105270001__tt_add_.sql
  2. +2
    -0
      mallinkService/src/main/java/com/iformall/common/ErrorCode.java
  3. +3
    -0
      mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java
  4. +4
    -2
      mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java
  5. +2
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java
  6. +8
    -0
      mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java
  7. +59
    -22
      mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java
  8. +19
    -7
      mallinkService/src/main/resources/mapper/TtOrderMapper.xml
  9. +7
    -0
      mallinkService/src/main/resources/mapper/WxMerchantMapper.xml
  10. +23
    -16
      mallinkTTCApi/src/main/java/com/iformall/schedule/TtOrderExpiringSchedule.java

+ 3
- 1
mallinkAdmin/src/main/resources/db/migration/V202105270001__tt_add_.sql Vedi File

@@ -8,4 +8,6 @@ ALTER TABLE `wx_merchant`
ADD COLUMN `mark` smallint(1) COMMENT '记号' AFTER `action_desc`;

ALTER TABLE `wx_merchant`
ADD COLUMN `entry_amount` int(11) COMMENT '入账金额' AFTER `credit_locked`;
ADD COLUMN `entry_amount` int(11) DEFAULT 0 COMMENT '入账金额' AFTER `credit_locked`;

UPDATE wx_merchant SET entry_amount = 0 ;

+ 2
- 0
mallinkService/src/main/java/com/iformall/common/ErrorCode.java Vedi File

@@ -203,6 +203,8 @@ public enum ErrorCode{
ORDER_USER_NOT_MATCH(2013, "订单用户不匹配"),
ORDER_COUPON_CHANNEL_NOT_MATCH(2014, "订单渠道不匹配"),
ORDER_COUPON_NOT_MATCH(2015, "订单券不匹配"),
ORDER_RECORDED_AMOUNT(2016, "已入账"),
ORDER_RECORDED_AMOUNT_ERROR(2017, "入账失败"),

/**
* 卡券


+ 3
- 0
mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java Vedi File

@@ -62,6 +62,9 @@ public class TtOrder extends TenantEntity {
@io.swagger.annotations.ApiModelProperty(value="是否入账",name="isRecorded")
private Integer isRecorded;

@io.swagger.annotations.ApiModelProperty(value="入账时间",name="recordedDate")
private Date recordedDate;


public String getPaymentStr() {
return payment != null ? new BigDecimal(payment).divide(new BigDecimal(100)).toPlainString() : paymentStr;


+ 4
- 2
mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java Vedi File

@@ -21,7 +21,9 @@ public interface TtOrderMapper extends CommonMapper<TtOrder, Long> {

Integer findListCount(TtOrder orderQ);

int updateExpire(@Param("expireDate")Date expireDate,@Param("orderStatus") Integer orderStatus);
// int updateExpire(@Param("expireDate")Date expireDate,@Param("orderStatus") Integer orderStatus);

List<Long> findExpireIdList(@Param("expireDate")Date expireDate,@Param("orderStatus") Integer orderStatus);
List<Long> findBeforeIdList(@Param("beforeDate")Date beforeDate,@Param("orderStatus") Integer orderStatus,@Param("isRecorded") Integer isRecorded);

int updateIsRecorded(@Param("id")Long id, @Param("isRecorded")Integer isRecorded);
}

+ 2
- 0
mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java Vedi File

@@ -55,4 +55,6 @@ public interface WxMerchantMapper extends CommonMapper<WxMerchant, Long> {
WxMerchant getMerchantByEncode(@Param("encode")String encode);

List<WxMerchant> findFollowList(WxMerchant record);

int recordedAmount(WxMerchant record);
}

+ 8
- 0
mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java Vedi File

@@ -40,4 +40,12 @@ public interface TtOrderService {
boolean isByMember(Long memberId, Long id);

List<Long> findExpireIdList(Date expireDate);

List<Long> findRecordedIdList(Date recordedDate);

/**
* 入账
* @return
*/
ResultData recordedAmount(Long orderId);
}

+ 59
- 22
mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java Vedi File

@@ -297,29 +297,31 @@ public class TtOrderServiceImpl implements TtOrderService {
OrderQueryResult orderQueryResult = DouYinPayHelper.orderQuery(appInfo.getAppId(), payAccount.getApiKey(), order.getId().toString(), null);
if(orderQueryResult == null){
msg = "查询-单号不存在";
}
String trade_state = orderQueryResult.getOrderStatus();
if ("PROCESSING".equals(trade_state)) {//处理中
msg = "查询-处理中";
}else if ("SUCCESS".equals(trade_state)) {//成功
TtOrder orderSuc = new TtOrder();
orderSuc.setId(order.getId());
orderSuc.setOrderStatus(EnumTtOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode());
orderSuc.setWay(orderQueryResult.getWay());
orderSuc.setPaymentTime(orderQueryResult.getPayTime());
orderSuc.setUpdateDate(new Date());
ttOrderMapper.updateById(orderSuc);
ttcouponMapper.addSellCount(order.getProductId());

redisLock.unlock(lockKey, timeStr);
return new ResultData();
}else if ("FAIL".equals(trade_state)) {//失败
msg = "查询-支付失败";
}else if ("TIMEOUT".equals(trade_state)) {//超时
msg = "查询-支付超时";
}else{
msg = "查询-单号异常";
String trade_state = orderQueryResult.getOrderStatus();
if ("PROCESSING".equals(trade_state)) {//处理中
msg = "查询-处理中";
}else if ("SUCCESS".equals(trade_state)) {//成功
TtOrder orderSuc = new TtOrder();
orderSuc.setId(order.getId());
orderSuc.setOrderStatus(EnumTtOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode());
orderSuc.setWay(orderQueryResult.getWay());
orderSuc.setPaymentTime(orderQueryResult.getPayTime());
orderSuc.setUpdateDate(new Date());
ttOrderMapper.updateById(orderSuc);
ttcouponMapper.addSellCount(order.getProductId());

redisLock.unlock(lockKey, timeStr);
return new ResultData();
}else if ("FAIL".equals(trade_state)) {//失败
msg = "查询-支付失败";
}else if ("TIMEOUT".equals(trade_state)) {//超时
msg = "查询-支付超时";
}else{
msg = "查询-单号异常";
}
}

if(isExpire){
TtOrder orderSuc = new TtOrder();
orderSuc.setId(order.getId());
@@ -386,7 +388,42 @@ public class TtOrderServiceImpl implements TtOrderService {

@Override
public List<Long> findExpireIdList(Date expireDate) {
return ttOrderMapper.findExpireIdList(expireDate,EnumTtOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode());
return ttOrderMapper.findBeforeIdList(expireDate,EnumTtOrderStatus.ORDER_STATUS_PENDING_PAYMENT.getCode(),null);
}

@Override
public List<Long> findRecordedIdList(Date recordedDate) {
return ttOrderMapper.findBeforeIdList(recordedDate,EnumTtOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode(),EnumYesOrNo.NO.getCode());
}

@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public ResultData recordedAmount(Long orderId) {
TtOrder order = ttOrderMapper.selectById(orderId);
if (null == order) {
logger.error("pay order, order not allow, orderId: " + orderId);
return new ResultData(ErrorCode.ORDER_IS_NOT_FIND);
}
if(order.getOrderStatus() == EnumTtOrderStatus.ORDER_STATUS_PAYMENT_SUCCESS.getCode()){
if(order.getIsRecorded() == null || !order.getIsRecorded().equals(EnumYesOrNo.YES.getCode())){
WxMerchant merchant = new WxMerchant();
merchant.setId(order.getMerchantId());
merchant.setEntryAmount(order.getPayment());
merchant.setCashOutNumber(order.getPayment());
int i = wxMerchantMapper.recordedAmount(merchant);
if(i == 1){
ttOrderMapper.updateIsRecorded(order.getId(),EnumYesOrNo.YES.getCode());
return new ResultData();
}else{
throw new MallinkException(ErrorCode.ORDER_RECORDED_AMOUNT_ERROR);
}
}else{
return new ResultData(ErrorCode.ORDER_RECORDED_AMOUNT);
}

}else{
return new ResultData(ErrorCode.PAY_ORDER_NOT_PAY,"订单不是支付状态");
}
}

}

+ 19
- 7
mallinkService/src/main/resources/mapper/TtOrderMapper.xml Vedi File

@@ -21,6 +21,8 @@
<result column="create_date" jdbcType="TIMESTAMP" property="createDate"/>
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate"/>
<result column="is_recorded" jdbcType="INTEGER" property="isRecorded"/>
<result column="recorded_date" jdbcType="TIMESTAMP" property="recordedDate"/>


<result column="nick_name" jdbcType="VARCHAR" property="nickName"/>
<result column="phone" jdbcType="VARCHAR" property="phone"/>
@@ -30,7 +32,7 @@

<sql id="allColumns">
o.`id`,o.`tenant_id`,o.`parent_tenant_id`,o.`c_user_id`,o.`product_id`,o.`type`,o.`way`,o.`payment_type`,o.`payment`,
o.`payment_time`,o.`order_status`,o.`create_date`,o.`update_date`,o.`is_recorded`,
o.`payment_time`,o.`order_status`,o.`create_date`,o.`update_date`,o.`is_recorded`,o.`recorded_date`,
u.`nick_name`,u.`phone`,
o.`product_title`,o.`product_pic`,o.`product_sale_price`,
m.`name` author,m.`img_url` author_pic
@@ -81,6 +83,10 @@
and o.`order_status` = #{orderStatus}
</if>

<if test=" null != isRecorded ">
and o.`is_recorded` = #{isRecorded}
</if>

<if test=" null != nickName ">
and u.`nick_name` like concat('%', #{nickName},'%')
</if>
@@ -163,6 +169,10 @@
and o.`product_id` = #{productId}
</if>

<if test=" null != productTitle ">
and o.`product_title` like concat('%', #{productTitle},'%')
</if>

<if test=" null != type ">
and o.`type` = #{type}
</if>
@@ -241,15 +251,17 @@
</if>
</select>

<update id="updateExpire" parameterType="java.util.HashMap">
update tt_order set order_status = #{orderStatus},update_date = now()
where orderStatus=0 and create_date &lt; #{expireDate}
</update>

<select id="findExpireIdList" parameterType="java.util.HashMap" resultType="Long">
select id
from tt_order
where orderStatus=#{orderStatus} and create_date &lt; #{expireDate}
where order_status=#{orderStatus} and create_date &lt;= #{beforeDate}
<if test=" null != isRecorded ">
and `is_recorded` = #{isRecorded}
</if>
</select>

<update id="updateIsRecorded" parameterType="java.util.HashMap">
update tt_order set `is_recorded` = #{isRecorded},recorded_date = now() where id = #{id}
</update>

</mapper>

+ 7
- 0
mallinkService/src/main/resources/mapper/WxMerchantMapper.xml Vedi File

@@ -688,4 +688,11 @@
update wx_merchant set cash_out_count = 0 where id = #{id}
</update>

<update id="recordedAmount" parameterType="com.iformall.domain.po.WxMerchant">
update wx_merchant set
entry_amount = ifnull(entry_amount,0)+#{entryAmount},
cash_out_number = ifnull(cash_out_number,0)+#{cashOutNumber}
where id = #{id}
</update>

</mapper>

+ 23
- 16
mallinkTTCApi/src/main/java/com/iformall/schedule/TtOrderExpiringSchedule.java Vedi File

@@ -1,15 +1,14 @@
package com.iformall.schedule;

import com.iformall.domain.po.WxAppinfo;
import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.po.WxPayAccount;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.*;
import com.iformall.mapper.*;
import com.iformall.service.WxAppinfoService;
import com.iformall.service.WxPayAccountService;
import com.iformall.service.tt.TtOrderService;
import com.iformall.utils.Constant;
import com.iformall.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,10 +30,8 @@ public class TtOrderExpiringSchedule {
private WxPayAccountService payAccountService;

@Autowired
TtOrderService ttOrderService;
private TtOrderService ttOrderService;

@Autowired
WxMerchantMapper wxMerchantMapper;

private TenantEntity getTenantInfo() {
TenantEntity tenantEntity = new TenantEntity() ;
@@ -44,20 +41,20 @@ public class TtOrderExpiringSchedule {

@Scheduled(cron = "0 */10 * * * *?") // 每10分钟检查一次
public void orderExpireSchedule() {

WxAppinfo cAppInfo = wxAppinfoService.getCAppInfo(getTenantInfo(), EnumPayWay.PAY_WAY_TT);
if(cAppInfo == null){
return;
}
WxPayAccount payAccout = payAccountService.getById(cAppInfo.getId());
if(payAccout == null){
return;
}

Date now = new Date();
Date expireDate = new Date(now.getTime() - Constant.PRESS_TIME_OUT );
List<Long> idList = ttOrderService.findExpireIdList(expireDate);
if(idList != null && idList.size() > 0){

WxAppinfo cAppInfo = wxAppinfoService.getCAppInfo(getTenantInfo(), EnumPayWay.PAY_WAY_TT);
if(cAppInfo == null){
return;
}
WxPayAccount payAccout = payAccountService.getById(cAppInfo.getId());
if(payAccout == null){
return;
}

for (Long orderId:idList) {
try {
ttOrderService.updateOrderStatus(orderId,cAppInfo,payAccout);
@@ -72,7 +69,17 @@ public class TtOrderExpiringSchedule {

@Scheduled(cron = "0 0 4 * * ?") //每天四点入账
public void orderRecordedSchedule() {

Date dateZero = DateUtils.getDateZero(new Date());
List<Long> idList = ttOrderService.findRecordedIdList(dateZero);
if(idList != null && idList.size() > 0){
for (Long orderId:idList) {
try {
ttOrderService.recordedAmount(orderId);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

}

Caricamento…
Annulla
Salva