Administrator
7 days ago e12b33379eccfeead532f677a99c7f9e41e34a0d
src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.common.utils.RedisUtils;
import cc.mrbird.febs.mall.dto.AdminMallInvoiceDto;
import cc.mrbird.febs.mall.dto.ApiMallInvoiceDto;
import cc.mrbird.febs.mall.entity.MallInvoice;
@@ -16,15 +17,20 @@
import cc.mrbird.febs.mall.service.MallInvoiceService;
import cc.mrbird.febs.mall.vo.AdminMallOrderInfoVo;
import cc.mrbird.febs.mall.vo.ApiMallInvoiceVo;
import cc.mrbird.febs.pay.service.WxFaPiaoService;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.List;
@Slf4j
@@ -34,6 +40,8 @@
    private final MallOrderInfoMapper mallOrderInfoMapper;
    private final MallOrderItemMapper mallOrderItemMapper;
    private final RedisUtils redisUtils;
    private final WxFaPiaoService wxFaPiaoService;
    @Override
    public FebsResponse getInvoices(ApiMallInvoiceDto apiMallInvoiceDto) {
        MallMember member = LoginUserUtil.getLoginUser();
@@ -65,26 +73,28 @@
            String payOrderNo = mallOrderInfo.getPayOrderNo();
            List<MallInvoice> mallInvoices = this.baseMapper.selectByFapiaoApplyIdAndMemberId(payOrderNo, memberId);
            if(CollUtil.isNotEmpty(mallInvoices)){
                continue;
                MallInvoice mallInvoice = mallInvoices.get(0);
                mallInvoice.setStatus(mallOrderInfo.getStatus());
                this.baseMapper.updateById(mallInvoice);
            }else{
                MallInvoice mallInvoice = new MallInvoice();
                mallInvoice.setMemberId(memberId);
                mallInvoice.setFapiaoApplyId(payOrderNo);
                mallInvoice.setOrderNo(mallOrderInfo.getOrderNo());
                mallInvoice.setOrderId(mallOrderInfo.getId());
                mallInvoice.setStatus(mallOrderInfo.getStatus());
                mallInvoice.setAmount(mallOrderInfo.getAmount());
                List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(mallOrderInfo.getId());
                mallInvoice.setGoodsImg(mallOrderItemList.get(0).getSkuImage());
                mallInvoice.setState(0);
                this.baseMapper.insert(mallInvoice);
            }
            MallInvoice mallInvoice = new MallInvoice();
            mallInvoice.setMemberId(memberId);
            mallInvoice.setFapiaoApplyId(payOrderNo);
            mallInvoice.setOrderNo(mallOrderInfo.getOrderNo());
            mallInvoice.setOrderId(mallOrderInfo.getId());
            mallInvoice.setStatus(mallOrderInfo.getStatus());
            mallInvoice.setAmount(mallOrderInfo.getAmount());
            List<MallOrderItem> mallOrderItemList = mallOrderItemMapper.selectListByOrderId(mallOrderInfo.getId());
            mallInvoice.setGoodsImg(mallOrderItemList.get(0).getSkuImage());
            mallInvoice.setState(0);
            this.baseMapper.insert(mallInvoice);
            /**
             * 更新订单为已开票
             */
            mallOrderInfo.setIsInvoice(1);
            mallOrderInfoMapper.updateById(mallOrderInfo);
        }
    }
@@ -94,4 +104,85 @@
        Page<MallInvoice> page = new Page<>(request.getPageNum(), request.getPageSize());
        return  this.baseMapper.getInvoiceListInPage(page, mallInvoiceDto);
    }
    @Override
    public List<MallOrderItem> invoiceItemList() {
        Long existToken = Long.parseLong(redisUtils.getString("ADMIN_INVOICE_ID"));
        MallInvoice mallInvoice = this.baseMapper.selectById(existToken);
        if(ObjectUtil.isEmpty(mallInvoice)){
            return null;
        }
        return this.baseMapper.getInvoiceItemList(mallInvoice);
    }
    @Override
    @Transactional
    public FebsResponse addInvoiceUrl(MallInvoice mallInvoice) {
        Long id = mallInvoice.getId();
        MallInvoice mallInvoiceOld = this.baseMapper.selectById(id);
        if(ObjectUtil.isEmpty(mallInvoiceOld)){
            return new FebsResponse().fail().message("开票信息异常。");
        }
        Integer status = mallInvoiceOld.getStatus();
        if(OrderStatusEnum.FINISH.getValue() != status){
            return new FebsResponse().fail().message("订单还未完成,请勿开发票。");
        }
        mallInvoiceOld.setInvoiceUrl(mallInvoice.getInvoiceUrl());
        mallInvoiceOld.setState(2);
        this.baseMapper.updateById(mallInvoiceOld);
        return new FebsResponse().success();
    }
    @Override
    @Transactional
    public FebsResponse updateInvoiceDetail(Long id) {
        MallInvoice mallInvoice = this.baseMapper.selectById(id);
        if(ObjectUtil.isEmpty(mallInvoice)){
            return new FebsResponse().fail().message("开票信息异常。");
        }
        String fapiaoApplyId = mallInvoice.getFapiaoApplyId();
        try {
            String userInvoiceInfo = wxFaPiaoService.getUserInvoiceInfo(fapiaoApplyId);
            JSONObject userInvoiceInfoJson = JSONUtil.parseObj(userInvoiceInfo);
            mallInvoice.setType(userInvoiceInfoJson.getStr("type"));
            mallInvoice.setName(userInvoiceInfoJson.getStr("name"));
            mallInvoice.setTaxpayerId(userInvoiceInfoJson.getStr("taxpayer_id"));
            mallInvoice.setAddress(userInvoiceInfoJson.getStr("address"));
            mallInvoice.setTelephone(userInvoiceInfoJson.getStr("telephone"));
            mallInvoice.setBankName(userInvoiceInfoJson.getStr("bank_name"));
            mallInvoice.setBankAccount(userInvoiceInfoJson.getStr("bank_account"));
            this.baseMapper.updateById(mallInvoice);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new FebsResponse().success();
    }
    @Override
    @Transactional
    public FebsResponse updateOrderDetail(Long id) {
        MallInvoice mallInvoice = this.baseMapper.selectById(id);
        if(ObjectUtil.isEmpty(mallInvoice.getFapiaoApplyId())){
            return new FebsResponse().fail().message("订单的支付方式不是微信支付。");
        }
        String fapiaoApplyId = mallInvoice.getFapiaoApplyId();
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectBypayOrderNo(fapiaoApplyId);
        if(OrderStatusEnum.FINISH.getValue() != mallOrderInfo.getStatus()){
            return new FebsResponse().fail().message("当前订单还未完成。");
        }
        /**
         * fapiao_apply_id
         * 发票申请单号,唯一标识一次开票行为。微信支付场景下,为微信支付订单号;非微信支付场景下,为调用【获取抬头填写链接】接口时指定的发票申请单号
         * 对应订单信息的pay_order_no支付订单号
         */
        mallInvoice.setStatus(mallOrderInfo.getStatus());
        this.baseMapper.updateById(mallInvoice);
        /**
         * 更新订单为已开票
         */
        mallOrderInfo.setIsInvoice(1);
        mallOrderInfoMapper.updateById(mallOrderInfo);
        return new FebsResponse().success();
    }
}