Merge remote-tracking branch 'origin/beta' into xingze

beta-enc
kane 2 years ago
commit 5b9fe60009
  1. 12
      jianshui-admin/src/main/java/com/jianshui/web/controller/platform/InvoiceAddController.java
  2. 5
      jianshui-income/src/main/java/com/jianshui/income/service/impl/EleCheckInvoiceImpl.java
  3. 29
      jianshui-invoice/src/main/java/com/jianshui/invoice/enums/ChannelSource.java
  4. 2
      jianshui-platform/src/main/java/com/jianshui/platform/dto/InvoiceAdd/BillInfoDetailPDTO.java
  5. 3
      jianshui-platform/src/main/java/com/jianshui/platform/dto/InvoiceAdd/BillInfoPDTO.java
  6. 49
      jianshui-platform/src/main/java/com/jianshui/platform/dto/InvoiceAdd/species/BillInfoDetailSDGenInvoicePDTO.java
  7. 50
      jianshui-platform/src/main/java/com/jianshui/platform/dto/InvoiceAdd/species/BillInfoDetailSDSpecialInvoicePDTO.java
  8. 84
      jianshui-platform/src/main/java/com/jianshui/platform/dto/InvoiceAdd/species/BillInfoSDGenInvoicePDTO.java
  9. 83
      jianshui-platform/src/main/java/com/jianshui/platform/dto/InvoiceAdd/species/BillInfoSDSpecialInvoicePDTO.java
  10. 15
      jianshui-platform/src/main/java/com/jianshui/platform/service/InvoiceAddService.java
  11. 94
      jianshui-platform/src/main/java/com/jianshui/platform/service/impl/InvoiceAddServiceImpl.java
  12. 2
      jianshui-platform/src/main/java/com/jianshui/platform/vo/BillInfoPVO.java

@ -1,9 +1,9 @@
package com.jianshui.web.controller.platform; package com.jianshui.web.controller.platform;
import cn.hutool.json.JSON;
import com.jianshui.common.core.controller.BaseController; import com.jianshui.common.core.controller.BaseController;
import com.jianshui.common.core.domain.AjaxResult; import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.platform.dto.BillInfoPDTO; import com.jianshui.invoice.domain.dto.HXResponse;
import com.jianshui.platform.dto.InvoiceAdd.BillInfoPDTO;
import com.jianshui.platform.service.InvoiceAddService; import com.jianshui.platform.service.InvoiceAddService;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -22,12 +22,18 @@ public class InvoiceAddController extends BaseController {
@Autowired @Autowired
private static InvoiceAddService addService; private static InvoiceAddService addService;
@ApiOperation(value = "单据保存",notes = "单据保存请求") @ApiOperation(value = "单据保存",notes = "单据保存请求(支持数电普票、数电专票)")
@PostMapping( "invoiceSave") @PostMapping( "invoiceSave")
public AjaxResult invoiceSave(@RequestBody BillInfoPDTO billInfoPDTO) throws Exception { public AjaxResult invoiceSave(@RequestBody BillInfoPDTO billInfoPDTO) throws Exception {
return toAjax(addService.invoiceSave(billInfoPDTO)); return toAjax(addService.invoiceSave(billInfoPDTO));
} }
@ApiOperation(value = "发票开具",notes = "发票直接开具请求(支持数电普票、数电专票)")
@PostMapping( "invoiceIssuance")
public HXResponse invoiceIssuance(@RequestBody BillInfoPDTO billInfoPDTO) throws Exception {
return addService.invoiceIssuance(billInfoPDTO);
}

@ -182,15 +182,16 @@ public class EleCheckInvoiceImpl implements ICheckInvoice {
return new AjaxResult(Integer.parseInt(invoiceCheck.getCyjg()),invoiceCheck.getCyjgxx()); return new AjaxResult(Integer.parseInt(invoiceCheck.getCyjg()),invoiceCheck.getCyjgxx());
} }
// TODO: 2023/6/7 测试关闭
// :校验是否查询本企业发票 // :校验是否查询本企业发票
String xhfsbh = StrUtil.blankToDefault(invoiceCheck.getXhfsbh(), ""); /*String xhfsbh = StrUtil.blankToDefault(invoiceCheck.getXhfsbh(), "");
String xhfmc = StrUtil.blankToDefault(invoiceCheck.getXhfmc(), ""); String xhfmc = StrUtil.blankToDefault(invoiceCheck.getXhfmc(), "");
String sellerTax = companyservice.getSellertax(); String sellerTax = companyservice.getSellertax();
String sellerName = companyservice.getSellername(); String sellerName = companyservice.getSellername();
if (!sellerTax.equals(xhfsbh) || !StrUtil.equalsIgnoreCase(sellerName, xhfmc)) { if (!sellerTax.equals(xhfsbh) || !StrUtil.equalsIgnoreCase(sellerName, xhfmc)) {
log.info("单个发票校验非本企业发票:companyId=" + companyId + ",errorCode=" + invoiceCheck.getCyjg() + ",returnMessage=" + invoiceCheck.getCyjgxx()); log.info("单个发票校验非本企业发票:companyId=" + companyId + ",errorCode=" + invoiceCheck.getCyjg() + ",returnMessage=" + invoiceCheck.getCyjgxx());
return new AjaxResult(34,"授权企业与所查询发票的购方不一致,请进行核实"); return new AjaxResult(34,"授权企业与所查询发票的购方不一致,请进行核实");
} }*/
// 更新成功处理返回数据 // 更新成功处理返回数据
return AjaxResult.success(result); return AjaxResult.success(result);

