package com.matrix.system.shopXcx.api.service.impl;
|
|
import cn.hutool.core.collection.CollUtil;
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.matrix.component.rabbitmq.RabiitMqTemplate;
|
import com.matrix.component.redis.RedisUserLoginUtils;
|
import com.matrix.component.tools.WxUtils;
|
import com.matrix.component.wechat.externalInterface.protocol.paramProtocol.BrandWCPayRequestData;
|
import com.matrix.component.wechat.externalInterface.weixinUtil.WeixinServiceUtil;
|
import com.matrix.core.exception.GlobleException;
|
import com.matrix.core.pojo.AjaxResult;
|
import com.matrix.core.tools.LogUtil;
|
import com.matrix.system.common.bean.BusParameterSettings;
|
import com.matrix.system.common.constance.AppConstance;
|
import com.matrix.system.common.dao.BusParameterSettingsDao;
|
import com.matrix.system.common.dao.CustomerDataDictionaryDao;
|
import com.matrix.system.common.interceptor.HostInterceptor;
|
import com.matrix.system.constance.Dictionary;
|
import com.matrix.system.hive.bean.SysVipInfo;
|
import com.matrix.system.hive.dao.ShoppingGoodsDao;
|
import com.matrix.system.hive.dao.SysVipInfoDao;
|
import com.matrix.system.score.dao.ScoreVipDetailDao;
|
import com.matrix.system.shopXcx.api.action.PayThreadPool;
|
import com.matrix.system.shopXcx.api.pojo.OrderCouponGroup;
|
import com.matrix.system.shopXcx.api.pojo.OrderInfoQueryPOJO;
|
import com.matrix.system.shopXcx.api.pojo.OrderItemDto;
|
import com.matrix.system.shopXcx.api.pojo.ShopOrderDto;
|
import com.matrix.system.shopXcx.api.service.OrderCouponGroupService;
|
import com.matrix.system.shopXcx.api.service.ShoppingCartService;
|
import com.matrix.system.shopXcx.api.service.WXShopOrderService;
|
import com.matrix.system.shopXcx.api.service.WxShopCouponService;
|
import com.matrix.system.shopXcx.api.tools.WxShopOrderUtil;
|
import com.matrix.system.shopXcx.api.vo.CouponReceiveInfoVO;
|
import com.matrix.system.shopXcx.bean.*;
|
import com.matrix.system.shopXcx.dao.*;
|
import com.matrix.system.shopXcx.dto.DiscountExplain;
|
import org.apache.commons.collections.CollectionUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author jyy
|
* @description 订单服务层
|
* @date 2019-06-10 10:58
|
*/
|
@Service
|
public class WXShopOrderServiceImpl implements WXShopOrderService {
|
@Autowired
|
private WxShopOrderUtil wxShopOrderUtil;
|
@Autowired
|
private RedisUserLoginUtils redisUserLoginUtils;
|
@Autowired
|
private WeixinServiceUtil weixinServiceUtil;
|
@Autowired
|
private ShopSkuDao shopSkuDao;
|
@Autowired
|
private ShopReceiveAddressDao shopReceiveAddressDao;
|
@Autowired
|
private ShopOrderDao shopOrderDao;
|
@Autowired
|
private ShopOrderDetailsDao shopOrderDetailsDao;
|
@Autowired
|
private ShopProductDao shopProductDao;
|
@Autowired
|
private ShopCouponRecordDao shopCouponRecordDao;
|
@Autowired
|
ShoppingGoodsDao shoppingGoodsDao;
|
@Autowired
|
ShoppingCartService shoppingCartService;
|
|
@Autowired
|
WxShopCouponService wxShopCouponService;
|
|
@Autowired
|
private ShopActivitiesGroupJoinDao shopActivitiesGroupJoinDao;
|
|
@Autowired
|
private ShopShoppingCartDao shoppingCartDao;
|
|
@Autowired
|
private ShopActivitiesGroupJoinUserDao shopActivitiesGroupJoinUserDao;
|
|
@Autowired
|
OrderCouponGroupService orderCouponGroupService;
|
|
@Autowired
|
CustomerDataDictionaryDao dataDictionaryDao;
|
@Value("${wx_pay_debug_onoff}")
|
private boolean isDebug;
|
|
@Autowired
|
private BusParameterSettingsDao busParameterSettingsDao;
|
|
@Autowired
|
private ScoreVipDetailDao scoreVipDetailDao;
|
|
|
@Autowired
|
private SysVipInfoDao sysVipInfoDao;
|
@Override
|
public BigDecimal calculationPostage(BigDecimal payPrice, Long companyId) {
|
BigDecimal postage = BigDecimal.ZERO;
|
BusParameterSettings yf = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.PACKAGE_PRICE, companyId);
|
BusParameterSettings myje = busParameterSettingsDao.selectCompanyParamByCode(AppConstance.FREE_PACKAGE_PRICE, companyId);
|
if (yf != null && myje != null) {
|
if (Double.parseDouble(myje.getParamValue()) > payPrice.doubleValue()) {
|
postage = new BigDecimal(yf.getParamValue());
|
}
|
}
|
return postage;
|
}
|
|
|
/**
|
* 创建订单
|
*
|
* @param shopOrderDto
|
* @return
|
* @throws Exception
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public ShopOrder createShopOrder(ShopOrderDto shopOrderDto) throws Exception {
|
SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
|
|
|
|
ShopReceiveAddress shopReceiveAddress = shopReceiveAddressDao.selectById(shopOrderDto.getReceiveAddrId());
|
|
|
//计算订单优惠信息
|
AjaxResult caculateResult= buildDiscountExplain(shopOrderDto);
|
DiscountExplain discountExplain= (DiscountExplain) caculateResult.getMapInfo().get("discountExplain");
|
if(discountExplain.getScorePay()!=null){
|
//校验用户积分是否够用
|
int score=scoreVipDetailDao.selectUserTotalScore(sysVipInfo.getId());
|
if(score<discountExplain.getScorePay()){
|
throw new GlobleException("积分不足");
|
}
|
}
|
|
|
ShopOrder shopOrder = new ShopOrder();
|
shopOrder.setCompanyId(sysVipInfo.getCompanyId());
|
shopOrder.setStoreId(Integer.parseInt(shopOrderDto.getShopId().toString()));
|
//默认设置为产品类型
|
shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
|
|
List<ShopOrderDetails> details = new ArrayList<>();
|
Integer orderCount = 0;
|
for (OrderItemDto orderItemDto : shopOrderDto.getOrderItemList()) {
|
ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
|
shopOrderDetails.setCreateBy(AppConstance.SYSTEM_USER);
|
shopOrderDetails.setUpdateBy(AppConstance.SYSTEM_USER);
|
shopOrderDetails.setpId(orderItemDto.getProductId());
|
shopOrderDetails.setsId(orderItemDto.getSkuId());
|
shopOrderDetails.setCount(orderItemDto.getCount());
|
if(ShopOrderDetails.PAYTYPE_MICRO==orderItemDto.getPayType()){
|
shopOrderDetails.setPrice(orderItemDto.getShopSku().getPrice());
|
}else{
|
shopOrderDetails.setPrice(orderItemDto.getShopSku().getScorePrice());
|
shopOrderDetails.setScoreCount(BigDecimal.valueOf(orderItemDto.getShopSku().getScoreCount()));
|
shopOrderDetails.setTotalScoreCount(shopOrderDetails.getScoreCount().multiply(BigDecimal.valueOf(shopOrderDetails.getCount())));
|
}
|
shopOrderDetails.setTotalPrice(shopOrderDetails.getPrice().multiply(BigDecimal.valueOf(shopOrderDetails.getCount())));
|
|
shopOrderDetails.setPayType(orderItemDto.getPayType());
|
|
shopOrderDetails.setsTitle(orderItemDto.getShopProduct().getTitle() + orderItemDto.getShopSku().getName());
|
|
shopOrderDetails.setDiscountAmount(BigDecimal.ZERO);
|
|
details.add(shopOrderDetails);
|
orderCount += shopOrderDetails.getCount();
|
if(orderItemDto.getCartId()!=null){
|
//删除用户购物车选中的产品
|
shoppingCartDao.deleteById(orderItemDto.getCartId());
|
}
|
|
}
|
|
//校验商品是否限购
|
wxShopOrderUtil.verifyProductLimitInfo(details, sysVipInfo.getOpenId());
|
//TODO 更新库存和销量 更新库存和销量[考虑和erp库存联动]
|
wxShopOrderUtil.updateProductAndSkuInfo(details);
|
//用户openId
|
shopOrder.setUserId(sysVipInfo.getId());
|
shopOrder.setCreateBy("微信小程序生成");
|
shopOrder.setUpdateBy("微信小程序生成");
|
shopOrder.setPayMethod(shopOrderDto.getPayMethod());
|
shopOrder.setCommodityPrice(discountExplain.getBillPrice());
|
shopOrder.setPurchaseQuantity(orderCount);
|
shopOrder.setOrderType(ShopOrder.ORDER_TYPE_GOODS);
|
//购买方式
|
shopOrder.setShippingMethod(shopOrderDto.getDeliverySelect());
|
//生成订单号
|
shopOrder.setOrderNo(WxUtils.getOrderNum());
|
//设置支付状态
|
shopOrder.setPayStatus(ShopOrder.ORDER_STATUS_WAIT_PAY);
|
//设置订单状态
|
shopOrder.setOrderStatus(ShopOrder.ORDER_PAY_STATUS_WAIT);
|
|
//设置退款费用(注:下次优化从数据字典表获取)
|
shopOrder.setRefundCharge(BigDecimal.ZERO);
|
//客户电话
|
shopOrder.setUserTel(shopReceiveAddress.getAddrTelephone());
|
//客户姓名
|
shopOrder.setUserName(shopReceiveAddress.getAddrLiaisonman());
|
//备注
|
shopOrder.setRemarks(shopOrderDto.getRemarks());
|
//删除标识
|
shopOrder.setDelFlag(AppConstance.DATA_USEABLE);
|
//微信订单号
|
shopOrder.setWxOrderNo("");
|
//微信支付结果
|
shopOrder.setPayResult(ShopOrder.ORDER_WX_STATUS_WAIT_PAY);
|
//如果没有提交购买方式或配送方式不是物流
|
//获取邮费
|
shopOrder.setPostage(discountExplain.getPostage());
|
shopOrder.setOrderMoney(discountExplain.getPayPrice());
|
shopOrder.setScorePay(discountExplain.getScorePay());
|
Gson g = new GsonBuilder().create();
|
shopOrder.setDiscountExplain(g.toJson(discountExplain));
|
shopOrder.setDiscountAmount(discountExplain.getActivityPrice().add(discountExplain.getCouponPrice()));
|
shopOrder.setCompanyId(HostInterceptor.getCompanyId());
|
shopOrderDao.insert(shopOrder);
|
|
wxShopOrderUtil.insertSendPackageInfo(shopOrder, shopOrderDto.getDeliverySelect(), shopReceiveAddress);
|
//给订单详情表添加订单ID
|
for (ShopOrderDetails shopOrderDetails : details) {
|
shopOrderDetails.setOrderId(shopOrder.getId());
|
}
|
if (CollectionUtils.isNotEmpty(details)) {
|
shopOrderDetailsDao.batchInsert(details);
|
}
|
//更新使用的优惠券状态
|
if (shopOrderDto.getCouponReceiveId() != null) {
|
ShopCouponRecord record = new ShopCouponRecord();
|
record.setIsUsing(AppConstance.MY_COUPON_USE);
|
record.setOrderId(shopOrder.getId());
|
record.setId(shopOrderDto.getCouponReceiveId());
|
shopCouponRecordDao.updateByModel(record);
|
}
|
|
|
|
|
return shopOrder;
|
}
|
|
@Override
|
public AjaxResult buildDiscountExplain(ShopOrderDto shopOrderDto) {
|
|
if(CollUtil.isEmpty(shopOrderDto.getOrderItemList())){
|
return AjaxResult.buildFailInstance("请选择购买的明细");
|
}
|
|
//订单计价说明
|
DiscountExplain discountExplain = new DiscountExplain();
|
//账单总金额
|
BigDecimal billPrice = BigDecimal.ZERO;
|
//活动优惠金额
|
BigDecimal activityTotal = BigDecimal.ZERO;
|
//优惠券惠金额
|
BigDecimal couponPrice = BigDecimal.ZERO;
|
//支付总积分
|
Integer scoreCount=0;
|
|
SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
|
|
//计算购物车中物品的优惠信息
|
List<OrderItemDto> orderItemDtos = shopOrderDto.getOrderItemList()
|
.stream().map(orderItemDto -> {
|
return orderCouponGroupService.buildOrderCouponElement(orderItemDto);
|
})
|
.collect(Collectors.toList());
|
//计算未优惠的总金额
|
for (OrderItemDto orderItemDto :orderItemDtos ){
|
if(orderItemDto.getPayType()==ShopShoppingCart.CAR_TYPE_MICRO){
|
billPrice=billPrice.add(orderItemDto.getShopSku().getPrice().multiply(new BigDecimal(orderItemDto.getCount())));
|
}else{
|
billPrice=billPrice.add(orderItemDto.getShopSku().getScorePrice().multiply(new BigDecimal(orderItemDto.getCount())));
|
scoreCount+=orderItemDto.getShopSku().getScoreCount()*orderItemDto.getCount();
|
}
|
}
|
discountExplain.setScorePay(scoreCount);
|
|
|
//计算用户的产品可以参与的店铺优惠活动分组
|
List<ShopCoupon> shopActiveList = new ArrayList<>();//记录用户可以参与的门店活动
|
List<OrderCouponGroup> orderCouponGroupList = new ArrayList<>();
|
int conditionsGroupCount = 0;
|
if (shopOrderDto.getJoinActive() == ShopOrderDto.JOIN_ACTIVE) {//用户参与优惠活动
|
orderCouponGroupList = orderCouponGroupService.buildOrderCouponGroupList(orderItemDtos);
|
conditionsGroupCount = orderCouponGroupList.stream().map(orderCouponGroup -> {
|
if (orderCouponGroup.isSatisfactionCoupon()&&orderCouponGroup.getCoupon()!=null) {
|
shopActiveList.add(orderCouponGroup.getCoupon());
|
return 1;
|
} else {
|
return 0;
|
}
|
}).mapToInt(Integer::intValue).sum();
|
}
|
if(CollUtil.isNotEmpty(shopActiveList)){
|
activityTotal=shopActiveList.stream().map(ShopCoupon:: getOffsetAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
|
}
|
|
//门店活动优惠金额
|
discountExplain.setActivityPrice(activityTotal);
|
|
|
List<CouponReceiveInfoVO> usefulCoupon = new ArrayList<>();
|
CouponReceiveInfoVO shopCoupon = new CouponReceiveInfoVO();
|
//满足店铺活动的订单不能使用优惠券
|
if (conditionsGroupCount <= 0) {
|
//计算可用优惠券
|
usefulCoupon = wxShopCouponService.getCartVoCouponList(sysVipInfo.getCompanyId(), orderItemDtos);
|
//获取用户使用的优惠券
|
if (shopOrderDto.getCouponReceiveId() == null) {
|
//如果用户没有选择优惠券则默认选优惠金额最高的
|
//计算使用优惠券后的价格
|
if (CollectionUtils.isNotEmpty(usefulCoupon)) {
|
//根据优惠券ID用户ID查询优惠券信息
|
shopCoupon = usefulCoupon.get(0);
|
}
|
} else if (shopOrderDto.getCouponReceiveId() != 1) {
|
//用户选择了优惠券
|
shopCoupon = shopCouponRecordDao.selectMyCouponByReceiveId(shopOrderDto.getCouponReceiveId());
|
} else {
|
//用户不使用优惠券
|
}
|
//计算优惠券
|
if (shopCoupon.getCouponId() != null) {
|
couponPrice=shopCoupon.getOffsetAmount();
|
}
|
//优惠券金额
|
discountExplain.setCouponPrice(couponPrice);
|
}
|
|
|
|
//计算运费
|
if(ShopOrder.SHIPPING_METHOD_WL==shopOrderDto.getDeliverySelect()){
|
discountExplain.setPostage(calculationPostage(billPrice, HostInterceptor.getCompanyId()));
|
}else{
|
discountExplain.setPostage(BigDecimal.ZERO);
|
}
|
|
//账单总金额
|
discountExplain.setBillPrice(billPrice.add(discountExplain.getPostage()));
|
|
BigDecimal payPrice=discountExplain.getBillPrice().subtract(activityTotal).subtract(couponPrice);
|
//应付金额
|
discountExplain.setPayPrice(payPrice.doubleValue()>0?payPrice:BigDecimal.ONE);
|
|
AjaxResult result = AjaxResult.buildSuccessInstance("");
|
//结算金额信息
|
result.putInMap("discountExplain", discountExplain);
|
//用户优惠券
|
result.putInMap("usefulCoupon", usefulCoupon);
|
//用户选中的优惠券
|
result.putInMap("shopCoupon", shopCoupon);
|
|
//店铺优惠活动
|
result.putInMap("shopActiveList", shopActiveList);
|
|
return result;
|
|
}
|
|
|
/**
|
* 根据订单ID结算订单
|
*
|
* @param orderId
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public AjaxResult orderSettlement(int orderId) throws Exception {
|
ShopOrder shopOrder = shopOrderDao.selectById(orderId);
|
|
if (shopOrder == null) {
|
return AjaxResult.buildFailInstance("订单不存在!");
|
}
|
if (ShopOrder.SHOP_ORDER_PAY_METHOD_WX != shopOrder.getPayMethod()) {
|
return AjaxResult.buildFailInstance("支付方式错误");
|
}
|
if (!shopOrder.getPayResult().equals(ShopOrder.ORDER_PAY_STATUS_WAIT)) {
|
return AjaxResult.buildFailInstance("该订单不是待支付状态!");
|
}
|
|
if(shopOrder.getScorePay()!=null){
|
//校验用户积分是否够用
|
int score=scoreVipDetailDao.selectUserTotalScore(shopOrder.getUserId());
|
if(score<shopOrder.getScorePay()){
|
return AjaxResult.buildFailInstance("积分不足");
|
}
|
}
|
|
BrandWCPayRequestData payData = startPayment(shopOrder);
|
AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(payData));
|
result.putInMap("orderId", shopOrder.getId());
|
return result;
|
}
|
|
/**
|
* 开始付款
|
*
|
* @param shopOrder
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public BrandWCPayRequestData startPayment(ShopOrder shopOrder) throws Exception {
|
BigDecimal unit = new BigDecimal("100");
|
BigDecimal money = new BigDecimal(shopOrder.getOrderMoney().toString());
|
BrandWCPayRequestData payData;
|
String productNames = wxShopOrderUtil.getProductNames(shopOrder.getUserId(), shopOrder.getId());
|
SysVipInfo vipInfo=sysVipInfoDao.selectById(shopOrder.getUserId());
|
|
LogUtil.debug(String.valueOf(isDebug));
|
if (isDebug) {
|
payData = weixinServiceUtil.createOrder("[测试]" + productNames, shopOrder.getOrderNo(),
|
1, vipInfo.getOpenId(), String.valueOf(shopOrder.getId()));
|
} else {
|
payData = weixinServiceUtil.createOrder(productNames, shopOrder.getOrderNo(),
|
unit.multiply(money).intValue(),vipInfo.getOpenId(), String.valueOf(shopOrder.getId()));
|
}
|
ShopOrder updateParam = new ShopOrder();
|
updateParam.setId(shopOrder.getId());
|
updateParam.setWxOrderNo(payData.getPrepay_id());
|
shopOrderDao.updateByModel(updateParam);
|
return payData;
|
}
|
|
/**
|
* 根据订单状态等条件获取我的订单列表
|
*
|
* @param orderInfoQueryPOJO
|
* @return
|
*/
|
@Override
|
public AjaxResult getMyOrderInfo(OrderInfoQueryPOJO orderInfoQueryPOJO) {
|
SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
|
orderInfoQueryPOJO.setSort("update_time");
|
if (orderInfoQueryPOJO.getOffset() >= 1) {
|
orderInfoQueryPOJO.setOffset((orderInfoQueryPOJO.getOffset() - 1) * orderInfoQueryPOJO.getLimit());
|
}
|
List<ShopOrder> result = shopOrderDao.selectMyOrderByStatus(sysVipInfo.getId(), orderInfoQueryPOJO);
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, result);
|
}
|
|
/**
|
* 根据订单ID查询订单详情
|
*
|
* @param orderId
|
* @return
|
*/
|
@Override
|
public AjaxResult getOrderInfoById(Integer orderId) {
|
SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
|
ShopOrder shopOrder = shopOrderDao.selectOrderInfoById(sysVipInfo.getId(), orderId);
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, Arrays.asList(shopOrder));
|
}
|
|
/**
|
* 取消待付款订单
|
*
|
* @param orderId
|
* @return
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public AjaxResult cancelOrderWhenWaitPay(Integer orderId) {
|
updateStockAndVolumeById(orderId);
|
ShopOrder shopOrder = shopOrderDao.selectById(orderId);
|
//如果订单不是待付款状态
|
if (ShopOrder.ORDER_PAY_STATUS_WAIT != shopOrder.getOrderStatus()) {
|
throw new GlobleException("该订单不是待付款状态!");
|
}
|
if (shopOrder.getDiscountAmount() != null && shopOrder.getDiscountAmount().compareTo(BigDecimal.ZERO) > 0) {
|
ShopCouponRecord shopCouponRecord = new ShopCouponRecord();
|
SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
|
shopCouponRecord.setUserId(sysVipInfo.getId());
|
shopCouponRecord.setOrderId(orderId);
|
List<ShopCouponRecord> recordList = shopCouponRecordDao.selectByModel(shopCouponRecord);
|
if (CollectionUtils.isNotEmpty(recordList)) {
|
for (ShopCouponRecord record : recordList) {
|
Map<String, Object> modifyMap = new HashMap<>();
|
modifyMap.put("id", record.getId());
|
modifyMap.put("orderId", 0);
|
modifyMap.put("isUsing", AppConstance.MY_COUPON_NOT_USE);
|
shopCouponRecordDao.updateByMap(modifyMap);
|
}
|
}
|
}
|
|
ShopActivitiesGroupJoinUser joinUser = shopActivitiesGroupJoinUserDao.selectGroupJoinUserByOrderId(orderId.longValue());
|
if (joinUser != null) {
|
joinUser.setIsHasCancel(ShopActivitiesGroupJoinUser.IS_HAS_CANCEL_Y);
|
shopActivitiesGroupJoinUserDao.updateByModel(joinUser);
|
if (joinUser.getIsHead() == ShopActivitiesGroupJoinUser.USER_IS_HEAD_Y) {
|
ShopActivitiesGroupJoin groupJoin = new ShopActivitiesGroupJoin();
|
groupJoin.setId(joinUser.getGjId());
|
groupJoin.setGjStatus(ShopActivitiesGroupJoin.ACTIVITIES_JOIN_FAIL);
|
shopActivitiesGroupJoinDao.updateByModel(groupJoin);
|
}
|
}
|
|
//构建需要修改订单信息Map
|
Map<String, Object> modifyMap = new HashMap<>();
|
modifyMap.put("id", orderId);
|
modifyMap.put("orderStatus", ShopOrder.ORDER_STATUS_CANCEL);
|
shopOrderDao.updateByMap(modifyMap);
|
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "订单取消成功!");
|
}
|
|
/**
|
* 删除已取消订单
|
*
|
* @param orderId
|
* @return
|
*/
|
@Override
|
public AjaxResult delOrderById(Integer orderId) {
|
ShopOrder order = shopOrderDao.selectById(orderId);
|
if (order == null) {
|
throw new GlobleException("没有找到该订单!");
|
}
|
if (!order.getOrderStatus().equals(ShopOrder.ORDER_STATUS_CANCEL)) {
|
throw new GlobleException("该订单不是取消状态,不能删除!");
|
}
|
|
//构建需要修改订单信息Map
|
Map<String, Object> modifyMap = new HashMap<>();
|
modifyMap.put("id", order.getId());
|
modifyMap.put("delFlag", AppConstance.DATA_DISABLE);
|
shopOrderDao.updateByMap(modifyMap);
|
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "删除成功!");
|
}
|
|
/**
|
* 订单确认收货
|
*
|
* @param orderId
|
* @return
|
*/
|
@Override
|
public AjaxResult confirmPackageById(Integer orderId) {
|
ShopOrder shopOrder = shopOrderDao.selectById(orderId);
|
//如果不是待收货状态
|
if (ShopOrder.ORDER_STATUS_WAIT_RECEIVE != shopOrder.getOrderStatus()) {
|
throw new GlobleException("该订单不是待收货状态!");
|
}
|
shopOrder.setOrderStatus(ShopOrder.ORDER_STATUS_WAIT_REMARK);
|
shopOrderDao.updateByModel(shopOrder);
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "订单收货成功!");
|
}
|
|
/**
|
* 加库存减销量
|
*
|
* @param orderId
|
* @return wlz
|
*/
|
@Override
|
public AjaxResult updateStockAndVolumeById(Integer orderId) {
|
//通过订单ID查询订单详情
|
List<ShopOrderDetails> shopOrderDetails = shopOrderDetailsDao.selectByOrderId(orderId);
|
if (CollectionUtils.isNotEmpty(shopOrderDetails)) {
|
for (ShopOrderDetails orderDetails : shopOrderDetails) {
|
Integer count = orderDetails.getCount();
|
Integer pId = orderDetails.getpId();
|
Integer sId = orderDetails.getsId();
|
ShopProduct shopProduct = shopProductDao.selectById(pId);
|
//获取此产品的总展示销量和真实销量
|
Integer dsVolume = shopProduct.getDsVolume();
|
Integer rsVolume = shopProduct.getRsVolume();
|
//退货减销量
|
Integer updateDs = dsVolume - count;
|
Integer updateRs = rsVolume - count;
|
Map<String, Object> modifyMap = new HashMap<>();
|
modifyMap.put("id", pId);
|
modifyMap.put("dsVolume", updateDs);
|
modifyMap.put("rsVolume", updateRs);
|
shopProductDao.updateByMap(modifyMap);
|
|
//加库存
|
ShopSku shopSku = shopSkuDao.selectById(sId);
|
Integer stock = shopSku.getStock();
|
Integer updateStock = stock + count;
|
Map<String, Object> modifyStock = new HashMap<>();
|
modifyStock.put("id", sId);
|
modifyStock.put("stock", updateStock);
|
shopSkuDao.updateByMap(modifyStock);
|
}
|
}
|
return new AjaxResult(AjaxResult.STATUS_SUCCESS, "加库存减销量修改成功!");
|
}
|
|
/**
|
* 查询订单支付状态
|
*
|
* @param orderId
|
* @return
|
*/
|
@Autowired
|
RabiitMqTemplate rabiitMqTemplate;
|
|
@Override
|
public AjaxResult findOrderPayStatus(Integer orderId) {
|
AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, "");
|
result.putInMap("status", "err");
|
result.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息(错误码:005)");
|
|
ShopOrder order = shopOrderDao.selectById(orderId);
|
if (order.getPayStatus().equals(ShopOrder.ORDER_PAY_STATUS_SUCCESS)) {
|
result.putInMap("status", "success");
|
result.putInMap("msg", "支付成功");
|
|
} else if (order.getPayStatus().equals(ShopOrder.ORDER_PAY_STATUS_FAIL)) {
|
result.putInMap("status", "err");
|
result.putInMap("msg", "查询支付信息失败,请联系客服或者刷新支付信息");
|
} else {
|
|
LogUtil.debug("订单等待支付中={}。。。", orderId);
|
PayThreadPool.waitThread(orderId, new Object());
|
result = PayThreadPool.getThreadResult(orderId);
|
LogUtil.debug("订单支付完成={}。。。", orderId);
|
|
}
|
ShopActivitiesGroupJoin groupBuyStatus = shopActivitiesGroupJoinDao.selectGroupBuyByOrderId(orderId);
|
if (groupBuyStatus != null) {
|
result.putInMap("groupBuyStatus", groupBuyStatus.getGjStatus());
|
result.putInMap("gjId", groupBuyStatus.getId());
|
}
|
return result;
|
}
|
|
}
|