diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java b/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java index 70474ab8..11e2deda 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/controller/InterfaceController.java @@ -1259,7 +1259,7 @@ public class InterfaceController extends AbstractController { } } - public String transferOut(ErpInvoiceData erpInvoiceData){ + public String transferOuts(ErpInvoiceData erpInvoiceData){ String zdata = erpInvoiceData.getIS_INPUT().getZDATA(); List list = JSON.parseArray(zdata, Map.class); @@ -1414,5 +1414,89 @@ public class InterfaceController extends AbstractController { } + public String transferOut(@RequestBody ErpInvoiceData erpInvoiceData){ + try { + //转化实体 + String zdata = erpInvoiceData.getIS_INPUT().getZDATA(); + List zdatans = JSONObject.parseArray(zdata, ZDATAN.class); + //返回结果实体 + OutPut outPut = new OutPut(); + EsOutPutResp es = new EsOutPutResp(); + es.setBSKEY(erpInvoiceData.getIS_INPUT().getBSKEY()); + es.setSAPKEY(erpInvoiceData.getIS_INPUT().getSAPKEY()); + + //校验发票号码 + boolean allMatch = zdatans.stream().allMatch(e -> StringUtils.isNotBlank(e.getZFPHM())); + //号码存在为空直接返回错误 + if (!allMatch) { + es.setZTYPE("E"); + es.setZMESSAGE("发票号码不能为空"); + outPut.setES_OUTPUT(es); + log.info("进项税转出传入发票存在没有发票号码发票"); + return JsonUtils.getInstance().toJsonString(outPut); + } + StringBuilder uuids = new StringBuilder(); + zdatans.forEach(e -> uuids.append(e.getZFPDM() == null ? "" : e.getZFPDM()).append(e.getZFPHM()).append(",")); + + //根据uuid查询发票 + String[] ids = uuids.toString().split(","); + DynamicContextHolder.push("business"+DbConstant.BUSINESS_READ); + List tDxRecordInvoices = baseIReceiptInvoiceService.selectByUuids(ids); + if (tDxRecordInvoices == null || tDxRecordInvoices.size() == 0 || tDxRecordInvoices.size() != ids.length) { + es.setZTYPE("E"); + es.setZMESSAGE("发票在发票系统中不存在"); + outPut.setES_OUTPUT(es); + log.info("进项税转出传入发票在发票系统中不存在"); + return JsonUtils.getInstance().toJsonString(outPut); + } + List collect = tDxRecordInvoices.stream().filter(e -> "0".equals(e.getRzhYesorno())).collect(Collectors.toList()); + if (collect.size() > 0) { + es.setZTYPE("E"); + es.setZMESSAGE("发票未认证不可转出"); + outPut.setES_OUTPUT(es); + log.info("进项税转出传入发票存在未认证发票"); + return JsonUtils.getInstance().toJsonString(outPut); + } + List collect1 = tDxRecordInvoices.stream().filter(e -> BigDecimal.ZERO.compareTo(e.getTaxAmount()) > 0).collect(Collectors.toList()); + if (collect1 != null && collect1.size()>0){ + es.setZTYPE("E"); + es.setZMESSAGE("税额小于零不可转出"); + outPut.setES_OUTPUT(es); + log.info("进项税转出传入发票存在税额小于零发票"); + return JsonUtils.getInstance().toJsonString(outPut); + } + //进项税转出或者取消转出 + UserInfo userInfo = new UserInfo(); + iReceiptOutService.transferOrcancelOut(zdatans,userInfo); + es.setZTYPE("Y"); + es.setZMESSAGE("操作成功"); + log.info("进项税转出成功"); + return JsonUtils.getInstance().toJsonString(es); + }catch(RuntimeException e){ + e.printStackTrace(); + log.error("error", e.getMessage()); + OutPut outPut = new OutPut(); + EsOutPutResp es = new EsOutPutResp(); + es.setBSKEY(erpInvoiceData.getIS_INPUT().getBSKEY()); + es.setSAPKEY(erpInvoiceData.getIS_INPUT().getSAPKEY()); + es.setZTYPE("E"); + es.setZMESSAGE(e.getMessage()); + outPut.setES_OUTPUT(es); + return JsonUtils.getInstance().toJsonString(outPut); + } catch (Exception e){ + e.printStackTrace(); + log.error("error", e.getMessage()); + OutPut outPut = new OutPut(); + EsOutPutResp es = new EsOutPutResp(); + es.setBSKEY(erpInvoiceData.getIS_INPUT().getBSKEY()); + es.setSAPKEY(erpInvoiceData.getIS_INPUT().getSAPKEY()); + es.setZTYPE("E"); + es.setZMESSAGE("系统内部错误"); + outPut.setES_OUTPUT(es); + return JsonUtils.getInstance().toJsonString(outPut); + } + + + } } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/model/ZDATAN.java b/dxhy-erp/src/main/java/com/dxhy/erp/model/ZDATAN.java new file mode 100644 index 00000000..b6e3cf8e --- /dev/null +++ b/dxhy-erp/src/main/java/com/dxhy/erp/model/ZDATAN.java @@ -0,0 +1,24 @@ +package com.dxhy.erp.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class ZDATAN { + @JsonProperty(value = "IS_INPUT") + private String MANDT; + @JsonProperty(value = "IS_INPUT") + private String ZBZDH; + @JsonProperty(value = "IS_INPUT") + private String ZFPDM; + @JsonProperty(value = "IS_INPUT") + private String ZFPHM; + @JsonProperty(value = "IS_INPUT") + private BigDecimal JXSZC; + @JsonProperty(value = "IS_INPUT") + private String ZZCYY; + @JsonProperty(value = "IS_INPUT") + private String BUDAT; +} diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/IReceiptOutService.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/IReceiptOutService.java index 01f71d7d..7418da4e 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/IReceiptOutService.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/IReceiptOutService.java @@ -2,7 +2,13 @@ package com.dxhy.erp.service; import com.dxhy.common.vo.UserInfo; import com.dxhy.erp.entity.BaseInvoiceEditVO; +import com.dxhy.erp.entity.BaseTDxRecordInvoice; import com.dxhy.erp.model.ErpInvoiceData; +import com.dxhy.erp.model.ZDATAN; +import org.junit.jupiter.api.parallel.Execution; + +import java.util.List; +import java.util.concurrent.ExecutionException; /** * @Author wangzhikun @@ -11,4 +17,6 @@ import com.dxhy.erp.model.ErpInvoiceData; public interface IReceiptOutService { String transfer(BaseInvoiceEditVO baseInvoiceEditVO, UserInfo userInfo); + + String transferOrcancelOut(List zdatans,UserInfo userInfo); } diff --git a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/BaseIReceiptInvoiceServiceImpl.java b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/BaseIReceiptInvoiceServiceImpl.java index 4594ec06..d93f72c7 100644 --- a/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/BaseIReceiptInvoiceServiceImpl.java +++ b/dxhy-erp/src/main/java/com/dxhy/erp/service/impl/BaseIReceiptInvoiceServiceImpl.java @@ -63,7 +63,7 @@ public class BaseIReceiptInvoiceServiceImpl extends MpBaseServiceImpl updateWrapper = new UpdateWrapper<>(); updateWrapper.set("out_status",condRecord.getOutStatus()); updateWrapper.set("out_reason",condRecord.getOutReason()); @@ -130,6 +132,7 @@ public class BaseIReceiptInvoiceServiceImpl extends MpBaseServiceImpl invoices = baseIReceiptInvoiceService.selectByUuids(ids); - if(CollectionUtils.isEmpty(invoices)){ - return TransferContant.INVOICE_NOT_EXIT; - } - invoices = invoices.stream().filter(e -> !"0".equals(e.getRzhYesorno())).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(invoices)){ - return TransferContant.NOT_RZ; - } + // second:根据uuids查询出转出明细并转为map,key=uuid ,value=转出明细 List outs = listByUuids(ids); Map outMap = @@ -80,11 +73,34 @@ public class ReceiptOutServiceImpl extends MpBaseServiceImpl zdatans,UserInfo userInfo){ + String result = ""; + for (ZDATAN zdata : zdatans) { + //转出税额大于1则是转出 + if (zdata.getJXSZC().compareTo(BigDecimal.ZERO)==1){ + BaseInvoiceEditVO baseInvoiceEditVO = new BaseInvoiceEditVO(); + baseInvoiceEditVO.setPrimaryKey(zdata.getZFPDM()==null?"":zdata.getZFPDM()+zdata.getZFPHM()); + baseInvoiceEditVO.setOutReason(zdata.getZZCYY()); + baseInvoiceEditVO.setOutTax(zdata.getJXSZC().toPlainString()); + baseInvoiceEditVO.setOutStatus("1"); + baseInvoiceEditVO.setOutTaxPeriod(zdata.getBUDAT()); + this.transfer(baseInvoiceEditVO,userInfo); + }else {//转出税额小于0取消转出 + BaseReceiptOutCancelEditReqVO baseReceiptOutCancelEditReqVO = new BaseReceiptOutCancelEditReqVO(); + baseReceiptOutCancelEditReqVO.setPrimaryKey(zdata.getZFPDM()==null?"":zdata.getZFPDM()+zdata.getZFPHM()); + baseIReceiptInvoiceService.cancelOut(baseReceiptOutCancelEditReqVO); + } + } + return TransferContant.SUCCESS; + } + /** * 根据uuids查询进项税转出明细 * @@ -137,10 +153,19 @@ public class ReceiptOutServiceImpl extends MpBaseServiceImpl0){ + throw new RuntimeException("累计转出税额不能大于发票税额"); + } // 转出金额 condRecord.setOutInvoiceAmout(record.getInvoiceAmount()); // 转出税额 condRecord.setOutTaxAmount(record.getDkTaxAmount()); + if (condRecord.getOutTaxAmount() == null){ + condRecord.setOutTaxAmount(new BigDecimal(condVO.getOutTax())); + } + if (condRecord.getOutTaxAmount().compareTo(record.getTaxAmount()) > 0){ + throw new RuntimeException("转出税额不能大于发票税额"); + } } /*部分转出 */ if (JxszcZtEnum.BFZC.getZcztDm().equals(condVO.getOutStatus())) { @@ -206,10 +231,19 @@ public class ReceiptOutServiceImpl extends MpBaseServiceImpl0){ + throw new RuntimeException("累计转出税额不能大于发票税额"); + } // 转出金额 record.setOutInvoiceAmout(invoice.getInvoiceAmount()); // 转出税额 record.setOutTaxAmount(invoice.getDkTaxAmount()); + if (record.getOutTaxAmount() == null){ + record.setOutTaxAmount(new BigDecimal(condVO.getOutTax())); + } + if (record.getOutTaxAmount().compareTo(invoice.getTaxAmount()) > 0){ + throw new RuntimeException("转出税额不能大于发票税额"); + } } /* 部分转出 */ if (JxszcZtEnum.BFZC.getZcztDm().equals(condVO.getOutStatus())) {