Merge branch 'beta' into kk

beta-prop-all^2
dongxiaoke 2 years ago
commit 4600e717c4
  1. 4
      jianshui-admin/src/main/java/com/jianshui/api/controller/webservice/income/v1/impl/InvoiceCheckWebServiceImpl.java
  2. 27
      jianshui-admin/src/main/java/com/jianshui/web/controller/platform/RedInformationController.java
  3. 2
      jianshui-invoice/src/main/resources/mapper/invoice/RedinfoMapper.xml
  4. 15
      jianshui-platform/src/main/java/com/jianshui/platform/constant/ExceptionInformationConstants.java
  5. 10
      jianshui-platform/src/main/java/com/jianshui/platform/constant/RedWordConstants.java
  6. 4
      jianshui-platform/src/main/java/com/jianshui/platform/dto/invoicered/RedWordDTO.java
  7. 1
      jianshui-platform/src/main/java/com/jianshui/platform/dto/invoicered/RedinfodetailDTO.java
  8. 29
      jianshui-platform/src/main/java/com/jianshui/platform/service/RedInformationService.java
  9. 168
      jianshui-platform/src/main/java/com/jianshui/platform/service/impl/RedInformationServiceImpl.java
  10. 2
      jianshui-platform/src/main/java/com/jianshui/platform/vo/invoicered/FindRedWordVO.java
  11. 16
      jianshui-platform/src/main/java/com/jianshui/platform/vo/invoicered/RedWordDetailVO.java

@ -359,16 +359,18 @@ public class InvoiceCheckWebServiceImpl {
JSONObject getInvoiceVOJson = JSONObject.parseObject(getInvoiceVOJsonStr);
Element getInvoiceDoc = json2Element(result, "Fp", getInvoiceVOJson);
int count = 1;
for (GetInvoiceSphVO getInvoiceSphVO : getInvoiceSphVOList) {
// JSONObject getInvoiceSphVOJson = (JSONObject) JSONObject.toJSON(getInvoiceSphVO);
// 航信明细行从1开始
getInvoiceSphVO.setId(getInvoiceSphVO.getId() + 1);
getInvoiceSphVO.setId(getInvoiceSphVO.getId() + count);
// 防止转义
String getInvoiceSphVOJsonStr = JSON.toJSONString(getInvoiceSphVO, SerializerFeature.WriteSlashAsSpecial);
getInvoiceSphVOJsonStr = getInvoiceSphVOJsonStr.replace("免税","0.0%").replace("***","0.00");
JSONObject getInvoiceSphVOJson = JSONObject.parseObject(getInvoiceSphVOJsonStr);
Element sphElement = json2Element(result, "Sph", getInvoiceSphVOJson);
getInvoiceDoc.appendChild(sphElement);
count ++;
}
return buildResult(result, "1", "查验成功", getInvoiceDoc);

@ -2,6 +2,7 @@ package com.jianshui.web.controller.platform;
import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.invoice.domain.dto.FindRedWordDTO;
import com.jianshui.invoice.domain.dto.HXResponse;
import com.jianshui.platform.dto.invoicered.RedWordSelectionDTO;
import com.jianshui.platform.dto.invoicered.RedWordDTO;
import com.jianshui.platform.service.RedInformationService;
@ -37,10 +38,34 @@ public class RedInformationController {
return redInformationService.redWordSubmit(dto);
}
@ApiOperation("红字信息列表展示")
@ApiOperation("红字信息列表展示")
@PostMapping("/findRedWord")
public AjaxResult findRedWord(@RequestBody FindRedWordDTO dto){
return redInformationService.findRedWord(dto);
}
@ApiOperation("红字信息明细展示")
@GetMapping("/findRedWordDetail/{id}")
public AjaxResult findRedWordDetail(@PathVariable Long id){
return redInformationService.findRedWordDetail(id);
}
@ApiOperation("红字信息删除")
@DeleteMapping("/deleteRedWord/{ids}")
public AjaxResult deleteRedWord(@PathVariable Long[] ids){
return redInformationService.deleteRedWord(ids);
}
@ApiOperation("红字信息修改")
@PutMapping("/updateRedWord")
public AjaxResult updateRedWord(@RequestBody RedWordDTO dto){
return redInformationService.updateRedWord(dto);
}
@ApiOperation("红字信息上传")
@GetMapping("/uploadRedWord/{id}")
public HXResponse uploadRedWord(@PathVariable Long id){
// TODO 暂未开发完成
return redInformationService.uploadRedWord(id);
}
}

