From cf59c548d06bcb8dd824a97403658ca90164abfd Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Tue, 23 Jan 2024 10:06:08 +0800 Subject: [PATCH] Merge branch 'blnka' into blnka-vip --- src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java | 160 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 160 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java new file mode 100644 index 0000000..1739659 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/MallInvoiceServiceImpl.java @@ -0,0 +1,160 @@ +package cc.mrbird.febs.mall.service.impl; + +import cc.mrbird.febs.common.entity.FebsResponse; +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.entity.MallMember; +import cc.mrbird.febs.mall.entity.MallOrderInfo; +import cc.mrbird.febs.mall.entity.MallOrderItem; +import cc.mrbird.febs.mall.mapper.MallInvoiceMapper; +import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; +import cc.mrbird.febs.mall.mapper.MallOrderItemMapper; +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 +@Service +@RequiredArgsConstructor +public class MallInvoiceServiceImpl extends ServiceImpl<MallInvoiceMapper, MallInvoice> implements MallInvoiceService { + + 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(); + apiMallInvoiceDto.setMemberId(member.getId()); + IPage<ApiMallInvoiceVo> page = new Page<>(apiMallInvoiceDto.getPageNum(), apiMallInvoiceDto.getPageSize()); + IPage<ApiMallInvoiceVo> apiMallInvoiceVoIPage = this.baseMapper.selectApiMallInvoiceVoInPage(page, apiMallInvoiceDto); + return new FebsResponse().success().data(apiMallInvoiceVoIPage); + } + + @Override + public void mallInvoiceJob() { + /** + * 获取当前已经是已完成且未开过发票的订单 + */ + List<MallOrderInfo> mallOrderInfos = mallOrderInfoMapper.selectOrderInfoByStatusAndIsInvoice(OrderStatusEnum.FINISH.getValue(), 0); + if(CollUtil.isEmpty(mallOrderInfos)){ + return; + } + for(MallOrderInfo mallOrderInfo : mallOrderInfos){ + /** + * 生成开票记录 + */ + Long memberId = mallOrderInfo.getMemberId(); + /** + * fapiao_apply_id + * 发票申请单号,唯一标识一次开票行为。微信支付场景下,为微信支付订单号;非微信支付场景下,为调用【获取抬头填写链接】接口时指定的发票申请单号 + * 对应订单信息的pay_order_no支付订单号 + */ + String payOrderNo = mallOrderInfo.getPayOrderNo(); + List<MallInvoice> mallInvoices = this.baseMapper.selectByFapiaoApplyIdAndMemberId(payOrderNo, memberId); + if(CollUtil.isNotEmpty(mallInvoices)){ + 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); + } + + /** + * 更新订单为已开票 + */ + mallOrderInfo.setIsInvoice(1); + mallOrderInfoMapper.updateById(mallOrderInfo); + } + + } + + @Override + public IPage<MallInvoice> getInvoiceList(AdminMallInvoiceDto mallInvoiceDto, QueryRequest request) { + 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(); + } +} -- Gitblit v1.9.1