From 2b43cc460f7d552209b3966154112d62bd33158a Mon Sep 17 00:00:00 2001 From: xhxu Date: Sat, 29 May 2021 18:49:24 +0800 Subject: [PATCH] tt --- .../db/migration/V202105270001__tt_add_.sql | 4 +- .../java/com/iformall/common/ErrorCode.java | 2 + .../com/iformall/domain/po/tt/TtOrder.java | 3 + .../com/iformall/mapper/TtOrderMapper.java | 6 +- .../com/iformall/mapper/WxMerchantMapper.java | 2 + .../iformall/service/tt/TtOrderService.java | 8 ++ .../service/tt/impl/TtOrderServiceImpl.java | 81 ++++++++++++++----- .../main/resources/mapper/TtOrderMapper.xml | 26 ++++-- .../resources/mapper/WxMerchantMapper.xml | 7 ++ .../schedule/TtOrderExpiringSchedule.java | 39 +++++---- 10 files changed, 130 insertions(+), 48 deletions(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V202105270001__tt_add_.sql b/mallinkAdmin/src/main/resources/db/migration/V202105270001__tt_add_.sql index 8b0981ac0..d8d40f5a9 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202105270001__tt_add_.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202105270001__tt_add_.sql @@ -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`; \ No newline at end of file +ADD COLUMN `entry_amount` int(11) DEFAULT 0 COMMENT '入账金额' AFTER `credit_locked`; + +UPDATE wx_merchant SET entry_amount = 0 ; diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index a23338520..b4bd65396 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -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, "入账失败"), /** * 卡券 diff --git a/mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java index 501540755..c6747f213 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/tt/TtOrder.java @@ -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; diff --git a/mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java b/mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java index 5be34c539..b620bba0d 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/TtOrderMapper.java @@ -21,7 +21,9 @@ public interface TtOrderMapper extends CommonMapper { 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 findExpireIdList(@Param("expireDate")Date expireDate,@Param("orderStatus") Integer orderStatus); + List findBeforeIdList(@Param("beforeDate")Date beforeDate,@Param("orderStatus") Integer orderStatus,@Param("isRecorded") Integer isRecorded); + + int updateIsRecorded(@Param("id")Long id, @Param("isRecorded")Integer isRecorded); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java index 7db44f2f4..9505db9b8 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxMerchantMapper.java @@ -55,4 +55,6 @@ public interface WxMerchantMapper extends CommonMapper { WxMerchant getMerchantByEncode(@Param("encode")String encode); List findFollowList(WxMerchant record); + + int recordedAmount(WxMerchant record); } diff --git a/mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java b/mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java index 0bb884f75..9150bad5f 100644 --- a/mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/tt/TtOrderService.java @@ -40,4 +40,12 @@ public interface TtOrderService { boolean isByMember(Long memberId, Long id); List findExpireIdList(Date expireDate); + + List findRecordedIdList(Date recordedDate); + + /** + * 入账 + * @return + */ + ResultData recordedAmount(Long orderId); } diff --git a/mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java index f1b695804..433905a7a 100644 --- a/mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/tt/impl/TtOrderServiceImpl.java @@ -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 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 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,"订单不是支付状态"); + } } } diff --git a/mallinkService/src/main/resources/mapper/TtOrderMapper.xml b/mallinkService/src/main/resources/mapper/TtOrderMapper.xml index 748d1c2a4..89c828b7e 100644 --- a/mallinkService/src/main/resources/mapper/TtOrderMapper.xml +++ b/mallinkService/src/main/resources/mapper/TtOrderMapper.xml @@ -21,6 +21,8 @@ + + @@ -30,7 +32,7 @@ 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} + + and o.`is_recorded` = #{isRecorded} + + and u.`nick_name` like concat('%', #{nickName},'%') @@ -163,6 +169,10 @@ and o.`product_id` = #{productId} + + and o.`product_title` like concat('%', #{productTitle},'%') + + and o.`type` = #{type} @@ -241,15 +251,17 @@ - - update tt_order set order_status = #{orderStatus},update_date = now() - where orderStatus=0 and create_date < #{expireDate} - - + + update tt_order set `is_recorded` = #{isRecorded},recorded_date = now() where id = #{id} + + diff --git a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml index 15c86fa6d..a13869957 100644 --- a/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxMerchantMapper.xml @@ -688,4 +688,11 @@ update wx_merchant set cash_out_count = 0 where id = #{id} + + update wx_merchant set + entry_amount = ifnull(entry_amount,0)+#{entryAmount}, + cash_out_number = ifnull(cash_out_number,0)+#{cashOutNumber} + where id = #{id} + + diff --git a/mallinkTTCApi/src/main/java/com/iformall/schedule/TtOrderExpiringSchedule.java b/mallinkTTCApi/src/main/java/com/iformall/schedule/TtOrderExpiringSchedule.java index 10af093b0..a2a9214cf 100644 --- a/mallinkTTCApi/src/main/java/com/iformall/schedule/TtOrderExpiringSchedule.java +++ b/mallinkTTCApi/src/main/java/com/iformall/schedule/TtOrderExpiringSchedule.java @@ -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 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 idList = ttOrderService.findRecordedIdList(dateZero); + if(idList != null && idList.size() > 0){ + for (Long orderId:idList) { + try { + ttOrderService.recordedAmount(orderId); + } catch (Exception e) { + e.printStackTrace(); + } + } + } } } \ No newline at end of file