feature 1.增加负数冲红流程

release
zhenghaiyang@ele-cloud.com 2 years ago
parent 816bebd90d
commit fa01d1dc38
  1. 2
      order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/RedisService.java
  2. 7
      order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/impl/RedisServiceImpl.java
  3. 6
      order-management-common/pom.xml
  4. 2
      order-management-common/src/main/java/com/dxhy/order/model/OrderItemInfo.java
  5. 4
      order-management-common/src/main/java/com/dxhy/order/model/page/OrderInvoiceInfoVo.java
  6. 5
      order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceCheckReqPo.java
  7. 3
      order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceRespPo.java
  8. 2
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/InvoiceService.java
  9. 229
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/InvoiceServiceImpl.java
  10. 39
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/controller/OrderInvoiceController.java
  11. 10
      order-management-consumer/src/main/resources/bootstrap-dev.yaml
  12. 4
      order-management-consumer/src/main/resources/bootstrap.yaml
  13. 2
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceDetailsController.java
  14. 41
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxmxqd.java
  15. 70
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxqd.java
  16. 13
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/SpecialInvoiceReversalPlus.java
  17. 7
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java
  18. 4
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OfdToPngSDEnergyServiceImpl.java
  19. 131
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java
  20. 16
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/controller/SpecialInvoiceReversalController.java
  21. 6
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoicespecial/service/impl/SpecialInvoiceServiceImpl.java
  22. 7
      order-management-invoice/src/main/resources/mybatis/mapper/OrderInfoMapper.xml
  23. 15
      order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml

@ -175,4 +175,6 @@ public interface RedisService {
Map<String, String> pullAllHashMap(String key);
Long delHashMap(String key);
Long delHashMap(String key,String field);
}

@ -211,14 +211,21 @@ public class RedisServiceImpl implements RedisService {
HashOperations<String, String, String> stringHashOperations = redisTemplate.opsForHash();
return stringHashOperations.get(key, field);
}
@Override
public Map<String, String> pullAllHashMap(String key){
HashOperations<String, String, String> stringHashOperations = redisTemplate.opsForHash();
return stringHashOperations.entries(key);
}
@Override
public Long delHashMap(String key) {
HashOperations<String, String, String> stringHashOperations = redisTemplate.opsForHash();
return stringHashOperations.delete(key);
}
public Long delHashMap(String key,String field) {
HashOperations<String, String, String> stringHashOperations = redisTemplate.opsForHash();
return stringHashOperations.delete(key,field);
}
}

@ -13,7 +13,11 @@
<properties/>
<dependencies>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
</dependency>
<!-- String判断插件 -->
<dependency>
<groupId>org.apache.commons</groupId>

@ -189,5 +189,7 @@ public class OrderItemInfo implements Serializable {
* 价税合计
*/
private String jshj;
private String gxbz;
private String sykchje;
}

@ -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;
}

@ -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;
}

@ -11,4 +11,7 @@ public class RedInvoiceRespPo {
private List<OrderItemInfo> redItemInfoList;
private List<OrderInvoiceInfoVo> orderInvoiceInfos;
private String redFpqqlsh;
private String redBzdh;
private String xhfNsrsbh;
}

@ -116,4 +116,6 @@ public interface InvoiceService {
*/
void checkBuyerCheckBankFlag(List<String> orderInfoIdList);
R saveRedInvoiceData(String redFpqqlsh, String xhfNsrsbh);
}

@ -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<String, String> 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<String, String> stringEntry : allHashMap.entrySet()) {
String entryValue = stringEntry.getValue();
RedInvoiceStageReqPo invoiceStageReqPo = JSONObject.parseObject(entryValue, RedInvoiceStageReqPo.class);
List<OrderItemInfo> 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<SpecialInvoiceReversalItem> 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<Hzqrdxxmxqd> 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<String> 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<DdzxxBO> 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<DdmxxxBO> 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();
}
}

@ -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<OrderItemInfo> orderItemInfos = itemInfoService.selectOrderItemInfoByOrderId(jsonObject.getString("OrderInfoId"), Arrays.asList(jsonObject.getString("xhfNsrsbh")));
List<OrderItemInfo> 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<OrderItemInfo> blueItemList = invoiceStageReqPo.getBlueItemList();
Map<String, String> 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);

@ -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是否开启控制

@ -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 日期格式化

@ -93,7 +93,7 @@ public class InvoiceDetailsController {
@Autowired
private OfdToPngSDEnergyService ofdToPngSDEnergyService;
@Value("${yx.isuse}")
@Value("${yx.isuse:}")
private String yxisuse;
@GetMapping("priviewOfd")

@ -0,0 +1,41 @@
package com.dxhy.order.invoice.module.invoice.model;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @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;
}

@ -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: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @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<Hzqrdxxmxqd> HZQRXXMXLIST;
}

@ -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<SpecialInvoiceReversalItem> items;
}

@ -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);
}

@ -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;

@ -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<OrderInvoiceInfoVo> orderInvoiceInfos = orderInvoiceData.getOrderInvoiceInfos();
//查询报账单是否存在
if(orderInvoiceInfos.size() == 0){
return R.error("根据报账单号未查询到订单");//改为常量
}
//todo 根据蓝字报账单调用SAP接口查询SAP状态,是否允许冲红 明慧开发
//todo 根据蓝字报账单调用SAP接口查询SAP状态,是否允许冲红 明慧开发
List<OrderItemInfo> 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<OrderInfo> 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<OrderInvoiceInfoVo> orderInvoiceInfoVos = orderInvoiceInfoMapper.selectInvoiceInfoByBzdh(redInvoiceReqPo.getLzbzdh(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh()));
List<OrderItemInfo> 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<String, OrderItemInfo> 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<OrderItemInfo> 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<String, String> 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<String, String> hashMap = Maps.newHashMap();
if(paramMap != null){
BigDecimal blueMxje = new BigDecimal("0.00");
BigDecimal redMxje = new BigDecimal("0.00");
List<OrderItemInfo> redItemList = null;
for (Map.Entry<String, String> stringEntry : paramMap.entrySet()) {
String entryValue = stringEntry.getValue();
RedInvoiceStageReqPo invoiceStageReqPo = JSONObject.parseObject(entryValue, RedInvoiceStageReqPo.class);
List<OrderItemInfo> 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();
}

@ -395,8 +395,8 @@ public class SpecialInvoiceReversalController {
specialInvoiceReversalEntity.setSqdscqqlsh(baseService.getGenerateShotKey());
} else {
//调用税盘编号生成code
Map<String, String> resultMap = specialInvoiceService.querySpecialInvoiceReversalCode("", specialInvoiceReversalEntity.getFpzlDm(), nsrsbh, terminalCode);
specialInvoiceReversalEntity.setSqdscqqlsh(resultMap.get(OrderManagementConstant.CODE));
// Map<String, String> 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())) {

@ -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);

@ -558,8 +558,11 @@
select
<include refid="Base_Column_List"/>
from order_info
where yfp_dm = #{fpdm,jdbcType=VARCHAR} and yfp_hm =
#{fphm,jdbcType=VARCHAR}
where
yfp_hm = #{fphm,jdbcType=VARCHAR}
<if test="fpdm != null and fpdm != ''">
and yfp_dm = #{fpdm,jdbcType=VARCHAR}
</if>
<if test="shList != null and shList.size() == 0">
and xhf_nsrsbh = ''
</if>

@ -245,6 +245,7 @@
<result column="sykchse" jdbcType="VARCHAR" property="sykchse"/>
<result column="zf_bz" jdbcType="VARCHAR" property="zfBz"/>
<result column="ch_bz" jdbcType="VARCHAR" property="chBz"/>
<result column="kprq" jdbcType="TIMESTAMP" property="kprq"/>
</resultMap>
<resultMap id="countInvoiceByMonthResultMap" type="com.dxhy.order.invoice.module.invoice.model.bo.CountInvoiceByMonthBO">
@ -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}
<if test="shList != null and shList.size() == 0">
and xhf_nsrsbh = ''
and op.xhf_nsrsbh = ''
</if>
<if test="shList != null and shList.size() == 1">
and xhf_nsrsbh =
and op.xhf_nsrsbh =
<foreach collection="shList" index="index" item="item">
#{item}
</foreach>
</if>
<if test="shList != null and shList.size() > 1">
and xhf_nsrsbh in
and op.xhf_nsrsbh in
<foreach collection="shList" index="index" item="item"
open="(" separator="," close=")">
#{item}

Loading…
Cancel
Save