@ -0,0 +1,29 @@
package com.jianshui.invoice.enums;
/**
* @Author: kk
* @Description: 上游通道选择枚举
* @DateTime: 2023/6/8 9:39
* @Params:
* @Return
*/
public enum ChannelSource {
PLATFORM("2", "简税产品平台");
private final String code;
private final String desc;
ChannelSource(String code, String desc) {
this.code = code;
this.desc = desc;
}
public String getCode() {
return code;
}
public String getDesc() {
return desc;
}
}

@ -1,4 +1,4 @@
package com.jianshui.platform.dto; package com.jianshui.platform.dto.InvoiceAdd;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;

@ -1,4 +1,4 @@
package com.jianshui.platform.dto; package com.jianshui.platform.dto.InvoiceAdd;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -14,7 +14,6 @@ import java.util.List;
@ApiModel("单据录入") @ApiModel("单据录入")
public class BillInfoPDTO { public class BillInfoPDTO {
// TODO: 2023/6/5 增值税普通发票
@ApiModelProperty(value = "购方名称") @ApiModelProperty(value = "购方名称")
private String buyerName; private String buyerName;

@ -0,0 +1,49 @@
package com.jianshui.platform.dto.InvoiceAdd.species;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Author: kk
* @Description: 数电普通发票-明细
* @DateTime: 2023/6/7 10:42
* @Params:
* @Return
*/
@Data
@ApiModel("单据录入详情")
public class BillInfoDetailSDGenInvoicePDTO {
@ApiModelProperty(value = "商品名称")
private String goodName;
@ApiModelProperty(value = "规格型号")
private String spec;
@ApiModelProperty(value = "单位")
private String unit;
@ApiModelProperty(value = "商品数量")
private BigDecimal num;
@ApiModelProperty(value = "商品单价")
private BigDecimal price;
@ApiModelProperty(value = "金额(不含税)")
private BigDecimal taxfreeamt;
@ApiModelProperty(value = "税率")
private BigDecimal taxrate;
@ApiModelProperty(value = "税额")
private BigDecimal tax;
}

@ -0,0 +1,50 @@
package com.jianshui.platform.dto.InvoiceAdd.species;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Author: kk
* @Description: 数电专用发票-明细
* @DateTime: 2023/6/7 10:42
* @Params:
* @Return
*/
@Data
@ApiModel("单据录入详情")
public class BillInfoDetailSDSpecialInvoicePDTO {
// TODO: 2023/6/5 增值税普通发票
@ApiModelProperty(value = "商品名称")
private String goodName;
@ApiModelProperty(value = "规格型号")
private String spec;
@ApiModelProperty(value = "单位")
private String unit;
@ApiModelProperty(value = "商品数量")
private BigDecimal num;
@ApiModelProperty(value = "商品单价")
private BigDecimal price;
@ApiModelProperty(value = "金额(不含税)")
private BigDecimal taxfreeamt;
@ApiModelProperty(value = "税率")
private BigDecimal taxrate;
@ApiModelProperty(value = "税额")
private BigDecimal tax;
}

@ -0,0 +1,84 @@
package com.jianshui.platform.dto.InvoiceAdd.species;
import com.jianshui.common.annotation.Excel;
import com.jianshui.platform.dto.InvoiceAdd.BillInfoDetailPDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.List;
/**
* @Author: kk
* @Description: 数电普通发票
* @DateTime: 2023/6/7 10:42
* @Params:
* @Return
*/
@Data
@ApiModel("单据录入")
public class BillInfoSDGenInvoicePDTO {
@NotEmpty
@ApiModelProperty(value = "购方名称")
private String buyerName;
@NotEmpty
@ApiModelProperty(value = "购方税号")
private String buyerTaxnum;
@ApiModelProperty(value = "购方地址")
private String buyerAddress;
@ApiModelProperty(value = "购方电话")
private String buyerTelephone;
@ApiModelProperty(value = "开户行")
private String buyerBank;
@ApiModelProperty(value = "购买方开户行账号")
private String buyerAccount;
@ApiModelProperty(value = "购方邮箱")
private String buyerEmail;
@ApiModelProperty(value = "销方名称")
private String sellerName;
@ApiModelProperty(value = "销方税号")
private String sellerTaxnum;
@ApiModelProperty(value = "销方地址")
private String sellerAddress;
@ApiModelProperty(value = "销方电话")
private String sellerTelephone;
@ApiModelProperty(value = "销方开户行名称")
private String sellerBank;
@ApiModelProperty(value = "销方开户行账户")
private String sellerAccount;
@ApiModelProperty(value = "备注")
private String message;
@ApiModelProperty(value = "价税合计")
private String jshj;
@ApiModelProperty(value = "金额(不含税)")
private BigDecimal taxfreeamt;
@ApiModelProperty(value = "税额")
private BigDecimal tax;
@ApiModelProperty(value = "明细")
List<BillInfoDetailSDGenInvoicePDTO> billInfoDetailPDTOList;
}

@ -0,0 +1,83 @@
package com.jianshui.platform.dto.InvoiceAdd.species;
import com.jianshui.platform.dto.InvoiceAdd.BillInfoDetailPDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.math.BigDecimal;
import java.util.List;
/**
* @Author: kk
* @Description: 数电专用发票
* @DateTime: 2023/6/7 10:42
* @Params:
* @Return
*/
@Data
@ApiModel("单据录入")
public class BillInfoSDSpecialInvoicePDTO {
@NotEmpty
@ApiModelProperty(value = "购方名称")
private String buyerName;
@NotEmpty
@ApiModelProperty(value = "购方税号")
private String buyerTaxnum;
@ApiModelProperty(value = "购方地址")
private String buyerAddress;
@ApiModelProperty(value = "购方电话")
private String buyerTelephone;
@ApiModelProperty(value = "开户行")
private String buyerBank;
@ApiModelProperty(value = "购买方开户行账号")
private String buyerAccount;
@ApiModelProperty(value = "购方邮箱")
private String buyerEmail;
@ApiModelProperty(value = "销方名称")
private String sellerName;
@ApiModelProperty(value = "销方税号")
private String sellerTaxnum;
@ApiModelProperty(value = "销方地址")
private String sellerAddress;
@ApiModelProperty(value = "销方电话")
private String sellerTelephone;
@ApiModelProperty(value = "销方开户行名称")
private String sellerBank;
@ApiModelProperty(value = "销方开户行账户")
private String sellerAccount;
@ApiModelProperty(value = "备注")
private String message;
@ApiModelProperty(value = "价税合计")
private String jshj;
@ApiModelProperty(value = "金额(不含税)")
private BigDecimal taxfreeamt;
@ApiModelProperty(value = "税额")
private BigDecimal tax;
@ApiModelProperty(value = "明细")
List<BillInfoDetailSDSpecialInvoicePDTO> billInfoDetailPDTOList;
}

@ -1,7 +1,8 @@
package com.jianshui.platform.service; package com.jianshui.platform.service;
import com.jianshui.platform.dto.BillInfoPDTO; import com.jianshui.invoice.domain.dto.HXResponse;
import com.jianshui.platform.dto.InvoiceAdd.BillInfoPDTO;
/** /**
* 发票录入 * 发票录入
@ -20,4 +21,16 @@ public interface InvoiceAddService {
*/ */
int invoiceSave(BillInfoPDTO billInfoPDTO); int invoiceSave(BillInfoPDTO billInfoPDTO);
/**
* @Author: kk
* @Description: 发票开具
* @DateTime: 2023/6/7 14:11
* @Params:
* @Return
*/
HXResponse invoiceIssuance(BillInfoPDTO billInfoPDTO);
} }

