Browse Source

1.添加收银台下单商品价格计算后台接口业务逻辑代码处理 2.添加收银台下单商品生产订单后台接口逻辑代码处理

master
dy-hu 3 years ago
parent
commit
30dc6a93ec
  1. 67
      yshop-mall/src/main/java/co/yixiang/modules/order/param/CashierOrderParam.java
  2. 8
      yshop-mall/src/main/java/co/yixiang/modules/order/service/YxStoreOrderCartInfoService.java
  3. 10
      yshop-mall/src/main/java/co/yixiang/modules/order/service/YxStoreOrderService.java
  4. 31
      yshop-mall/src/main/java/co/yixiang/modules/order/service/dto/CashierOrderExtendDto.java
  5. 22
      yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderCartInfoServiceImpl.java
  6. 196
      yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java
  7. 5
      yshop-mall/src/main/java/co/yixiang/modules/order/vo/ComputeCashierVo.java
  8. 70
      yshop-shop/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java
  9. 192
      yshop-shop/src/main/java/co/yixiang/modules/services/CashierOrderSupplyService.java

67
yshop-mall/src/main/java/co/yixiang/modules/order/param/CashierOrderParam.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;
}

8
yshop-mall/src/main/java/co/yixiang/modules/order/service/YxStoreOrderCartInfoService.java

@ -10,6 +10,7 @@ import co.yixiang.modules.cart.vo.YxStoreCartQueryVo;
import co.yixiang.modules.order.domain.YxStoreOrderCartInfo;
import co.yixiang.modules.order.service.dto.YxStoreOrderCartInfoDto;
import co.yixiang.modules.order.service.dto.YxStoreOrderCartInfoQueryCriteria;
import co.yixiang.modules.order.vo.CashierProductVo;
import org.springframework.data.domain.Pageable;
import javax.servlet.http.HttpServletResponse;
@ -55,4 +56,11 @@ public interface YxStoreOrderCartInfoService extends BaseService<YxStoreOrderCa
* @throws IOException /
*/
void download(List<YxStoreOrderCartInfoDto> all, HttpServletResponse response) throws IOException;
/**
* 添加收银台下单商品信息
* @param oid 订单id
* @param productInfo 收银台下单商品信息
*/
void saveCashierProductInfo(Long oid, List<CashierProductVo> productInfo);
}

10
yshop-mall/src/main/java/co/yixiang/modules/order/service/YxStoreOrderService.java

@ -10,6 +10,7 @@ package co.yixiang.modules.order.service;
import co.yixiang.common.service.BaseService;
import co.yixiang.modules.order.domain.YxStoreOrder;
import co.yixiang.modules.order.param.CashierOrderParam;
import co.yixiang.modules.order.param.OrderParam;
import co.yixiang.modules.order.service.dto.*;
import co.yixiang.modules.order.vo.*;
@ -301,4 +302,13 @@ public interface YxStoreOrderService extends BaseService<YxStoreOrder>{
*/
ComputeCashierVo computedCashierOrder(YxUser userInfo, String couponId,
String useIntegral, String shippingType, List<CashierProductDto> products);
/**
* 创建收银台订单
* @param userInfo
* @param key
* @param param
* @return
*/
YxStoreOrder createCashierOrder(YxUser userInfo, String key,CashierOrderParam param);
}

31
yshop-mall/src/main/java/co/yixiang/modules/order/service/dto/CashierOrderExtendDto.java

@ -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;
}

22
yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderCartInfoServiceImpl.java

