From 5c5ac69dd9f0cf610623d342bd00300112e3d543 Mon Sep 17 00:00:00 2001 From: liufeilong Date: Tue, 28 Mar 2023 15:30:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B6=85=E9=99=90=E9=A2=9D=E6=8B=86?= =?UTF-8?q?=E5=88=86=E5=8D=95=E4=BB=B7=E5=AE=B9=E5=B7=AE=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/service/InvoiceService.java | 4 +- .../service/impl/InvoiceServiceImpl.java | 113 ++++++++++++------ 2 files changed, 81 insertions(+), 36 deletions(-) diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/InvoiceService.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/InvoiceService.java index cf43dfe2..b265d8ca 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/InvoiceService.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/InvoiceService.java @@ -1,5 +1,7 @@ package com.dxhy.order.consumer.modules.manager.service; +import com.dxhy.base.constant.OrderSplitException; +import com.dxhy.order.exception.OrderReceiveException; import com.dxhy.order.model.CommonOrderInfo; import com.dxhy.order.model.R; import com.dxhy.order.model.sk.kp.CommonInvoiceStatus; @@ -23,7 +25,7 @@ public interface InvoiceService { * @param pageInvoiceReq * @return */ - R preInvoice(PageInvoiceReq pageInvoiceReq); + R preInvoice(PageInvoiceReq pageInvoiceReq) throws OrderSplitException, OrderReceiveException; /** * 根据id查询数据开票 * diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/InvoiceServiceImpl.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/InvoiceServiceImpl.java index 9cb84225..1b0ca1ed 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/InvoiceServiceImpl.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/InvoiceServiceImpl.java @@ -10,8 +10,10 @@ import com.dxhy.base.constant.TaxSeparateConfig; import com.dxhy.base.utils.PriceTaxSeparationUtilNew; import com.dxhy.order.baseservice.config.BaseServiceConfig; import com.dxhy.order.baseservice.module.base.model.DrawerInfoEntity; +import com.dxhy.order.baseservice.module.base.model.RuleSplitEntity; import com.dxhy.order.baseservice.module.base.service.BaseService; import com.dxhy.order.baseservice.module.base.service.DrawerInfoService; +import com.dxhy.order.baseservice.module.base.service.RuleSplitService; import com.dxhy.order.baseservice.module.buyer.model.BuyerEntity; import com.dxhy.order.baseservice.module.buyer.service.BuyerService; import com.dxhy.order.baseservice.module.thirdservice.redis.service.RedisService; @@ -43,9 +45,12 @@ import com.dxhy.order.utils.NsrsbhUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; /** * @author 杨士勇 @@ -119,80 +124,118 @@ public class InvoiceServiceImpl implements InvoiceService { @Resource private BuyerService buyerService; + @Resource + private RuleSplitService ruleSplitService; + @Override - public R preInvoice(PageInvoiceReq pageInvoiceReq) { + @Transactional + public R preInvoice(PageInvoiceReq pageInvoiceReq) throws OrderSplitException, OrderReceiveException { List pageInvoiceItemList = pageInvoiceReq.getPageInvoiceItemList(); //查询数据列表 List commonOrderInfos = orderInfoService.batchQueryOrderInfoByOrderIdsAndNsrsbh(pageInvoiceItemList); List> consumerList = new ArrayList<>(); List> confirmList = new ArrayList<>(); - commonOrderInfos.stream().forEach(f -> { - OrderInfo orderInfo = f.getOrderInfo(); - List orderItemInfoList = f.getOrderItemInfo(); + List> djOverflowList = new ArrayList<>(); + for (CommonOrderInfo commonOrderInfo : commonOrderInfos) { + OrderInfo orderInfo = commonOrderInfo.getOrderInfo(); + List orderItemInfoList = commonOrderInfo.getOrderItemInfo(); BuyerEntity buyerEntity = null; - if(StrUtil.isNotBlank(orderInfo.getGhfId())){ + if (StrUtil.isNotBlank(orderInfo.getGhfId())) { buyerEntity = buyerService.queryBuyerInfoByxhfNsrsbhAndBuyerCode(orderInfo.getXhfNsrsbh(), orderInfo.getGhfId()); - if(ObjectUtil.isNull(buyerEntity)){ + if (ObjectUtil.isNull(buyerEntity)) { buyerEntity = buyerService.queryBuyerInfoByxhfNsrsbhAndBuyerCode(ConfigureConstant.STRING_1_, orderInfo.getGhfId()); } } - if(ObjectUtil.isNotNull(buyerEntity) && ConfigureConstant.STRING_0.equals(buyerEntity.getStatus())){ + if (ObjectUtil.isNotNull(buyerEntity) && ConfigureConstant.STRING_0.equals(buyerEntity.getStatus())) { Map map = new HashMap(); - map.put("ddh",orderInfo.getDdh()); - map.put("ghfMc",orderInfo.getGhfMc()); - map.put("ghfNsrsbh",orderInfo.getGhfNsrsbh()); - map.put("hsje",orderInfo.getKphjje()); + map.put("ddh", orderInfo.getDdh()); + map.put("ghfMc", orderInfo.getGhfMc()); + map.put("ghfNsrsbh", orderInfo.getGhfNsrsbh()); + map.put("hsje", orderInfo.getKphjje()); consumerList.add(map); } orderItemInfoList.stream().forEach(item -> { - if(ConfigureConstant.STRING_1.equals(item.getZnfm())){ + if (ConfigureConstant.STRING_1.equals(item.getZnfm())) { Map map = new HashMap(); - map.put("ddh",orderInfo.getDdh()); - map.put("xh",item.getSphxh()); + map.put("ddh", orderInfo.getDdh()); + map.put("xh", item.getSphxh()); String xmmc = item.getXmmc(); - map.put("xmmc",xmmc.substring(xmmc.lastIndexOf("*")+1,xmmc.length())); - map.put("ssjc",xmmc.substring(1,xmmc.lastIndexOf("*"))); - map.put("ssbm",item.getSpbm()); + map.put("xmmc", xmmc.substring(xmmc.lastIndexOf("*") + 1, xmmc.length())); + map.put("ssjc", xmmc.substring(1, xmmc.lastIndexOf("*"))); + map.put("ssbm", item.getSpbm()); confirmList.add(map); } }); - }); + // 订单超限额拆分 + String terminalCode = simsBackService.getTerminalCode(commonOrderInfo.getOrderInfo().getXhfNsrsbh(), commonOrderInfo.getOrderInfo().getEntId()); + List originalCommonOrderInfo = new ArrayList<>(); + originalCommonOrderInfo.add(commonOrderInfo); + List orderSplit = new ArrayList<>(); + orderSplit = generateReadyOpenOrderService.orderSplit(originalCommonOrderInfo, terminalCode, pageInvoiceReq.getUserId()); + log.info("{},{}生成预制发票拆分结果:{}", LOGGER_MSG, commonOrderInfo.getOrderInfo().getDdh(), JsonUtils.getInstance().toJsonString(orderSplit)); + + orderSplit.stream().forEach(splitEn -> { + List orderItemInfo = splitEn.getOrderItemInfo(); + orderItemInfo.stream().forEach(splitItem -> { + List collect = commonOrderInfo.getOrderItemInfo().stream().filter(oi -> oi.getXmmc().equals(splitItem.getXmmc()) && + ((StrUtil.isBlank(oi.getGgxh()) && StrUtil.isBlank(splitItem.getGgxh())) || oi.getGgxh().equals(splitItem.getGgxh())) && + ((StrUtil.isBlank(oi.getXmdw()) && StrUtil.isBlank(splitItem.getXmdw())) || oi.getXmdw().equals(splitItem.getXmdw())) && + ((StrUtil.isBlank(oi.getSl()) && StrUtil.isBlank(splitItem.getSl())) || oi.getSl().equals(splitItem.getSl()))).collect(Collectors.toList()); + if (collect.size() == 1) { + List ruleSplitEntityList = ruleSplitService.queryRuleSplit(commonOrderInfo.getOrderInfo().getXhfNsrsbh(), pageInvoiceReq.getUserId()); + log.info("税号:{},用户ID:{},查询的拆分限额信息结果:{}", commonOrderInfo.getOrderInfo().getXhfNsrsbh(), + pageInvoiceReq.getUserId(), JsonUtils.getInstance().toJsonString(ruleSplitEntityList)); + String djce = ruleSplitEntityList.get(0).getDjce(); + BigDecimal abs = new BigDecimal(collect.get(0).getXmdj()).subtract(new BigDecimal(splitItem.getXmdj())).abs(); + if (abs.compareTo(new BigDecimal(djce)) > 0) { + Map map = new HashMap(); + map.put("ddh", commonOrderInfo.getOrderInfo().getDdh()); + map.put("ghfMc", commonOrderInfo.getOrderInfo().getGhfMc()); + map.put("xhfMc", commonOrderInfo.getOrderInfo().getXhfMc()); + map.put("jshj", commonOrderInfo.getOrderInfo().getKphjje()); + djOverflowList.add(map); + } + } else { + log.error("{}校验单价容差范围发生错误:在原结算单中未匹配到唯一明细,找到了{}条", LOGGER_MSG, collect.size()); + R.error("校验单价容差范围发生错误:在原结算单中未匹配到唯一明细"); + } + }); + }); + } if(consumerList.size()>0){ return R.error(ConfigureConstant.STRING_9001, "校验客户提示",consumerList); }else if((StrUtil.isBlank(pageInvoiceReq.getConfirmZnfm()) || !ConfigureConstant.STRING_0.equals(pageInvoiceReq.getConfirmZnfm())) && confirmList.size()>0){ return R.error(ConfigureConstant.STRING_9002,"请确认以下物料税收分类编码是否准确",confirmList); + }else if(djOverflowList.size() > 0){ + return R.error(ConfigureConstant.STRING_9003, "以下订单自动拆分时单价超过设定范围,请手动拆分",djOverflowList); }else { - commonOrderInfos.stream().forEach(f -> { + for (CommonOrderInfo f : commonOrderInfos) { String terminalCode = simsBackService.getTerminalCode(f.getOrderInfo().getXhfNsrsbh(), f.getOrderInfo().getEntId()); List originalCommonOrderInfo = new ArrayList<>(); originalCommonOrderInfo.add(f); List orderSplit = new ArrayList<>(); // 订单超限额拆分 - try { - orderSplit = generateReadyOpenOrderService.orderSplit(originalCommonOrderInfo, terminalCode, pageInvoiceReq.getUserId()); - log.info("{},{}生成预制发票拆分结果:{}",LOGGER_MSG,f.getOrderInfo().getDdh(),JsonUtils.getInstance().toJsonString(orderSplit)); - } catch (OrderSplitException e) { - log.error("{}生成预制发票拆分异常:",LOGGER_MSG,e); - } - if(orderSplit.size() == 1){ + orderSplit = generateReadyOpenOrderService.orderSplit(originalCommonOrderInfo, terminalCode, pageInvoiceReq.getUserId()); + log.info("{},{}生成预制发票拆分结果:{}", LOGGER_MSG, f.getOrderInfo().getDdh(), JsonUtils.getInstance().toJsonString(orderSplit)); + if (orderSplit.size() == 1) { OrderProcessInfo processInfo = f.getProcessInfo(); processInfo.setYzfp(ConfigureConstant.STRING_1); - orderProcessService.updateOrderProcessInfoByProcessId(processInfo,null); - }else if(orderSplit.size() > 1){ + orderProcessService.updateOrderProcessInfoByProcessId(processInfo, null); + } else if (orderSplit.size() > 1) { List commonOrderInfoSaveResults = new ArrayList<>(); - try { - commonOrderInfoSaveResults = generateReadyOpenOrderService.saveOrderSplitInfo(orderSplit); - } catch (OrderReceiveException e) { - log.error("{}生成预制发票拆分后保存异常:",LOGGER_MSG,e); - } + + commonOrderInfoSaveResults = generateReadyOpenOrderService.saveOrderSplitInfo(orderSplit); + commonOrderInfoSaveResults.stream().forEach(s -> { OrderProcessInfo processInfo = s.getProcessInfo(); processInfo.setYzfp(ConfigureConstant.STRING_1); - orderProcessService.updateOrderProcessInfoByProcessId(processInfo,null); + orderProcessService.updateOrderProcessInfoByProcessId(processInfo, null); }); + } else { + continue; } - }); + } return R.ok("生成预制发票成功,请到发票处理页面查看"); } }