From 816bebd90d21ff510a3936d2d7b83b76b4db5eae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E8=8D=A3=E7=90=B3?= Date: Fri, 24 Nov 2023 12:32:37 +0800 Subject: [PATCH] =?UTF-8?q?feature:=E5=86=B2=E7=BA=A2=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/service/RedisService.java | 9 ++ .../redis/service/impl/RedisServiceImpl.java | 23 ++++ .../order/model/page/OrderInvoiceInfoVo.java | 115 ++++++++++++++++ .../model/page/RedInvoiceCheckReqPo.java | 17 +++ .../order/model/page/RedInvoicePreReqPo.java | 23 ++++ .../order/model/page/RedInvoiceRespPo.java | 14 ++ .../model/page/RedInvoiceStageReqPo.java | 19 +++ .../controller/OrderInvoiceController.java | 128 +++++++++++++++++- .../invoice/dao/OrderInvoiceInfoMapper.java | 6 + .../service/OrderInvoiceInfoService.java | 15 +- .../impl/OrderInvoiceInfoServiceImpl.java | 128 ++++++++++++++++++ .../mybatis/mapper/OrderInvoiceInfoMapper.xml | 73 ++++++++++ 12 files changed, 565 insertions(+), 5 deletions(-) create mode 100644 order-management-common/src/main/java/com/dxhy/order/model/page/OrderInvoiceInfoVo.java create mode 100644 order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceCheckReqPo.java create mode 100644 order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoicePreReqPo.java create mode 100644 order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceRespPo.java create mode 100644 order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceStageReqPo.java diff --git a/order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/RedisService.java b/order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/RedisService.java index 0850d462..2a5da749 100644 --- a/order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/RedisService.java +++ b/order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/RedisService.java @@ -1,6 +1,7 @@ package com.dxhy.order.baseservice.module.thirdservice.redis.service; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -166,4 +167,12 @@ public interface RedisService { * @return */ Long getExpire(String key); + + void putHashMap(String key,String field,String value); + + String pullHashMap(String key,String field); + + Map pullAllHashMap(String key); + + Long delHashMap(String key); } diff --git a/order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/impl/RedisServiceImpl.java b/order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/impl/RedisServiceImpl.java index 7b951dda..ab09a124 100644 --- a/order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/impl/RedisServiceImpl.java +++ b/order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/impl/RedisServiceImpl.java @@ -4,11 +4,13 @@ import com.dxhy.order.utils.JsonUtils; import com.dxhy.order.baseservice.module.thirdservice.redis.service.RedisService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.data.redis.core.HashOperations; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -198,4 +200,25 @@ public class RedisServiceImpl implements RedisService { public Long getExpire(String key) { return redisTemplate.getExpire(key); } + + @Override + public void putHashMap(String key,String field,String value){ + redisTemplate.opsForHash().put(key, field, value); + } + + @Override + public String pullHashMap(String key,String field){ + HashOperations stringHashOperations = redisTemplate.opsForHash(); + return stringHashOperations.get(key, field); + } + @Override + public Map pullAllHashMap(String key){ + HashOperations stringHashOperations = redisTemplate.opsForHash(); + return stringHashOperations.entries(key); + } + @Override + public Long delHashMap(String key) { + HashOperations stringHashOperations = redisTemplate.opsForHash(); + return stringHashOperations.delete(key); + } } diff --git a/order-management-common/src/main/java/com/dxhy/order/model/page/OrderInvoiceInfoVo.java b/order-management-common/src/main/java/com/dxhy/order/model/page/OrderInvoiceInfoVo.java new file mode 100644 index 00000000..41c9f640 --- /dev/null +++ b/order-management-common/src/main/java/com/dxhy/order/model/page/OrderInvoiceInfoVo.java @@ -0,0 +1,115 @@ +package com.dxhy.order.model.page; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderInvoiceInfoVo { + + /** + * 订单表id + */ + private String orderInfoId; + /** + * 发票请求流水号 + */ + private String fpqqlsh; + /** + * 订单号 + */ + private String ddh; + + /** + * 发票代码 + */ + private String fpdm; + + /** + * 发票号码 + */ + private String fphm; + /** + * 开票合计金额 + */ + private String kphjje; + + /** + * 合计不含税金额 + */ + private String hjbhsje; + /** + * 开票税额 + */ + private String kpse; + /** + * 可冲红金额 + * 2019-04-01添加 + */ + private String sykchje; + + /** + * 剩余可充红不含税金额 + * 用于校验 + */ + private String sykchbhsje; + + /** + * 剩余可充红税额 + * 用于校验 + */ + private String sykchse; + /** + * 作废标志 + */ + private String zfBz; + /** + * 冲红标志 + */ + private String chBz; + //==================process============================= + + /** + * 发票种类代码 + */ + private String fpzlDm; + + /** + * 购货方名称 + */ + private String ghfMc; + + /** + * 购货方纳税人识别号 + */ + private String ghfNsrsbh; + /** + * 订单状态 + */ + private String ddzt; + + /** + * 销货方纳税人识别号 + */ + private String xhfNsrsbh; + + /** + * 销货方名称 + */ + private String xhfMc; + /** + * 报账单号 + */ + private String bzdh; + /** + * 系统来源 + */ + private String xtly; + /** + * 数据权限ID + */ + private String entId; + + private Boolean selected; + +} diff --git a/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceCheckReqPo.java b/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceCheckReqPo.java new file mode 100644 index 00000000..b4ff77fe --- /dev/null +++ b/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceCheckReqPo.java @@ -0,0 +1,17 @@ +package com.dxhy.order.model.page; + +import com.sun.istack.internal.NotNull; +import lombok.Data; + +@Data +public class RedInvoiceCheckReqPo { + + @NotNull + private String lzbzdh; + + @NotNull + private String orderInfoId; + + @NotNull + private String xhfNsrsbh; +} diff --git a/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoicePreReqPo.java b/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoicePreReqPo.java new file mode 100644 index 00000000..8902dfe4 --- /dev/null +++ b/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoicePreReqPo.java @@ -0,0 +1,23 @@ +package com.dxhy.order.model.page; + +import lombok.Data; + +@Data +public class RedInvoicePreReqPo { + + + /** + * 原发票发票种类 + */ + private String yfpFpzl; + + /** + * 原发票发票开票日期 + */ + private String yfpKprq; + + /** + * 冲红原因 + */ + private String chyy; +} diff --git a/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceRespPo.java b/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceRespPo.java new file mode 100644 index 00000000..8176abd7 --- /dev/null +++ b/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceRespPo.java @@ -0,0 +1,14 @@ +package com.dxhy.order.model.page; + +import com.dxhy.order.model.OrderItemInfo; +import lombok.Data; + +import java.util.List; + +@Data +public class RedInvoiceRespPo { + + private List redItemInfoList; + + private List orderInvoiceInfos; +} diff --git a/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceStageReqPo.java b/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceStageReqPo.java new file mode 100644 index 00000000..2d7a843c --- /dev/null +++ b/order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceStageReqPo.java @@ -0,0 +1,19 @@ +package com.dxhy.order.model.page; + +import com.dxhy.order.model.OrderInvoiceInfo; +import com.dxhy.order.model.OrderItemInfo; +import lombok.Data; + +import java.util.List; + +@Data +public class RedInvoiceStageReqPo { + //红字勾选明细数据 + private List redItemList; + //蓝字勾选明细数据 + private List blueItemList; + //蓝字勾选发票数据 + private OrderInvoiceInfo blueInvoiceInfo; + //红字订单的发票请求流水号 + private String fpqqlsh; +} diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/controller/OrderInvoiceController.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/controller/OrderInvoiceController.java index 4ae21f23..5860bbc3 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/controller/OrderInvoiceController.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/controller/OrderInvoiceController.java @@ -3,6 +3,7 @@ package com.dxhy.order.consumer.modules.order.controller; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; import com.dxhy.order.baseservice.module.base.service.BaseService; import com.dxhy.order.constant.ConfigureConstant; import com.dxhy.order.constant.OrderInfoContentEnum; @@ -10,7 +11,13 @@ import com.dxhy.order.constant.OrderInfoEnum; import com.dxhy.order.constant.OrderManagementConstant; import com.dxhy.order.consumer.modules.order.model.dto.RewriteBzdhDTO; import com.dxhy.order.consumer.modules.order.service.OrderBzdhService; +import com.dxhy.order.consumer.modules.order.service.OrderItemInfoService; +import com.dxhy.order.exception.OrderReceiveException; import com.dxhy.order.model.*; +import com.dxhy.order.model.page.RedInvoiceCheckReqPo; +import com.dxhy.order.model.page.RedInvoicePreReqPo; +import com.dxhy.order.model.page.RedInvoiceRespPo; +import com.dxhy.order.model.page.RedInvoiceStageReqPo; import com.dxhy.order.model.sk.kp.CommonInvoiceStatus; import com.dxhy.order.utils.CommonUtils; import com.dxhy.order.utils.JsonUtils; @@ -28,12 +35,12 @@ import com.dxhy.order.invoice.module.invoice.service.OrderInvoiceInfoService; import com.dxhy.order.invoice.module.invoice.service.UnifyService; import com.dxhy.order.invoice.module.invoicespecial.model.SpecialInvoiceReversalEntity; import com.dxhy.order.invoice.module.invoicespecial.service.SpecialInvoiceReversalService; -import com.dxhy.order.utils.StringUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -82,6 +89,9 @@ public class OrderInvoiceController { @Resource private BaseService baseService; + @Resource + private OrderItemInfoService itemInfoService; + /** * 异常订单直接开票接口 @@ -138,6 +148,122 @@ public class OrderInvoiceController { return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); } } + /** + * 山能定制冲红流程,普票负数开具、专票的红字申请、数电红字确认单 + * + * @param + * @return + */ + @ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程校验的接口") + @PostMapping("/checkRedInvoice") + @SysLog(operation = "冲红流程", operationDesc = "订单开具冲红流程校验", key = "冲红流程") + public R checkRedInvoice(@RequestBody @Validated RedInvoiceCheckReqPo redInvoiceReqPo) { + try { + return orderInvoiceInfoService.checkRedInvoice(redInvoiceReqPo); + } catch (OrderReceiveException e){ + return R.error(e.getMessage()); + } catch (Exception e) { + log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e); + return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); + } + } + + /** + * 山能定制冲红流程,普票负数开具、专票的红字申请、数电红字确认单 + * + * @param + * @return + */ + @ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程获取数据的接口") + @PostMapping("/getOrderInvoiceData") + @SysLog(operation = "冲红流程", operationDesc = "订单开具冲红流程校验", key = "冲红流程") + public R getOrderInvoiceData(@RequestBody @Validated RedInvoiceCheckReqPo redInvoiceReqPo) { + try { + RedInvoiceRespPo orderInvoiceData = orderInvoiceInfoService.getOrderInvoiceData(redInvoiceReqPo); + return R.ok().put(OrderManagementConstant.DATA,orderInvoiceData); + } catch (Exception e) { + log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e); + return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); + } + } + + /** + * 获取蓝字发票明细订单 + * @param param + * @return + */ + @ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程获取发票明细数据的接口") + @PostMapping("/getOrderItemData") + @SysLog(operation = "冲红流程", operationDesc = "冲红流程获取发票明细数据的接口", key = "冲红流程") + public R getOrderItemData(@RequestBody String param) { + try { + JSONObject jsonObject = JSONObject.parseObject(param); + List orderItemInfos = itemInfoService.selectOrderItemInfoByOrderId(jsonObject.getString("OrderInfoId"), Arrays.asList(jsonObject.getString("xhfNsrsbh"))); + return R.ok().put(OrderManagementConstant.DATA,orderItemInfos); + } catch (Exception e) { + log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e); + return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); + } + } + + /** + * 保存红字明细与蓝字发票的关联关系 + * @param + * @return + */ + @ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程数据暂存接口") + @PostMapping("/stageRedInvoiceData") + @SysLog(operation = "冲红流程", operationDesc = "冲红流程数据暂存接口", key = "冲红流程") + public R stageRedInvoiceData(@RequestBody RedInvoiceStageReqPo redInvoiceSaveReqPo) { + try { + //红字 + return orderInvoiceInfoService.stageRedInvoiceData(redInvoiceSaveReqPo); + } catch (Exception e) { + log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e); + return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); + } + } + + /** + * 生成预制 + * @param + * @return + */ + @ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程生成预览数据接口") + @PostMapping("/generatePreInvoice") + @SysLog(operation = "冲红流程", operationDesc = "冲红流程生成预览数据接口", key = "冲红流程") + public R generatePreInvoice(@RequestBody RedInvoicePreReqPo redInvoicePreReqPo) { + try { + + + return R.ok(); + } catch (Exception e) { + log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e); + return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); + } + } + + /** + * 发票开具、专票冲红申请红字、数电申请红字确认单 + * @param + * @return + */ + @ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程保存并开具发票") + @PostMapping("/saveInvoiceData") + @SysLog(operation = "冲红流程", operationDesc = "冲红流程保存并开具发票", key = "冲红流程") + public R saveInvoiceData(@RequestBody RedInvoicePreReqPo redInvoicePreReqPo) { + try { + + //如果是普通 + return R.ok(); + } catch (Exception e) { + log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e); + return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); + } + } + + + /** * 生成预制发票(非拆分场景) diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/dao/OrderInvoiceInfoMapper.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/dao/OrderInvoiceInfoMapper.java index 907da478..e994bd6b 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/dao/OrderInvoiceInfoMapper.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/dao/OrderInvoiceInfoMapper.java @@ -6,6 +6,7 @@ import com.dxhy.order.model.OrderInvoiceInfo; import com.dxhy.order.invoice.module.invoice.model.bo.CountInvoiceByMonthBO; import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO; import com.dxhy.order.invoice.module.invoice.model.vo.*; +import com.dxhy.order.model.page.OrderInvoiceInfoVo; import org.apache.ibatis.annotations.Param; import java.util.Date; @@ -248,4 +249,9 @@ public interface OrderInvoiceInfoMapper { List countInoviceInfo(@Param("orderInfoIds")List orderInfoIds); List selectInvoiceInfoByFpqqlshs(@Param("fpqqlshs") List fpqqlshs); + + /** + * 根据报账单查询蓝字发票信息 + */ + List selectInvoiceInfoByBzdh(@Param("bzdh") String bzdh, @Param("shList") List shList); } diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java index 68c1d53d..99ac247c 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java @@ -1,14 +1,15 @@ package com.dxhy.order.invoice.module.invoice.service; -import com.dxhy.order.model.CommonOrderInvoiceAndOrderMxInfo; -import com.dxhy.order.model.InvoiceCount; -import com.dxhy.order.model.OrderInvoiceInfo; -import com.dxhy.order.model.PageUtils; +import com.dxhy.order.exception.OrderReceiveException; +import com.dxhy.order.model.*; import com.dxhy.order.baseservice.module.thirdservice.rabbitmq.model.RabbitMqCommonInvoice; import com.dxhy.order.invoice.module.invoice.model.FileDownLoad; import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO; import com.dxhy.order.invoice.module.invoice.model.vo.*; +import com.dxhy.order.model.page.RedInvoiceCheckReqPo; +import com.dxhy.order.model.page.RedInvoiceRespPo; +import com.dxhy.order.model.page.RedInvoiceStageReqPo; import org.apache.ibatis.annotations.Param; import java.io.File; @@ -284,5 +285,11 @@ public interface OrderInvoiceInfoService { String signInvoicePrint(String excelFile, List ids) throws Exception; List countInoviceInfo(@Param("orderInfoIds")List orderInfoIds); + + R checkRedInvoice(RedInvoiceCheckReqPo redInvoiceReqPo) throws OrderReceiveException; + + RedInvoiceRespPo getOrderInvoiceData(RedInvoiceCheckReqPo redInvoiceReqPo); + + R stageRedInvoiceData(RedInvoiceStageReqPo redInvoiceSaveReqPo); } diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java index c0fb8174..6335d3cc 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java @@ -6,6 +6,8 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.nacos.client.config.common.ConfigConstants; import com.dxhy.base.file.common.ExcelReadContext; import com.dxhy.base.file.handle.ExcelExportHandle; import com.dxhy.order.baseservice.config.BaseServiceConfig; @@ -20,6 +22,7 @@ import com.dxhy.order.baseservice.module.thirdservice.simsback.service.SimsBackS import com.dxhy.order.baseservice.module.thirdservice.user.model.DeptEntity; import com.dxhy.order.baseservice.module.thirdservice.user.service.UserInfoService; import com.dxhy.order.constant.*; +import com.dxhy.order.exception.OrderReceiveException; import com.dxhy.order.invoice.config.InvoiceConfig; import com.dxhy.order.invoice.module.invoice.dao.*; import com.dxhy.order.invoice.module.invoice.model.FileDownLoad; @@ -38,6 +41,10 @@ import com.dxhy.order.invoice.utils.HttpInvoiceRequestUtilQd; import com.dxhy.order.invoice.utils.PDFExportUtil; import com.dxhy.order.invoice.utils.generateinvoice.PdfProducer; import com.dxhy.order.model.*; +import com.dxhy.order.model.page.OrderInvoiceInfoVo; +import com.dxhy.order.model.page.RedInvoiceCheckReqPo; +import com.dxhy.order.model.page.RedInvoiceRespPo; +import com.dxhy.order.model.page.RedInvoiceStageReqPo; import com.dxhy.order.model.qd.QdFileDownloadRequest; import com.dxhy.order.model.qd.QdFileDownloadResponse; import com.dxhy.order.model.queue.CommonTsMqData; @@ -129,6 +136,8 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { @Qualifier("asyncExecutor") private Executor voucherTaskExecutor; + private static final String KEY_PREFIX = "order:red:"; + /** * 作用: @@ -1493,5 +1502,124 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { return orderInvoiceInfoMapper.countInoviceInfo(orderInfoIds); } + @Override + public R checkRedInvoice(RedInvoiceCheckReqPo redInvoiceReqPo) throws OrderReceiveException{ + //根据报账单查询蓝字数据 + RedInvoiceRespPo orderInvoiceData = this.getOrderInvoiceData(redInvoiceReqPo); + List orderInvoiceInfos = orderInvoiceData.getOrderInvoiceInfos(); + //查询报账单是否存在 + if(orderInvoiceInfos.size() == 0){ + return R.error("根据报账单号未查询到订单");//改为常量 + } + //todo 根据蓝字报账单调用SAP接口查询SAP状态,是否允许冲红 明慧开发 + + + //根据orderinfoId,查询红字订单信息 + OrderInfo orderInfo = orderInfoMapper.selectOrderInfoByOrderId(redInvoiceReqPo.getOrderInfoId(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); + if(orderInfo == null){ + return R.error("当前红冲订单查询为空"); + } + + String xhfXx = (StringUtils.isNotBlank(orderInfo.getXhfNsrsbh()) ? orderInfo.getXhfNsrsbh() : "") + + (StringUtils.isNotBlank(orderInfo.getXhfMc()) ? orderInfo.getXhfMc() : ""); + String lzXhfXx = (StringUtils.isNotBlank(orderInvoiceInfos.get(0).getXhfNsrsbh()) ? orderInvoiceInfos.get(0).getXhfNsrsbh() : "") + + (StringUtils.isNotBlank(orderInvoiceInfos.get(0).getXhfMc()) ? orderInvoiceInfos.get(0).getXhfMc() : ""); + String ghfXx = (StringUtils.isNotBlank(orderInfo.getGhfNsrsbh()) ? orderInfo.getGhfNsrsbh() : "") + + (StringUtils.isNotBlank(orderInfo.getGhfMc()) ? orderInfo.getGhfMc() : ""); + String lzGhfXx = (StringUtils.isNotBlank(orderInvoiceInfos.get(0).getGhfNsrsbh()) ? orderInvoiceInfos.get(0).getGhfNsrsbh() : "") + + (StringUtils.isNotBlank(orderInvoiceInfos.get(0).getGhfMc()) ? orderInvoiceInfos.get(0).getGhfMc() : ""); + + //购销方是否一致 + if(!xhfXx.equals(lzXhfXx) ){ + return R.error("负数订单的销方信息与对应蓝字报账单号不一致");//改为常量 + } + if(!ghfXx.equals(lzGhfXx)){ + return R.error("负数订单的购方信息与对应蓝字报账单号不一致");//改为常量 + } + //校验发票种类是否一致 + if(!orderInfo.getFpzlDm().equals(orderInvoiceInfos.get(0).getFpzlDm())){ + return R.error("负数订单的发票种类与对应蓝字报账单号不一致");//改为常量 + } + //比较金额(发票剩余金额、如果是专票的话需要加上红字申请的金额、如果是数电票的话需要调用接口查询红字查询) + + + + return R.ok(); + } + + /** + * 根据报账单查询蓝字数据 + * 根据请求流水号查询红字明细 + * @return + */ + @Override + public RedInvoiceRespPo getOrderInvoiceData(RedInvoiceCheckReqPo redInvoiceReqPo) { + RedInvoiceRespPo redInvoiceRespPo = new RedInvoiceRespPo(); + List orderInvoiceInfoVos = orderInvoiceInfoMapper.selectInvoiceInfoByBzdh(redInvoiceReqPo.getLzbzdh(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); + List orderItemInfos = orderItemInfoMapper.selectOrderItemInfoByOrderId(redInvoiceReqPo.getOrderInfoId(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); + //是否允许勾选,发票状态 + orderInvoiceInfoVos.stream().map(t->{ + Boolean selected = true; + t.setDdzt("开具成功");//枚举 + if(OrderInfoEnum.ORDER_STATUS_0.getKey().equals(t.getDdzt()) + ||OrderInfoEnum.ORDER_STATUS_1.getKey().equals(t.getDdzt()) + ||OrderInfoEnum.ORDER_STATUS_2.getKey().equals(t.getDdzt()) + ||OrderInfoEnum.ORDER_STATUS_3.getKey().equals(t.getDdzt()) + ){ + t.setDdzt("未开具");//枚举 + selected = false; + } + if(OrderInfoEnum.ORDER_STATUS_4.getKey().equals(t.getDdzt())){ + t.setDdzt("开具中");//枚举 + selected = false; + } + + + + if(OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) && + (ConfigureConstant.STRING_1.equals(t.getZfBz()) + || ConfigureConstant.STRING_2.equals(t.getZfBz())) + ){ + t.setDdzt("已作废");//枚举 + selected = false; + } + if(OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) && + (ConfigureConstant.STRING_1.equals(t.getChBz()) + || ConfigureConstant.STRING_2.equals(t.getChBz()) + || ConfigureConstant.STRING_3.equals(t.getChBz())) + ){ + t.setDdzt("已冲红");//枚举 + selected = false; + } + // + if(OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) && + (ConfigureConstant.STRING_4.equals(t.getChBz()) + || ConfigureConstant.STRING_5.equals(t.getChBz()) + || ConfigureConstant.STRING_6.equals(t.getChBz())) + ){ + t.setDdzt("部分冲红");//枚举 + } + t.setSelected(selected); + + return t; + }).collect(Collectors.toList()); + redInvoiceRespPo.setOrderInvoiceInfos(orderInvoiceInfoVos); + redInvoiceRespPo.setRedItemInfoList(orderItemInfos); + return redInvoiceRespPo; + } + + @Override + public R stageRedInvoiceData(RedInvoiceStageReqPo redInvoiceSaveReqPo){ + //存储redis map结构,map外层key是红字fpqqlsh,内层是发票号码+发票代码,将整体发票报文存储在value里 + OrderInvoiceInfo blueInvoiceInfo = redInvoiceSaveReqPo.getBlueInvoiceInfo(); + String key = KEY_PREFIX + redInvoiceSaveReqPo.getFpqqlsh(); + String innerKey = blueInvoiceInfo.getFpdm() + blueInvoiceInfo.getFphm(); + //组装发票报文 + //金额、数量、税额跟跟换为负数,折扣行要与被折扣行合并 + //校验重复提交数据覆盖问题 + redisService.putHashMap(key,innerKey, JSONObject.toJSONString(redInvoiceSaveReqPo)); + return R.ok(); + } + } diff --git a/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml b/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml index 1809d6d8..d223c09d 100644 --- a/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml +++ b/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml @@ -222,6 +222,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2261,4 +2286,52 @@ AND ( oii.zf_bz = '0' OR oii.ch_bz = '0' ) + + +