@ -1,25 +1,49 @@
package com.jianshui.platform.service.impl; package com.jianshui.platform.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.jianshui.common.core.domain.entity.Companyservice;
import com.jianshui.common.exception.jianshui.JianshuiServiceException;
import com.jianshui.common.utils.SecurityUtils;
import com.jianshui.common.utils.ValidateUtils; import com.jianshui.common.utils.ValidateUtils;
import com.jianshui.invoice.domain.BillInfo; import com.jianshui.invoice.domain.BillInfo;
import com.jianshui.invoice.domain.dto.HXResponse;
import com.jianshui.invoice.enums.ChannelSource;
import com.jianshui.invoice.factory.IInvoiceServiceFactory;
import com.jianshui.invoice.mapper.BillInfoMapper; import com.jianshui.invoice.mapper.BillInfoMapper;
import com.jianshui.platform.dto.BillInfoPDTO; import com.jianshui.invoice.service.IInvoiceApiService;
import com.jianshui.platform.dto.InvoiceAdd.BillInfoPDTO;
import com.jianshui.platform.service.InvoiceAddService; import com.jianshui.platform.service.InvoiceAddService;
import com.jianshui.platform.utils.InvoiceAllYhdjUtils;
import com.jianshui.system.domain.InvoiceAllYhdj;
import com.jianshui.system.mapper.CompanyserviceMapper;
import com.jianshui.system.service.IServiceManageService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Optional;
/** /**
* 发票录入 * 发票录入
*
*/ */
@Service @Service
@Slf4j
public class InvoiceAddServiceImpl implements InvoiceAddService { public class InvoiceAddServiceImpl implements InvoiceAddService {
@Autowired @Autowired
private static BillInfoMapper billInfoMapper; private static BillInfoMapper billInfoMapper;
@Autowired
private IServiceManageService serviceManageService;
@Autowired
private IInvoiceServiceFactory invoiceServiceFactory;
@Autowired
private CompanyserviceMapper companyServiceMapper;
@Override @Override
public int invoiceSave(BillInfoPDTO billInfoPDTO) { public int invoiceSave(BillInfoPDTO billInfoPDTO) {
ValidateUtils.validate(billInfoPDTO); ValidateUtils.validate(billInfoPDTO);
@ -31,36 +55,50 @@ public class InvoiceAddServiceImpl implements InvoiceAddService {
} }
@Override
public HXResponse invoiceIssuance(BillInfoPDTO billInfoPDTO) {
BillInfo billInfo = BeanUtil.copyProperties(billInfoPDTO, BillInfo.class);
billInfo.setSource(ChannelSource.PLATFORM.getCode());
// 获取用户信息
Long companyId = Optional.ofNullable(SecurityUtils.getLoginUser())
.map(loginUser -> loginUser.getCompanyId())
.orElse(0L);
if (companyId == 0L) {
return new HXResponse("未获取到用户服务信息,请联系管理员配置!");
}
Companyservice companyservice = companyServiceMapper.selectCompanyserviceByCompanyid(companyId);
if (BeanUtil.isEmpty(companyservice)) {
return new HXResponse(("未获取到用户服务信息,请联系管理员配置!"));
}
// TODO: 2023/6/8 这里看看多通道的时候怎么处理
InvoiceAllYhdjUtils invoiceAllYhdjUtils = new InvoiceAllYhdjUtils();
InvoiceAllYhdj userInfo = invoiceAllYhdjUtils.getUserInfo(companyservice);
if (BeanUtil.isEmpty(userInfo)) {
return new HXResponse(("未查询到登记信息!"));
}
// 获得请求实例,并且进行扣费
String serviceKey = null;
try {
serviceKey = serviceManageService.getCompanyServiceSupplier("invoice", companyservice.getCompanyid());
serviceManageService.companyConsume("invoice", companyId);
billInfo.setServiceSupplierKey(serviceKey);
IInvoiceApiService invoiceService = invoiceServiceFactory.getService(serviceKey);
return invoiceService.addInvoice(billInfo, companyservice);
} catch (Exception e) {
log.error("简税产品端,发票开具失败,请求报文={},企业税号={},servicekey={}",billInfoPDTO.toString(),companyservice.toString(),serviceKey);
throw new JianshuiServiceException("发票开具系统异常!");
}
}

@ -1,6 +1,6 @@
package com.jianshui.platform.vo; package com.jianshui.platform.vo;
import com.jianshui.platform.dto.BillInfoDetailPDTO; import com.jianshui.platform.dto.InvoiceAdd.BillInfoDetailPDTO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;

Loading…
Cancel
Save