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.utils.AppContants;
|
import cc.mrbird.febs.common.utils.LoginUserUtil;
|
import cc.mrbird.febs.common.utils.MallUtils;
|
import cc.mrbird.febs.common.utils.RedisUtils;
|
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.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.ApiShopApplyVo;
|
import cc.mrbird.febs.mall.vo.OrderDetailVo;
|
import cc.mrbird.febs.mall.vo.OrderListVo;
|
import cc.mrbird.febs.mall.vo.OrderRefundVo;
|
import cc.mrbird.febs.pay.model.AgreementPayDto;
|
import cc.mrbird.febs.pay.model.AgreementSignDto;
|
import cc.mrbird.febs.pay.model.UnipayDto;
|
import cc.mrbird.febs.pay.service.IPayService;
|
import cc.mrbird.febs.pay.service.UnipayService;
|
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.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
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.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.text.DecimalFormat;
|
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 IMallAchieveService mallAchieveService;
|
private final MallAchieveRecordMapper mallAchieveRecordMapper;
|
private final UnipayService unipayService;
|
|
private final MallMemberBankSignMapper mallMemberBankSignMapper;
|
private final MallMemberBankMapper mallMemberBankMapper;
|
private final MallShopApplyMapper mallShopApplyMapper;
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Long createOrder(AddOrderDto addOrderDto) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
|
MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
|
if (address == null) {
|
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.setName(address.getName());
|
orderInfo.setAddress(address.getArea() + address.getAddress());
|
orderInfo.setPhone(address.getPhone());
|
orderInfo.setLatitude(address.getLatitude());
|
orderInfo.setLongitude(address.getLongitude());
|
orderInfo.setRemark(addOrderDto.getRemark());
|
orderInfo.setOrderType(addOrderDto.getOrderType());
|
|
if (CollUtil.isEmpty(addOrderDto.getItems())) {
|
throw new FebsException("参数错误");
|
}
|
|
int deliverType = ObjectUtil.isEmpty(addOrderDto.getDeliverType()) ? 1 : addOrderDto.getDeliverType();
|
if(2 == deliverType){
|
if(ObjectUtil.isEmpty(addOrderDto.getShopId())){
|
throw new FebsException("请选择门店");
|
}
|
Long shopId = addOrderDto.getShopId();
|
MallShopApply mallShopApply = mallShopApplyMapper.selectById(shopId);
|
if(ObjectUtil.isEmpty(mallShopApply)){
|
throw new FebsException("请选择门店");
|
}
|
if(MallShopApply.APPLY_AGREE != mallShopApply.getStatus()){
|
throw new FebsException("请选择门店");
|
}
|
orderInfo.setShopId(shopId);
|
}
|
|
this.baseMapper.insert(orderInfo);
|
BigDecimal total = BigDecimal.ZERO;
|
BigDecimal carriage = BigDecimal.ZERO;
|
for (AddOrderItemDto item : addOrderDto.getItems()) {
|
MallOrderItem orderItem = new MallOrderItem();
|
|
// 积分商品提交订单
|
if (addOrderDto.getOrderType() == 2) {
|
MallGoods mallGoods = mallGoodsMapper.selectById(item.getSkuId());
|
if (mallGoods.getStock() < item.getCnt()) {
|
throw new FebsException(mallGoods.getGoodsName() + "库存不足");
|
}
|
|
if (MallGoods.ISSALE_STATUS_DISABLED.equals(mallGoods.getIsSale())) {
|
throw new FebsException(mallGoods.getGoodsName() + "已下架");
|
}
|
|
BigDecimal amount = mallGoods.getScore().multiply(BigDecimal.valueOf(item.getCnt()));
|
orderItem.setAmount(amount);
|
orderItem.setCnt(item.getCnt());
|
orderItem.setOrderId(orderInfo.getId());
|
orderItem.setPrice(mallGoods.getScore());
|
orderItem.setGoodsId(mallGoods.getId());
|
orderItem.setGoodsName(mallGoods.getGoodsName());
|
orderItem.setStyleName(mallGoods.getGoodsName());
|
orderItem.setSkuName(mallGoods.getGoodsName());
|
orderItem.setSkuImage(mallGoods.getThumb());
|
|
total = total.add(amount);
|
} else {
|
MallGoodsSku sku = mallGoodsSkuMapper.selectSkuInfoById(item.getSkuId());
|
if (sku == null) {
|
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() + "已下架");
|
}
|
|
BigDecimal amount = sku.getPresentPrice().multiply(BigDecimal.valueOf(item.getCnt()));
|
orderItem.setAmount(amount);
|
orderItem.setCnt(item.getCnt());
|
orderItem.setOrderId(orderInfo.getId());
|
orderItem.setPrice(sku.getPresentPrice());
|
orderItem.setGoodsId(sku.getGoodsId());
|
orderItem.setGoodsName(sku.getGoodsName());
|
orderItem.setSkuId(sku.getId());
|
orderItem.setStyleName(sku.getStyleName());
|
orderItem.setSkuName(sku.getSkuName());
|
orderItem.setSkuImage(sku.getSkuImage());
|
orderItem.setIsNormal(mallGoods.getIsNormal());
|
orderItem.setCostPrice(sku.getCostPrice());
|
|
total = total.add(amount);
|
carriage = carriage.add(mallGoods.getCarriage());
|
|
sku.setStock(sku.getStock() - item.getCnt());
|
sku.setSkuVolume(sku.getSkuVolume() + item.getCnt());
|
mallGoodsSkuMapper.updateById(sku);
|
|
if (addOrderDto.getType() == 1) {
|
mallShoppingCartMapper.delBySkuId(sku.getId(), member.getId());
|
}
|
}
|
mallOrderItemMapper.insert(orderItem);
|
}
|
|
orderInfo.setAmount(total);
|
if(2 == deliverType){
|
orderInfo.setDeliverType(2);
|
orderInfo.setCarriage(BigDecimal.ZERO);
|
}else{
|
orderInfo.setDeliverType(1);
|
orderInfo.setCarriage(carriage);
|
}
|
this.baseMapper.updateById(orderInfo);
|
|
agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 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);
|
}
|
|
// public static void main(String[] args) {
|
// String unipayStr = "{\"r1_MerchantNo\":\"888118000001971\",\"rd_Pic\":\"\",\"r6_FrpCode\":\"ALIPAY_H5\",\"r7_TrxNo\":\"100222082332490699\",\"r0_Version\":\"1.0\",\"r3_Amount\":\"0.01\",\"r4_Cur\":\"1\",\"r2_OrderNo\":\"2022082212510288174\",\"rb_CodeMsg\":\"\",\"hmac\":\"1659BB77DEDDF9956EA4D6DF227C3B14\",\"ra_Code\":100,\"rc_Result\":\"<html><head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><title></title></head><body><script type='text/javascript'>location.href='https://qr.alipay.com/bax019737vbdwoisxcdp00a2';</script></body></html>\"}";
|
// JSONObject jsonObject = JSONUtil.parseObj(unipayStr);
|
// String r7_trxNo = (String) jsonObject.get("r7_TrxNo");
|
// System.out.println(r7_trxNo);
|
// }
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public Map<String, Object> payOrder(PayOrderDto payOrderDto) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
MallOrderInfo orderInfo = this.baseMapper.selectOrderDetailsById(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 rcResult = "";
|
switch (payOrderDto.getType()) {
|
case "1":
|
UnipayDto unipayDtoWx = new UnipayDto();
|
// unipayDto.setAmount(new BigDecimal("0.01"));
|
unipayDtoWx.setAmount(orderInfo.getAmount());
|
unipayDtoWx.setFrpCode("WEIXIN_APP3");
|
unipayDtoWx.setTradeMerchantNo("777180800385820");
|
unipayDtoWx.setOrderNo(orderInfo.getOrderNo());
|
List<MallOrderItem> itemsWx = orderInfo.getItems();
|
if(CollUtil.isEmpty(itemsWx)){
|
unipayDtoWx.setProductName("商品");
|
}else{
|
unipayDtoWx.setProductName(itemsWx.get(0).getGoodsName());
|
}
|
String unipayStrWx = unipayService.unipay(unipayDtoWx);
|
if("fail" == unipayStrWx){
|
throw new FebsException("支付失败");
|
}else{
|
// JSONUtil.parseObj(unipayStr);
|
JSONObject jsonObject = JSONUtil.parseObj(unipayStrWx);
|
payResultStr = (String) jsonObject.get("r7_TrxNo");
|
rcResult = (String) jsonObject.get("rc_Result");
|
}
|
orderInfo.setPayOrderNo(payResultStr);
|
// orderInfo.setPayOrderNo(payOrderDto.getPayOrderNo());
|
// orderInfo.setPayImage(payOrderDto.getPayImage());
|
orderInfo.setPayMethod("微信支付");
|
break;
|
case "2":
|
// if (StrUtil.isNotBlank(orderInfo.getPayOrderNo())) {
|
// payResultStr = orderInfo.getPayOrderNo();
|
// } else {
|
// payResultStr = payService.aliPay(orderInfo);
|
// }
|
UnipayDto unipayDto = new UnipayDto();
|
// unipayDto.setAmount(new BigDecimal("0.01"));
|
unipayDto.setAmount(orderInfo.getAmount());
|
unipayDto.setFrpCode("ALIPAY_H5");
|
unipayDto.setTradeMerchantNo("777184100385821");
|
unipayDto.setOrderNo(orderInfo.getOrderNo());
|
List<MallOrderItem> items = orderInfo.getItems();
|
if(CollUtil.isEmpty(items)){
|
unipayDto.setProductName("商品");
|
}else{
|
unipayDto.setProductName(items.get(0).getGoodsName());
|
}
|
String unipayStr = unipayService.unipay(unipayDto);
|
if("fail" == unipayStr){
|
throw new FebsException("支付失败");
|
}else{
|
// JSONUtil.parseObj(unipayStr);
|
JSONObject jsonObject = JSONUtil.parseObj(unipayStr);
|
payResultStr = (String) jsonObject.get("r7_TrxNo");
|
rcResult = (String) jsonObject.get("rc_Result");
|
}
|
orderInfo.setPayOrderNo(payResultStr);
|
orderInfo.setPayMethod("支付宝支付");
|
// agentProducer.sendOrderReturn(orderInfo.getId());
|
break;
|
case "3":
|
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");
|
this.baseMapper.updateById(orderInfo);
|
//新增业绩,第一次购买套餐则升级用户为普通会员
|
|
addAchieveAndUpdateLevel(orderInfo.getId(),member.getId());
|
|
mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.BALANCE.getValue());
|
agentProducer.sendAutoLevelUpMsg(member.getId());
|
// agentProducer.sendOrderReturn(orderInfo.getId());
|
agentProducer.sendReturnMoneyMsg(orderInfo.getId());
|
break;
|
case "4":
|
if (orderInfo.getOrderType() != 2) {
|
throw new FebsException("非积分订单,无法使用积分支付");
|
}
|
payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "score");
|
|
orderInfo.setPayOrderNo(orderInfo.getOrderNo());
|
orderInfo.setPayMethod("积分支付");
|
orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
|
orderInfo.setPayTime(new Date());
|
orderInfo.setPayResult("1");
|
|
mallMoneyFlowService.addMoneyFlow(member.getId(), orderInfo.getAmount().negate(), MoneyFlowTypeEnum.PAY.getValue(), orderInfo.getOrderNo(), FlowTypeEnum.SCORE.getValue());
|
break;
|
case "5":
|
// AgreementSignDto agreementSignDto = new AgreementSignDto();
|
// agreementSignDto.setOrderNo(orderInfo.getOrderNo());
|
// agreementSignDto.setSmsCode(payOrderDto.getSmsCode());
|
// String agreementSignStr = unipayService.agreementSign(agreementSignDto);
|
// if("fail".equals(agreementSignStr)){
|
// throw new FebsException("支付失败");
|
// }else{
|
// JSONObject jsonObject = JSONUtil.parseObj(agreementSignStr);
|
// payResultStr = (String) jsonObject.get("biz_code");
|
// String signData = (String) jsonObject.get("data");
|
// String signBizMsg = (String) jsonObject.get("biz_msg");
|
//
|
// JSONObject signDatajsonObject = JSONUtil.parseObj(signData);
|
// String err_msg = (String) signDatajsonObject.get("err_msg");
|
// if(!"JS000000".equals(payResultStr)){
|
// throw new FebsException(signBizMsg);
|
// }
|
// if(ObjectUtil.isNotNull(signDatajsonObject.get("err_code"))){
|
// throw new FebsException(err_msg);
|
// }
|
// }
|
|
AgreementPayDto agreementPayDto = new AgreementPayDto();
|
agreementPayDto.setOrderNo(orderInfo.getOrderNo());
|
|
BigDecimal value = orderInfo.getAmount().setScale(2, BigDecimal.ROUND_DOWN);
|
DecimalFormat decimalFormat = new DecimalFormat("0.00#");
|
String strVal = decimalFormat.format(value);
|
agreementPayDto.setOrderAmount(new BigDecimal(strVal));
|
agreementPayDto.setOrderTime(DateUtil.now());
|
List<MallOrderItem> itemsGoods = orderInfo.getItems();
|
if(CollUtil.isEmpty(itemsGoods)){
|
agreementPayDto.setOrderDesc("商品");
|
}else{
|
agreementPayDto.setOrderDesc(itemsGoods.get(0).getGoodsName());
|
}
|
Long bankId = payOrderDto.getBankId() == null ? 0L : payOrderDto.getBankId();
|
MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(bankId);
|
if(ObjectUtil.isEmpty(mallMemberBank)){
|
throw new FebsException("银行卡未添加");
|
}
|
String bankNo = mallMemberBank.getBankNo();
|
MallMemberBankSign mallMemberBankSign = mallMemberBankSignMapper.selectOneByMemberIdAndBankCardNo(member.getId(), bankNo);
|
if(ObjectUtil.isEmpty(mallMemberBankSign)){
|
throw new FebsException("银行卡未签约");
|
}
|
agreementPayDto.setBankNo(bankNo);
|
String agreementPayStr = unipayService.agreementPay(agreementPayDto);
|
|
if("fail".equals(agreementPayStr)){
|
throw new FebsException("支付失败");
|
}else{
|
JSONObject jsonObject = JSONUtil.parseObj(agreementPayStr);
|
payResultStr = (String) jsonObject.get("biz_code");
|
String payBizMsg = (String) jsonObject.get("biz_msg");
|
if(!"JS000000".equals(payResultStr)){
|
throw new FebsException(payBizMsg);
|
}
|
}
|
orderInfo.setPayMethod("快捷协议支付");
|
break;
|
default:
|
|
}
|
|
this.baseMapper.updateById(orderInfo);
|
Map<String, Object> map = new HashMap<>();
|
map.put("orderInfo", payResultStr);
|
map.put("orderNo", orderInfo.getOrderNo());
|
map.put("orderId", orderInfo.getId());
|
map.put("rcResult", rcResult);
|
|
return map;
|
}
|
|
/**
|
* 新增业绩,第一次购买套餐则升级用户为普通会员
|
* @param orderId
|
* @param memberId
|
*/
|
private void addAchieveAndUpdateLevel(Long orderId,Long memberId){
|
MallOrderInfo orderInfo = this.baseMapper.selectById(orderId);
|
MallMember member = memberMapper.selectById(memberId);
|
|
boolean hasTc = false;
|
BigDecimal achieveAmount = BigDecimal.ZERO;
|
List<MallOrderItem> orderItems = this.baseMapper.getMallOrderItemByOrderId(orderId);
|
if (CollUtil.isNotEmpty(orderItems)) {
|
for (MallOrderItem orderItem : orderItems) {
|
MallGoods mallGoods = mallGoodsMapper.selectById(orderItem.getGoodsId());
|
MallGoodsSku sku = mallGoodsSkuMapper.selectById(orderItem.getSkuId());
|
if (mallGoods.getIsNormal() == 2) {
|
hasTc = true;
|
achieveAmount = achieveAmount.add(sku.getPresentPrice().multiply(new BigDecimal(orderItem.getCnt())));
|
}
|
}
|
}
|
|
if (hasTc){
|
if(achieveAmount.compareTo(BigDecimal.ZERO) > 0) {
|
// 添加业绩
|
MallAchieveRecord mallAchieveRecord = new MallAchieveRecord();
|
mallAchieveRecord.setMemberId(memberId);
|
mallAchieveRecord.setAmount(achieveAmount);
|
mallAchieveRecord.setAchieveTime(orderInfo.getPayTime());
|
mallAchieveRecord.setOrderId(orderInfo.getId());
|
mallAchieveRecord.setIsNormal(2);
|
mallAchieveRecord.setPayTime(orderInfo.getPayTime());
|
mallAchieveRecordMapper.insert(mallAchieveRecord);
|
//得到三倍补助
|
// BigDecimal multiply = achieveAmount.multiply(new BigDecimal(3));
|
// memberWalletService.add(multiply, memberId, "commission");
|
|
}
|
if(member.getLevel().equals(MemberLevelEnum.FANS.getType())){
|
member.setLevel(MemberLevelEnum.NORMAL.getType());
|
memberMapper.updateById(member);
|
}
|
}
|
}
|
|
public static void main(String[] args) {
|
String str = "{\"biz_code\":\"JS000000\",\"biz_msg\":\"成功\",\"data\":\"{\\\"order_status\\\":\\\"P2000\\\",\\\"jp_order_no\\\":\\\"100120220826446740396081496064\\\",\\\"err_msg\\\":\\\"短信验证码不符\\\",\\\"err_code\\\":\\\"CP110026\\\",\\\"sign_no\\\":\\\"\\\",\\\"mch_order_no\\\":\\\"NO_2022082618263952399\\\"}\",\"mch_no\":\"888118000001971\",\"rand_str\":\"an2w7ulf5ru6upkk5bdg441kdi3gnpvu\",\"resp_code\":\"SUCCESS\",\"sec_key\":\"\",\"sign\":\"NiJXRTSIZ9xZMUOwEHiEHdZXmgL2cHUU5WUa1NbMRRzui0DIiuZSW4e31LjnBxwVwmy3uuPMP+tqhY8VLyC8uCFOdGdZI7e72VuRvyvaiW7/sqCrsfgPOBEjiGE/CmSMRoEXv9HmqCyNBF6iHSEhQJql5Yge30dQdyB6xFfqjk0=\",\"sign_type\":\"2\"}";
|
|
JSONObject jsonObject = JSONUtil.parseObj(str);
|
String payResultStr = (String) jsonObject.get("biz_code");
|
String signBizMsg = (String) jsonObject.get("biz_msg");
|
String signData = (String) jsonObject.get("data");
|
|
JSONObject signDatajsonObject = JSONUtil.parseObj(signData);
|
String err_msg = (String) signDatajsonObject.get("err_msg");
|
if(ObjectUtil.isNotNull(signDatajsonObject.get("err_code"))){
|
System.out.println(err_msg);
|
}
|
}
|
|
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) {
|
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);
|
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()) {
|
throw new FebsException("订单不存在");
|
}
|
|
OrderDetailVo orderDetailVo = MallOrderInfoConversion.INSTANCE.entityToDetailVo(orderInfo);
|
|
Integer deliverType = (ObjectUtil.isEmpty(orderInfo.getDeliverType()) ? new Integer(0):orderInfo.getDeliverType());
|
if (orderInfo.getStatus() == OrderStatusEnum.WAIT_FINISH.getValue() && 2 != deliverType) {
|
MallExpressInfo expressInfo = expressInfoMapper.selectByOrderId(orderInfo.getId());
|
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(), 15);
|
|
long remainTime = DateUtil.between(new Date(), endTime, DateUnit.SECOND, false);
|
orderDetailVo.setRemainTime(remainTime);
|
}
|
if(2 == deliverType){
|
MallShopApply mallShopApply = mallShopApplyMapper.selectById(orderInfo.getShopId());
|
if(ObjectUtil.isNotEmpty(mallShopApply)){
|
ApiShopApplyVo apiShopApplyVo = new ApiShopApplyVo();
|
apiShopApplyVo.setName(mallShopApply.getName());
|
apiShopApplyVo.setPhone(mallShopApply.getPhone());
|
apiShopApplyVo.setSaleArea(mallShopApply.getSaleArea());
|
apiShopApplyVo.setLatitude(mallShopApply.getLatitude());
|
apiShopApplyVo.setLongitude(mallShopApply.getLongitude());
|
apiShopApplyVo.setShopName(mallShopApply.getShopName());
|
apiShopApplyVo.setAddress(mallShopApply.getAddress());
|
orderDetailVo.setApiShopApplyVo(apiShopApplyVo);
|
}
|
}
|
return orderDetailVo;
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void confirmOrder(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 (orderInfo.getStatus() != OrderStatusEnum.WAIT_FINISH.getValue()) {
|
throw new FebsException("该状态不能确认收货");
|
}
|
|
orderInfo.setStatus(OrderStatusEnum.FINISH.getValue());
|
orderInfo.setReceivingTime(new Date());
|
this.baseMapper.updateById(orderInfo);
|
}
|
|
@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);
|
}
|
}
|
|
@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);
|
}
|
}
|
}
|
|
@Override
|
public FebsResponse bangCardSign(BangCardSignDto bangCardSignDto) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
Long memberId = member.getId();
|
String bankCard = bangCardSignDto.getBankCard();
|
MallMemberBankSign mallMemberBankSign = mallMemberBankSignMapper.selectOneByMemberIdAndBankCardNo(memberId,bankCard);
|
if(ObjectUtil.isNotEmpty(mallMemberBankSign)){
|
return new FebsResponse().success().data(mallMemberBankSign);
|
}else{
|
return new FebsResponse().success();
|
}
|
}
|
|
}
|