package cc.mrbird.febs.mall.service.impl;
|
|
import cc.mrbird.febs.common.entity.FebsResponse;
|
import cc.mrbird.febs.common.enumerates.*;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.properties.XcxProperties;
|
import cc.mrbird.febs.common.utils.*;
|
import cc.mrbird.febs.mall.conversion.MallGoodsCommentConversion;
|
import cc.mrbird.febs.mall.conversion.MallOrderInfoConversion;
|
import cc.mrbird.febs.mall.conversion.MallOrderRefundConversion;
|
import cc.mrbird.febs.mall.conversion.MallTeamLeaderConversion;
|
import cc.mrbird.febs.mall.dto.*;
|
import cc.mrbird.febs.mall.entity.*;
|
import cc.mrbird.febs.mall.mapper.*;
|
import cc.mrbird.febs.mall.service.*;
|
import cc.mrbird.febs.mall.vo.*;
|
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
|
import cc.mrbird.febs.pay.model.OrderStateDto;
|
import cc.mrbird.febs.pay.service.IPayService;
|
import cc.mrbird.febs.pay.service.IXcxPayService;
|
import cc.mrbird.febs.pay.util.WeixinServiceUtil;
|
import cc.mrbird.febs.rabbit.producter.AgentProducer;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateUnit;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.crypto.SecureUtil;
|
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.collections.CollectionUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
/**
|
* @author wzy
|
* @date 2021-09-18
|
**/
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class ApiMallOrderInfoServiceImpl extends ServiceImpl<MallOrderInfoMapper, MallOrderInfo> implements IApiMallOrderInfoService {
|
|
private final MallGoodsMapper mallGoodsMapper;
|
private final MallGoodsSkuMapper mallGoodsSkuMapper;
|
private final MallAddressInfoMapper mallAddressInfoMapper;
|
private final MallOrderItemMapper mallOrderItemMapper;
|
private final MallMemberMapper memberMapper;
|
private final MallGoodsCommentMapper mallGoodsCommentMapper;
|
private final IApiMallMemberWalletService memberWalletService;
|
private final MallExpressInfoMapper expressInfoMapper;
|
private final MallOrderRefundMapper mallOrderRefundMapper;
|
private final MallOrderRefundOperationMapper mallOrderRefundOperationMapper;
|
private final MallShoppingCartMapper mallShoppingCartMapper;
|
private final IApiMallMemberService memberService;
|
private final IMallMoneyFlowService mallMoneyFlowService;
|
private final RedisUtils redisUtils;
|
|
private final AgentProducer agentProducer;
|
private final IPayService payService;
|
private final IXcxPayService iXcxPayService;
|
private final IMallAchieveService mallAchieveService;
|
private final MallRefundMapper mallRefundMapper;
|
private final MallTeamLeaderMapper mallTeamLeaderMapper;
|
private final MallMemberMapper mallMemberMapper;
|
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
|
private final MallLeaderAchieveMapper mallLeaderAchieveMapper;
|
private final IApiMallTeamLeaderService iApiMallTeamLeaderService;
|
private final IMallElectronicFenceService iMallElectronicFenceService;
|
private final MallElectronicFenceMapper mallElectronicFenceMapper;
|
private final MallMemberWalletMapper mallMemberWalletMapper;
|
private final MallRollPerkMapper mallRollPerkMapper;
|
private final MallMoneyFlowMapper mallMoneyFlowMapper;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Long createOrder(AddOrderDto addOrderDto) {
|
Long memberId = LoginUserUtil.getLoginUser().getId();
|
MallMember member = mallMemberMapper.selectById(memberId);
|
MallMemberWallet memberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId);
|
|
//验证用户的等级
|
// if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){
|
// throw new FebsException("请先申请成为代理人");
|
// }
|
|
//验证收货地址
|
MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
|
if(ObjectUtil.isEmpty(address)){
|
throw new FebsException("请重新选择收货地址信息");
|
}
|
|
String orderNo = MallUtils.getOrderNum();
|
MallOrderInfo orderInfo = new MallOrderInfo();
|
orderInfo.setOrderNo(orderNo);
|
orderInfo.setOrderTime(new Date());
|
orderInfo.setMemberId(member.getId());
|
orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
|
orderInfo.setRemark(addOrderDto.getRemark());
|
orderInfo.setOrderType(addOrderDto.getOrderType());
|
orderInfo.setDeliveryType(addOrderDto.getDeliveryType());
|
if (CollUtil.isEmpty(addOrderDto.getItems())) {
|
throw new FebsException("参数错误");
|
}
|
this.baseMapper.insert(orderInfo);
|
|
BigDecimal total = BigDecimal.ZERO;
|
for (AddOrderItemDto item : addOrderDto.getItems()) {
|
MallOrderItem orderItem = new MallOrderItem();
|
MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
|
if (ObjectUtil.isEmpty(sku)) {
|
throw new FebsException("购买商品或sku不存在");
|
}
|
|
if (sku.getStock() < item.getCnt()) {
|
throw new FebsException(sku.getSkuName() + "库存不足");
|
}
|
MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
|
// 零撸专区购买
|
if (new BigDecimal(mallGoods.getPresentPrice()).compareTo(BigDecimal.ZERO) == 0) {
|
List<MallOrderItem> items = mallOrderItemMapper.selectItemByGoodsIdUnCancel(mallGoods.getId(), member.getId());
|
if (CollUtil.isNotEmpty(items)) {
|
throw new FebsException("无法重复领取同一个商品");
|
}
|
}
|
|
if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
|
throw new FebsException(mallGoods.getGoodsName() + "已下架");
|
}
|
//商品库存销量计算
|
Integer goodsResult = mallGoodsMapper.upDateStockAndVolumeByGoodsId(mallGoods.getId(), item.getCnt());
|
if(1 != goodsResult){
|
throw new FebsException(mallGoods.getGoodsName() + "库存不足");
|
}
|
BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
|
BigDecimal itemPrice = sku.getPresentPrice();
|
orderItem.setAmount(amount);
|
orderItem.setCnt(item.getCnt());
|
orderItem.setOrderId(orderInfo.getId());
|
orderItem.setPrice(itemPrice);
|
orderItem.setGoodsId(sku.getGoodsId());
|
orderItem.setGoodsName(sku.getGoodsName());
|
orderItem.setSkuId(sku.getId());
|
orderItem.setState(1);
|
orderItem.setStyleName(sku.getStyleName());
|
orderItem.setSkuName(sku.getSkuName());
|
orderItem.setSkuImage(sku.getSkuImage());
|
orderItem.setIsNormal(mallGoods.getIsNormal());
|
orderItem.setCostPrice(sku.getCostPrice());
|
|
total = total.add(amount);
|
//规格的库存销量
|
Integer skuResult = mallGoodsSkuMapper.upDateStockAndVolumeBySkuId(sku.getId(),item.getCnt());
|
if(1 != skuResult){
|
throw new FebsException(sku.getSkuName() + "库存不足");
|
}
|
if (addOrderDto.getType() == 1) {
|
mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
|
}
|
mallOrderItemMapper.insert(orderItem);
|
}
|
//运费
|
BigDecimal delivaryAmount = addOrderDto.getDeliveryAmount() == null ? BigDecimal.ZERO : addOrderDto.getDeliveryAmount();
|
orderInfo.setCarriage(delivaryAmount);
|
|
total = total.add(delivaryAmount);
|
orderInfo.setAmount(total);
|
orderInfo.setAddressId(address.getId());
|
orderInfo.setName(address.getName());
|
orderInfo.setPhone(address.getPhone());
|
orderInfo.setIsHome(addOrderDto.getIsHome());
|
|
// if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) {
|
// throw new FebsException("请添加地址");
|
// }
|
orderInfo.setAddress(address.getProvince()+address.getCity()+address.getArea() + address.getAddress());
|
orderInfo.setLatitude(address.getLatitude());
|
orderInfo.setLongitude(address.getLongitude());
|
this.baseMapper.updateById(orderInfo);
|
//过期时间修改成24小时
|
agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 24 * 60 * 60 * 1000L);
|
return orderInfo.getId();
|
}
|
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void cancelOrder(Long id) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id);
|
if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
|
throw new FebsException("订单不存在");
|
}
|
|
if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) {
|
throw new FebsException("订单不是待付款, 无法取消");
|
}
|
|
orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
|
orderInfo.setCancelType(MallOrderInfo.CANCEL_BY_SELF);
|
this.baseMapper.updateById(orderInfo);
|
|
|
|
List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
|
if(CollUtil.isNotEmpty(mallOrderItemList)){
|
for(MallOrderItem mallOrderItem : mallOrderItemList){
|
MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
|
if (sku == null) {
|
throw new FebsException("购买商品或sku不存在");
|
}
|
|
if (sku.getStock() < mallOrderItem.getCnt()) {
|
throw new FebsException(sku.getSkuName() + "库存不足");
|
}
|
|
MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
|
Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
|
if(1 != goodsResult){
|
throw new FebsException(mallGoods.getGoodsName() + "库存不足");
|
}
|
|
Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
|
if(1 != skuResult){
|
throw new FebsException(sku.getSkuName() + "库存不足");
|
}
|
}
|
}
|
|
}
|
|
/**
|
* 根据用户ID和订单ID获取所购买商品名称
|
* @return 所含商品名称(多个以","隔开)
|
*/
|
public String getProductNames(Long memberId, Long orderId) {
|
MallOrderInfo mallOrderInfo = this.baseMapper.selectOrderByMemberIdAndId(memberId, orderId);
|
List<MallOrderItem> details = mallOrderInfo.getItems();
|
if (CollectionUtils.isEmpty(details)) {
|
return "";
|
}
|
StringBuffer productNameBuffer = new StringBuffer();
|
Integer maxLength = 30;
|
for (int i = 0; i< details.size(); i++) {
|
MallOrderItem mallOrderItem = details.get(i);
|
String goodsName = mallOrderItem.getGoodsName();
|
if (goodsName == null) {
|
continue;
|
}
|
if (i == 0 && goodsName.length() > maxLength) {
|
productNameBuffer.append(goodsName.substring(0, maxLength) + "...");
|
break;
|
}
|
if ((productNameBuffer.length() + goodsName.length()) > maxLength) {
|
productNameBuffer.append("等");
|
break;
|
}
|
productNameBuffer.append(goodsName + ",");
|
}
|
String productNames = productNameBuffer.toString();
|
if (productNames.endsWith(",")) {
|
productNames = productNames.substring(0, productNames.length() - 1);
|
}
|
if (productNames.endsWith(",等")) {
|
productNames = productNames.substring(0, productNames.length() - 2) + "等";
|
}
|
return productNames;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Map<String, Object> payOrder(PayOrderDto payOrderDto) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), payOrderDto.getId());
|
if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
|
throw new FebsException("订单不存在");
|
}
|
|
if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) {
|
throw new FebsException("订单状态不能支付");
|
}
|
|
String payResultStr = "";
|
String wxResultStr = "";
|
String amountActualMsg = "0";
|
StringBuffer stringBuffer = new StringBuffer();
|
switch (payOrderDto.getType()) {
|
case "1":
|
BrandWCPayRequestData brandWCPayRequestData = null;
|
try {
|
brandWCPayRequestData = iXcxPayService.startPayment(orderInfo);
|
} catch (Exception e) {
|
throw new FebsException("支付失败");
|
}
|
wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestData);
|
payResultStr = brandWCPayRequestData.getPrepay_id();
|
orderInfo.setPayMethod("微信支付");
|
amountActualMsg = orderInfo.getAmount().toString();
|
break;
|
case "2":
|
payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance");
|
|
orderInfo.setPayOrderNo(orderInfo.getOrderNo());
|
orderInfo.setPayMethod("余额支付");
|
orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
|
orderInfo.setPayTime(new Date());
|
orderInfo.setPayResult("1");
|
orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
|
|
mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(),
|
orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
|
|
amountActualMsg = orderInfo.getAmount().toString();
|
|
stringBuffer.append(orderInfo.getId().toString());
|
stringBuffer.append("@");
|
stringBuffer.append(amountActualMsg);
|
agentProducer.sendOrderGetMsg(stringBuffer.toString());
|
break;
|
case "3":
|
/**
|
* 获取用户的当前积分
|
*/
|
MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
|
BigDecimal score = mallMemberWallet.getScore();
|
BigDecimal amount = orderInfo.getAmount();
|
//积分兑换比例
|
DataDictionaryCustom scoreChangeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
DataDictionaryEnum.SCORE_CHANGE.getType(),
|
DataDictionaryEnum.SCORE_CHANGE.getCode()
|
);
|
BigDecimal scoreChange = StrUtil.isEmpty(scoreChangeDic.getValue()) ? new BigDecimal("1") : new BigDecimal(scoreChangeDic.getValue());
|
BigDecimal amountToScore = amount.multiply(scoreChange).setScale(0, BigDecimal.ROUND_DOWN);
|
//实际支付积分
|
BigDecimal scoreActual = BigDecimal.ZERO;
|
if(score.compareTo(amountToScore) >= 0){
|
//拥有的积分大于此次订单的金额,则全额订单折扣
|
int reduce = memberWalletService.reduce(amountToScore, member.getId(), "score");
|
if (reduce == 2) {
|
throw new FebsException("积分余额不足");
|
}
|
orderInfo.setPayMethod("积分支付");
|
scoreActual = amountToScore;
|
}else{
|
//拥有的积分大于此次订单的金额,则全额订单折扣
|
int reduce = memberWalletService.reduce(score, member.getId(), "score");
|
if (reduce == 2) {
|
throw new FebsException("积分余额不足");
|
}
|
scoreActual = score;
|
}
|
|
BigDecimal scoreToAmount = score.divide(scoreChange, 2, BigDecimal.ROUND_DOWN);
|
//实际支付余额
|
BigDecimal amountActual = amount.subtract(scoreToAmount).setScale(2, BigDecimal.ROUND_DOWN);
|
int balance = memberWalletService.reduce(amountActual, member.getId(), "balance");
|
if (balance == 2) {
|
throw new FebsException("余额不足");
|
}
|
orderInfo.setPayOrderNo(orderInfo.getOrderNo());
|
orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
|
orderInfo.setPayTime(new Date());
|
orderInfo.setPayResult("1");
|
orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
|
if(amountActual.compareTo(BigDecimal.ZERO) > 0){
|
mallMoneyFlowService.addMoneyFlow(member.getId(), amountActual.negate(), MoneyFlowTypeEnum.PAY.getValue(),
|
orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
|
amountActualMsg = amountActual.toString();
|
}
|
if(scoreActual.compareTo(BigDecimal.ZERO) > 0){
|
mallMoneyFlowService.addMoneyFlow(member.getId(), scoreActual.negate(),
|
MoneyFlowTypeEnum.SCORE_PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"积分支付",2);
|
}
|
|
stringBuffer.append(orderInfo.getId().toString());
|
stringBuffer.append("@");
|
stringBuffer.append(amountActualMsg);
|
agentProducer.sendOrderGetMsg(stringBuffer.toString());
|
break;
|
case "4":
|
MallRollPerk mallRollPerk = mallRollPerkMapper.selectById(payOrderDto.getRollId());
|
if(ObjectUtil.isEmpty(mallRollPerk)){
|
throw new FebsException("兑换券不存在");
|
}
|
int stateRoll = ObjectUtil.isEmpty(mallRollPerk.getState()) ? 2 : mallRollPerk.getState();
|
if(stateRoll == 2){
|
throw new FebsException("兑换券已使用");
|
}
|
mallRollPerk.setState(2);
|
mallRollPerk.setUpdateTime(DateUtil.date());
|
mallRollPerkMapper.updateById(mallRollPerk);
|
payResultStr = orderInfo.getOrderNo();
|
|
orderInfo.setPayOrderNo(payOrderDto.getRollId().toString());
|
orderInfo.setPayMethod("兑换券支付");
|
orderInfo.setPayTime(new Date());
|
orderInfo.setPayResult("1");
|
|
stringBuffer.append(orderInfo.getId().toString());
|
stringBuffer.append("@");
|
stringBuffer.append(amountActualMsg);
|
agentProducer.sendOrderGetMsg(stringBuffer.toString());
|
|
mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.ROLL_PAY.getValue(),
|
orderInfo.getOrderNo(), FlowTypeEnum.PRIZE_SCORE.getValue());
|
break;
|
/**
|
* 余额加微信
|
*/
|
case "2,1":
|
MallMemberWallet mallMemberWalletThree = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
|
BigDecimal balanceThree = mallMemberWalletThree.getBalance();
|
BigDecimal amountThree = orderInfo.getAmount();
|
|
// int reduceThree = memberWalletService.reduce(balanceThree, member.getId(), "balance");
|
// if (reduceThree == 2) {
|
// throw new FebsException("余额不足");
|
// }
|
// mallMoneyFlowService.addMoneyFlow(member.getId(), balanceThree.negate(), MoneyFlowTypeEnum.PAY.getValue(),
|
// orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
|
|
//实际支付余额
|
BigDecimal amountActualThree = amountThree.subtract(balanceThree).setScale(2, BigDecimal.ROUND_DOWN);
|
orderInfo.setAmount(amountActualThree);
|
|
BrandWCPayRequestData brandWCPayRequestDataThree = null;
|
try {
|
brandWCPayRequestDataThree = iXcxPayService.startPayment(orderInfo);
|
} catch (Exception e) {
|
throw new FebsException("支付失败");
|
}
|
wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestDataThree);
|
payResultStr = brandWCPayRequestDataThree.getPrepay_id();
|
orderInfo.setPayMethod("余额加微信");
|
orderInfo.setAmount(amountThree);
|
amountActualMsg = amountThree.toString();
|
|
stringBuffer.append(orderInfo.getId().toString());
|
stringBuffer.append("@");
|
stringBuffer.append(amountActualMsg);
|
agentProducer.sendOrderGetMsg(stringBuffer.toString());
|
break;
|
/**
|
* 积分加余额
|
*/
|
case "3,2":
|
/**
|
* 获取用户的当前积分
|
*/
|
MallMemberWallet mallMemberWalletNOne = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
|
BigDecimal scoreOne = mallMemberWalletNOne.getScore();
|
BigDecimal amountOne = orderInfo.getAmount();
|
//积分兑换比例
|
DataDictionaryCustom scoreChangeOneDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
DataDictionaryEnum.SCORE_CHANGE.getType(),
|
DataDictionaryEnum.SCORE_CHANGE.getCode()
|
);
|
BigDecimal scoreChangeOne = StrUtil.isEmpty(scoreChangeOneDic.getValue()) ? new BigDecimal("1") : new BigDecimal(scoreChangeOneDic.getValue());
|
int reduceOne = memberWalletService.reduce(scoreOne, member.getId(), "score");
|
if (reduceOne == 2) {
|
throw new FebsException("积分余额不足");
|
}
|
BigDecimal scoreToAmountOne = scoreOne.divide(scoreChangeOne, 2, BigDecimal.ROUND_DOWN);
|
//实际支付余额
|
BigDecimal amountActualOne = amountOne.subtract(scoreToAmountOne).setScale(2, BigDecimal.ROUND_DOWN);
|
int balanceOne = memberWalletService.reduce(amountActualOne, member.getId(), "balance");
|
if (balanceOne == 2) {
|
throw new FebsException("余额不足");
|
}
|
orderInfo.setPayOrderNo(orderInfo.getOrderNo());
|
orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
|
orderInfo.setPayTime(new Date());
|
orderInfo.setPayResult("1");
|
orderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
|
mallMoneyFlowService.addMoneyFlow(member.getId(), amountActualOne.negate(), MoneyFlowTypeEnum.PAY.getValue(),
|
orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue(),"余额支付",2);
|
amountActualMsg = amountActualOne.toString();
|
|
stringBuffer.append(orderInfo.getId().toString());
|
stringBuffer.append("@");
|
stringBuffer.append(amountActualMsg);
|
agentProducer.sendOrderGetMsg(stringBuffer.toString());
|
|
orderInfo.setPayMethod("积分加余额");
|
mallMoneyFlowService.addMoneyFlow(member.getId(), scoreOne.negate(),
|
MoneyFlowTypeEnum.SCORE_PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"积分支付",2);
|
break;
|
/**
|
* 积分加微信
|
*/
|
case "3,1":
|
MallMemberWallet mallMemberWalletNTwo = mallMemberWalletMapper.selectWalletByMemberId(member.getId());
|
BigDecimal scoreTwo = mallMemberWalletNTwo.getScore();
|
BigDecimal amountTwo = orderInfo.getAmount();
|
//积分兑换比例
|
DataDictionaryCustom scoreChangeTwoDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
DataDictionaryEnum.SCORE_CHANGE.getType(),
|
DataDictionaryEnum.SCORE_CHANGE.getCode()
|
);
|
BigDecimal scoreChangeTwo = StrUtil.isEmpty(scoreChangeTwoDic.getValue()) ? new BigDecimal("1") : new BigDecimal(scoreChangeTwoDic.getValue());
|
int reduceTwo = memberWalletService.reduce(scoreTwo, member.getId(), "score");
|
if (reduceTwo == 2) {
|
throw new FebsException("积分余额不足");
|
}
|
mallMoneyFlowService.addMoneyFlow(member.getId(), scoreTwo.negate(),
|
MoneyFlowTypeEnum.SCORE_PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"积分支付",2);
|
|
BigDecimal scoreToAmountTwo = scoreTwo.divide(scoreChangeTwo, 2, BigDecimal.ROUND_DOWN);
|
//实际支付余额
|
BigDecimal amountActualTwo = amountTwo.subtract(scoreToAmountTwo).setScale(2, BigDecimal.ROUND_DOWN);
|
orderInfo.setAmount(amountActualTwo);
|
|
BrandWCPayRequestData brandWCPayRequestDataTwo = null;
|
try {
|
brandWCPayRequestDataTwo = iXcxPayService.startPayment(orderInfo);
|
} catch (Exception e) {
|
throw new FebsException("支付失败");
|
}
|
wxResultStr = JSONUtil.toJsonStr(brandWCPayRequestDataTwo);
|
payResultStr = brandWCPayRequestDataTwo.getPrepay_id();
|
orderInfo.setPayMethod("积分加微信");
|
amountActualMsg = amountActualTwo.toString();
|
|
|
stringBuffer.append(orderInfo.getId().toString());
|
stringBuffer.append("@");
|
stringBuffer.append(amountActualMsg);
|
agentProducer.sendOrderGetMsg(stringBuffer.toString());
|
break;
|
default:
|
throw new FebsException("请选择正确的支付方式");
|
|
}
|
if(ObjectUtil.isNotEmpty(payOrderDto.getUseTime())){
|
orderInfo.setUseTime(DateUtil.parseDate(payOrderDto.getUseTime()));
|
}
|
|
//订单支付成功产生一个提货码
|
String takeCode = ShareCodeUtil.toSerialCode(orderInfo.getId());
|
orderInfo.setTakeCode(takeCode);
|
this.baseMapper.updateById(orderInfo);
|
// StringBuffer stringBuffer = new StringBuffer();
|
// stringBuffer.append(orderInfo.getId().toString());
|
// stringBuffer.append("@");
|
// stringBuffer.append(amountActualMsg);
|
// agentProducer.sendOrderGetMsg(stringBuffer.toString());
|
agentProducer.sendRollSendMsg(orderInfo.getId());
|
|
// OrderStateDto orderStateDto = new OrderStateDto();
|
// orderStateDto.setOrderNo(orderInfo.getOrderNo());
|
// String productNames = getProductNames(orderInfo.getMemberId(), orderInfo.getId());
|
// orderStateDto.setGoodsName(StrUtil.isEmpty(productNames)?"商品":productNames);
|
// orderStateDto.setOrderState("已送达自提点");
|
// orderStateDto.setTakeCode(orderInfo.getTakeCode());
|
// String takeUniqueCode = orderInfo.getTakeUniqueCode();
|
// MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByUniqueCode(takeUniqueCode);
|
// orderStateDto.setAddressArea(mallTeamLeader.getAddressArea());
|
// orderStateDto.setOpenId(mallMemberMapper.selectById(orderInfo.getMemberId()).getOpenId());
|
// DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getType(), DataDictionaryEnum.WX_TEMPLATE_ID_ONE.getCode());
|
// orderStateDto.setTemplateId(dataDictionaryCustom.getValue());
|
//// iXcxPayService.pushOrderToAddress(orderStateDto);
|
// iXcxPayService.uniformMessageSend(orderStateDto);
|
Map<String, Object> map = new HashMap<>();
|
map.put("orderInfo", payResultStr);
|
map.put("orderNo", orderInfo.getOrderNo());
|
map.put("orderId", orderInfo.getId());
|
map.put("wxResultStr", wxResultStr);
|
|
return map;
|
}
|
|
private String balancePay(MallOrderInfo orderInfo, String tradePwd, String field) {
|
if (StrUtil.isBlank(tradePwd)) {
|
throw new FebsException("支付密码错误");
|
}
|
|
MallMember mallMember = memberMapper.selectById(orderInfo.getMemberId());
|
if (StrUtil.isBlank(mallMember.getTradePassword())) {
|
throw new FebsException("未设置支付密码");
|
}
|
|
if (!SecureUtil.md5(tradePwd).equals(mallMember.getTradePassword())) {
|
throw new FebsException("支付密码错误");
|
}
|
|
int reduce = memberWalletService.reduce(orderInfo.getAmount().add(orderInfo.getCarriage()), mallMember.getId(), field);
|
if (reduce == 2) {
|
throw new FebsException("余额不足");
|
}
|
return orderInfo.getOrderNo();
|
}
|
|
|
@Override
|
public List<OrderListVo> findOrderList(OrderListDto orderListDto) {
|
log.info("订单查询");
|
MallMember member = LoginUserUtil.getLoginUser();
|
IPage<MallOrderInfo> page = new Page<>(orderListDto.getPageNum(), orderListDto.getPageSize());
|
|
orderListDto.setMemberId(member.getId());
|
// IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectApiOrderListInPage(page, orderListDto);
|
IPage<MallOrderInfo> mallOrderInfos = this.baseMapper.selectNewApiOrderListInPage(page, orderListDto);
|
if (CollUtil.isNotEmpty(mallOrderInfos.getRecords())) {
|
mallOrderInfos.getRecords().forEach(item -> {
|
item.setItems(mallOrderItemMapper.selectListByOrderId(item.getId()));
|
});
|
}
|
return MallOrderInfoConversion.INSTANCE.entitysToVos(mallOrderInfos.getRecords());
|
}
|
|
@Override
|
public OrderDetailVo findOrderDetailsById(Long id) {
|
MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(id);
|
// if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
|
if (ObjectUtil.isNull(orderInfo)) {
|
throw new FebsException("订单不存在");
|
}
|
|
OrderDetailVo orderDetailVo = MallOrderInfoConversion.INSTANCE.entityToDetailVo(orderInfo);
|
|
MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId());
|
if(ObjectUtil.isNotEmpty(expressInfo)){
|
orderDetailVo.setExpressNo(expressInfo.getExpressNo());
|
orderDetailVo.setExpressCom(expressInfo.getExpressCom());
|
}
|
|
if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue() || orderInfo.getStatus() == OrderStatusEnum.REFUNDED.getValue()) {
|
MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId());
|
OrderRefundVo orderRefundVo = MallOrderRefundConversion.INSTANCE.entityToVo(orderRefund);
|
orderDetailVo.setOrderRefund(orderRefundVo);
|
}
|
|
if (OrderStatusEnum.WAIT_PAY.getValue() == orderInfo.getStatus()) {
|
Date endTime = DateUtil.offsetMinute(orderInfo.getOrderTime(), 1440);
|
|
long remainTime = DateUtil.between(new Date(), endTime, DateUnit.SECOND, false);
|
orderDetailVo.setRemainTime(remainTime);
|
}
|
String orderNo = orderInfo.getOrderNo();
|
List<MoneyFlowVo> moneyFlowVos = mallMoneyFlowMapper.selectMoneyFlowByOrderNo(orderNo,orderInfo.getMemberId());
|
orderDetailVo.setMoneyFlowVos(moneyFlowVos);
|
return orderDetailVo;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void confirmOrder(Long id) {
|
Long memberId = LoginUserUtil.getLoginUser().getId();
|
MallMember member = mallMemberMapper.selectById(memberId);
|
MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id);
|
if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
|
throw new FebsException("订单不存在");
|
}
|
|
if (orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) {
|
throw new FebsException("该状态不能确认收货");
|
}
|
|
// if (orderInfo.getDeliveryState() != OrderDeliveryStateEnum.DELIVERY_FINISH.getValue()) {
|
// throw new FebsException("还未送至自提点");
|
// }
|
|
List<MallRefundEntity> mallRefundEntities = mallRefundMapper.selectByItemIdAndOrderIdAndState(null, orderInfo.getId(), 3);
|
if(CollUtil.isNotEmpty(mallRefundEntities)){
|
throw new FebsException("请先处理退款商品");
|
}
|
|
orderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
|
orderInfo.setReceivingTime(new Date());
|
this.baseMapper.updateById(orderInfo);
|
|
//是否返利
|
if(ObjectUtil.isNotEmpty(member.getReferrerId())){
|
String referrerId = member.getReferrerId();
|
MallMember mallMemberParent = memberMapper.selectInfoByInviteId(referrerId);
|
Long parentId = mallMemberParent.getId();
|
String orderNo = orderInfo.getOrderNo();
|
MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOneByOrderNoAndMemberIdAndRtMemberId(orderNo, parentId, member.getId());
|
if(ObjectUtil.isNotEmpty(mallMoneyFlow)){
|
mallMoneyFlow.setStatus(2);
|
mallMoneyFlow.setIsReturn(1);
|
mallMoneyFlowMapper.updateById(mallMoneyFlow);
|
memberWalletService.add(mallMoneyFlow.getAmount(), parentId, "balance");
|
}
|
|
if(ObjectUtil.isNotEmpty(mallMemberParent.getReferrerId())){
|
String referrerIdUp = mallMemberParent.getReferrerId();
|
MallMember mallMemberParentUp = memberMapper.selectInfoByInviteId(referrerIdUp);
|
Long parentIdUp = mallMemberParentUp.getId();
|
MallMoneyFlow mallMoneyFlowUp = mallMoneyFlowMapper.selectOneByOrderNoAndMemberIdAndRtMemberId(orderNo, parentIdUp, parentId);
|
if(ObjectUtil.isNotEmpty(mallMoneyFlowUp)){
|
mallMoneyFlowUp.setStatus(2);
|
mallMoneyFlowUp.setIsReturn(1);
|
mallMoneyFlowMapper.updateById(mallMoneyFlowUp);
|
memberWalletService.add(mallMoneyFlow.getAmount(), parentIdUp, "balance");
|
}
|
}
|
}
|
List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
|
if(CollUtil.isNotEmpty(mallOrderItemList)){
|
for(MallOrderItem mallOrderItem : mallOrderItemList){
|
Long goodsId = mallOrderItem.getGoodsId();
|
MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
|
if(ObjectUtil.isEmpty(mallGoods)){
|
break;
|
}
|
//是否送券 1:是 2:否
|
BigDecimal levelTwoPrice = mallGoods.getLevelTwoPrice();
|
if(BigDecimal.ONE.compareTo(levelTwoPrice) == 0){
|
MallRollPerk mallRollPerk = new MallRollPerk();
|
mallRollPerk.setMemberId(member.getId());
|
mallRollPerk.setState(1);
|
mallRollPerk.setRollId(mallGoods.getLevelThreePrice().longValue());
|
mallRollPerkMapper.insert(mallRollPerk);
|
}
|
//赠送积分
|
BigDecimal levelOnePrice = mallGoods.getLevelOnePrice();
|
if(BigDecimal.ZERO.compareTo(levelOnePrice) <= 0){
|
memberWalletService.add(levelOnePrice, member.getId(), "score");
|
|
mallMoneyFlowService.addMoneyFlow(member.getId(), levelOnePrice, MoneyFlowTypeEnum.STATIC_BONUS.getValue(),
|
orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue(),"赠送积分",2);
|
}
|
}
|
}
|
|
Integer isMember = member.getIsMember();
|
if(AppContants.MEMBER_STATE_NO == isMember){
|
List<MallOrderInfo> mallOrderInfos = this.baseMapper.selectOrderInfoByStatus(OrderStatusEnum.FINISH.getValue());
|
if(CollUtil.isNotEmpty(mallOrderInfos)){
|
DataDictionaryCustom minAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
|
DataDictionaryEnum.MIN_AMOUNT_IS_MEMBER.getType(),
|
DataDictionaryEnum.MIN_AMOUNT_IS_MEMBER.getCode()
|
);
|
BigDecimal minAmount = new BigDecimal(minAmountDic.getValue());//系统设置的累计消费金额
|
BigDecimal accumulateAmount = mallOrderInfos.stream().map(MallOrderInfo::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);//累计消费金额
|
if(minAmount.compareTo(accumulateAmount) <= 0){//用户累计消费大于系统设置的累计消费
|
member.setIsMember(AppContants.MEMBER_STATE_YES);
|
memberMapper.updateById(member);
|
}
|
}
|
}
|
|
}
|
|
@Override
|
public void delOrder(Long id) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
MallOrderInfo orderInfo = this.baseMapper.selectOrderByMemberIdAndId(member.getId(), id);
|
if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
|
throw new FebsException("订单不存在");
|
}
|
|
orderInfo.setDelFlag(AppContants.DEL_FLAG_Y);
|
this.baseMapper.updateById(orderInfo);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void applyRefund(AddRefundDto addRefundDto) {
|
MallOrderInfo orderInfo = this.baseMapper.selectById(addRefundDto.getId());
|
if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
|
throw new FebsException("订单不存在");
|
}
|
|
if (orderInfo.getStatus() == OrderStatusEnum.REFUNDING.getValue()) {
|
throw new FebsException("已提交退款, 请勿重复提交");
|
}
|
|
if (orderInfo.getStatus() != OrderStatusEnum.WAIT_SHIPPING.getValue() && orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) {
|
throw new FebsException("该订单不能退款");
|
}
|
|
Integer beforeStatus = orderInfo.getStatus();
|
MallMember member = LoginUserUtil.getLoginUser();
|
orderInfo.setStatus(OrderStatusEnum.REFUNDING.getValue());
|
this.baseMapper.updateById(orderInfo);
|
|
MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(orderInfo.getId());
|
if (orderRefund == null) {
|
orderRefund = new MallOrderRefund();
|
orderRefund.setOrderId(orderInfo.getId());
|
orderRefund.setMemberId(member.getId());
|
orderRefund.setDesp(addRefundDto.getDesp());
|
orderRefund.setReason(addRefundDto.getReason());
|
orderRefund.setType(addRefundDto.getType());
|
orderRefund.setRefundTime(new Date());
|
orderRefund.setBeforeStatus(beforeStatus);
|
orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
|
|
// 未发货则退运费,发货了则不退
|
if (beforeStatus == 2) {
|
orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
|
} else {
|
orderRefund.setAmount(orderInfo.getAmount());
|
}
|
mallOrderRefundMapper.insert(orderRefund);
|
} else {
|
orderRefund.setDesp(addRefundDto.getDesp());
|
orderRefund.setReason(addRefundDto.getReason());
|
orderRefund.setType(addRefundDto.getType());
|
orderRefund.setRefundTime(new Date());
|
orderRefund.setBeforeStatus(beforeStatus);
|
orderRefund.setStatus(OrderRefundStatusEnum.REFUND_APPLY.getValue());
|
// 未发货则退运费,发货了则不退
|
if (beforeStatus == 2) {
|
orderRefund.setAmount(orderInfo.getAmount().add(orderInfo.getCarriage()));
|
} else {
|
orderRefund.setAmount(orderInfo.getAmount());
|
}
|
mallOrderRefundMapper.updateById(orderRefund);
|
}
|
|
|
MallOrderRefundOperation operation = new MallOrderRefundOperation();
|
operation.setOrderId(orderInfo.getId());
|
operation.setRefundId(orderRefund.getId());
|
operation.setContent(StrUtil.format("用户:{}提交退款申请", member.getName()));
|
mallOrderRefundOperationMapper.insert(operation);
|
}
|
|
@Override
|
public void refundExpress(RefundExpressDto refundExpressDto) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
|
MallOrderRefund orderRefund = mallOrderRefundMapper.selectOrderRefundByOrderId(refundExpressDto.getId());
|
if (!OrderRefundStatusEnum.AGREE.getValue().equals(orderRefund.getStatus())) {
|
throw new FebsException("暂不能提交物流信息");
|
}
|
|
orderRefund.setExpressNo(refundExpressDto.getExpressNo());
|
orderRefund.setExpressCom(refundExpressDto.getExpressCom());
|
orderRefund.setStatus(OrderRefundStatusEnum.EXPRESS_SUBMIT.getValue());
|
mallOrderRefundMapper.updateById(orderRefund);
|
|
MallOrderRefundOperation operation = new MallOrderRefundOperation();
|
operation.setOrderId(refundExpressDto.getId());
|
operation.setRefundId(orderRefund.getId());
|
operation.setContent(StrUtil.format("用户:{}提交物流信息,快递公司:{},单号:{}", member.getName(), refundExpressDto.getExpressCom(), refundExpressDto.getExpressNo()));
|
mallOrderRefundOperationMapper.insert(operation);
|
}
|
|
@Override
|
public void autoCancelOrder(Long id) {
|
MallOrderInfo orderInfo = this.baseMapper.selectById(id);
|
if (orderInfo == null) {
|
log.error("自动取消订单参数错误:{}", id);
|
return;
|
}
|
if (orderInfo.getStatus() == OrderStatusEnum.WAIT_PAY.getValue()) {
|
log.info("自动取消订单:{},{}", orderInfo.getMemberId(), id);
|
orderInfo.setStatus(OrderStatusEnum.CANCEL.getValue());
|
orderInfo.setCancelType(MallOrderInfo.CANCEL_OVERTIME_NO_PAY);
|
this.baseMapper.updateById(orderInfo);
|
|
List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(orderInfo.getId());
|
if(CollUtil.isNotEmpty(mallOrderItemList)){
|
for(MallOrderItem mallOrderItem : mallOrderItemList){
|
MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(mallOrderItem.getSkuId());
|
if (sku == null) {
|
throw new FebsException("购买商品或sku不存在");
|
}
|
|
// if (sku.getStock() < mallOrderItem.getCnt()) {
|
// throw new FebsException(sku.getSkuName() + "库存不足");
|
// }
|
|
MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
|
Integer goodsResult = mallGoodsMapper.updateStockAndVolumeByGoodsId(mallGoods.getId(), mallOrderItem.getCnt());
|
if(1 != goodsResult){
|
throw new FebsException(mallGoods.getGoodsName() + "库存不足");
|
}
|
|
Integer skuResult = mallGoodsSkuMapper.updateStockAndVolumeBySkuId(sku.getId(),mallOrderItem.getCnt());
|
if(1 != skuResult){
|
throw new FebsException(sku.getSkuName() + "库存不足");
|
}
|
}
|
}
|
}
|
}
|
|
@Override
|
@Transactional
|
public void goodsComment(ApiAddCommentDtos addCommentDtos) {
|
Long orderId = addCommentDtos.getOrderId();
|
MallMember member = LoginUserUtil.getLoginUser();
|
MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(orderId);
|
if (orderInfo == null || AppContants.DEL_FLAG_Y == orderInfo.getDelFlag()) {
|
throw new FebsException("订单不存在");
|
}
|
if (OrderStatusEnum.FINISH.getValue() != orderInfo.getStatus()) {
|
throw new FebsException("该状态不能评价");
|
}
|
if (MallOrderInfo.COMMENT_STATE_YES == orderInfo.getCommentState()) {
|
throw new FebsException("该状态不能评价");
|
}
|
|
orderInfo.setCommentState(MallOrderInfo.COMMENT_STATE_YES);
|
this.baseMapper.updateById(orderInfo);
|
|
List<ApiAddCommentDto> apiAddCommentDtos = addCommentDtos.getApiAddCommentDtos();
|
if(CollUtil.isNotEmpty(apiAddCommentDtos)){
|
for(ApiAddCommentDto apiAddCommentDto : apiAddCommentDtos){
|
Long skuId = apiAddCommentDto.getSkuId();
|
MallGoodsSku mallGoodsSku = mallGoodsSkuMapper.selectById(skuId);
|
Long goodsId = apiAddCommentDto.getGoodsId();
|
MallGoods mallGoods = mallGoodsMapper.selectById(goodsId);
|
MallGoodsComment mallGoodsComment = MallGoodsCommentConversion.INSTANCE.dtoToEntity(apiAddCommentDto);
|
mallGoodsComment.setMemberId(member.getId());
|
mallGoodsComment.setOrderId(orderId);
|
mallGoodsComment.setGoodsName(mallGoods.getGoodsName());
|
mallGoodsComment.setSkuName(mallGoodsSku.getSkuName());
|
mallGoodsComment.setStyleId(mallGoodsSku.getStyleId());
|
mallGoodsComment.setStyleName(mallGoodsSku.getStyleName());
|
mallGoodsComment.setShowState(MallGoodsComment.SHOW_STATE_ENABLE);
|
mallGoodsCommentMapper.insert(mallGoodsComment);
|
}
|
}
|
}
|
|
@Autowired
|
private WeixinServiceUtil weixinServiceUtil;
|
private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class);
|
|
@Override
|
@Transactional
|
public FebsResponse refundOrder(Long id) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
MallOrderInfo mallOrderInfo = this.baseMapper.selectById(id);
|
if(ObjectUtil.isEmpty(mallOrderInfo)){
|
return new FebsResponse().fail().message("订单不存在");
|
}
|
Integer status = mallOrderInfo.getStatus();
|
if(OrderStatusEnum.WAIT_SHIPPING.getValue() != status){
|
return new FebsResponse().fail().message("订单不是待发货状态");
|
}
|
Integer deliveryState = mallOrderInfo.getDeliveryState();
|
if(1 != deliveryState){
|
return new FebsResponse().fail().message("订单不是待配送状态");
|
}
|
//根据子订单生成退款记录
|
List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(id);
|
if(CollUtil.isEmpty(mallOrderItemList)){
|
return new FebsResponse().fail().message("订单不存在");
|
}
|
for(MallOrderItem mallOrderItem : mallOrderItemList){
|
QueryWrapper<MallRefundEntity> objectQueryWrapper = new QueryWrapper<>();
|
objectQueryWrapper.eq("member_id",member.getId());
|
objectQueryWrapper.eq("order_id",mallOrderInfo.getId());
|
objectQueryWrapper.eq("item_id",mallOrderItem.getId());
|
MallRefundEntity mallRefund = mallRefundMapper.selectOne(objectQueryWrapper);
|
MallRefundEntity mallRefundEntity = new MallRefundEntity();
|
if(ObjectUtil.isEmpty(mallRefund)){
|
mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_RITEM"+mallOrderItem.getId());
|
mallRefundEntity.setMemberId(member.getId());
|
mallRefundEntity.setOrderId(mallOrderInfo.getId());
|
mallRefundEntity.setItemId(mallOrderItem.getId());
|
if("余额支付".equals(mallOrderInfo.getPayMethod())){
|
mallRefundEntity.setType(3);
|
}else if("微信支付".equals(mallOrderInfo.getPayMethod())){
|
mallRefundEntity.setType(1);
|
}else{
|
mallRefundEntity.setType(3);
|
}
|
mallRefundEntity.setState(3);
|
mallRefundEntity.setAmount(mallOrderItem.getAmount());
|
mallRefundMapper.insert(mallRefundEntity);
|
}else{
|
if(mallRefund.getState() == 1){
|
return new FebsResponse().fail().message("订单已退款");
|
}
|
if(mallRefund.getState() == 2 || mallRefund.getState() == 3){
|
mallRefundEntity.setId(mallRefund.getId());
|
mallRefundEntity.setRefundNo(mallRefund.getRefundNo());
|
mallRefundEntity.setMemberId(mallRefund.getMemberId());
|
mallRefundEntity.setOrderId(mallRefund.getOrderId());
|
mallRefundEntity.setItemId(mallRefund.getItemId());
|
mallRefundEntity.setType(mallRefund.getType());
|
mallRefundEntity.setState(3);
|
mallRefundEntity.setAmount(mallRefund.getAmount());
|
mallRefundMapper.updateById(mallRefundEntity);
|
}
|
}
|
ApiLeaderRefundOrderDto apiLeaderRefundOrderDto = new ApiLeaderRefundOrderDto();
|
apiLeaderRefundOrderDto.setOrderId(mallOrderInfo.getId());
|
apiLeaderRefundOrderDto.setItemId(mallOrderItem.getId());
|
apiLeaderRefundOrderDto.setAgreeState(1);
|
iApiMallTeamLeaderService.leaderRefundOrder(apiLeaderRefundOrderDto);
|
}
|
return new FebsResponse().success();
|
}
|
|
@Override
|
public FebsResponse applyRefundOrder(ApplyRefundOrderDto applyRefundOrderDto) {
|
Long orderId = applyRefundOrderDto.getOrderId();
|
Long itemId = applyRefundOrderDto.getItemId();
|
MallMember member = LoginUserUtil.getLoginUser();
|
MallOrderInfo mallOrderInfo = this.baseMapper.selectById(orderId);
|
if(ObjectUtil.isEmpty(mallOrderInfo)){
|
return new FebsResponse().fail().message("订单不存在");
|
}
|
|
List<MallRefundEntity> mallRefundEntitieSuccess = mallRefundMapper.selectByItemIdAndOrderIdAndState(itemId,orderId,1);
|
List<MallRefundEntity> mallRefundEntitiesIng = mallRefundMapper.selectByItemIdAndOrderIdAndState(itemId,orderId,3);
|
if(CollUtil.isNotEmpty(mallRefundEntitieSuccess) || CollUtil.isNotEmpty(mallRefundEntitiesIng)){
|
return new FebsResponse().fail().message("该订单无法申请退款");
|
}
|
|
MallRefundEntity mallRefundEntity = new MallRefundEntity();
|
MallOrderItem mallOrderItem = mallOrderItemMapper.selectById(itemId);
|
if(ObjectUtil.isNotEmpty(mallOrderItem)){
|
mallOrderItem.setState(2);
|
mallOrderItemMapper.updateById(mallOrderItem);
|
mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_RITEM"+itemId);
|
mallRefundEntity.setItemId(itemId);
|
}else{
|
|
mallRefundEntity.setRefundNo(mallOrderInfo.getOrderNo()+"_R"+orderId);
|
}
|
mallRefundEntity.setRefundReason(applyRefundOrderDto.getRefundReason());
|
mallRefundEntity.setRefundRemark(applyRefundOrderDto.getRefundRemark());
|
mallRefundEntity.setRefundPic(applyRefundOrderDto.getRefundPic());
|
mallRefundEntity.setMemberId(member.getId());
|
mallRefundEntity.setState(3);
|
mallRefundEntity.setType(applyRefundOrderDto.getType());
|
mallRefundEntity.setOrderId(orderId);
|
mallRefundEntity.setAmount(mallOrderItem.getAmount());
|
mallRefundMapper.insert(mallRefundEntity);
|
return new FebsResponse().success().message("已申请");
|
}
|
|
@Override
|
public FebsResponse cancelRefundOrder(Long id) {
|
MallRefundEntity mallRefundEntity = mallRefundMapper.selectById(id);
|
mallRefundEntity.setState(2);
|
mallRefundMapper.updateById(mallRefundEntity);
|
Long itemId = mallRefundEntity.getItemId();
|
MallOrderItem mallOrderItem = mallOrderItemMapper.selectById(itemId);
|
mallOrderItem.setState(1);
|
mallOrderItemMapper.updateById(mallOrderItem);
|
return new FebsResponse().success().message("已取消");
|
}
|
|
@Override
|
public FebsResponse createOrderVerify(ApiCreateOrderVerifyDto apiCreateOrderVerifyDto) {
|
Long memberId = LoginUserUtil.getLoginUser().getId();
|
MallMember member = memberMapper.selectById(memberId);
|
List<AddOrderItemDto> items = apiCreateOrderVerifyDto.getItems();
|
if(CollUtil.isEmpty(items)){
|
return new FebsResponse().fail().message("请先挑选商品");
|
}
|
for (AddOrderItemDto item : apiCreateOrderVerifyDto.getItems()) {
|
MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
|
if (sku == null) {
|
return new FebsResponse().fail().message("购买商品或sku不存在");
|
}
|
// if("样品".equals(sku.getSample())){
|
// List<MallOrderItem> mallOrderItems = mallOrderItemMapper.selectItemBySkuIdUnCancel(sku.getId(), member.getId());
|
// if (CollUtil.isNotEmpty(mallOrderItems)) {
|
// return new FebsResponse().fail().message("样品只能购买一次");
|
// }
|
// Integer cnt = item.getCnt();
|
// if(1 < cnt){
|
// return new FebsResponse().fail().message("样品只能购买一件");
|
// }
|
// }else{
|
// //验证用户的等级
|
// if(AgentLevelEnum.ZERO_LEVEL.name().equals(member.getLevel())){
|
// return new FebsResponse().fail().message("请先申请成为合伙人");
|
// }
|
// }
|
|
if (sku.getStock() < item.getCnt()) {
|
return new FebsResponse().fail().message(sku.getSkuName() + "库存不足");
|
}
|
|
MallGoods mallGoods = mallGoodsMapper.selectById(sku.getGoodsId());
|
if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
|
return new FebsResponse().fail().message(mallGoods.getGoodsName() + "已下架");
|
}
|
}
|
|
return new FebsResponse().success();
|
}
|
|
public static void main(String[] args) {
|
System.out.print(AgentLevelEnum.ZERO_LEVEL.name());
|
}
|
|
}
|