@ -15,6 +15,7 @@ import co.yixiang.modules.order.service.YxStoreOrderCartInfoService;
import co.yixiang.modules.order.service.dto.YxStoreOrderCartInfoDto;
import co.yixiang.modules.order.service.dto.YxStoreOrderCartInfoQueryCriteria;
import co.yixiang.modules.order.service.mapper.StoreOrderCartInfoMapper;
import co.yixiang.modules.order.vo.CashierProductVo;
import co.yixiang.utils.FileUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -108,4 +109,25 @@ public class YxStoreOrderCartInfoServiceImpl extends BaseServiceImpl<StoreOrderC
}
FileUtil.downloadExcel(list, response);
}
/**
* 添加收银台下单商品信息
* @param oid 订单id
* @param productInfo 收银台下单商品信息
*/
@Override
public void saveCashierProductInfo(Long oid, List<CashierProductVo> productInfo) {
List<YxStoreOrderCartInfo> list = new ArrayList<>();
for (CashierProductVo product : productInfo) {
YxStoreOrderCartInfo info = new YxStoreOrderCartInfo();
info.setOid(oid);
info.setCartId(0L);
info.setProductId(product.getProductId());
info.setCartInfo(JSONObject.toJSON(product).toString());
info.setUnique(IdUtil.simpleUUID());
list.add(info);
}
this.saveBatch(list);
}
}

196
yshop-mall/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java

