红字信息提交

beta-enc
kane 2 years ago
parent b2f6a6c49b
commit 825c0bdc20
  1. 18
      jianshui-admin/src/main/java/com/jianshui/web/controller/platform/RedInformationController.java
  2. 6
      jianshui-platform/src/main/java/com/jianshui/platform/constant/ExceptionInformationConstants.java
  3. 12
      jianshui-platform/src/main/java/com/jianshui/platform/constant/RedWordConstants.java
  4. 72
      jianshui-platform/src/main/java/com/jianshui/platform/dto/invoicered/RedWordDTO.java
  5. 13
      jianshui-platform/src/main/java/com/jianshui/platform/dto/invoicered/RedWordSelectionDTO.java
  6. 46
      jianshui-platform/src/main/java/com/jianshui/platform/dto/invoicered/RedinfodetailDTO.java
  7. 16
      jianshui-platform/src/main/java/com/jianshui/platform/service/RedInformationService.java
  8. 216
      jianshui-platform/src/main/java/com/jianshui/platform/service/impl/RedInformationServiceImpl.java
  9. 9
      jianshui-platform/src/main/java/com/jianshui/platform/vo/invoicered/RedWordSelectionVO.java

@ -1,7 +1,8 @@
package com.jianshui.web.controller.platform;
import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.platform.dto.RedInformationDTO;
import com.jianshui.platform.dto.invoicered.RedWordSelectionDTO;
import com.jianshui.platform.dto.invoicered.RedWordDTO;
import com.jianshui.platform.service.RedInformationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -22,9 +23,16 @@ public class RedInformationController {
@Autowired
private RedInformationService redInformationService;
@ApiOperation("蓝字发票信息查询")
@PostMapping("/findBlueInvoice")
public AjaxResult findBlueInvoice(@RequestBody RedInformationDTO redInformationDTO){
return redInformationService.findBlueInvoice(redInformationDTO);
@ApiOperation("红字信息选择")
@PostMapping("/redWordSelection")
public AjaxResult redWordSelection(@RequestBody RedWordSelectionDTO redWordSelectionDTO){
return redInformationService.redWordSelection(redWordSelectionDTO);
}
@ApiOperation("红字信息提交")
@PostMapping("/redWordSubmit")
public AjaxResult redWordSubmit(@RequestBody RedWordDTO dto){
return redInformationService.redWordSubmit(dto);
}
}

@ -16,4 +16,10 @@ public class ExceptionInformationConstants {
// 未查询到发票信息
public static final String NOTINVOICEINFORMATION = "本地未查询到对应的蓝字发票信息,点击确定继续录入单据";
// 申请类型有误
public static final String REQUESTTYPEERROR = "申请类型有误";
//发票相关信息为空
public static final String INVOICEINFORMATIONISEMPTY = "发票相关信息为空";
}

@ -11,4 +11,16 @@ public class RedWordConstants {
public static final String XFTYPE = "0";
// 购方类型(已抵扣)
public static final String ISDEDUCTION = "1";
// 购方类型(未抵扣)
public static final String NOTDEDUCTION = "2";
// 含税单价
public static final String TAXINVOICE = "0";
// 不含税单价
public static final String NOTTAXINVOICE = "1";
// 提交结果响应
public static final String SUBMITSUCCESS = "提交成功";
}

@ -0,0 +1,72 @@
package com.jianshui.platform.dto.invoicered;
import com.jianshui.invoice.domain.Redinfodetail;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @Author: kane
* @Description: 红字信息类
* @CreateTime: 2023-06-21 17:20
* @Version: 1.0
**/
@ApiModel("红字信息")
@Data
public class RedWordDTO {
@NotEmpty
@ApiModelProperty("填开类型")
private String billInputType;
@NotNull
@ApiModelProperty("填开日期")
private String billInputTime;
@NotEmpty
@ApiModelProperty("含税不含税标志 0-含税 1-不含税")
private String status;
@ApiModelProperty("经办人")
private String jbr;
@NotEmpty
@ApiModelProperty("销方名称")
private String sellerName;
@NotEmpty
@ApiModelProperty("销方税号")
private String sellerTaxnum;
@NotEmpty
@ApiModelProperty("购方名称")
private String buyerName;
@NotEmpty
@ApiModelProperty("购方税号")
private String buyerTaxnum;
@NotEmpty
@ApiModelProperty("申请类型 0-销方 1-购方已抵扣 2-购方未抵扣")
private String sqlx;
@ApiModelProperty("发票代码")
private String originFpdm;
@ApiModelProperty("发票号码")
private String originFphm;
@NotEmpty
@ApiModelProperty("发票种类 p电子增值税普通发票 c增值税普通发票 s 增值税专用发票 e 收购发票 f 收购发票 r增值税普通发票")
private String invoiceType;
@NotNull
@ApiModelProperty("开票日期")
private String originKprq;
@NotNull
@ApiModelProperty("合计金额")
private BigDecimal totalMoney;
@NotNull
@ApiModelProperty("合计税额")
private BigDecimal totalTax;
@ApiModelProperty("红字信息详情列表")
private List<RedinfodetailDTO> redinfodetailList;
}

@ -1,22 +1,25 @@
package com.jianshui.platform.dto;
package com.jianshui.platform.dto.invoicered;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* @Author: kane
* @Description: 红字信息填开
* @Description: 红字信息选择
* @CreateTime: 2023-06-21 15:14
* @Version: 1.0
**/
@Data
@ApiModel("红字信息填开类")
public class RedInformationDTO {
@ApiModel("红字信息选择")
public class RedWordSelectionDTO {
@ApiModelProperty("发票类型")
@NotEmpty
@ApiModelProperty("发票类型 s-专用发票")
private String fplx;
@NotEmpty
@ApiModelProperty("申请类型 0-销方 1-购方已抵扣 2-购方未抵扣")
private String sqlx;

@ -0,0 +1,46 @@
package com.jianshui.platform.dto.invoicered;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
/**
* @Author: kane
* @Description: 红字信息详情
* @CreateTime: 2023-06-25 15:38
* @Version: 1.0
**/
@Data
@ApiModel("红字信息详情")
public class RedinfodetailDTO {
@NotEmpty
@ApiModelProperty("商品名称")
private String goodName;
@NotEmpty
@ApiModelProperty("规格型号")
private String spec;
@NotEmpty
@ApiModelProperty("单位")
private String unit;
@NotEmpty
@ApiModelProperty("商品数量")
private BigDecimal num;
@NotNull
@ApiModelProperty("单价")
private BigDecimal cost;
@NotNull
@ApiModelProperty("金额")
private BigDecimal money;
@NotNull
@ApiModelProperty("税率")
private BigDecimal taxrate;
@NotNull
@ApiModelProperty("税额")
private BigDecimal tax;
}

@ -1,7 +1,8 @@
package com.jianshui.platform.service;
import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.platform.dto.RedInformationDTO;
import com.jianshui.platform.dto.invoicered.RedWordSelectionDTO;
import com.jianshui.platform.dto.invoicered.RedWordDTO;
/**
* @Author: kane
@ -11,9 +12,16 @@ import com.jianshui.platform.dto.RedInformationDTO;
**/
public interface RedInformationService {
/**
* 功能描述: 获取蓝票信息
* @param redInformationDTO
* 功能描述: 红字信息选择
* @param redWordSelectionDTO
* @return : com.jianshui.common.core.domain.AjaxResult
*/
AjaxResult findBlueInvoice(RedInformationDTO redInformationDTO);
AjaxResult redWordSelection(RedWordSelectionDTO redWordSelectionDTO);
/**
* 功能描述: 红字信息提交
* @param dto
* @return : com.jianshui.common.core.domain.AjaxResult
*/
AjaxResult redWordSubmit(RedWordDTO dto);
}

@ -4,23 +4,36 @@ import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.common.core.domain.entity.Companyservice;
import com.jianshui.common.core.domain.entity.SysUser;
import com.jianshui.common.core.domain.model.LoginUser;
import com.jianshui.common.exception.jianshui.JianshuiServiceException;
import com.jianshui.common.utils.SecurityUtils;
import com.jianshui.common.utils.ValidateUtils;
import com.jianshui.invoice.domain.Invoice;
import com.jianshui.invoice.domain.InvoiceDetail;
import com.jianshui.invoice.domain.Redinfo;
import com.jianshui.invoice.domain.Redinfodetail;
import com.jianshui.invoice.mapper.InvoiceMapper;
import com.jianshui.invoice.mapper.RedinfoMapper;
import com.jianshui.invoice.service.IInvoiceApiService;
import com.jianshui.platform.constant.ExceptionInformationConstants;
import com.jianshui.platform.constant.RedWordConstants;
import com.jianshui.platform.dto.RedInformationDTO;
import com.jianshui.platform.dto.invoicered.RedWordSelectionDTO;
import com.jianshui.platform.dto.invoicered.RedWordDTO;
import com.jianshui.platform.dto.invoicered.RedinfodetailDTO;
import com.jianshui.platform.service.RedInformationService;
import com.jianshui.platform.vo.BlueInvoiceVO;
import com.jianshui.platform.vo.invoicered.RedWordSelectionVO;
import com.jianshui.system.mapper.CompanyserviceMapper;
import com.jianshui.system.mapper.SysUserMapper;
import com.jianshui.system.service.IServiceManageService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* @Author: kane
@ -29,6 +42,7 @@ import java.util.List;
* @Version: 1.0
**/
@Service
@Slf4j
public class RedInformationServiceImpl implements RedInformationService {
@Autowired
@ -42,60 +56,196 @@ public class RedInformationServiceImpl implements RedInformationService {
@Autowired
private CompanyserviceMapper companyserviceMapper;
@Autowired
private IServiceManageService serviceManageService;
/**
* 功能描述: 蓝票信息获取
* @param redInformationDTO
* 功能描述: 红字信息选择
* @param redWordSelectionDTO
* @return : com.jianshui.common.core.domain.AjaxResult
*/
@Override
public AjaxResult findBlueInvoice(RedInformationDTO redInformationDTO) {
public AjaxResult redWordSelection(RedWordSelectionDTO redWordSelectionDTO) {
//判空
if (redInformationDTO.getFpdm().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.FPDMISEMPTY);
}
if (redInformationDTO.getFphm().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.FPHMISEMPTY);
}
if (redInformationDTO.getKprq().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.KPRQISEMPTY);
}
ValidateUtils.validate(redWordSelectionDTO);
//获取当前用户信息
LoginUser loginUser = SecurityUtils.getLoginUser();
SysUser sysUser = sysUserMapper.selectUserById(loginUser.getUserId());
//根据用户信息获取企业信息
Companyservice companyservice = companyserviceMapper.selectCompanyserviceByCompanyid(sysUser.getCompanyId());
//销方类型
if (RedWordConstants.XFTYPE.equals(redInformationDTO.getSqlx())){
if (RedWordConstants.XFTYPE.equals(redWordSelectionDTO.getSqlx())){
//空信息响应
if (redWordSelectionDTO.getFpdm().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.FPDMISEMPTY);
}
if (redWordSelectionDTO.getFphm().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.FPHMISEMPTY);
}
if (redWordSelectionDTO.getKprq().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.KPRQISEMPTY);
}
//查询蓝票信息
Invoice invoice = invoiceMapper.selectByFpdmFphm(companyservice.getCompanyid(),redInformationDTO.getFpdm(), redInformationDTO.getFphm());
Invoice invoice = invoiceMapper.selectByFpdmFphm(companyservice.getCompanyid(),redWordSelectionDTO.getFpdm(), redWordSelectionDTO.getFphm());
//明细行数记录
int count = 0;
if (invoice != null){
BlueInvoiceVO blueInvoiceVO = new BlueInvoiceVO();
BeanUtils.copyProperties(invoice,blueInvoiceVO);
//封装红字信息选择返回
RedWordSelectionVO redWordSelectionVO = new RedWordSelectionVO();
BeanUtils.copyProperties(invoice,redWordSelectionVO);
List<InvoiceDetail> invoiceDetailList = invoice.getInvoiceDetailList();
//统计明细行数
for (InvoiceDetail invoiceDetail : invoiceDetailList) {
if (invoiceDetail != null){
count++;
}
}
blueInvoiceVO.setDetailCount(count);
return AjaxResult.success(blueInvoiceVO);
redWordSelectionVO.setDetailCount(count);
redWordSelectionVO.setSqlx(redWordSelectionDTO.getSqlx());
return AjaxResult.success(redWordSelectionVO);
}
return AjaxResult.error(ExceptionInformationConstants.NOTINVOICEINFORMATION);
}else if (RedWordConstants.ISDEDUCTION.equals(redInformationDTO.getSqlx())){
//购方已抵扣
BlueInvoiceVO blueInvoiceVO = new BlueInvoiceVO();
blueInvoiceVO.setBuyerName(companyservice.getSellername());
blueInvoiceVO.setBuyerTaxnum(companyservice.getSellertax());
return AjaxResult.success(blueInvoiceVO);
}else if (RedWordConstants.ISDEDUCTION.equals(redWordSelectionDTO.getSqlx())){
//购方已抵扣返回类
RedWordSelectionVO redWordSelectionVO = new RedWordSelectionVO();
redWordSelectionVO.setBuyerName(companyservice.getSellername());
redWordSelectionVO.setBuyerTaxnum(companyservice.getSellertax());
redWordSelectionVO.setSqlx(redWordSelectionDTO.getSqlx());
return AjaxResult.success(redWordSelectionVO);
}else if (RedWordConstants.NOTDEDUCTION.equals(redWordSelectionDTO.getSqlx())){
//空信息响应
if (redWordSelectionDTO.getFpdm().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.FPDMISEMPTY);
}
if (redWordSelectionDTO.getFphm().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.FPHMISEMPTY);
}
if (redWordSelectionDTO.getKprq().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.KPRQISEMPTY);
}
//购方未抵扣返回类
RedWordSelectionVO redWordSelectionVO = new RedWordSelectionVO();
BeanUtils.copyProperties(redWordSelectionDTO,redWordSelectionVO);
redWordSelectionVO.setBuyerName(companyservice.getSellername());
redWordSelectionVO.setBuyerTaxnum(companyservice.getSellertax());
return AjaxResult.success(redWordSelectionVO);
}else {
return AjaxResult.error(ExceptionInformationConstants.REQUESTTYPEERROR);
}
}
/**
* 功能描述: 红字信息提交
* @param dto
* @return : com.jianshui.common.core.domain.AjaxResult
*/
@Override
public AjaxResult redWordSubmit(RedWordDTO dto) {
//判空
ValidateUtils.validate(dto);
//类型判断
if (RedWordConstants.XFTYPE.equals(dto.getSqlx())){
//发票信息判断
if (dto.getOriginFpdm().isEmpty() || dto.getOriginFphm().isEmpty() || dto.getOriginKprq().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.INVOICEINFORMATIONISEMPTY);
}
//红字信息保存
insertRedWord(dto);
}else if (RedWordConstants.ISDEDUCTION.equals(dto.getSqlx())){
//红字信息保存
insertRedWord(dto);
}else {
//购方未抵扣
BlueInvoiceVO blueInvoiceVO = new BlueInvoiceVO();
BeanUtils.copyProperties(redInformationDTO,blueInvoiceVO);
blueInvoiceVO.setBuyerName(companyservice.getSellername());
blueInvoiceVO.setBuyerTaxnum(companyservice.getSellertax());
return AjaxResult.success(blueInvoiceVO);
//发票信息判断
if (dto.getOriginFpdm().isEmpty() || dto.getOriginFphm().isEmpty() || dto.getOriginKprq().isEmpty()){
return AjaxResult.error(ExceptionInformationConstants.INVOICEINFORMATIONISEMPTY);
}
//红字信息保存
insertRedWord(dto);
}
return AjaxResult.success(RedWordConstants.SUBMITSUCCESS);
}
/**
* 功能描述: 红字信息保存
* @param dto
* @return : com.jianshui.common.core.domain.AjaxResult
*/
public void insertRedWord(RedWordDTO dto){
//获取用户信息
Long userId = SecurityUtils.getUserId();
SysUser sysUser = sysUserMapper.selectUserById(userId);
Companyservice companyservice = companyserviceMapper.selectCompanyserviceByCompanyid(sysUser.getCompanyId());
//封装红字信息实体类
Redinfo redinfo = new Redinfo();
BeanUtils.copyProperties(dto,redinfo);
if (RedWordConstants.TAXINVOICE.equals(dto.getStatus())){
//含税总计金额
redinfo.setTaxamt(dto.getTotalMoney());
//总计税额
redinfo.setTax(dto.getTotalTax());
//不含税总计金额
redinfo.setTaxfreeamt(dto.getTotalMoney().subtract(dto.getTotalTax()));
}
if (RedWordConstants.NOTTAXINVOICE.equals(dto.getStatus())){
//不含税总计金额
redinfo.setTaxfreeamt(dto.getTotalMoney());
//含税总计金额
redinfo.setTaxamt(dto.getTotalMoney().add(dto.getTotalTax()));
//总计税额
redinfo.setTax(dto.getTotalTax());
}
//不为空字段
String uuidhm = UUID.randomUUID().toString();
redinfo.setSystemOrderno(uuidhm);
String outOrderNO = uuidhm.replaceAll("-", "");
redinfo.setOutTradeOrderno(outOrderNO);
redinfo.setFpqqlsh(uuidhm);
redinfo.setCompanyId(sysUser.getCompanyId());
redinfo.setRedInfoStatus("0");
String serviceKey = null;
try {
serviceKey = serviceManageService.getCompanyServiceSupplier("invoice", sysUser.getCompanyId());
redinfo.setServiceSupplierKey(serviceKey);
} catch (Exception e) {
log.error("简税产品端,红字信息提交失败,企业税号={},servicekey={}",companyservice.toString(),serviceKey);
throw new JianshuiServiceException("红字信息提交异常!");
}
//保存红字信息
redinfoMapper.insertRedinfo(redinfo);
//封装红字信息详情实体类
List<RedinfodetailDTO> redinfodetailList = dto.getRedinfodetailList();
List<Redinfodetail> redinfodetails = new ArrayList<>();
//行数
int count = 1;
for (RedinfodetailDTO redinfodetailDTO : redinfodetailList) {
//红字信息详情实体类
Redinfodetail redinfodetail = new Redinfodetail();
BeanUtils.copyProperties(redinfodetailDTO,redinfodetail);
redinfodetail.setRedinfoId(redinfo.getId());
redinfodetail.setIndex(count);
redinfodetail.setTaxrate(redinfodetailDTO.getTaxrate().divide(new BigDecimal("100"),4,BigDecimal.ROUND_HALF_UP));
if (RedWordConstants.TAXINVOICE.equals(dto.getStatus())){
//单价税额
BigDecimal taxCost = redinfodetailDTO.getTax().divide(redinfodetailDTO.getNum(),2,BigDecimal.ROUND_HALF_UP);
//不含税单价
redinfodetail.setPrice(redinfodetailDTO.getCost().subtract(taxCost));
//含税金额
redinfodetail.setTaxamt(redinfodetailDTO.getMoney());
//不含税金额
redinfodetail.setTaxfreeamt(redinfodetailDTO.getMoney().subtract(redinfodetailDTO.getTax()));
}else if (RedWordConstants.NOTTAXINVOICE.equals(dto.getStatus())){
//不含税单价
redinfodetail.setPrice(redinfodetailDTO.getCost());
//不含税金额
redinfodetail.setTaxfreeamt(redinfodetailDTO.getMoney());
//含税金额
redinfodetail.setTaxamt(redinfodetailDTO.getMoney().add(redinfodetailDTO.getTax()));
}
redinfodetails.add(redinfodetail);
count++;
}
//保存红字信息详情
redinfoMapper.batchRedinfodetail(redinfodetails);
}
}

@ -1,7 +1,6 @@
package com.jianshui.platform.vo;
package com.jianshui.platform.vo.invoicered;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jianshui.common.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -17,7 +16,7 @@ import java.util.Date;
**/
@ApiModel("蓝票信息类")
@Data
public class BlueInvoiceVO {
public class RedWordSelectionVO {
@ApiModelProperty("发票代码")
private String fpdm;
@ -37,6 +36,9 @@ public class BlueInvoiceVO {
@ApiModelProperty("购买方银行")
private String buyerAccount;
@ApiModelProperty("申请类型 0-销方 1-购方已抵扣 2-购方未抵扣")
private String sqlx;
@ApiModelProperty("含税金额")
private BigDecimal taxamt;
@ -53,4 +55,5 @@ public class BlueInvoiceVO {
private String deprecateType;
@ApiModelProperty("明细行数")
private Integer detailCount;
}
Loading…
Cancel
Save