| | |
| | | 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; |
| | |
| | | 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 |
| | |
| | | |
| | | 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(); |
| | |
| | | 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); |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | 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(); |
| | | } |
| | | } |