钱包导出时间不对、第三方扣款
This commit is contained in:
1 parent
8e6d2c6f01
commit
31fe4d3bb4
24 files changed
+369
-121
No files matched your search
+1
@@ -17,6 +17,7 @@ public enum HardOrderTypeEnum {
|
||||
RESERVE("2", "线上订餐"),
|
||||
FOREIGN_TICKET("3", "外来人员"),
|
||||
STRIDE_DEPT("4", "跨单位"),
|
||||
ZY("5", "正元公务餐"),
|
||||
;
|
||||
private final String type;
|
||||
private final String description;
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.bsd.pjcloud.hard.api.constant.third;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.bsd.pjcloud.hard.api.constant.HardPrintStatusEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum HardCallbackPayStatus {
|
||||
SUCCESS("0", "省平台认为流水交易完成,扣费成功"),
|
||||
REPETITION("0001", "省平台则会每天定时重新发起扣费流程"),
|
||||
ERROR("0002", "省平台则不再扣费,认为是坏账"),
|
||||
NOT_SUFFICIENT_FUNDS("0003", "余额不足返回,省平台将会禁止该账户后续交易权限"),
|
||||
;
|
||||
private final String type;
|
||||
private final String description;
|
||||
|
||||
public static HardCallbackPayStatus valueOfByType(String type) {
|
||||
if (ObjectUtil.isEmpty(type)) return null;
|
||||
return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get();
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.bsd.pjcloud.hard.api.dto.third;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class HardCallbackPayDto {
|
||||
|
||||
private Long userId;
|
||||
|
||||
private Integer payPrice;
|
||||
|
||||
private LocalDateTime payTime;
|
||||
|
||||
private String orderNo;
|
||||
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.bsd.pjcloud.hard.api.dto.third;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class HardCallbackRefundDto {
|
||||
}
|
||||
+7
-2
@@ -1,19 +1,24 @@
|
||||
package com.bsd.pjcloud.hard.api.feign;
|
||||
|
||||
import com.bsd.pjcloud.common.core.constant.ServiceNameConstants;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.feign.annotation.NoToken;
|
||||
import com.bsd.pjcloud.hard.api.dto.third.HardCallbackPayDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.third.HardCallbackRefundDto;
|
||||
import com.bsd.pjcloud.hard.api.vo.third.HardCallbackPayVo;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
@FeignClient(contextId = "remoteHardThirdSelfZyService", value = ServiceNameConstants.HARDWARE_SERVICE)
|
||||
public interface RemoteHardThirdSelfZyService {
|
||||
|
||||
@NoToken
|
||||
@PostMapping("/hard-third-callback/pay")
|
||||
void pay();
|
||||
R<HardCallbackPayVo> pay(@RequestBody HardCallbackPayDto dto);
|
||||
|
||||
@NoToken
|
||||
@PostMapping("/hard-third-callback/refund")
|
||||
void refund();
|
||||
String refund(@RequestBody HardCallbackRefundDto dto);
|
||||
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
package com.bsd.pjcloud.hard.api.vo.third;
|
||||
|
||||
import com.bsd.pjcloud.hard.api.constant.third.HardCallbackPayStatus;
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
public class HardCallbackPayVo {
|
||||
|
||||
private Long orderId;
|
||||
|
||||
private HardCallbackPayStatus code;
|
||||
|
||||
private LocalDateTime payTime;
|
||||
|
||||
private Long userId;
|
||||
|
||||
private String username;
|
||||
}
|
||||
+1
-1
@@ -166,7 +166,7 @@ public class HardOrderController {
|
||||
if (ObjectUtil.isNotEmpty(dto.getPayTimeList())) {
|
||||
map.put("timeSpan", " 到 ");
|
||||
map.put("startTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN));
|
||||
map.put("endTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN));
|
||||
map.put("endTime", LocalDateTimeUtil.format(dto.getPayTimeList()[1], DatePattern.NORM_DATETIME_PATTERN));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(excelList)) {
|
||||
BigDecimal totalPriceSum = BigDecimal.ZERO;
|
||||
|
||||
+2
-2
@@ -85,7 +85,7 @@ public class HardOrderTotalController {
|
||||
if (ObjectUtil.isNotEmpty(dto.getPayTimeList())) {
|
||||
map.put("timeSpan", " 到 ");
|
||||
map.put("startTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN));
|
||||
map.put("endTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN));
|
||||
map.put("endTime", LocalDateTimeUtil.format(dto.getPayTimeList()[1], DatePattern.NORM_DATETIME_PATTERN));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(list)) {
|
||||
BigDecimal priceTotal = BigDecimal.ZERO;
|
||||
@@ -128,7 +128,7 @@ public class HardOrderTotalController {
|
||||
if (ObjectUtil.isNotEmpty(dto.getPayTimeList())) {
|
||||
map.put("timeSpan", " 到 ");
|
||||
map.put("startTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN));
|
||||
map.put("endTime", LocalDateTimeUtil.format(dto.getPayTimeList()[0], DatePattern.NORM_DATETIME_PATTERN));
|
||||
map.put("endTime", LocalDateTimeUtil.format(dto.getPayTimeList()[1], DatePattern.NORM_DATETIME_PATTERN));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(list)) {
|
||||
BigDecimal priceTotal = BigDecimal.ZERO;
|
||||
|
||||
+8
-15
@@ -1,22 +1,17 @@
|
||||
package com.bsd.pjcloud.hard.controller.third;
|
||||
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.common.idempotent.annotation.Idempotent;
|
||||
import com.bsd.pjcloud.common.log.annotation.SysLog;
|
||||
import com.bsd.pjcloud.common.security.annotation.Inner;
|
||||
import com.bsd.pjcloud.hard.api.dto.third.HardCallbackPayDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.third.HardCallbackRefundDto;
|
||||
import com.bsd.pjcloud.hard.api.vo.third.HardCallbackPayVo;
|
||||
import com.bsd.pjcloud.hard.service.HardThirdSelfZyService;
|
||||
import com.bsd.pjcloud.wallet.api.vo.MchManageVo;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Map;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@@ -29,20 +24,18 @@ public class HardThirdSelfZyController {
|
||||
|
||||
/* ************************************* start 远程调用 start ************************************* */
|
||||
|
||||
@Inner(value = false)
|
||||
@PostMapping("/pay")
|
||||
@SysLog("正元支付")
|
||||
@Operation(summary = "正元支付")
|
||||
public void pay() {
|
||||
hardThirdSelfZyService.pay();
|
||||
public R<HardCallbackPayVo> pay(@RequestBody HardCallbackPayDto dto) {
|
||||
return R.ok(hardThirdSelfZyService.pay(dto));
|
||||
}
|
||||
|
||||
@Inner(value = false)
|
||||
@PostMapping("/refund")
|
||||
@SysLog("正元退款")
|
||||
@Operation(summary = "正元退款")
|
||||
public void refund() {
|
||||
hardThirdSelfZyService.refund();
|
||||
public String refund(@RequestBody HardCallbackRefundDto dto) {
|
||||
return hardThirdSelfZyService.refund(dto);
|
||||
}
|
||||
|
||||
/* ************************************* end 远程调用 end ************************************* */
|
||||
|
||||
+6
-3
@@ -1,16 +1,19 @@
|
||||
package com.bsd.pjcloud.hard.service;
|
||||
|
||||
import java.util.Map;
|
||||
import com.bsd.pjcloud.common.core.util.R;
|
||||
import com.bsd.pjcloud.hard.api.dto.third.HardCallbackPayDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.third.HardCallbackRefundDto;
|
||||
import com.bsd.pjcloud.hard.api.vo.third.HardCallbackPayVo;
|
||||
|
||||
public interface HardThirdSelfZyService {
|
||||
|
||||
/**
|
||||
* 正元支付
|
||||
*/
|
||||
void pay();
|
||||
HardCallbackPayVo pay(HardCallbackPayDto dto);
|
||||
|
||||
/**
|
||||
* 正元退款
|
||||
*/
|
||||
void refund();
|
||||
String refund(HardCallbackRefundDto dto);
|
||||
}
|
||||
+77
-4
@@ -1,11 +1,28 @@
|
||||
package com.bsd.pjcloud.hard.service.impl.hard;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.order.HardOrderStatusEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.third.HardCallbackPayStatus;
|
||||
import com.bsd.pjcloud.hard.api.dto.third.HardCallbackPayDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.third.HardCallbackRefundDto;
|
||||
import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity;
|
||||
import com.bsd.pjcloud.hard.api.vo.third.HardCallbackPayVo;
|
||||
import com.bsd.pjcloud.hard.service.HardOrderService;
|
||||
import com.bsd.pjcloud.hard.service.HardThirdSelfZyService;
|
||||
import com.bsd.pjcloud.wallet.api.constant.WalletTypeEnum;
|
||||
import com.bsd.pjcloud.wallet.api.entity.WalletManageEntity;
|
||||
import com.bsd.pjcloud.wallet.api.feign.RemoteWalletService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
|
||||
@Validated
|
||||
@Slf4j
|
||||
@@ -13,14 +30,70 @@ import org.springframework.validation.annotation.Validated;
|
||||
@Service
|
||||
public class HardThirdSelfZyServiceImpl implements HardThirdSelfZyService {
|
||||
|
||||
@Override
|
||||
public void pay() {
|
||||
private static final String TAG = "硬件正元回调";
|
||||
|
||||
private final RemoteWalletService remoteWalletService;
|
||||
|
||||
private final HardOrderService hardOrderService;
|
||||
|
||||
/**
|
||||
* 正元支付
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public HardCallbackPayVo pay(HardCallbackPayDto dto) {
|
||||
// 钱包
|
||||
try {
|
||||
WalletManageEntity wallet = remoteWalletService.getWallet(dto.getUserId(), WalletTypeEnum.EAT).getData();
|
||||
if (ObjectUtil.isEmpty(wallet)) throw new RuntimeException("用户钱包不存在");
|
||||
Integer balance = wallet.getBalance();
|
||||
int totalPrice = dto.getPayPrice();
|
||||
if (balance < totalPrice) {
|
||||
HardCallbackPayVo res = new HardCallbackPayVo();
|
||||
res.setCode(HardCallbackPayStatus.NOT_SUFFICIENT_FUNDS);
|
||||
return res;
|
||||
}
|
||||
String subject = "正元公务餐扣款";
|
||||
// 添加硬件订单
|
||||
HardOrderEntity orderObj = HardOrderEntity.builder()
|
||||
.userId(dto.getUserId())
|
||||
.parentCarId(null)
|
||||
.sysType(null)
|
||||
.orderStatus(HardOrderStatusEnum.PAY.getType())
|
||||
.merchantId(null)
|
||||
.orderType(HardOrderTypeEnum.ZY.getType())
|
||||
.payType(HardOrderTypeEnum.RESERVE.getType())
|
||||
.orderSourceTypeId(null)
|
||||
.totalPrice(totalPrice)
|
||||
.extraPrice(0)
|
||||
.payPrice(totalPrice)
|
||||
.isOfflineOrder(YesNoEnum.NO.getCode())
|
||||
.productDesc(subject)
|
||||
.walletId(wallet.getId())
|
||||
.build();
|
||||
boolean isCreateOrder = hardOrderService.save(orderObj);
|
||||
if (!isCreateOrder) throw new RuntimeException("创建订单失败");
|
||||
hardOrderService.fastReduceBalance(orderObj);
|
||||
HardCallbackPayVo result = new HardCallbackPayVo();
|
||||
result.setCode(HardCallbackPayStatus.SUCCESS);
|
||||
result.setOrderId(orderObj.getId());
|
||||
result.setPayTime(LocalDateTime.now());
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
log.error("|{}|意外得错误dto:|{}|", TAG, JSONUtil.toJsonStr(dto), e);
|
||||
HardCallbackPayVo result = new HardCallbackPayVo();
|
||||
result.setCode(HardCallbackPayStatus.REPETITION);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 正元退款
|
||||
*/
|
||||
@Override
|
||||
public void refund() {
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public String refund(HardCallbackRefundDto dto) {
|
||||
return "-1";
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user