dy-hu
3 years ago
9 changed files with 584 additions and 17 deletions
-
67yshop-mall/src/main/java/co/yixiang/modules/order/param/CashierOrderParam.java
-
8yshop-mall/src/main/java/co/yixiang/modules/order/service/YxStoreOrderCartInfoService.java
-
10yshop-mall/src/main/java/co/yixiang/modules/order/service/YxStoreOrderService.java
-
31yshop-mall/src/main/java/co/yixiang/modules/order/service/dto/CashierOrderExtendDto.java
-
22yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderCartInfoServiceImpl.java
-
196yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java
-
5yshop-mall/src/main/java/co/yixiang/modules/order/vo/ComputeCashierVo.java
-
70yshop-shop/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java
-
192yshop-shop/src/main/java/co/yixiang/modules/services/CashierOrderSupplyService.java
@ -0,0 +1,67 @@ |
|||
package co.yixiang.modules.order.param; |
|||
|
|||
import co.yixiang.modules.order.service.dto.CashierProductDto; |
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.Data; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
import javax.validation.constraints.Size; |
|||
import java.io.Serializable; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 描述: |
|||
* |
|||
* @author stevenhu |
|||
* @version 2021/10/18 11:44 |
|||
*/ |
|||
@Data |
|||
public class CashierOrderParam implements Serializable { |
|||
|
|||
@ApiModelProperty(value = "下单产品") |
|||
private List<CashierProductDto> products; |
|||
|
|||
// @ApiModelProperty(value = "砍价产品ID") |
|||
// private String bargainId; |
|||
// |
|||
// @ApiModelProperty(value = "拼团ID") |
|||
// private String combinationId; |
|||
|
|||
@ApiModelProperty(value = "优惠券ID") |
|||
private String couponId; |
|||
|
|||
@ApiModelProperty(value = "来源") |
|||
private String from; |
|||
|
|||
@Size(max = 200,message = "长度超过了限制") |
|||
@ApiModelProperty(value = "备注") |
|||
private String mark; |
|||
|
|||
@NotBlank(message="请选择支付方式") |
|||
@ApiModelProperty(value = "支付方式") |
|||
private String payType; |
|||
|
|||
@ApiModelProperty(value = "门店电话") |
|||
private String phone; |
|||
|
|||
// @ApiModelProperty(value = "拼团id 0没有拼团") |
|||
// private String pinkId; |
|||
|
|||
@ApiModelProperty(value = "门店联系人") |
|||
private String realName; |
|||
|
|||
// @ApiModelProperty(value = "秒杀产品ID") |
|||
// private String seckillId; |
|||
|
|||
@ApiModelProperty(value = "配送方式 1=快递 ,2=门店自提") |
|||
private String shippingType; |
|||
|
|||
@ApiModelProperty(value = "使用积分 1-表示使用") |
|||
private String useIntegral; |
|||
|
|||
@ApiModelProperty(value = "支付渠道(0微信公众号1微信小程序) ") |
|||
private String isChannel; |
|||
|
|||
@ApiModelProperty(value = "门店ID") |
|||
private String storeId; |
|||
} |
@ -0,0 +1,31 @@ |
|||
package co.yixiang.modules.order.service.dto; |
|||
|
|||
import io.swagger.annotations.ApiModelProperty; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.Builder; |
|||
import lombok.Data; |
|||
import lombok.NoArgsConstructor; |
|||
|
|||
import java.io.Serializable; |
|||
import java.util.Map; |
|||
/** |
|||
* 描述: |
|||
* |
|||
* @author stevenhu |
|||
* @version 2021/10/18 14:16 |
|||
*/ |
|||
@Data |
|||
@AllArgsConstructor |
|||
@NoArgsConstructor |
|||
@Builder |
|||
public class CashierOrderExtendDto implements Serializable { |
|||
|
|||
@ApiModelProperty(value = "唯一的key") |
|||
private String key; |
|||
|
|||
@ApiModelProperty(value = "订单ID") |
|||
private String orderId; |
|||
|
|||
@ApiModelProperty(value = "微信相关配置") |
|||
private Map<String,String> jsConfig; |
|||
} |
@ -0,0 +1,192 @@ |
|||
package co.yixiang.modules.services; |
|||
|
|||
import cn.hutool.core.util.ObjectUtil; |
|||
import co.yixiang.enums.*; |
|||
import co.yixiang.modules.activity.service.YxStoreBargainUserService; |
|||
import co.yixiang.modules.activity.service.YxStorePinkService; |
|||
import co.yixiang.modules.cart.vo.YxStoreCartQueryVo; |
|||
import co.yixiang.modules.mp.service.WeixinPayService; |
|||
import co.yixiang.modules.order.domain.YxStoreOrderCartInfo; |
|||
import co.yixiang.modules.order.service.YxStoreOrderCartInfoService; |
|||
import co.yixiang.modules.order.service.YxStoreOrderService; |
|||
import co.yixiang.modules.order.service.dto.CashierOrderExtendDto; |
|||
import co.yixiang.modules.order.service.dto.ProductAttrDto; |
|||
import co.yixiang.modules.order.service.dto.ProductDto; |
|||
import co.yixiang.modules.order.vo.OrderCartInfoVo; |
|||
import co.yixiang.tools.service.AlipayConfigService; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult; |
|||
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; |
|||
import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
/** |
|||
* 描述:收银台订单提供者服务 |
|||
* |
|||
* @author stevenhu |
|||
* @version 2021/10/18 14:35 |
|||
*/ |
|||
@Slf4j |
|||
@Service |
|||
@AllArgsConstructor |
|||
public class CashierOrderSupplyService { |
|||
|
|||
private final YxStoreOrderService storeOrderService; |
|||
private final YxStoreBargainUserService storeBargainUserService; |
|||
private final YxStorePinkService storePinkService; |
|||
private final YxStoreOrderCartInfoService orderCartInfoService; |
|||
private final WeixinPayService weixinPayService; |
|||
|
|||
// added by liuziliang on 20210307 started |
|||
private final AlipayConfigService alipayService; |
|||
// added by liuziliang on 20210307 ended |
|||
|
|||
|
|||
/** |
|||
* 返回订单产品信息 |
|||
* @param unique 订单唯一值 |
|||
* @return OrderCartInfoVo |
|||
*/ |
|||
public OrderCartInfoVo getProductOrder(String unique){ |
|||
YxStoreOrderCartInfo orderCartInfo = orderCartInfoService.findByUni(unique); |
|||
|
|||
YxStoreCartQueryVo cartInfo = JSONObject.parseObject(orderCartInfo.getCartInfo(), |
|||
YxStoreCartQueryVo.class); |
|||
|
|||
ProductDto productDTO = new ProductDto(); |
|||
productDTO.setImage(cartInfo.getProductInfo().getImage()); |
|||
productDTO.setPrice(cartInfo.getProductInfo().getPrice().doubleValue()); |
|||
productDTO.setStoreName(cartInfo.getProductInfo().getStoreName()); |
|||
if(ObjectUtil.isNotEmpty(cartInfo.getProductInfo().getAttrInfo())){ |
|||
ProductAttrDto productAttrDTO = new ProductAttrDto(); |
|||
productAttrDTO.setImage(cartInfo.getProductInfo().getAttrInfo().getImage()); |
|||
productAttrDTO.setPrice(cartInfo.getProductInfo().getAttrInfo().getPrice().doubleValue()); |
|||
productAttrDTO.setProductId(cartInfo.getProductInfo().getAttrInfo().getProductId()); |
|||
productAttrDTO.setSku(cartInfo.getProductInfo().getAttrInfo().getSku()); |
|||
productDTO.setAttrInfo(productAttrDTO); |
|||
} |
|||
|
|||
|
|||
return OrderCartInfoVo.builder() |
|||
.bargainId(cartInfo.getBargainId()) |
|||
.cartNum(cartInfo.getCartNum()) |
|||
.combinationId(cartInfo.getCombinationId()) |
|||
.orderId(storeOrderService.getById(orderCartInfo.getOid()).getOrderId()) |
|||
.seckillId(cartInfo.getSeckillId()) |
|||
.productInfo(productDTO) |
|||
.build(); |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 支付 |
|||
* @param map map |
|||
* @param orderId 订单号 |
|||
* @param uid uid |
|||
* @param payType 支付方式 |
|||
* @param from 来源 |
|||
* @param orderDTO orderDTO |
|||
* @return map |
|||
*/ |
|||
public Map<String, Object> goPay(Map<String, Object> map, String orderId, Long uid, String payType, |
|||
String from, CashierOrderExtendDto orderDTO){ |
|||
switch (PayTypeEnum.toType(payType)){ |
|||
case WEIXIN: |
|||
Map<String,String> jsConfig = new HashMap<>(); |
|||
if(AppFromEnum.WEIXIN_H5.getValue().equals(from)){ |
|||
WxPayMwebOrderResult wxPayMwebOrderResult = (WxPayMwebOrderResult)weixinPayService |
|||
.unifyPay(orderId,from, BillDetailEnum.TYPE_3.getValue(),"H5商品购买"); |
|||
|
|||
log.info("wxPayMwebOrderResult:{}",wxPayMwebOrderResult); |
|||
jsConfig.put("mweb_url",wxPayMwebOrderResult.getMwebUrl()); |
|||
orderDTO.setJsConfig(jsConfig); |
|||
map.put("result",orderDTO); |
|||
map.put("status","WECHAT_H5_PAY"); |
|||
map.put("payMsg","订单创建成功"); |
|||
return map; |
|||
} else if(AppFromEnum.ROUNTINE.getValue().equals(from)){ |
|||
map.put("status","WECHAT_PAY"); |
|||
WxPayMpOrderResult wxPayMpOrderResult = (WxPayMpOrderResult)weixinPayService |
|||
.unifyPay(orderId,from, BillDetailEnum.TYPE_3.getValue(),"小程序商品购买"); |
|||
jsConfig.put("appId",wxPayMpOrderResult.getAppId()); |
|||
jsConfig.put("timeStamp",wxPayMpOrderResult.getTimeStamp()); |
|||
jsConfig.put("paySign",wxPayMpOrderResult.getPaySign()); |
|||
jsConfig.put("nonceStr",wxPayMpOrderResult.getNonceStr()); |
|||
jsConfig.put("package",wxPayMpOrderResult.getPackageValue()); |
|||
jsConfig.put("signType",wxPayMpOrderResult.getSignType()); |
|||
orderDTO.setJsConfig(jsConfig); |
|||
map.put("payMsg","订单创建成功"); |
|||
map.put("result",orderDTO); |
|||
return map; |
|||
}else if(AppFromEnum.APP.getValue().equals(from)){//app支付 |
|||
map.put("status","WECHAT_APP_PAY"); |
|||
WxPayAppOrderResult wxPayAppOrderResult = (WxPayAppOrderResult)weixinPayService |
|||
.unifyPay(orderId,from, BillDetailEnum.TYPE_3.getValue(),"APP商品购买"); |
|||
jsConfig.put("appid",wxPayAppOrderResult.getAppId()); |
|||
jsConfig.put("partnerid",wxPayAppOrderResult.getPartnerId()); |
|||
jsConfig.put("prepayid",wxPayAppOrderResult.getPrepayId()); |
|||
jsConfig.put("package",wxPayAppOrderResult.getPackageValue()); |
|||
jsConfig.put("noncestr",wxPayAppOrderResult.getNonceStr()); |
|||
jsConfig.put("timestamp",wxPayAppOrderResult.getTimeStamp()); |
|||
jsConfig.put("sign",wxPayAppOrderResult.getSign()); |
|||
orderDTO.setJsConfig(jsConfig); |
|||
map.put("result",orderDTO); |
|||
map.put("payMsg","订单创建成功"); |
|||
return map; |
|||
}else{//公众号 |
|||
map.put("status","WECHAT_PAY"); |
|||
WxPayMpOrderResult wxPayMpOrderResult = (WxPayMpOrderResult)weixinPayService |
|||
.unifyPay(orderId,from, BillDetailEnum.TYPE_3.getValue(),"公众号商品购买"); |
|||
|
|||
log.info("WxPayMpOrderResult:{}",wxPayMpOrderResult); |
|||
|
|||
jsConfig.put("appId",wxPayMpOrderResult.getAppId()); |
|||
jsConfig.put("timestamp",wxPayMpOrderResult.getTimeStamp()); |
|||
jsConfig.put("nonceStr",wxPayMpOrderResult.getNonceStr()); |
|||
jsConfig.put("package",wxPayMpOrderResult.getPackageValue()); |
|||
jsConfig.put("signType",wxPayMpOrderResult.getSignType()); |
|||
jsConfig.put("paySign",wxPayMpOrderResult.getPaySign()); |
|||
orderDTO.setJsConfig(jsConfig); |
|||
map.put("result",orderDTO); |
|||
map.put("payMsg","订单创建成功"); |
|||
|
|||
return map; |
|||
} |
|||
case YUE: |
|||
storeOrderService.yuePay(orderId,uid); |
|||
map.put("payMsg","余额支付成功"); |
|||
return map; |
|||
|
|||
// added by liuziliang on 20210307 started |
|||
case ALI: |
|||
try { |
|||
// jsConfig.put("mweb_url", storeOrderService.aliPay(orderId)); |
|||
// orderDTO.setJsConfig(jsConfig); |
|||
Map<String,String> config = new HashMap<>(); |
|||
config.put("mweb_url", storeOrderService.aliPay(orderId)); |
|||
orderDTO.setJsConfig(config); |
|||
map.put("result",orderDTO); |
|||
map.put("status","ALIPAY_H5"); |
|||
map.put("payMsg","订单创建成功"); |
|||
} catch (Exception e) { |
|||
map.put("payMsg","订单生成失败"); |
|||
log.error("Exec alipay error:", e); |
|||
} |
|||
// added by liuziliang on 20210307 ended |
|||
case INTEGRAL: |
|||
storeOrderService.integralPay(orderId,uid); |
|||
map.put("payMsg","积分兑换成功"); |
|||
return map; |
|||
default: |
|||
} |
|||
|
|||
map.put("payMsg","订单生成失败"); |
|||
return map; |
|||
} |
|||
|
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue