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 2a5da749..3d8d3d50 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 @@ -175,4 +175,6 @@ public interface RedisService { Map pullAllHashMap(String key); Long delHashMap(String key); + + Long delHashMap(String key,String field); } 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 ab09a124..64326be5 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 @@ -211,14 +211,21 @@ public class RedisServiceImpl implements RedisService { 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); } + + public Long delHashMap(String key,String field) { + HashOperations stringHashOperations = redisTemplate.opsForHash(); + return stringHashOperations.delete(key,field); + } } diff --git a/order-management-common/pom.xml b/order-management-common/pom.xml index 36af9bc2..c5395271 100644 --- a/order-management-common/pom.xml +++ b/order-management-common/pom.xml @@ -13,7 +13,11 @@ - + + org.hibernate.validator + hibernate-validator + ${hibernate.validator.version} + org.apache.commons diff --git a/order-management-common/src/main/java/com/dxhy/order/model/OrderItemInfo.java b/order-management-common/src/main/java/com/dxhy/order/model/OrderItemInfo.java index acac46e4..d9d0d8bf 100644 --- a/order-management-common/src/main/java/com/dxhy/order/model/OrderItemInfo.java +++ b/order-management-common/src/main/java/com/dxhy/order/model/OrderItemInfo.java @@ -189,5 +189,7 @@ public class OrderItemInfo implements Serializable { * 价税合计 */ private String jshj; + private String gxbz; + private String sykchje; } 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 index 41c9f640..4470e316 100644 --- 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 @@ -3,6 +3,8 @@ package com.dxhy.order.model.page; import lombok.Getter; import lombok.Setter; +import java.util.Date; + @Getter @Setter public class OrderInvoiceInfoVo { @@ -112,4 +114,6 @@ public class OrderInvoiceInfoVo { private Boolean selected; + private Date kprq; + } 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 index b4ff77fe..814d7b18 100644 --- 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 @@ -1,8 +1,9 @@ package com.dxhy.order.model.page; -import com.sun.istack.internal.NotNull; import lombok.Data; +import javax.validation.constraints.NotNull; + @Data public class RedInvoiceCheckReqPo { @@ -14,4 +15,6 @@ public class RedInvoiceCheckReqPo { @NotNull private String xhfNsrsbh; + + private String sfhb; } 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 index 8176abd7..1474641b 100644 --- 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 @@ -11,4 +11,7 @@ public class RedInvoiceRespPo { private List redItemInfoList; private List orderInvoiceInfos; + private String redFpqqlsh; + private String redBzdh; + private String xhfNsrsbh; } 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 b979b46f..2b0e3040 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 @@ -116,4 +116,6 @@ public interface InvoiceService { */ void checkBuyerCheckBankFlag(List orderInfoIdList); + R saveRedInvoiceData(String redFpqqlsh, String xhfNsrsbh); + } 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 fa9ae393..dadf645e 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 @@ -4,13 +4,13 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.dxhy.base.constant.OrderSeparationException; import com.dxhy.base.constant.OrderSplitException; 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; @@ -31,26 +31,38 @@ import com.dxhy.order.consumer.modules.order.model.PageInvoiceItem; import com.dxhy.order.consumer.modules.order.model.PageInvoiceReq; import com.dxhy.order.consumer.modules.order.model.PageReInvoice; import com.dxhy.order.consumer.modules.order.service.*; +import com.dxhy.order.consumer.openapi.protocol.v4.order.*; +import com.dxhy.order.consumer.openapi.protocol.v6.hzqrd.QdCommonRspV6; +import com.dxhy.order.consumer.openapi.service.AllocateInvoiceInterfaceServiceV3; +import com.dxhy.order.consumer.openapi.service.InterfaceServiceV6; import com.dxhy.order.consumer.utils.BeanTransitionUtils; import com.dxhy.order.consumer.utils.TaxSpecialPolicyUtil; import com.dxhy.order.exception.OrderReceiveException; import com.dxhy.order.invoice.config.InvoiceConfig; import com.dxhy.order.invoice.module.fangge.service.FangGeService; import com.dxhy.order.invoice.module.invoice.dao.OrderInfoMapper; +import com.dxhy.order.invoice.module.invoice.model.Hzqrdxxmxqd; +import com.dxhy.order.invoice.module.invoice.model.Hzqrdxxqd; import com.dxhy.order.invoice.module.invoice.model.PageSld; +import com.dxhy.order.invoice.module.invoice.model.SpecialInvoiceReversalPlus; import com.dxhy.order.invoice.module.invoice.service.InvalidInvoiceService; 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.controller.SpecialInvoiceReversalController; import com.dxhy.order.invoice.utils.HttpInvoiceRequestUtil; import com.dxhy.order.model.*; +import com.dxhy.order.model.page.RedInvoiceStageReqPo; import com.dxhy.order.model.queue.FpkjMqData; import com.dxhy.order.model.sk.kp.CommonInvoiceStatus; import com.dxhy.order.model.sk.kp.InvoiceQuery; import com.dxhy.order.utils.CommonUtils; +import com.dxhy.order.utils.DistributedKeyMaker; import com.dxhy.order.utils.JsonUtils; import com.dxhy.order.utils.NsrsbhUtils; +import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.joda.time.DateTime; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -60,7 +72,6 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; -import java.util.stream.Collectors; /** * @author 杨士勇 @@ -148,6 +159,14 @@ public class InvoiceServiceImpl implements InvoiceService { @Resource private OrderSplitService orderSplitService; + private static final String KEY_PREFIX = "order:red:"; + private static final String KEY_RED_SYJE = "order:red:syje"; + @Resource + private SpecialInvoiceReversalController reversalController; + @Resource + private AllocateInvoiceInterfaceServiceV3 allocateInvoiceInterfaceServiceV3; + @Resource + private InterfaceServiceV6 interfaceServiceV6; @Override @@ -1622,4 +1641,210 @@ public class InvoiceServiceImpl implements InvoiceService { } + @Override + public R saveRedInvoiceData(String redFpqqlsh, String xhfNsrsbh) { + String key = KEY_PREFIX + redFpqqlsh; + Map allHashMap = redisService.pullAllHashMap(key); + OrderProcessInfo processInfo = orderProcessService.queryOrderProcessInfoByFpqqlsh(redFpqqlsh, Lists.newArrayList(xhfNsrsbh)); + if(processInfo == null || allHashMap == null){ + return R.error("参数有误!"); + } + if(processInfo.getPzgzrq() == null){ + return R.ok("缺少凭证过账日期数据"); + } + for (Map.Entry stringEntry : allHashMap.entrySet()) { + String entryValue = stringEntry.getValue(); + RedInvoiceStageReqPo invoiceStageReqPo = JSONObject.parseObject(entryValue, RedInvoiceStageReqPo.class); + List blueItemList = invoiceStageReqPo.getBlueItemList(); + OrderInvoiceInfo blueInvoiceInfo = invoiceStageReqPo.getBlueInvoiceInfo(); + BigDecimal blueMxje = blueItemList.stream().map(blueItem -> new BigDecimal(blueItem.getXmje())).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal blueSe = blueItemList.stream().map(blueItem -> new BigDecimal(blueItem.getSe())).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal hjzje = blueMxje.add(blueSe); + if(OrderInfoEnum.ORDER_INVOICE_TYPE_0.getKey().equals(blueInvoiceInfo.getFpzlDm())){ + SpecialInvoiceReversalPlus specialInvoiceReversal = new SpecialInvoiceReversalPlus(); + BeanUtils.copyProperties(blueInvoiceInfo,specialInvoiceReversal); + specialInvoiceReversal.setYfpHm(blueInvoiceInfo.getFphm()); + specialInvoiceReversal.setYfpDm(blueInvoiceInfo.getFpdm()); + specialInvoiceReversal.setYfpKprq(blueInvoiceInfo.getKprq()); + specialInvoiceReversal.setChyy(OrderInfoEnum.ORDER_CHYY_2.getKey()); + specialInvoiceReversal.setHjbhsje("-"+blueMxje.toPlainString()); + specialInvoiceReversal.setHjse("-"+blueSe.toPlainString()); + specialInvoiceReversal.setKphjje("-"+hjzje.toPlainString()); + specialInvoiceReversal.setSqsm(OrderInfoEnum.SPECIAL_INVOICE_REASON_0000000100.getKey()); + specialInvoiceReversal.setAgentName(userInfoService.getUser().getName()); + specialInvoiceReversal.setType(OrderInfoEnum.SPECIAL_INVOICE_TYPE_0.getKey()); + if(OrderInfoEnum.QDBZ_CODE_4.getKey().equals(blueInvoiceInfo.getQdbz())){ + specialInvoiceReversal.setType(OrderInfoEnum.SPECIAL_INVOICE_TYPE_1.getKey()); + }else if(OrderInfoEnum.QDBZ_CODE_5.getKey().equals(blueInvoiceInfo.getQdbz()) || OrderInfoEnum.QDBZ_CODE_6.getKey().equals(blueInvoiceInfo.getQdbz())) { + specialInvoiceReversal.setType(OrderInfoEnum.SPECIAL_INVOICE_TYPE_3.getKey()); + } + List list = Lists.newArrayList(); + for (OrderItemInfo orderItemInfo : blueItemList) { + SpecialInvoiceReversalItem invoiceReversalItem = new SpecialInvoiceReversalItem(); + BeanUtils.copyProperties(orderItemInfo,invoiceReversalItem); + invoiceReversalItem.setXmje("-"+orderItemInfo.getXmje()); + invoiceReversalItem.setSe("-"+orderItemInfo.getSe()); + invoiceReversalItem.setXmdj("-"+orderItemInfo.getXmdj()); + list.add(invoiceReversalItem); + } + specialInvoiceReversal.setItems(list); + log.info("生成红字信息表,请求数据:{}",JSONObject.toJSONString(specialInvoiceReversal)); + R r = reversalController.addSpecialInvoiceReversal(JSONObject.toJSONString(specialInvoiceReversal)); + log.info("生成红字信息表,返回数据:{}",r); + } else if(OrderInfoEnum.ORDER_INVOICE_TYPE_01.getKey().equals(blueInvoiceInfo.getFpzlDm()) || OrderInfoEnum.ORDER_INVOICE_TYPE_02.getKey().equals(blueInvoiceInfo.getFpzlDm())) { + Hzqrdxxqd hzqrdxxqd = new Hzqrdxxqd(); + hzqrdxxqd.setUUID(DistributedKeyMaker.generateShotKey()); + BeanUtils.copyProperties(blueInvoiceInfo,hzqrdxxqd); + hzqrdxxqd.setXSFNSRSBH(blueInvoiceInfo.getXhfNsrsbh()); + hzqrdxxqd.setXSFMC(blueInvoiceInfo.getXhfMc()); + hzqrdxxqd.setGMFNSRSBH(blueInvoiceInfo.getGhfNsrsbh()); + hzqrdxxqd.setGMFMC(blueInvoiceInfo.getGhfMc()); + hzqrdxxqd.setLZFPDM(blueInvoiceInfo.getFpdm()); + hzqrdxxqd.setLZFPHM(blueInvoiceInfo.getFphm()); + hzqrdxxqd.setSFZZFPBZ("N"); + hzqrdxxqd.setLZKPRQ(DateUtil.format(blueInvoiceInfo.getKprq(), "yyyy-MM-dd")); + hzqrdxxqd.setLZHJJE(blueInvoiceInfo.getHjbhsje()); + hzqrdxxqd.setLZHJSE(blueInvoiceInfo.getKpse()); + hzqrdxxqd.setLZFPPZDM(blueInvoiceInfo.getFpzlDm()); + hzqrdxxqd.setHZCXJE("-"+blueMxje.toPlainString()); + hzqrdxxqd.setHZCXSE("-"+blueSe.toPlainString()); + hzqrdxxqd.setCHYYDM("01"); + List list = Lists.newArrayList(); + Integer index = 1; + for (OrderItemInfo orderItemInfo : blueItemList) { + Hzqrdxxmxqd hzqrdxxmxqd = new Hzqrdxxmxqd(); + BeanUtils.copyProperties(orderItemInfo,hzqrdxxmxqd); + hzqrdxxmxqd.setXH(String.valueOf(index)); + hzqrdxxmxqd.setLZMXXH(orderItemInfo.getSphxh()); + hzqrdxxmxqd.setSPHFWSSFLHBBM(orderItemInfo.getSpbm()); + hzqrdxxmxqd.setXMMC(orderItemInfo.getXmmc()); + hzqrdxxmxqd.setGGXH(orderItemInfo.getGgxh()); + hzqrdxxmxqd.setDW(orderItemInfo.getXmdw()); + hzqrdxxmxqd.setFPSPDJ(orderItemInfo.getXmdj()); + hzqrdxxmxqd.setFPSPSL("-"+orderItemInfo.getXmsl()); + hzqrdxxmxqd.setJE("-"+orderItemInfo.getXmje()); + hzqrdxxmxqd.setSLV(orderItemInfo.getSl()); + hzqrdxxmxqd.setSE("-"+orderItemInfo.getSe()); + list.add(hzqrdxxmxqd); + index++; + } + hzqrdxxqd.setHZQRXXMXLIST(list); + log.info("生成红字确认单信息:请求税控数据{}",JSONObject.toJSONString(hzqrdxxqd)); + QdCommonRspV6 qdCommonRspV6 = interfaceServiceV6.processProxyForQd(ConfigurerInfo.RED_CONFIRMATION_APPLY, JSONObject.toJSONString(hzqrdxxqd)); + log.info("生成红字确认单信息:税控数据返回信息{}",JSONObject.toJSONString(qdCommonRspV6)); + } else if(OrderInfoEnum.ORDER_INVOICE_TYPE_2.getKey().equals(blueInvoiceInfo.getFpzlDm()) || OrderInfoEnum.ORDER_INVOICE_TYPE_51.getKey().equals(blueInvoiceInfo.getFpzlDm())) { + List shList = Lists.newArrayList(); + shList.add(blueInvoiceInfo.getXhfNsrsbh()); + OrderInfo orderInfo = orderInfoService.queryOrderInfoByFpqqlsh(blueInvoiceInfo.getFpqqlsh(), shList); + DdpcxxReqBO ddpcxxReq = new DdpcxxReqBO(); + DdpcxxBO ddpcxxBO = new DdpcxxBO(); + ddpcxxBO.setDDQQPCH(DistributedKeyMaker.generateShotKey()); + ddpcxxBO.setNSRSBH(blueInvoiceInfo.getXhfNsrsbh()); + ddpcxxBO.setENTID(blueInvoiceInfo.getEntId()); + ddpcxxBO.setFPLXDM(OrderInfoEnum.ORDER_INVOICE_TYPE_51.getKey().equals(blueInvoiceInfo.getFpzlDm())?"026":"007"); + ddpcxxBO.setKPFS("1"); + + ddpcxxReq.setDDPCXX(ddpcxxBO); + List ddzxxBOList = Lists.newArrayList(); + DdzxxBO ddzxxBO = new DdzxxBO(); + DdtxxBO ddtxxBO = new DdtxxBO(); + ddtxxBO.setDDQQLSH(DistributedKeyMaker.generateShotKey()); + ddtxxBO.setENTID(blueInvoiceInfo.getEntId()); + ddtxxBO.setNSRSBH(blueInvoiceInfo.getXhfNsrsbh()); + ddtxxBO.setNSRMC(blueInvoiceInfo.getXhfMc()); + ddtxxBO.setKPLX("1"); + ddtxxBO.setXHFSBH(blueInvoiceInfo.getXhfNsrsbh()); + ddtxxBO.setXHFMC(blueInvoiceInfo.getXhfMc()); + ddtxxBO.setXHFDZ(orderInfo.getXhfDz()); + ddtxxBO.setXHFDH(orderInfo.getXhfDh()); + ddtxxBO.setXHFYH(orderInfo.getXhfYh()); + ddtxxBO.setXHFZH(orderInfo.getXhfZh()); + ddtxxBO.setGMFBM(orderInfo.getGhfId()); + ddtxxBO.setGMFSBH(orderInfo.getGhfNsrsbh()); + ddtxxBO.setGMFMC(orderInfo.getGhfMc()); + ddtxxBO.setGMFDZ(orderInfo.getGhfDz()); + ddtxxBO.setGMFDH(orderInfo.getGhfDh()); + ddtxxBO.setGMFYH(orderInfo.getGhfYh()); + ddtxxBO.setGMFZH(orderInfo.getGhfZh()); + ddtxxBO.setGMFLX(orderInfo.getGhfQylx()); + ddtxxBO.setGMFSF(orderInfo.getGhfSf()); + ddtxxBO.setGMFSJH(orderInfo.getGhfSf()); + ddtxxBO.setGMFDZYX(orderInfo.getGhfEmail()); + ddtxxBO.setKPR(orderInfo.getKpr()); + ddtxxBO.setSKR(orderInfo.getSkr()); + ddtxxBO.setFHR(orderInfo.getFhr()); + ddtxxBO.setYFPDM(blueInvoiceInfo.getFpdm()); + ddtxxBO.setYFPHM(blueInvoiceInfo.getFphm()); + ddtxxBO.setYFPLX(ddpcxxBO.getFPLXDM()); + ddtxxBO.setYFPKPRQ(DateUtil.format(blueInvoiceInfo.getKprq(), "yyyy-MM-dd")); + ddtxxBO.setJSHJ("-"+hjzje); + ddtxxBO.setHJJE("-"+blueMxje); + ddtxxBO.setHJSE("-"+blueSe); + ddtxxBO.setBZ(orderInfo.getBz()); + ddtxxBO.setCHYY(OrderInfoEnum.ORDER_CHYY_2.getKey()); + ddtxxBO.setDDH(DistributedKeyMaker.generateShotKey()); + ddtxxBO.setDDSJ(DateTime.now().toString("yyyy-MM-dd")); + ddtxxBO.setKPFS("1"); + ddtxxBO.setDDLY(OrderInfoEnum.ORDER_SOURCE_2.getKey()); + ddtxxBO.setXTLY(OrderInfoEnum.SYS_SOURCE_FPPAGE.getKey()); + ddtxxBO.setBHZT(ConfigureConstant.STRING_0); + ddtxxBO.setTSCHBZ(ConfigureConstant.STRING_0); + ddtxxBO.setQDBZ(blueItemList.size()> ConfigureConstant.INT_8?OrderInfoEnum.QDBZ_CODE_1.getKey():OrderInfoEnum.QDBZ_CODE_0.getKey()); + if(OrderInfoEnum.QDBZ_CODE_5.getKey().equals(blueInvoiceInfo.getQdbz()) || OrderInfoEnum.QDBZ_CODE_6.getKey().equals(blueInvoiceInfo.getQdbz())){ + ddtxxBO.setQDBZ(blueItemList.size()> ConfigureConstant.INT_8?OrderInfoEnum.QDBZ_CODE_6.getKey():OrderInfoEnum.QDBZ_CODE_5.getKey()); + } else if (OrderInfoEnum.QDBZ_CODE_2.getKey().equals(blueInvoiceInfo.getQdbz()) || OrderInfoEnum.QDBZ_CODE_3.getKey().equals(blueInvoiceInfo.getQdbz())){ + ddtxxBO.setQDBZ(blueItemList.size()> ConfigureConstant.INT_8?OrderInfoEnum.QDBZ_CODE_3.getKey():OrderInfoEnum.QDBZ_CODE_2.getKey()); + } else if (OrderInfoEnum.QDBZ_CODE_7.getKey().equals(blueInvoiceInfo.getQdbz()) || OrderInfoEnum.QDBZ_CODE_8.getKey().equals(blueInvoiceInfo.getQdbz())) { + ddtxxBO.setQDBZ(blueItemList.size() > ConfigureConstant.INT_8 ? OrderInfoEnum.QDBZ_CODE_8.getKey() : OrderInfoEnum.QDBZ_CODE_7.getKey()); + }else if (OrderInfoEnum.QDBZ_CODE_4.getKey().equals(blueInvoiceInfo.getQdbz())) { + ddtxxBO.setQDBZ(OrderInfoEnum.QDBZ_CODE_4.getKey()); + } +// ddtxxBO.setYGXM(); +// ddtxxBO.setKPPZH(); + ddtxxBO.setPZGZRQ(DateUtil.format(processInfo.getPzgzrq(), "yyyy-MM-dd")); + ddtxxBO.setYZFP(ConfigureConstant.STRING_0); +// ddtxxBO.setKB(); +// ddtxxBO.setXHFBM(); + ddzxxBO.setDDTXX(ddtxxBO); + List ddmxxxBOList = Lists.newArrayList(); + Integer index = 1; + for (OrderItemInfo orderItemInfo : blueItemList) { + DdmxxxBO ddmxxxBO = new DdmxxxBO(); + ddmxxxBO.setXH(String.valueOf(index)); + ddmxxxBO.setDYLZFPMXXH(orderItemInfo.getSphxh()); + ddmxxxBO.setFPHXZ(orderItemInfo.getFphxz()); + ddmxxxBO.setSPBM(orderItemInfo.getSpbm()); + ddmxxxBO.setZXBM(orderItemInfo.getZxbm()); + ddmxxxBO.setYHZCBS(orderItemInfo.getYhzcbs()); + ddmxxxBO.setLSLBS(orderItemInfo.getLslbs()); + ddmxxxBO.setZZSTSGL(orderItemInfo.getZzstsgl()); + ddmxxxBO.setXMMC(orderItemInfo.getXmmc()); + ddmxxxBO.setGGXH(orderItemInfo.getGgxh()); + ddmxxxBO.setDW(orderItemInfo.getXmdw()); + ddmxxxBO.setSPSL("-"+orderItemInfo.getXmsl()); + ddmxxxBO.setDJ(orderItemInfo.getXmdj()); + ddmxxxBO.setJE("-"+orderItemInfo.getXmje()); + ddmxxxBO.setHSBZ(orderItemInfo.getHsbz()); + ddmxxxBO.setSL(orderItemInfo.getSl()); + ddmxxxBO.setSE("-"+orderItemInfo.getSe()); + ddmxxxBO.setKCE(orderItemInfo.getKce()); + ddmxxxBO.setBYZD1(orderItemInfo.getByzd1()); + ddmxxxBO.setBYZD2(orderItemInfo.getByzd2()); + ddmxxxBO.setBYZD3(orderItemInfo.getByzd3()); + ddmxxxBO.setPH(orderItemInfo.getPh()); + ddmxxxBO.setKB(orderItemInfo.getKb()); + ddmxxxBOList.add(ddmxxxBO); + } + ddzxxBO.setDDMXXX(ddmxxxBOList); + ddzxxBOList.add(ddzxxBO); + ddpcxxReq.setDDZXX(ddzxxBOList); + log.info("生成负数单据,请求接口数据{}",JSONObject.toJSONString(ddpcxxReq)); + DdpcxxRspBO ddpcxxRspBO = allocateInvoiceInterfaceServiceV3.allocateInvoicesV3(ddpcxxReq, "", null, ConfigurerInfo.INTERFACE_VERSION_V6); + log.info("生成负数单据,返回数据:{}",JSONObject.toJSONString(ddpcxxRspBO)); + } + } + + return R.ok(); + } + } 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 5860bbc3..044b57d5 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 @@ -1,10 +1,12 @@ package com.dxhy.order.consumer.modules.order.controller; +import cn.hutool.core.collection.CollectionUtil; 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.baseservice.module.thirdservice.redis.service.RedisService; import com.dxhy.order.constant.ConfigureConstant; import com.dxhy.order.constant.OrderInfoContentEnum; import com.dxhy.order.constant.OrderInfoEnum; @@ -46,6 +48,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; /** * @author :杨士勇 @@ -91,6 +94,9 @@ public class OrderInvoiceController { @Resource private OrderItemInfoService itemInfoService; + @Resource + private RedisService redisService; + private static final String KEY_PREFIX = "order:red:"; /** @@ -187,6 +193,18 @@ public class OrderInvoiceController { } } + @ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程获取数据的接口") + @PostMapping("/saveRedInvoiceData") + @SysLog(operation = "冲红流程", operationDesc = "订单开具冲红流程数据保存", key = "冲红流程") + public R saveRedInvoiceData(@RequestBody RedInvoiceRespPo redInvoiceRespPo) { + try { + return invoiceService.saveRedInvoiceData(redInvoiceRespPo.getRedFpqqlsh(),redInvoiceRespPo.getXhfNsrsbh()); + } catch (Exception e) { + log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e); + return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); + } + } + /** * 获取蓝字发票明细订单 * @param param @@ -198,7 +216,26 @@ public class OrderInvoiceController { public R getOrderItemData(@RequestBody String param) { try { JSONObject jsonObject = JSONObject.parseObject(param); - List orderItemInfos = itemInfoService.selectOrderItemInfoByOrderId(jsonObject.getString("OrderInfoId"), Arrays.asList(jsonObject.getString("xhfNsrsbh"))); + List orderItemInfos = itemInfoService.selectOrderItemInfoByOrderId(jsonObject.getString("orderInfoId"), Arrays.asList(jsonObject.getString("xhfNsrsbh"))); + + if(CollectionUtil.isNotEmpty(orderItemInfos)){ + OrderInvoiceInfo invoiceInfo = new OrderInvoiceInfo(); + invoiceInfo.setOrderInfoId(jsonObject.getString("orderInfoId")); + OrderInvoiceInfo orderInvoiceInfo = orderInvoiceInfoService.selectOrderInvoiceInfo(invoiceInfo, Arrays.asList(jsonObject.getString("xhfNsrsbh"))); + String key = KEY_PREFIX + jsonObject.getString("redFpqqlsh"); + String innerKey = StringUtils.isBlank(orderInvoiceInfo.getFpdm())?"":orderInvoiceInfo.getFpdm() + orderInvoiceInfo.getFphm(); + String value = redisService.pullHashMap(key, innerKey); + if(StringUtils.isNotBlank(value)){ + RedInvoiceStageReqPo invoiceStageReqPo = JSONObject.parseObject(value, RedInvoiceStageReqPo.class); + List blueItemList = invoiceStageReqPo.getBlueItemList(); + Map selectMap = blueItemList.stream().distinct().collect(Collectors.toMap(OrderItemInfo::getId, OrderItemInfo::getId)); + for (OrderItemInfo orderItemInfo : orderItemInfos) { + if(StringUtils.isNotBlank(selectMap.get(orderItemInfo.getId()))){ + orderItemInfo.setGxbz("1"); + } + } + } + } return R.ok().put(OrderManagementConstant.DATA,orderItemInfos); } catch (Exception e) { log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e); diff --git a/order-management-consumer/src/main/resources/bootstrap-dev.yaml b/order-management-consumer/src/main/resources/bootstrap-dev.yaml index 2b96069f..ff28b374 100644 --- a/order-management-consumer/src/main/resources/bootstrap-dev.yaml +++ b/order-management-consumer/src/main/resources/bootstrap-dev.yaml @@ -4,15 +4,15 @@ spring: nacos: config: # Nacos config 地址 - server-addr: 172.31.36.147:33000 + server-addr: 10.1.1.72:8848 # Nacos config 命名空间,对应配置中的名称(sims_order_namespace) - namespace: a049b41c-b0a8-4a66-91b1-f3f3cab0e524 + namespace: sdenergy-order # Nacos config 分组 group: sims-order-config # Nacos config 登录用户名 username: nacos # Nacos config 登录密码 - password: Invoice.nacos.!1 + password: nacos # Nacos config 配置文件前缀 prefix: sims-order-api # Nacos config 配置文件后缀,拼接完URL需要对应NacosServer中的dataId对应配置,${prefix}-${spring.profiles.active}.${file-extension} @@ -53,9 +53,7 @@ spring: # Nacos discovery 配置 discovery: # Nacos discovery 服务地址 - server-addr: ${spring.cloud.nacos.config.server-addr} - username: ${spring.cloud.nacos.config.username} - password: ${spring.cloud.nacos.config.password} + server-addr: 10.1.1.72:8848 #sentinel配置相关 sentinel: #sentinel是否开启控制 diff --git a/order-management-consumer/src/main/resources/bootstrap.yaml b/order-management-consumer/src/main/resources/bootstrap.yaml index 2a9064c5..12226ba8 100644 --- a/order-management-consumer/src/main/resources/bootstrap.yaml +++ b/order-management-consumer/src/main/resources/bootstrap.yaml @@ -6,10 +6,10 @@ spring: name: order-api profiles: # Spring 配置文件读取 - active: @deployType@ +# active: @deployType@ # active: own # active: std -# active: dev + active: dev # active: test jackson: # jackson 日期格式化 diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceDetailsController.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceDetailsController.java index 03d9e3ec..c3fca2a1 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceDetailsController.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceDetailsController.java @@ -93,7 +93,7 @@ public class InvoiceDetailsController { @Autowired private OfdToPngSDEnergyService ofdToPngSDEnergyService; - @Value("${yx.isuse}") + @Value("${yx.isuse:}") private String yxisuse; @GetMapping("priviewOfd") diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxmxqd.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxmxqd.java new file mode 100644 index 00000000..36529e16 --- /dev/null +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxmxqd.java @@ -0,0 +1,41 @@ +package com.dxhy.order.invoice.module.invoice.model; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + * @author: yaoxuguang + * @createDate: Created in 2022-11-10 + */ +@Getter +@Setter +public class Hzqrdxxmxqd implements Serializable { + + /** + * XH : 序号 + * LZMXXH : 蓝字发票明细序号 + * SPHFWSSFLHBBM : 商品和服务税收分类合并编码 + * XMMC : 项目名称 + * GGXH : 规格型号 + * DW : 单位 + * FPSPDJ : 单价 + * FPSPSL : 数量 + * JE : 金额 + * SLV : 税率 + * SE : 税额 + */ + + private String XH; + private String LZMXXH; + private String SPHFWSSFLHBBM; + private String XMMC; + private String GGXH; + private String DW; + private String FPSPDJ; + private String FPSPSL; + private String JE; + private String SLV; + private String SE; +} diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxqd.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxqd.java new file mode 100644 index 00000000..743d91a6 --- /dev/null +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxqd.java @@ -0,0 +1,70 @@ +package com.dxhy.order.invoice.module.invoice.model; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +/** + * @author: yaoxuguang + * @createDate: Created in 2022-11-10 + */ +@Getter +@Setter +public class Hzqrdxxqd implements Serializable { + + /** + * UUID : 红字确认单UUID + * HZFPXXQRDBH : 红字发票信息确认单编号 + * LRFSF : 录入方身份 + * XSFNSRSBH : (销售方)统一社会信用代码/纳税人识别号/身份证件号码 + * XSFMC : 销售方名称 + * GMFNSRSBH : (购买方)统一社会信用代码/纳税人识别号/身份证件号码 + * GMFMC : 购买方名称 + * LZFPDM : 蓝字发票代码 + * LZFPHM : 蓝字发票号码 + * SFZZFPBZ : 是否纸质发票标志 + * LZKPRQ : 蓝字发票开票日期 + * LZHJJE : 蓝字发票合计金额 + * LZHJSE : 蓝字发票合计税额 + * LZFPPZDM : 蓝字发票票种代码 + * LZFPTDYSLXDM : 蓝字发票特定要素类型代码 + * HZCXJE : 红字冲销金额 + * HZCXSE : 红字冲销税额 + * CHYYDM : 红字发票冲红原因代码 + * HZQRXXZTDM : 红字确认信息状态代码 + * QRRQ : 确认日期 + * YKJHZFPBZ : 已开具红字发票标志 + * HZFPHM : 红字发票号码 + * HZKPRQ : 红字开票日期 + * YXBZ : 有效标志 + * HZQRXXMXLIST: 红字确认单明细信息 + */ + + private String UUID; + private String HZFPXXQRDBH; + private String LRFSF; + private String XSFNSRSBH; + private String XSFMC; + private String GMFNSRSBH; + private String GMFMC; + private String LZFPDM; + private String LZFPHM; + private String SFZZFPBZ; + private String LZKPRQ; + private String LZHJJE; + private String LZHJSE; + private String LZFPPZDM; + private String LZFPTDYSLXDM; + private String HZCXJE; + private String HZCXSE; + private String CHYYDM; + private String HZQRXXZTDM; + private String QRRQ; + private String YKJHZFPBZ; + private String HZFPHM; + private String HZKPRQ; + private String YXBZ; + private List HZQRXXMXLIST; +} diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/SpecialInvoiceReversalPlus.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/SpecialInvoiceReversalPlus.java new file mode 100644 index 00000000..6e0e30cd --- /dev/null +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/SpecialInvoiceReversalPlus.java @@ -0,0 +1,13 @@ +package com.dxhy.order.invoice.module.invoice.model; + +import com.dxhy.order.invoice.module.invoicespecial.model.SpecialInvoiceReversalEntity; +import com.dxhy.order.model.SpecialInvoiceReversalItem; +import lombok.Data; + +import java.util.List; + +@Data +public class SpecialInvoiceReversalPlus extends SpecialInvoiceReversalEntity { + + private List items; +} 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 99ac247c..19bebc75 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,18 +1,17 @@ package com.dxhy.order.invoice.module.invoice.service; -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.exception.OrderReceiveException; 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.*; 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; import java.io.OutputStream; import java.util.Date; import java.util.List; @@ -291,5 +290,7 @@ public interface OrderInvoiceInfoService { 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/OfdToPngSDEnergyServiceImpl.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OfdToPngSDEnergyServiceImpl.java index b4f5ae44..5497b301 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OfdToPngSDEnergyServiceImpl.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OfdToPngSDEnergyServiceImpl.java @@ -19,10 +19,10 @@ import java.util.List; @Slf4j public class OfdToPngSDEnergyServiceImpl implements OfdToPngSDEnergyService { - @Value("${yx.url}") + @Value("${yx.url:}") private String yxurl; - @Value("${yx.simsSalt}") + @Value("${yx.simsSalt:}") private String simsSalt; 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 6335d3cc..3e36feb8 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 @@ -7,7 +7,6 @@ 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; @@ -56,6 +55,8 @@ import com.dxhy.order.model.sk.pdf.InvoicePdf; import com.dxhy.order.utils.*; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.google.common.collect.Maps; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; @@ -72,6 +73,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; +import java.math.BigDecimal; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -137,6 +139,7 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { private Executor voucherTaskExecutor; private static final String KEY_PREFIX = "order:red:"; + private static final String KEY_RED_SYJE = "order:red:syje"; /** @@ -1507,12 +1510,20 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { //根据报账单查询蓝字数据 RedInvoiceRespPo orderInvoiceData = this.getOrderInvoiceData(redInvoiceReqPo); List orderInvoiceInfos = orderInvoiceData.getOrderInvoiceInfos(); + //查询报账单是否存在 if(orderInvoiceInfos.size() == 0){ return R.error("根据报账单号未查询到订单");//改为常量 } - //todo 根据蓝字报账单调用SAP接口查询SAP状态,是否允许冲红 明慧开发 + //todo 根据蓝字报账单调用SAP接口查询SAP状态,是否允许冲红 明慧开发 + List redItemInfoList = orderInvoiceData.getRedItemInfoList(); + if(CollectionUtil.isNotEmpty(redItemInfoList)){ + boolean b = redItemInfoList.stream().allMatch(redItemInfo -> StringUtils.isNotBlank(redItemInfo.getSpbm()) && ConfigureConstant.STRING_0.equals(redItemInfo.getZnfm())); + if(!b){ + return R.error("负数订单存在智能赋码及局端税编的明细行");//改为常量 + } + } //根据orderinfoId,查询红字订单信息 OrderInfo orderInfo = orderInfoMapper.selectOrderInfoByOrderId(redInvoiceReqPo.getOrderInfoId(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); @@ -1540,11 +1551,40 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { if(!orderInfo.getFpzlDm().equals(orderInvoiceInfos.get(0).getFpzlDm())){ return R.error("负数订单的发票种类与对应蓝字报账单号不一致");//改为常量 } - //比较金额(发票剩余金额、如果是专票的话需要加上红字申请的金额、如果是数电票的话需要调用接口查询红字查询) - - - return R.ok(); + //比较金额(发票剩余金额、如果是专票的话需要加上红字申请的金额、如果是数电票的话需要调用接口查询红字查询) + BigDecimal sykchbhsje = new BigDecimal("0.00"); + BigDecimal sykchse = new BigDecimal("0.00"); + for (OrderInvoiceInfoVo orderInvoiceInfo : orderInvoiceInfos) { + if(StringUtils.isNotBlank(orderInvoiceInfo.getSykchbhsje()) && StringUtils.isNotBlank(orderInvoiceInfo.getSykchje()) + && StringUtils.isNotBlank(orderInvoiceInfo.getSykchse()) && new BigDecimal(orderInvoiceInfo.getSykchse()).compareTo(BigDecimal.ZERO) > ConfigureConstant.INT_0){ + sykchbhsje = sykchbhsje.add(new BigDecimal(orderInvoiceInfo.getSykchbhsje())); + sykchse = sykchse.add(new BigDecimal(orderInvoiceInfo.getSykchse())); + } else { + List orderInfos = orderInfoMapper.selectOrderInfoByYfpdmhm(orderInvoiceInfo.getFpdm(), orderInvoiceInfo.getFphm(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); + if(CollectionUtil.isNotEmpty(orderInfos)){ + BigDecimal chbhsje = orderInfos.stream().map(order -> new BigDecimal(order.getHjbhsje())).reduce(BigDecimal.ZERO, BigDecimal::add).abs(); + BigDecimal chse = orderInfos.stream().map(order -> new BigDecimal(order.getHjse())).reduce(BigDecimal.ZERO, BigDecimal::add).abs(); + sykchbhsje = sykchbhsje.add(new BigDecimal(orderInvoiceInfo.getHjbhsje()).subtract(chbhsje)); + sykchse = sykchse.add(new BigDecimal(orderInvoiceInfo.getKpse()).subtract(chse)); + } else { + sykchbhsje = sykchbhsje.add(new BigDecimal(orderInvoiceInfo.getHjbhsje())); + sykchse = sykchse.add(new BigDecimal(orderInvoiceInfo.getKpse())); + } + } + } + if(sykchbhsje.compareTo(BigDecimal.ZERO) > ConfigureConstant.INT_0 && sykchse.compareTo(BigDecimal.ZERO) > ConfigureConstant.INT_0){ + BigDecimal hzddHjbhsje = new BigDecimal(orderInfo.getHjbhsje()).abs(); + BigDecimal hzddHjse = new BigDecimal(orderInfo.getHjse()).abs(); + if (hzddHjbhsje.subtract(sykchbhsje).compareTo(BigDecimal.ZERO) >= ConfigureConstant.INT_0 + && hzddHjse.subtract(sykchse).compareTo(BigDecimal.ZERO) >= ConfigureConstant.INT_0){ + return R.ok().put(OrderManagementConstant.DATA,orderInvoiceData); + } else { + return R.error("蓝字剩余可冲红不含税金额小于负数订单不含税金额或税额");//改为常量 + } + }else { + return R.error("蓝字剩余可冲红不含税金额或者税额小于0");//改为常量 + } } /** @@ -1557,6 +1597,10 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { RedInvoiceRespPo redInvoiceRespPo = new RedInvoiceRespPo(); List orderInvoiceInfoVos = orderInvoiceInfoMapper.selectInvoiceInfoByBzdh(redInvoiceReqPo.getLzbzdh(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); List orderItemInfos = orderItemInfoMapper.selectOrderItemInfoByOrderId(redInvoiceReqPo.getOrderInfoId(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); + OrderInvoiceInfo invoiceInfo = new OrderInvoiceInfo(); + invoiceInfo.setOrderInfoId(redInvoiceReqPo.getOrderInfoId()); + OrderInvoiceInfo orderInvoiceInfo = orderInvoiceInfoMapper.selectOrderInvoiceInfo(invoiceInfo, Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); + OrderProcessInfo orderProcessInfo = orderInfoMapper.selectProcessByFpqqlsh(orderInvoiceInfo.getFpqqlsh(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh())); //是否允许勾选,发票状态 orderInvoiceInfoVos.stream().map(t->{ Boolean selected = true; @@ -1574,8 +1618,6 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { selected = false; } - - if(OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) && (ConfigureConstant.STRING_1.equals(t.getZfBz()) || ConfigureConstant.STRING_2.equals(t.getZfBz())) @@ -1605,19 +1647,88 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService { }).collect(Collectors.toList()); redInvoiceRespPo.setOrderInvoiceInfos(orderInvoiceInfoVos); redInvoiceRespPo.setRedItemInfoList(orderItemInfos); + //明细合并 + if(StringUtils.isNotBlank(redInvoiceReqPo.getSfhb()) && ConfigureConstant.STRING_1.equals(redInvoiceReqPo.getSfhb())){ + Map comparisonMap = Maps.newHashMap(); + for (OrderItemInfo orderItemInfo : orderItemInfos) { + String comparisonKey = orderItemInfo.getZxbm()+orderItemInfo.getXmmc(); + OrderItemInfo itemInfo = comparisonMap.get(comparisonKey); + if(itemInfo == null){ + comparisonMap.put(comparisonKey,orderItemInfo); + }else { + String xmje = new BigDecimal(itemInfo.getXmje()).abs().add(new BigDecimal(orderItemInfo.getXmje()).abs()).toPlainString(); + String se = new BigDecimal(itemInfo.getSe()).abs().add(new BigDecimal(orderItemInfo.getSe()).abs()).toPlainString(); + orderItemInfo.setXmje(xmje); + orderItemInfo.setSe(se); + String redSyjeKey = KEY_RED_SYJE + orderItemInfo.getId(); + String value = redisService.get(redSyjeKey); + if(StringUtils.isNotBlank(value)){ + orderItemInfo.setSykchje(value); + } else { + orderItemInfo.setSykchje(xmje); + } + comparisonMap.put(comparisonKey,orderItemInfo); + } + } + List itemInfos = comparisonMap.entrySet().stream().map(Map.Entry::getValue).collect(Collectors.toList()); + redInvoiceRespPo.setRedItemInfoList(itemInfos); + } + redInvoiceRespPo.setRedFpqqlsh(orderInvoiceInfo.getFpqqlsh()); + redInvoiceRespPo.setRedBzdh(orderProcessInfo.getBzdh()); return redInvoiceRespPo; } + @SneakyThrows @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(); + String innerKey = StringUtils.isBlank(blueInvoiceInfo.getFpdm())?"":blueInvoiceInfo.getFpdm() + blueInvoiceInfo.getFphm(); //组装发票报文 //金额、数量、税额跟跟换为负数,折扣行要与被折扣行合并 //校验重复提交数据覆盖问题 - redisService.putHashMap(key,innerKey, JSONObject.toJSONString(redInvoiceSaveReqPo)); + boolean redRedisLock = redisService.setNx(redInvoiceSaveReqPo.getFpqqlsh(), key, RedisConstant.REDIS_EXPIRE_TIME_2HOUR); + for (int i = 0; i < 3; i++) { + try { + if(redRedisLock){ + Map paramMap = redisService.pullAllHashMap(key); + if(paramMap != null){ + String value = redisService.pullHashMap(key, innerKey); + if(StringUtils.isNotBlank(value)){ + redisService.delHashMap(key,innerKey); + } + } + redisService.putHashMap(key,innerKey, JSONObject.toJSONString(redInvoiceSaveReqPo)); + Map hashMap = Maps.newHashMap(); + if(paramMap != null){ + BigDecimal blueMxje = new BigDecimal("0.00"); + BigDecimal redMxje = new BigDecimal("0.00"); + List redItemList = null; + for (Map.Entry stringEntry : paramMap.entrySet()) { + String entryValue = stringEntry.getValue(); + RedInvoiceStageReqPo invoiceStageReqPo = JSONObject.parseObject(entryValue, RedInvoiceStageReqPo.class); + List blueItemList = invoiceStageReqPo.getBlueItemList(); + blueMxje = blueMxje.add(blueItemList.stream().map(blueItem -> new BigDecimal(blueItem.getXmje())).reduce(BigDecimal.ZERO, BigDecimal::add)); + redItemList = invoiceStageReqPo.getRedItemList(); + } + redMxje = redItemList.stream().map(redItem -> new BigDecimal(redItem.getXmje())).reduce(BigDecimal.ZERO, BigDecimal::add).abs(); + String syfpje = redMxje.subtract(blueMxje).toPlainString(); + String redSyjeKey = KEY_RED_SYJE + redItemList.get(0).getId(); + redisService.set(redSyjeKey,syfpje); + hashMap.put(redItemList.get(0).getId(),syfpje); + } + redisService.del(redInvoiceSaveReqPo.getFpqqlsh()); + return R.ok().put(OrderManagementConstant.DATA,hashMap); + } else { + Thread.sleep(2000); + log.info("获取redis锁请等待,三次之后还是获取锁失败则返回。。。"); + } + } catch (InterruptedException e) { + redisService.del(redInvoiceSaveReqPo.getFpqqlsh()); + throw new RuntimeException(e); + } + } return R.ok(); } diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/controller/SpecialInvoiceReversalController.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/controller/SpecialInvoiceReversalController.java index 59ebf68a..6f8aef55 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/controller/SpecialInvoiceReversalController.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/controller/SpecialInvoiceReversalController.java @@ -395,8 +395,8 @@ public class SpecialInvoiceReversalController { specialInvoiceReversalEntity.setSqdscqqlsh(baseService.getGenerateShotKey()); } else { //调用税盘编号生成code - Map resultMap = specialInvoiceService.querySpecialInvoiceReversalCode("", specialInvoiceReversalEntity.getFpzlDm(), nsrsbh, terminalCode); - specialInvoiceReversalEntity.setSqdscqqlsh(resultMap.get(OrderManagementConstant.CODE)); +// Map resultMap = specialInvoiceService.querySpecialInvoiceReversalCode("", specialInvoiceReversalEntity.getFpzlDm(), nsrsbh, terminalCode); +// specialInvoiceReversalEntity.setSqdscqqlsh(resultMap.get(OrderManagementConstant.CODE)); } } @@ -727,12 +727,12 @@ public class SpecialInvoiceReversalController { } - if (OrderInfoEnum.ORDER_INVOICE_TYPE_0.getKey().equals(specialInvoiceReversalEntity.getFpzlDm())) { - if (StringUtils.isBlank(specialInvoiceReversalEntity.getJqbh()) && StringUtils.isBlank(specialInvoiceReversalEntity.getFjh())) { - return R.error(ResponseStatusCodes.ACCESS_POINT_ID_IS_BLANK, "分机号不能为空"); - } - - } +// if (OrderInfoEnum.ORDER_INVOICE_TYPE_0.getKey().equals(specialInvoiceReversalEntity.getFpzlDm())) { +// if (StringUtils.isBlank(specialInvoiceReversalEntity.getJqbh()) && StringUtils.isBlank(specialInvoiceReversalEntity.getFjh())) { +// return R.error(ResponseStatusCodes.ACCESS_POINT_ID_IS_BLANK, "分机号不能为空"); +// } +// +// } //审核状态 if (StringUtils.isNotBlank(specialInvoiceReversalEntity.getStatusCode()) && ArrayUtils.contains(notAllowedEditSubmitStatus, specialInvoiceReversalEntity.getStatusCode())) { diff --git a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/service/impl/SpecialInvoiceServiceImpl.java b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/service/impl/SpecialInvoiceServiceImpl.java index e173f9ed..ad3d478b 100644 --- a/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/service/impl/SpecialInvoiceServiceImpl.java +++ b/order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/service/impl/SpecialInvoiceServiceImpl.java @@ -743,9 +743,9 @@ public class SpecialInvoiceServiceImpl implements SpecialInvoiceService { } } - if (StringUtils.isBlank(resultJqbh)) { - throw new OrderReceiveException("9999", "获取机器编码异常!"); - } +// if (StringUtils.isBlank(resultJqbh)) { +// throw new OrderReceiveException("9999", "获取机器编码异常!"); +// } specialInvoiceReversalCode = resultJqbh + DateUtil.format(new Date(), ConfigureConstant.DATE_FORMAT_DATE_YMDHMS).substring(2); diff --git a/order-management-invoice/src/main/resources/mybatis/mapper/OrderInfoMapper.xml b/order-management-invoice/src/main/resources/mybatis/mapper/OrderInfoMapper.xml index 2524f90e..b110ef4a 100644 --- a/order-management-invoice/src/main/resources/mybatis/mapper/OrderInfoMapper.xml +++ b/order-management-invoice/src/main/resources/mybatis/mapper/OrderInfoMapper.xml @@ -558,8 +558,11 @@ select from order_info - where yfp_dm = #{fpdm,jdbcType=VARCHAR} and yfp_hm = - #{fphm,jdbcType=VARCHAR} + where + yfp_hm = #{fphm,jdbcType=VARCHAR} + + and yfp_dm = #{fpdm,jdbcType=VARCHAR} + and xhf_nsrsbh = '' 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 d223c09d..b1a832b9 100644 --- a/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml +++ b/order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml @@ -245,6 +245,7 @@ + @@ -2294,7 +2295,7 @@ op.ddh, op.bzdh, op.ddzt, - op.fpzldm, + op.fpzl_dm AS fpzldm, op.xhf_nsrsbh, op.xhf_mc, op.ghf_nsrsbh, @@ -2310,22 +2311,24 @@ oii.sykchbhsje, oii.sykchse, oii.zf_bz, - oii.ch_bz + oii.ch_bz, + oii.kprq, + op.ddzt FROM - order_invoice_info oii INNER INTO order_process_info op ON oii.order_info_id = op.order_info_id + order_invoice_info oii INNER JOIN order_process_info op ON oii.order_info_id = op.order_info_id WHERE op.bzdh = #{bzdh,jdbcType=VARCHAR} - and xhf_nsrsbh = '' + and op.xhf_nsrsbh = '' - and xhf_nsrsbh = + and op.xhf_nsrsbh = #{item} - and xhf_nsrsbh in + and op.xhf_nsrsbh in #{item}