@ -144,7 +144,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where a.id = #{id}
</select>
<select id="findRedInfoList" resultMap="RedinfoResult">
<include refid="selectRedinfoVo"/>
select * from redinfo
<where>
<if test="redInfoNo != null and redInfoNo != ''"> and red_info_no like concat('%', #{redInfoNo},'%')</if>
<if test="buyerName != null and buyerName != ''"> and buyer_name like concat('%', #{buyerName},'%')</if>

@ -20,6 +20,19 @@ public class ExceptionInformationConstants {
// 申请类型有误
public static final String REQUESTTYPEERROR = "申请类型有误";
//发票相关信息为空
// 发票相关信息为空
public static final String INVOICEINFORMATIONISEMPTY = "发票相关信息为空";
// 红字信息为空
public static final String REDWORDINFOISEMPT = "传入红字信息为空";
// 未查询到红字信息
public static final String NOTFINREDWORDINFO = "未查询到该红字信息表";
// 上传红字信息不能删除
public static final String NOTDELETEREDWORD = "已上传红字信息不能删除,请重新选择";
// 上传红字信息不能修改
public static final String NOTUPDATEREDWORD = "已上传红字信息不能修改,请重新选择";
}

@ -15,12 +15,18 @@ public class RedWordConstants {
// 购方类型(未抵扣)
public static final String NOTDEDUCTION = "2";
// 含税单价
// 含税状态
public static final String TAXINVOICE = "0";
// 不含税单价
// 不含税状态
public static final String NOTTAXINVOICE = "1";
// 提交结果响应
public static final String SUBMITSUCCESS = "提交成功";
//删除成功
public static final String DELETESUCCESS = "删除成功";
//修改成功
public static final String UPDATESUCCESS = "修改成功";
}

@ -1,13 +1,11 @@
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;
/**
@ -19,6 +17,8 @@ import java.util.List;
@ApiModel("红字信息")
@Data
public class RedWordDTO {
@ApiModelProperty("红字信息id")
private Long id;
@NotEmpty
@ApiModelProperty("填开类型")

@ -3,7 +3,6 @@ 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;

@ -2,6 +2,7 @@ package com.jianshui.platform.service;
import com.jianshui.common.core.domain.AjaxResult;
import com.jianshui.invoice.domain.dto.FindRedWordDTO;
import com.jianshui.invoice.domain.dto.HXResponse;
import com.jianshui.platform.dto.invoicered.RedWordSelectionDTO;
import com.jianshui.platform.dto.invoicered.RedWordDTO;
@ -32,4 +33,32 @@ public interface RedInformationService {
* @return : com.jianshui.common.core.domain.AjaxResult
*/
AjaxResult findRedWord(FindRedWordDTO dto);
/**
* 功能描述: 红字信息明细查询
* @param id
* @return : com.jianshui.common.core.domain.AjaxResult
*/
AjaxResult findRedWordDetail(Long id);
/**
* 功能描述: 批量删除红字信息
* @param ids
* @return : com.jianshui.common.core.domain.AjaxResult
*/
AjaxResult deleteRedWord(Long[] ids);
/**
* 功能描述: 修改红字信息
* @param dto
* @return : com.jianshui.common.core.domain.AjaxResult
*/
AjaxResult updateRedWord(RedWordDTO dto);
/**
* 功能描述: 红字信息上传
* @param id
* @return : com.jianshui.common.core.domain.AjaxResult
*/
HXResponse uploadRedWord(Long id);
}

@ -13,8 +13,11 @@ 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.domain.dto.HXResponse;
import com.jianshui.invoice.factory.IInvoiceServiceFactory;
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.invoice.domain.dto.FindRedWordDTO;
@ -37,7 +40,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static com.github.pagehelper.page.PageMethod.startPage;
/**
* @Author: kane
@ -63,6 +65,9 @@ public class RedInformationServiceImpl implements RedInformationService {
@Autowired
private IServiceManageService serviceManageService;
@Autowired
private IInvoiceServiceFactory invoiceServiceFactory;
/**
* 功能描述: 红字信息选择
@ -205,7 +210,7 @@ public class RedInformationServiceImpl implements RedInformationService {
redinfo.setOutTradeOrderno(outOrderNO);
redinfo.setFpqqlsh(uuidhm);
redinfo.setCompanyId(sysUser.getCompanyId());
redinfo.setRedInfoStatus("0");
redinfo.setRedInfoStatus("6");
String serviceKey = null;
try {
serviceKey = serviceManageService.getCompanyServiceSupplier("invoice", sysUser.getCompanyId());
@ -278,4 +283,163 @@ public class RedInformationServiceImpl implements RedInformationService {
return AjaxResult.success(pageFindRedWordVO);
}
/**
* 功能描述: 红字信息明细查询
* @param id
* @return : com.jianshui.common.core.domain.AjaxResult
*/
@Override
public AjaxResult findRedWordDetail(Long id) {
if (id == null){
return AjaxResult.error(ExceptionInformationConstants.REDWORDINFOISEMPT);
}
Redinfo redinfo = redinfoMapper.selectRedinfoById(id);
if (redinfo == null){
return AjaxResult.error(ExceptionInformationConstants.NOTFINREDWORDINFO);
}
//封装红字信息返回
RedWordDTO redWordDTO = new RedWordDTO();
BeanUtils.copyProperties(redinfo,redWordDTO);
redWordDTO.setStatus(RedWordConstants.NOTTAXINVOICE);
redWordDTO.setTotalMoney(redinfo.getTaxfreeamt());
//封装红字信息详情
List<Redinfodetail> redinfodetailList = redinfo.getRedinfodetailList();
List<RedinfodetailDTO> redinfodetailDTOS = new ArrayList<>();
for (Redinfodetail redinfodetail : redinfodetailList) {
RedinfodetailDTO redinfodetailDTO = new RedinfodetailDTO();
BeanUtils.copyProperties(redinfodetail,redinfodetailDTO);
redinfodetailDTO.setCost(redinfodetail.getPrice());
redinfodetailDTO.setMoney(redinfodetail.getTaxfreeamt());
redinfodetailDTOS.add(redinfodetailDTO);
}
redWordDTO.setRedinfodetailList(redinfodetailDTOS);
return AjaxResult.success(redWordDTO);
}
/**
* 功能描述: 批量删除红字信息
* @param ids
* @return : com.jianshui.common.core.domain.AjaxResult
*/
@Override
public AjaxResult deleteRedWord(Long[] ids) {
if (ids == null || ids.length == 0){
return AjaxResult.error(ExceptionInformationConstants.REDWORDINFOISEMPT);
}
for (Long id : ids) {
Redinfo redinfo = redinfoMapper.selectRedinfoById(id);
String redInfoStatus = redinfo.getRedInfoStatus();
if (!"6".equals(redInfoStatus)){
return AjaxResult.error(ExceptionInformationConstants.NOTDELETEREDWORD);
}
}
//批量删除
redinfoMapper.deleteRedinfoByIds(ids);
redinfoMapper.deleteRedinfodetailByRedinfoIds(ids);
return AjaxResult.success(RedWordConstants.DELETESUCCESS);
}
/**
* 功能描述: 红字信息修改
* @param dto
* @return : com.jianshui.common.core.domain.AjaxResult
*/
@Override
public AjaxResult updateRedWord(RedWordDTO dto) {
if (dto.getId() == null){
return AjaxResult.error(ExceptionInformationConstants.REDWORDINFOISEMPT);
}
Redinfo redinfo = redinfoMapper.selectRedinfoById(dto.getId());
if (redinfo == null){
return AjaxResult.error(ExceptionInformationConstants.NOTFINREDWORDINFO);
}
if ("6".equals(redinfo.getRedInfoStatus()) || "2".equals(redinfo.getRedInfoStatus())){
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());
}
redinfoMapper.updateRedinfo(redinfo);
// 红字信息详情
List<RedinfodetailDTO> redinfodetailList = dto.getRedinfodetailList();
List<Redinfodetail> redinfodetails = new ArrayList<>();
int count = 1;
for (RedinfodetailDTO redinfodetailDTO : redinfodetailList) {
//删除详情表
redinfoMapper.deleteRedinfodetailByRedinfoId(dto.getId());
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);
return AjaxResult.success(RedWordConstants.SUBMITSUCCESS);
}else {
return AjaxResult.error(ExceptionInformationConstants.NOTUPDATEREDWORD);
}
}
/**
* 功能描述: 红字信息表上传
* @param id
* @return : com.jianshui.common.core.domain.AjaxResult
*/
@Override
public HXResponse uploadRedWord(Long id) {
// TODO 暂未开发完成
if (id == null){
return new HXResponse(ExceptionInformationConstants.REDWORDINFOISEMPT);
}
Redinfo redinfo = redinfoMapper.selectRedinfoById(id);
if (redinfo == null){
return new HXResponse(ExceptionInformationConstants.NOTFINREDWORDINFO);
}
Long userId = SecurityUtils.getUserId();
SysUser sysUser = sysUserMapper.selectUserById(userId);
Companyservice companyservice = companyserviceMapper.selectCompanyserviceByCompanyid(sysUser.getCompanyId());
String serviceKey = null;
HXResponse result;
try {
serviceKey = serviceManageService.getCompanyServiceSupplier("invoice", sysUser.getCompanyId());
IInvoiceApiService invoiceService = invoiceServiceFactory.getService(serviceKey);
result = invoiceService.uploadRedInfo(redinfo, companyservice);
} catch (Exception e) {
log.error("简税产品端,红字信息上传失败,企业税号={},servicekey={}",companyservice.toString(),serviceKey);
throw new JianshuiServiceException("红字信息上传异常!");
}
return result;
}
}

@ -16,6 +16,8 @@ import java.math.BigDecimal;
@ApiModel("红字信息查询返回结果")
public class FindRedWordVO {
@ApiModelProperty("主键id 红字信息id")
private Long id;
@ApiModelProperty("信息表编号")
private String redInfoNo;

@ -0,0 +1,16 @@
package com.jianshui.platform.vo.invoicered;
import io.swagger.annotations.ApiModel;
import lombok.Data;
/**
* @Author: kane
* @Description: 红字信息明细返回类
* @CreateTime: 2023-06-26 12:03
* @Version: 1.0
**/
@ApiModel("发票明细返回类")
@Data
public class RedWordDetailVO {
}