package com.by4cloud.platformx.business.controller;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.by4cloud.platformx.business.entity.ContractOutBound;
|
import com.by4cloud.platformx.business.entity.SaleCredit;
|
import com.by4cloud.platformx.business.entity.invoice.InvoiceResult;
|
import com.by4cloud.platformx.business.entity.invoice.InvoiceResultItem;
|
import com.by4cloud.platformx.business.entity.invoice.InvoicingVo;
|
import com.by4cloud.platformx.business.invoice.service.FpInvoiceResultItemService;
|
import com.by4cloud.platformx.business.service.ContractOutBoundService;
|
import com.by4cloud.platformx.business.service.InvoiceService;
|
import com.by4cloud.platformx.business.service.SaleCreditService;
|
import com.by4cloud.platformx.common.core.util.R;
|
import com.by4cloud.platformx.common.log.annotation.SysLog;
|
import com.google.gson.Gson;
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 销售挂账
|
*
|
* @author wjli
|
* @date 2026-05-21 16:16:31
|
*/
|
@RestController
|
@RequiredArgsConstructor
|
@RequestMapping("/invoiceResult" )
|
@Tag(description = "invoice" , name = "开票管理" )
|
public class InvoiceResultController {
|
//发票结果
|
private final FpInvoiceResultItemService invoiceResultItemService;
|
private final InvoiceService invoiceService;
|
private final SaleCreditService saleCreditService;
|
private final ContractOutBoundService contractOutBoundService;
|
|
@Operation(summary = "推送应付蓝票" , description = "推送应付蓝票" )
|
@GetMapping("/pushYfBlue" )
|
public R pushYfBlue(@RequestBody SaleCredit saleCredit1) {
|
SaleCredit byId = saleCreditService.getById(saleCredit1.getId());
|
if(byId.getBipStatus()==null ||!byId.getBipStatus().equals("200")){
|
return R.failed("请先推送单据后再推送发票");
|
}
|
if(byId.getBlueInvoiceResultId()==null){
|
return R.failed("发票未开具");
|
}
|
boolean b = invoiceService.pushBlue(saleCredit1.getId(), 1);
|
if(b){
|
return R.ok(null,"推送成功");
|
}else {
|
return R.failed(null,"推送失败");
|
}
|
}
|
@Operation(summary = "推送应收蓝票" , description = "推送应收蓝票" )
|
@GetMapping("/pushYsBlue" )
|
public R pushYsBlue(@RequestBody SaleCredit saleCredit1) {
|
SaleCredit byId = saleCreditService.getById(saleCredit1.getId());
|
if(byId.getBipStatus()==null || !byId.getBipStatus().equals("200")){
|
return R.failed("请先推送单据后再推送发票");
|
}
|
if(byId.getBlueInvoiceResultId()==null){
|
return R.failed("发票未开具");
|
}
|
boolean b = invoiceService.pushBlue(saleCredit1.getId(),0);
|
if(b){
|
return R.ok(null,"推送成功");
|
}else {
|
return R.failed(null,"推送失败");
|
}
|
}
|
|
|
/**
|
* 去开蓝票
|
* @param saleCredit1 去开蓝票
|
* @return R
|
*/
|
@Operation(summary = "去开蓝票" , description = "去开蓝票" )
|
@SysLog("去开蓝票" )
|
@PostMapping("/toBluePiao")
|
@PreAuthorize("@pms.hasPermission('business_saleCredit_add')" )
|
public R toBluePiao(@RequestBody SaleCredit saleCredit1) {
|
if(saleCredit1.getId()==null){
|
return R.failed("销售挂账id不能为空!");
|
}
|
SaleCredit saleCredit = saleCreditService.getById(saleCredit1.getId());
|
List<ContractOutBound> contractOutBoundList = contractOutBoundService.list(new LambdaQueryWrapper<ContractOutBound>()
|
.eq(ContractOutBound::getSaleCreditId,saleCredit.getId())
|
);
|
|
//生成vo
|
InvoicingVo invoicingVo = invoiceService.toGetByCompare(saleCredit,contractOutBoundList);
|
try {
|
Map<String, Object> objectMap = invoiceService.toKaipiao(invoicingVo);
|
Boolean success = (Boolean) objectMap.get("success");
|
String message = (String) objectMap.get("message");
|
System.out.println(saleCredit.getEntrustCode() + "的railwayEntrust蓝字开票结果为:" + success + "------" + message);
|
if(success){
|
saleCredit.setStatus(2);
|
saleCreditService.updateById(saleCredit);
|
return R.ok("开票成功!");
|
}else{
|
saleCredit.setStatus(3);
|
saleCreditService.updateById(saleCredit);
|
return R.failed("开票失败!");
|
}
|
|
}catch (Exception e){
|
saleCredit.setStatus(3);
|
saleCreditService.updateById(saleCredit);
|
return R.failed("开票失败!");
|
}
|
}
|
|
@Operation(summary = "发票查看" , description = "发票查看" )
|
@GetMapping("/downInvoice" )
|
public R downInvoice(String code) {
|
QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
|
invoiceResultQueryWrapper.lambda()
|
.eq(InvoiceResult::getEntrustCode,code)
|
.eq(InvoiceResult::getMethodName,"蓝字开票接口")
|
.eq(InvoiceResult::getSuccess,1)
|
.orderByDesc(InvoiceResult::getCreateTime);
|
List<InvoiceResult> list = invoiceService.list(invoiceResultQueryWrapper);
|
if(list !=null && list.size()>0){
|
InvoiceResult result = list.get(0);
|
Map<String, Object> objectMap = invoiceService.downInvoiceMethod(result);
|
Boolean success = (Boolean) objectMap.get("success");
|
String message = (String) objectMap.get("message");
|
if(success){
|
// if(result.getPushBip()==null||result.getPushBip()!=1){
|
// QueryWrapper<RailwayEntrust> wrapper = new QueryWrapper<>();
|
// wrapper.lambda()
|
// .eq(RailwayEntrust::getEntrustCode,code);
|
// List<RailwayEntrust> railwayEntrusts = railwayEntrustService.list(wrapper);
|
// if(railwayEntrusts !=null && railwayEntrusts.size()>0){
|
// RailwayEntrust railwayEntrust = railwayEntrusts.get(0);
|
// System.out.println(railwayEntrust.getEntrustCode()+"开始推送bip蓝票");
|
// try {
|
// pushBip(railwayEntrust.getId(),railwayEntrust.getInvoicUrl());
|
// System.out.println(railwayEntrust.getEntrustCode()+"推送bip蓝票成功");
|
// result.setPushBip(1);
|
// result.setPushBipyf(1);
|
// invoiceResultService.updateById(result);
|
// }catch (Exception e){
|
// e.printStackTrace();
|
// }
|
// }
|
// }
|
return R.ok(objectMap);
|
}else {
|
return R.failed(message);
|
}
|
}else {
|
return R.failed("未查询到开票记录");
|
}
|
}
|
|
|
/**
|
* 去开红票
|
* @param saleCredit1 去开红票
|
* @return R
|
*/
|
@Operation(summary = "去开红票" , description = "去开红票" )
|
@SysLog("去开红票" )
|
@PostMapping("/toRedPiao")
|
@PreAuthorize("@pms.hasPermission('business_saleCredit_add')" )
|
public R toRedPiao(@RequestBody SaleCredit saleCredit1){
|
if(saleCredit1.getId()==null){
|
return R.failed("销售挂账id不能为空!");
|
}
|
SaleCredit saleCredit = saleCreditService.getById(saleCredit1.getId());
|
try {
|
Map<String, Object> map = invoiceService.toRedTicket(saleCredit);
|
Boolean success = (Boolean) map.get("success");
|
if(success){
|
return R.ok("红字开票成功");
|
}else {
|
return R.failed((String) map.get("message"));
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
return R.failed("红字开票失败");
|
}
|
}
|
|
@Operation(summary = "红票查看" , description = "红票查看" )
|
@GetMapping("/downRedInvoice" )
|
public R downRedInvoice(String code) {
|
QueryWrapper<InvoiceResult> invoiceResultQueryWrapper = new QueryWrapper<>();
|
invoiceResultQueryWrapper.lambda()
|
.eq(InvoiceResult::getEntrustCode,code)
|
.eq(InvoiceResult::getMethodName,"红字确认单确认接口")
|
.eq(InvoiceResult::getSuccess,1)
|
.orderByDesc(InvoiceResult::getCreateTime);
|
List<InvoiceResult> list = invoiceService.list(invoiceResultQueryWrapper);
|
if(list !=null && list.size()>0){
|
Map<String, Object> objectMap = null;
|
Boolean success = null;
|
String message = null;
|
InvoiceResult result = list.get(0);
|
if(result.getConfirmBillingMark().equals("Y")){
|
objectMap = invoiceService.downInvoiceMethod(result);
|
success = (Boolean) objectMap.get("success");
|
message = (String) objectMap.get("message");
|
}else {
|
QueryWrapper<InvoiceResult> invoiceResultQueryWrapper1 = new QueryWrapper<>();
|
invoiceResultQueryWrapper1.lambda()
|
.eq(InvoiceResult::getEntrustCode,code)
|
.eq(InvoiceResult::getMethodName,"红字开票接口")
|
.eq(InvoiceResult::getSuccess,1)
|
.orderByDesc(InvoiceResult::getCreateTime);
|
List<InvoiceResult> list1 = invoiceService.list(invoiceResultQueryWrapper1);
|
InvoiceResult result1 = list1.get(0);
|
objectMap = invoiceService.downInvoiceMethod(result1);
|
success = (Boolean) objectMap.get("success");
|
message = (String) objectMap.get("message");
|
}
|
if(success){
|
return R.ok(objectMap);
|
}else {
|
return R.failed(message);
|
}
|
}else {
|
return R.failed("未查询到开票记录");
|
}
|
}
|
|
/* @Operation(summary = "红冲确认单" , description = "红冲确认单" )
|
@PostMapping("/redConfirm" )
|
public R redConfirm(@RequestBody InvoicingVo vo) {
|
|
SaleCredit saleCredit = saleCreditService.getOne(new LambdaQueryWrapper<SaleCredit>()
|
.eq(SaleCredit::getEntrustCode,vo.getEntrustCode())
|
.last("limit 1")
|
);
|
if(saleCredit==null){
|
return R.failed("未找到对应结算单");
|
}
|
|
try {
|
Map<String, Object> objectMap = invoiceService.toRedTicket(saleCredit);
|
Boolean success = (Boolean) objectMap.get("success");
|
String message = (String) objectMap.get("message");
|
if(success){
|
return R.ok(null,message);
|
}else {
|
return R.failed(null,message);
|
}
|
|
}catch (Exception e){
|
e.printStackTrace();
|
return R.failed("开红票失败");
|
}
|
}*/
|
|
//发红冲之前,先进行红票确认。
|
@Operation(summary = "红冲发票form" , description = "红冲发票form" )
|
@GetMapping("/issueRed" )
|
public R issueRed(@RequestBody SaleCredit saleCredit1) {
|
SaleCredit saleCredit = saleCreditService.getById(saleCredit1.getId());
|
InvoiceResult blueResult = null;
|
InvoiceResult redResult = null;
|
if(saleCredit.getBlueInvoiceResultId()==null){
|
return R.failed("请先开具蓝字发票");
|
}
|
blueResult = invoiceService.getById(saleCredit.getRedInvoiceResultId());
|
|
InvoicingVo invoicingVo = new InvoicingVo();
|
|
QueryWrapper<InvoiceResultItem> itemQueryWrapper = new QueryWrapper<>();
|
itemQueryWrapper.lambda()
|
.eq(InvoiceResultItem::getResultId,blueResult.getId());
|
List<InvoiceResultItem> resultItems = invoiceResultItemService.list(itemQueryWrapper);
|
|
if(saleCredit!=null) {
|
|
invoicingVo.setTaxNo(saleCredit.getCreditCodeB());
|
invoicingVo.setLedgerName(saleCredit.getPartyB());
|
invoicingVo.setOrgCode(saleCredit.getCreditCodeB());
|
invoicingVo.setFormatGenerate(false);
|
invoicingVo.setIsSplit(false);
|
invoicingVo.setFormatPushType(false);
|
invoicingVo.setTaxUserName(saleCredit.getContactPhoneB());
|
invoicingVo.setEntrustCode(saleCredit.getEntrustCode());
|
InvoicingVo.InvoicingVoInfo invoicingVoInfo = new InvoicingVo.InvoicingVoInfo();
|
invoicingVoInfo.setInvoiceTypeCode("01");
|
invoicingVoInfo.setInvoiceType("1");
|
invoicingVoInfo.setSerialNo("MX_REDPP_" + System.currentTimeMillis());
|
// invoicingVoInfo.setRedInfoNo(redResult.getInvoiceNo());
|
// invoicingVoInfo.setRedIssueReason("1");
|
// invoicingVoInfo.setRedConfirmUuid(redResult.getRedConfirmUuid());
|
invoicingVoInfo.setDrawer(saleCredit.getContactPhoneB());
|
/*Map<String, Object> ext1 = new HashMap<>();
|
ContractOrder order = contractOrderService.getOrderByNum(railwayEntrust.getOrderNumber());
|
if(order!=null){
|
ext1.put("htbh",order.getContractNum());
|
invoicingVoInfo.setExt(ext1);
|
}*/
|
invoicingVoInfo.setSystemName("**销售管理信息系统");
|
|
List<InvoicingVo.InvoiceDetail> details = new ArrayList<>();
|
for (int i = 0; i < resultItems.size(); i++) {
|
InvoiceResultItem resultItem = resultItems.get(i);
|
Map<String,Object> ext = new HashMap<>();
|
ext.put("coalType",resultItem.getCoalType());
|
InvoicingVo.InvoiceDetail invoiceDetail = new InvoicingVo.InvoiceDetail();
|
invoiceDetail.setGoodsLineNo(resultItem.getGoodsLineNo());
|
invoiceDetail.setOriginalInvoiceDetailNo(resultItem.getGoodsLineNo()+"");
|
invoiceDetail.setGoodsTaxRate(resultItem.getGoodsTaxRate());
|
invoiceDetail.setGoodsUnit(resultItem.getGoodsUnit());
|
invoiceDetail.setGoodsName(resultItem.getCoalName());
|
invoiceDetail.setGoodsType(resultItem.getGoodsType());
|
invoiceDetail.setGoodsCode(resultItem.getGoodsCode());
|
invoiceDetail.setGoodsSpecification(resultItem.getGoodsSpecification());
|
invoiceDetail.setExt(ext);
|
invoiceDetail.setGoodsQuantity(new BigDecimal(resultItem.getGoodsQuantity()*-1).setScale(3,BigDecimal.ROUND_HALF_UP));
|
invoiceDetail.setGoodsPrice(new BigDecimal(resultItem.getGoodsPrice()).setScale(8,BigDecimal.ROUND_HALF_UP));
|
invoiceDetail.setGoodsTotalPrice(new BigDecimal(resultItem.getGoodsTotalPrice()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
|
invoiceDetail.setGoodsTotalTax(new BigDecimal(resultItem.getGoodsTotalTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
|
details.add(invoiceDetail);
|
}
|
|
invoicingVoInfo.setBuyerTaxNo(saleCredit.getCreditCodeA());
|
invoicingVoInfo.setBuyerName(saleCredit.getPartyA());
|
invoicingVoInfo.setInvoiceTotalPrice(new BigDecimal(blueResult.getInvoiceTotalPrice()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
|
invoicingVoInfo.setInvoiceTotalTax(new BigDecimal(blueResult.getInvoiceTotalTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
|
invoicingVoInfo.setInvoiceTotalPriceTax(new BigDecimal(blueResult.getInvoiceTotalPriceTax()*-1).setScale(2,BigDecimal.ROUND_HALF_UP));
|
invoicingVoInfo.setBuyerBankName(saleCredit.getBankNameA());
|
invoicingVoInfo.setBuyerBankNumber(saleCredit.getBankAccountA());
|
//invoicingVoInfo.setBuyerAddress(invoiceCustomer.getBuyerAddress());
|
invoicingVoInfo.setBuyerTelphone(saleCredit.getContactPhoneA());
|
invoicingVoInfo.setInvoiceDetailsList(details);
|
invoicingVo.setData(invoicingVoInfo);
|
Gson gson =new Gson();
|
String vostr = gson.toJson(invoicingVo);
|
System.out.println(vostr);
|
return R.ok(invoicingVo);
|
}else {
|
return R.failed("暂未查询到销方开票信息");
|
}
|
}
|
}
|