pull/1121/head
梁宇奇 2025-05-13 21:25:22 +08:00
parent 289f48ef2d
commit 7dde841e14
7 changed files with 64 additions and 24 deletions

View File

@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Optional;
/**
* @author liangyq
@ -37,8 +38,11 @@ public class ExpressController extends XktBaseController {
@ApiOperation("下单时物流选择列表 - 含快递费")
@PostMapping("listExpressFee")
public R<List<ExpressFeeVO>> listExpressFee(@Valid @RequestBody ExpressFeeReqVO vo) {
List<ExpressFeeDTO> dtoList = expressService.listExpressFee(vo.getGoodsQuantity(), vo.getProvinceCode(),
vo.getCityCode(), vo.getCountyCode());
List<ExpressFeeDTO> dtoList = expressService.listExpressFee(
Optional.ofNullable(vo.getGoodsQuantity()).orElse(1),
vo.getProvinceCode(),
vo.getCityCode(), vo.getCountyCode()
);
return success(BeanUtil.copyToList(dtoList, ExpressFeeVO.class));
}

View File

@ -4,9 +4,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
*
*
@ -17,19 +14,15 @@ import javax.validation.constraints.NotNull;
@Data
public class ExpressFeeReqVO {
@NotNull
@ApiModelProperty(value = "商品数量")
private Integer goodsQuantity;
@NotEmpty
@ApiModelProperty(value = "省编码")
private String provinceCode;
@NotEmpty
@ApiModelProperty(value = "市编码")
private String cityCode;
@NotEmpty
@ApiModelProperty(value = "区县编码")
private String countyCode;
}

View File

@ -98,7 +98,7 @@ public class StoreOrderAddReqVO {
private Integer payChannel;
@NotNull(message = "支付来源不能为空")
@ApiModelProperty(value = "支付来源[1:电脑网站 2:手机网站]")
@ApiModelProperty(value = "支付来源[1:电脑网站 2:手机网站 3:APP]")
private Integer payPage;
@ApiModel(value = "明细")

View File

@ -13,6 +13,7 @@ public enum EPayPage {
WEB(1, "电脑网站"),
WAP(2, "手机网站"),
APP(3, "APP"),
;
private final Integer value;

View File

@ -12,9 +12,7 @@ import com.alipay.api.domain.AlipayTradeQueryModel;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.domain.Participant;
import com.alipay.api.request.*;
import com.alipay.api.response.AlipayFundTransUniTransferResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import com.alipay.api.response.*;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.xkt.domain.StoreOrderDetail;
import com.ruoyi.xkt.dto.finance.AlipayReqDTO;
@ -41,7 +39,9 @@ import java.math.BigDecimal;
public class AliPaymentMangerImpl implements PaymentManager {
private static final String DEFAULT_FORMAT = "json";
private static final String PAY_PRODUCT_CODE = "FAST_INSTANT_TRADE_PAY";
private static final String PAY_PRODUCT_CODE_WEB = "FAST_INSTANT_TRADE_PAY";
private static final String PAY_PRODUCT_CODE_WAP = "QUICK_WAP_WAY";
private static final String PAY_PRODUCT_CODE_APP = "QUICK_MSECURITY_PAY";
/**
* ID,APPIDAPPID
*/
@ -98,36 +98,68 @@ public class AliPaymentMangerImpl implements PaymentManager {
reqDTO.setOutTradeNo(tradeNo);
reqDTO.setTotalAmount(amount.toPlainString());
reqDTO.setSubject(subject);
reqDTO.setProductCode(PAY_PRODUCT_CODE); //这个是固定的
String reqStr = JSON.toJSONString(reqDTO);
AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, appId, privateKey, DEFAULT_FORMAT, charset,
alipayPublicKey, signType);
switch (payPage) {
case WEB:
reqDTO.setProductCode(PAY_PRODUCT_CODE_WEB);
AlipayTradePagePayRequest webReq = new AlipayTradePagePayRequest();
webReq.setReturnUrl(returnUrl);
webReq.setNotifyUrl(notifyUrl);
webReq.setBizContent(reqStr);
webReq.setBizContent(JSON.toJSONString(reqDTO));
try {
return alipayClient.pageExecute(webReq).getBody();
AlipayTradePagePayResponse webResp = alipayClient.pageExecute(webReq);
if (webResp.isSuccess()) {
return webResp.getBody();
}else {
String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(webResp);
log.error("支付发起失败: {}", diagnosisUrl);
}
} catch (AlipayApiException e) {
log.error("支付发起异常", e);
throw new ServiceException("支付发起失败");
log.error("WEB支付发起异常", e);
}
break;
case WAP:
reqDTO.setProductCode(PAY_PRODUCT_CODE_WAP);
AlipayTradeWapPayRequest wapReq = new AlipayTradeWapPayRequest();
wapReq.setReturnUrl(returnUrl);
wapReq.setNotifyUrl(notifyUrl);
wapReq.setBizContent(reqStr);
wapReq.setBizContent(JSON.toJSONString(reqDTO));
try {
return alipayClient.pageExecute(wapReq).getBody();
AlipayTradeWapPayResponse wapResp = alipayClient.pageExecute(wapReq);
if (wapResp.isSuccess()) {
return wapResp.getBody();
}else {
String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(wapResp);
log.error("支付发起失败: {}", diagnosisUrl);
}
} catch (AlipayApiException e) {
log.error("支付发起异常", e);
throw new ServiceException("支付发起失败");
log.error("WAP支付发起异常", e);
}
break;
case APP:
reqDTO.setProductCode(PAY_PRODUCT_CODE_APP);
AlipayTradeAppPayRequest appReq = new AlipayTradeAppPayRequest();
appReq.setReturnUrl(returnUrl);
appReq.setNotifyUrl(notifyUrl);
appReq.setBizContent(JSON.toJSONString(reqDTO));
try {
AlipayTradeAppPayResponse appResp = alipayClient.sdkExecute(appReq);
if (appResp.isSuccess()) {
return appResp.getBody();
} else {
String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(appResp);
log.error("支付发起失败: {}", diagnosisUrl);
}
} catch (AlipayApiException e) {
log.error("APP支付发起异常", e);
}
break;
default:
throw new ServiceException("未知的支付来源");
}
throw new ServiceException("支付发起失败");
}
@Override

View File

@ -88,6 +88,11 @@ public class ExpressServiceImpl implements IExpressService {
.eq(SimpleEntity::getDelFlag, Constants.UNDELETED));
return expresses.stream().map(e -> {
ExpressFeeDTO dto = BeanUtil.toBean(e, ExpressFeeDTO.class);
if (StrUtil.isEmpty(provinceCode)
|| StrUtil.isEmpty(cityCode)
|| StrUtil.isEmpty(countyCode)) {
return dto;
}
ExpressFeeConfig feeConfig = getExpressFeeConfig(e.getId(), provinceCode, cityCode, countyCode);
Assert.notNull(feeConfig, "获取快递费用异常");
BigDecimal fee;

View File

@ -137,8 +137,13 @@ public class UserAddressServiceImpl implements IUserAddressService {
@Override
public void deleteUserAddress(Long id) {
Assert.notNull(id);
UserAddress origin = userAddressMapper.selectById(id);
if (origin == null) {
return;
}
UserAddress userAddress = new UserAddress();
userAddress.setId(id);
userAddress.setVersion(origin.getVersion());
userAddress.setDelFlag(Constants.DELETED);
userAddressMapper.updateById(userAddress);
}