@ -55,6 +55,7 @@ import co.yixiang.modules.order.domain.YxExpress;
import co.yixiang.modules.order.domain.YxStoreOrder;
import co.yixiang.modules.order.domain.YxStoreOrderCartInfo;
import co.yixiang.modules.order.domain.YxStoreOrderStatus;
import co.yixiang.modules.order.param.CashierOrderParam;
import co.yixiang.modules.order.param.OrderParam;
import co.yixiang.modules.order.service.YxExpressService;
import co.yixiang.modules.order.service.YxStoreOrderCartInfoService;
@ -110,6 +111,7 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@ -2524,6 +2526,16 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
return str;
}
//added by huduyong on 20211014 started
/**
* 收银台订单计算
* @param userInfo 用户信息
* @param couponId 优惠券id
* @param useIntegral 使用积分 1-表示使用 0-表示不使用
* @param shippingType 发货类型 1=快递 2=门店自提3=门店收银
* @param products 下单产品组
* @return
*/
@Override
public ComputeCashierVo computedCashierOrder(YxUser userInfo, String couponId, String useIntegral, String shippingType, List<CashierProductDto> products) {
Long uid = userInfo.getUid();
@ -2551,24 +2563,19 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
}
//获取可用优惠券
/* List<String> productIds = cashierProducts.stream()
List<String> productIds = cashierProducts.stream()
.map(CashierProductVo::getProductId)
.map(Object::toString)
.collect(Collectors.toList());
List<StoreCouponUserVo> storeCouponUsers = couponUserService
.getUsableCouponList(uid, priceGroup.getTotalPrice().doubleValue(), productIds);
StoreCouponUserVo storeCouponUser = null;
if(storeCouponUsers != null && !storeCouponUsers.isEmpty()) {
//默认选择第一张优惠券
storeCouponUser = storeCouponUsers.get(0);
}*/
BigDecimal payPrice = priceGroup.getTotalPrice();
BigDecimal couponPrice = BigDecimal.ZERO;
if(StrUtil.isNotBlank(couponId) && !ShopConstants.YSHOP_ZERO.equals(couponId)){//使用优惠券
YxStoreCouponUser couponUser = couponUserService.getCoupon(Integer.valueOf(couponId),uid);
if(couponUser == null) {
throw new YshopException("使用优惠劵失败");
}
@ -2615,7 +2622,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
.deduction(false)
.enableIntegral(enableIntegral)
.enableIntegralNum(Double.valueOf(theIntegralMax))
//.usableCoupon(storeCouponUser)
.usableCoupon(storeCouponUsers)
.totalPrice(priceGroup.getTotalPrice())
.payPrice(payPrice)
.payPostage(BigDecimal.ZERO)
@ -2752,4 +2759,175 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, Y
return sumPrice;
}
//added by huduyong on 20211014 ended
/**
* 创建收银台订单
* @param userInfo
* @param key
* @param param
* @return
*/
@Override
@CacheEvict(cacheNames = ShopConstants.YSHOP_REDIS_INDEX_KEY,allEntries = true)
@Transactional
public YxStoreOrder createCashierOrder(YxUser userInfo,String key, CashierOrderParam param) {
try {
ComputeCashierVo computeVo = this.computedCashierOrder(userInfo,param.getCouponId(),
param.getUseIntegral(),param.getShippingType(),param.getProducts());
Long uid = userInfo.getUid();
//门店联系人
String realName = "小李";
//会员电话
String phone = userInfo.getPhone();
//用户地址是否可用改为门店地址
String userAddress = "成美利康线下门店购买";
Integer totalNum = 0;
Long combinationId = 0L;
Long seckillId = 0L;
Long bargainId = 0L;
Boolean isIntegral=false;
BigDecimal integral=BigDecimal.ZERO;
List<CashierProductVo> cashierProducts = this.getCashierProductList(uid, param.getProducts());
for (CashierProductVo cashierProduct : cashierProducts){
//监测库存
this.checkCashierProductStock(cashierProduct.getProductId(),cashierProduct.getProductNum(), cashierProduct.getProductAttrUnique());
totalNum += cashierProduct.getProductNum();
if(cashierProduct.getProductInfo().getIsIntegral() != null
&& cashierProduct.getProductInfo().getIsIntegral()==1){
integral = NumberUtil.add(integral,
NumberUtil.mul(cashierProduct.getProductNum(),cashierProduct.getProductInfo().getAttrInfo().getIntegral()));
}
}
PriceGroupDto priceGroup = this.getCashierOrderPriceGroup(cashierProducts);
//计算奖励积分
BigDecimal gainIntegral = this.getCashierGainIntegral(cashierProducts);
if(PayTypeEnum.INTEGRAL.getValue().equals(param.getPayType())){
gainIntegral=BigDecimal.ZERO;
isIntegral=true;
}
//生成分布式唯一值
String orderSn = IdUtil.getSnowflake(0,0).nextIdStr();
//组合数据
YxStoreOrder storeOrder = new YxStoreOrder();
storeOrder.setUid(Long.valueOf(String.valueOf(uid)));
storeOrder.setOrderId(orderSn);
// added by liuziliang on 20210307 started
//storeOrder.setUserIdNo(userInfo.getCardId());
// added by liuziliang on 20210307 ended
storeOrder.setRealName(realName);
storeOrder.setUserPhone(phone);
storeOrder.setUserAddress(userAddress);
storeOrder.setCartId("");
storeOrder.setTotalNum(totalNum);
storeOrder.setTotalPrice(computeVo.getTotalPrice());
storeOrder.setTotalPostage(computeVo.getPayPostage());
storeOrder.setCouponId(Integer.valueOf(param.getCouponId()));
storeOrder.setCouponPrice(computeVo.getCouponPrice());
storeOrder.setPayPrice(computeVo.getPayPrice());
storeOrder.setPayPostage(computeVo.getPayPostage());
storeOrder.setDeductionPrice(computeVo.getDeductionPrice());
storeOrder.setPaid(OrderInfoEnum.PAY_STATUS_0.getValue());
storeOrder.setPayType(param.getPayType());
if(isIntegral){
storeOrder.setPayIntegral(integral);
}
storeOrder.setUseIntegral(BigDecimal.valueOf(computeVo.getUsedIntegral()));
storeOrder.setBackIntegral(BigDecimal.ZERO);
storeOrder.setGainIntegral(gainIntegral);
storeOrder.setMark(param.getMark());
storeOrder.setCombinationId(combinationId);
storeOrder.setPinkId(0L);
storeOrder.setSeckillId(seckillId);
storeOrder.setBargainId(bargainId);
storeOrder.setCost(priceGroup.getCostPrice());
if(AppFromEnum.ROUNTINE.getValue().equals(param.getFrom())){
storeOrder.setIsChannel(OrderInfoEnum.PAY_CHANNEL_1.getValue());
}else{
storeOrder.setIsChannel(OrderInfoEnum.PAY_CHANNEL_0.getValue());
}
storeOrder.setUnique(key);
storeOrder.setShippingType(Integer.valueOf(param.getShippingType()));
//处理门店
if(OrderInfoEnum.SHIPPIING_TYPE_2.getValue().toString().equals(param.getShippingType())){
YxSystemStore systemStoreQueryVo = systemStoreService.getById(param.getStoreId());
if(systemStoreQueryVo == null ) {
throw new ErrorRequestException("暂无门店无法选择门店自提");
}
storeOrder.setVerifyCode(StrUtil.sub(orderSn,orderSn.length(),-12));
storeOrder.setStoreId(systemStoreQueryVo.getId());
}
boolean res = this.save(storeOrder);
if(!res) {
throw new YshopException("订单生成失败");
}
//使用了积分扣积分
if(computeVo.getUsedIntegral() > 0){
this.decIntegral(userInfo,computeVo.getUsedIntegral(),computeVo.getDeductionPrice().doubleValue());
}
//使用了优惠券扣优惠券
if(computeVo.getCouponPrice().compareTo(BigDecimal.ZERO) > 0) {
couponUserService.useCoupon(Integer.valueOf(param.getCouponId()));
}
// 减库存加销量
for (CashierProductVo cashierProduct : cashierProducts) {
productService.decProductStock(cashierProduct.getProductNum(),cashierProduct.getProductId(),
cashierProduct.getProductAttrUnique(), 0L,"");
}
//保存购物车商品信息
orderCartInfoService.saveCashierProductInfo(storeOrder.getId(),cashierProducts);
//增加状态
orderStatusService.create(storeOrder.getId(),OrderLogEnum.CREATE_ORDER.getValue(),
OrderLogEnum.CREATE_ORDER.getDesc());
//加入redis30分钟自动取消
String redisKey = String.valueOf(StrUtil.format("{}{}",
ShopConstants.REDIS_ORDER_OUTTIME_UNPAY, storeOrder.getId()));
redisTemplate.opsForValue().set(redisKey, storeOrder.getOrderId() ,
ShopConstants.ORDER_OUTTIME_UNPAY, TimeUnit.MINUTES);
return storeOrder;
} catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
throw e;
}
}
/**
* 计算收银台下单奖励的积分
* @param productList
* @return
*/
private BigDecimal getCashierGainIntegral(List<CashierProductVo> productList){
BigDecimal gainIntegral = BigDecimal.ZERO;
for (CashierProductVo product : productList) {
BigDecimal cartInfoGainIntegral = BigDecimal.ZERO;
Double gain = product.getProductInfo().getGiveIntegral().doubleValue();
if(gain > 0){
cartInfoGainIntegral = NumberUtil.round(NumberUtil.mul(product.getProductNum(),gain),2);
}
gainIntegral = NumberUtil.add(gainIntegral,cartInfoGainIntegral);
}
return gainIntegral;
}
}

5
yshop-mall/src/main/java/co/yixiang/modules/order/vo/ComputeCashierVo.java

@ -9,6 +9,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
/**
* 描述
@ -50,6 +51,6 @@ public class ComputeCashierVo {
private Double enableIntegralNum;
//满足条件的第一个优惠券信息
private StoreCouponUserVo usableCoupon;
//满足条件的优惠券列表
private List<StoreCouponUserVo> usableCoupon;
}

70
yshop-shop/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java

@ -8,28 +8,31 @@
*/
package co.yixiang.modules.order.rest;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import co.yixiang.annotation.AnonymousAccess;
import co.yixiang.api.ApiCode;
import co.yixiang.api.ApiResult;
import co.yixiang.api.YshopException;
import co.yixiang.dozer.service.IGenerator;
import co.yixiang.enums.OrderInfoEnum;
import co.yixiang.enums.OrderLogEnum;
import co.yixiang.enums.ShipperCodeEnum;
import co.yixiang.enums.ShopCommonEnum;
import co.yixiang.enums.*;
import co.yixiang.exception.BadRequestException;
import co.yixiang.logging.aop.log.Log;
import co.yixiang.modules.aop.ForbidSubmit;
import co.yixiang.modules.order.domain.YxStoreOrder;
import co.yixiang.modules.order.domain.YxStoreOrderStatus;
import co.yixiang.modules.order.param.CashierOrderParam;
import co.yixiang.modules.order.param.ComputedCashierOrderParam;
import co.yixiang.modules.order.param.ExpressParam;
import co.yixiang.modules.order.param.OrderParam;
import co.yixiang.modules.order.service.YxStoreOrderService;
import co.yixiang.modules.order.service.YxStoreOrderStatusService;
import co.yixiang.modules.order.service.dto.*;
import co.yixiang.modules.order.vo.ComputeCashierVo;
import co.yixiang.modules.order.vo.ComputeVo;
import co.yixiang.modules.services.CashierOrderSupplyService;
import co.yixiang.modules.user.domain.YxUser;
import co.yixiang.modules.user.service.YxUserService;
import co.yixiang.tools.express.ExpressService;
@ -37,6 +40,7 @@ import co.yixiang.tools.express.config.ExpressAutoConfiguration;
import co.yixiang.tools.express.dao.ExpressInfo;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.collect.Maps;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@ -58,6 +62,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.ParseException;
@ -86,13 +91,19 @@ public class StoreOrderController {
private final YxStoreOrderStatusService yxStoreOrderStatusService;
private final YxUserService userService;
//added by huduyong on 20211018 started
private final CashierOrderSupplyService orderSupplyService;
//added by huduyong on 20211018 ended
public StoreOrderController(IGenerator generator, YxStoreOrderService yxStoreOrderService,
YxStoreOrderStatusService yxStoreOrderStatusService, YxUserService userService) {
YxStoreOrderStatusService yxStoreOrderStatusService, YxUserService userService,
CashierOrderSupplyService orderSupplyService) {
this.generator = generator;
this.yxStoreOrderService = yxStoreOrderService;
this.yxStoreOrderStatusService = yxStoreOrderStatusService;
this.userService = userService;
this.orderSupplyService = orderSupplyService;
}
/**@Valid
@ -468,6 +479,7 @@ public class StoreOrderController {
return criteria;
}
//added by huduyong on 20211014 started
@Log("计算收银台下单商品信息金额")
@ApiOperation(value = "计算收银台下单商品信息金额")
@PostMapping(value = "/yxStoreOrder/cashierOrder/computed")
@ -483,4 +495,50 @@ public class StoreOrderController {
map.put("content", computeCashierVo);
return new ResponseEntity(map, HttpStatus.OK);
}
//added by huduyong on 20211014 ended
//added by huduyong on 20211018 started
/**
* 收银台订单创建
*/
@Log(value = "收银台订单创建")
@ApiOperation(value = "收银台订单创建")
@PostMapping("/cashierOrder/create/{uid}")
public ApiResult<Map<String,Object>> createCashierOrder(@Valid @RequestBody CashierOrderParam param,
@PathVariable String uid){
YxUser yxUser = userService.getById(uid);
String orderKey = IdUtil.simpleUUID();
//创建订单
YxStoreOrder order = yxStoreOrderService.createCashierOrder(yxUser,orderKey, param);
if(ObjectUtil.isNull(order)) {
throw new YshopException("订单生成失败");
}
String orderId = order.getOrderId();
Map<String,Object> map = Maps.newHashMap();
CashierOrderExtendDto orderDTO = new CashierOrderExtendDto();
orderDTO.setKey(orderKey);
orderDTO.setOrderId(orderId);
map.put("status",OrderLogEnum.CREATE_ORDER_SUCCESS.getValue());
map.put("result",orderDTO);
//开始处理支付
//处理金额为0的情况
if(order.getPayPrice().compareTo(BigDecimal.ZERO) <= 0&&!param.getPayType().equals(PayTypeEnum.INTEGRAL.getValue())){
yxStoreOrderService.yuePay(orderId,yxUser.getUid());
map.put("payMsg","支付成功");
return ApiResult.ok(map,"支付成功");
}
orderSupplyService.goPay(map,orderId,yxUser.getUid(),
param.getPayType(),param.getFrom(),orderDTO);
return ApiResult.ok(map,map.get("payMsg").toString());
}
//added by huduyong on 20211014 started
}

192
yshop-shop/src/main/java/co/yixiang/modules/services/CashierOrderSupplyService.java

@ -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;
}
}
Loading…
Cancel
Save