Merge remote-tracking branch 'origin/dev-chlc' into release

release
wangrangrang 2 years ago
commit c0c93419bb
  1. 3
      order-management-base-service/src/main/java/com/dxhy/order/baseservice/config/BaseServiceConfig.java
  2. 11
      order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/RedisService.java
  3. 30
      order-management-base-service/src/main/java/com/dxhy/order/baseservice/module/thirdservice/redis/service/impl/RedisServiceImpl.java
  4. 6
      order-management-common/pom.xml
  5. 1
      order-management-common/src/main/java/com/dxhy/order/constant/OrderInfoEnum.java
  6. 2
      order-management-common/src/main/java/com/dxhy/order/model/OrderItemInfo.java
  7. 120
      order-management-common/src/main/java/com/dxhy/order/model/page/OrderInvoiceInfoVo.java
  8. 20
      order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceCheckReqPo.java
  9. 23
      order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoicePreReqPo.java
  10. 18
      order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceRespPo.java
  11. 19
      order-management-common/src/main/java/com/dxhy/order/model/page/RedInvoiceStageReqPo.java
  12. 2
      order-management-consumer/pom.xml
  13. 2
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/InvoiceService.java
  14. 231
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/InvoiceServiceImpl.java
  15. 165
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/controller/OrderInvoiceController.java
  16. 10
      order-management-consumer/src/main/resources/bootstrap-dev.yaml
  17. 7
      order-management-invoice/pom.xml
  18. 40
      order-management-invoice/src/main/java/com/dxhy/order/invoice/config/RedissonConfig.java
  19. 2
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/controller/InvoiceDetailsController.java
  20. 9
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/dao/GsClientFindMapper.java
  21. 6
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/dao/OrderInvoiceInfoMapper.java
  22. 19
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/GsClient.java
  23. 41
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxmxqd.java
  24. 70
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/Hzqrdxxqd.java
  25. 13
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/SpecialInvoiceReversalPlus.java
  26. 32
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/po/EsOutput.java
  27. 59
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/po/IsInput.java
  28. 20
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/po/PoCommonRequestParam.java
  29. 16
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/model/po/PoCommonResponseParam.java
  30. 18
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/OrderInvoiceInfoService.java
  31. 4
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OfdToPngSDEnergyServiceImpl.java
  32. 304
      order-management-invoice/src/main/java/com/dxhy/order/invoice/module/invoice/service/impl/OrderInvoiceInfoServiceImpl.java
  33. 22
      order-management-invoice/src/main/resources/mybatis/mapper/GsClientFindMapper.xml
  34. 7
      order-management-invoice/src/main/resources/mybatis/mapper/OrderInfoMapper.xml
  35. 78
      order-management-invoice/src/main/resources/mybatis/mapper/OrderInvoiceInfoMapper.xml

@ -300,6 +300,9 @@ public class BaseServiceConfig{
@Value("${order.push.po.userName:}") @Value("${order.push.po.userName:}")
private String poUserName; private String poUserName;
@Value("${order.push.po.bzdStatus:}")
private String bzdStatus;
/** /**
* 调用山能PO password * 调用山能PO password
*/ */

@ -1,6 +1,7 @@
package com.dxhy.order.baseservice.module.thirdservice.redis.service; package com.dxhy.order.baseservice.module.thirdservice.redis.service;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
@ -166,4 +167,14 @@ public interface RedisService {
* @return * @return
*/ */
Long getExpire(String key); Long getExpire(String key);
void putHashMap(String key,String field,String value);
String pullHashMap(String key,String field);
Map<String, String> pullAllHashMap(String key);
Long delHashMap(String key);
Long delHashMap(String key,String field);
} }

@ -4,11 +4,13 @@ import com.dxhy.order.utils.JsonUtils;
import com.dxhy.order.baseservice.module.thirdservice.redis.service.RedisService; import com.dxhy.order.baseservice.module.thirdservice.redis.service.RedisService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -198,4 +200,32 @@ public class RedisServiceImpl implements RedisService {
public Long getExpire(String key) { public Long getExpire(String key) {
return redisTemplate.getExpire(key); return redisTemplate.getExpire(key);
} }
@Override
public void putHashMap(String key,String field,String value){
redisTemplate.opsForHash().put(key, field, value);
}
@Override
public String pullHashMap(String key,String field){
HashOperations<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/> <properties/>
<dependencies> <dependencies>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.validator.version}</version>
</dependency>
<!-- String判断插件 --> <!-- String判断插件 -->
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>

@ -1290,6 +1290,7 @@ public enum OrderInfoEnum {
INTERFACE_BUSINESS_ID_ZYKSSFFM("FI005","同步会计信息"), INTERFACE_BUSINESS_ID_ZYKSSFFM("FI005","同步会计信息"),
INTERFACE_BUSINESS_ID_DEPT("FI871","组织信息变更"), INTERFACE_BUSINESS_ID_DEPT("FI871","组织信息变更"),
INTERFACE_BUSINESS_ID_BZDSTATUS("FI890","获取报账单状态"),
/** /**
* 发票备注配置项枚举 * 发票备注配置项枚举
*/ */

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

@ -0,0 +1,120 @@
package com.dxhy.order.model.page;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
@Getter
@Setter
public class OrderInvoiceInfoVo {
/**
* 订单表id
*/
private String orderInfoId;
/**
* 发票请求流水号
*/
private String fpqqlsh;
/**
* 订单号
*/
private String ddh;
/**
* 发票代码
*/
private String fpdm;
/**
* 发票号码
*/
private String fphm;
/**
* 开票合计金额
*/
private String kphjje;
/**
* 合计不含税金额
*/
private String hjbhsje;
/**
* 开票税额
*/
private String kpse;
/**
* 可冲红金额
* 2019-04-01添加
*/
private String sykchje;
/**
* 剩余可充红不含税金额
* 用于校验
*/
private String sykchbhsje;
/**
* 剩余可充红税额
* 用于校验
*/
private String sykchse;
/**
* 作废标志
*/
private String zfBz;
/**
* 冲红标志
*/
private String chBz;
//==================process=============================
/**
* 发票种类代码
*/
private String fpzlDm;
/**
* 购货方名称
*/
private String ghfMc;
/**
* 购货方纳税人识别号
*/
private String ghfNsrsbh;
/**
* 订单状态
*/
private String ddzt;
/**
* 销货方纳税人识别号
*/
private String xhfNsrsbh;
/**
* 销货方名称
*/
private String xhfMc;
/**
* 报账单号
*/
private String bzdh;
/**
* 系统来源
*/
private String xtly;
private String fjh;
/**
* 数据权限ID
*/
private String entId;
private Boolean selected;
private Date kprq;
}

@ -0,0 +1,20 @@
package com.dxhy.order.model.page;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class RedInvoiceCheckReqPo {
@NotNull
private String lzbzdh;
@NotNull
private String orderInfoId;
@NotNull
private String xhfNsrsbh;
private String sfhb;
}

@ -0,0 +1,23 @@
package com.dxhy.order.model.page;
import lombok.Data;
@Data
public class RedInvoicePreReqPo {
/**
* 原发票发票种类
*/
private String yfpFpzl;
/**
* 原发票发票开票日期
*/
private String yfpKprq;
/**
* 冲红原因
*/
private String chyy;
}

@ -0,0 +1,18 @@
package com.dxhy.order.model.page;
import com.dxhy.order.model.OrderItemInfo;
import lombok.Data;
import java.util.List;
@Data
public class RedInvoiceRespPo {
private List<OrderItemInfo> redItemInfoList;
private List<OrderInvoiceInfoVo> orderInvoiceInfos;
private String redFpqqlsh;
private String redBzdh;
private String xhfNsrsbh;
private String gsdm;
}

@ -0,0 +1,19 @@
package com.dxhy.order.model.page;
import com.dxhy.order.model.OrderInvoiceInfo;
import com.dxhy.order.model.OrderItemInfo;
import lombok.Data;
import java.util.List;
@Data
public class RedInvoiceStageReqPo {
//红字勾选明细数据
private List<OrderItemInfo> redItemList;
//蓝字勾选明细数据
private List<OrderItemInfo> blueItemList;
//蓝字勾选发票数据
private OrderInvoiceInfo blueInvoiceInfo;
//红字订单的发票请求流水号
private String fpqqlsh;
}

@ -16,8 +16,6 @@
</properties> </properties>
<dependencies> <dependencies>
<!-- Spring Boot dependencies --> <!-- Spring Boot dependencies -->
<!--Spring Boot 初始化引用--> <!--Spring Boot 初始化引用-->
<dependency> <dependency>

@ -116,4 +116,6 @@ public interface InvoiceService {
*/ */
void checkBuyerCheckBankFlag(List<String> orderInfoIdList); 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.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dxhy.base.constant.OrderSeparationException; import com.dxhy.base.constant.OrderSeparationException;
import com.dxhy.base.constant.OrderSplitException; import com.dxhy.base.constant.OrderSplitException;
import com.dxhy.base.constant.TaxSeparateConfig; import com.dxhy.base.constant.TaxSeparateConfig;
import com.dxhy.base.utils.PriceTaxSeparationUtilNew; import com.dxhy.base.utils.PriceTaxSeparationUtilNew;
import com.dxhy.order.baseservice.config.BaseServiceConfig; import com.dxhy.order.baseservice.config.BaseServiceConfig;
import com.dxhy.order.baseservice.module.base.model.DrawerInfoEntity; 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.BaseService;
import com.dxhy.order.baseservice.module.base.service.DrawerInfoService; import com.dxhy.order.baseservice.module.base.service.DrawerInfoService;
import com.dxhy.order.baseservice.module.base.service.RuleSplitService; 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.PageInvoiceReq;
import com.dxhy.order.consumer.modules.order.model.PageReInvoice; import com.dxhy.order.consumer.modules.order.model.PageReInvoice;
import com.dxhy.order.consumer.modules.order.service.*; 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.BeanTransitionUtils;
import com.dxhy.order.consumer.utils.TaxSpecialPolicyUtil; import com.dxhy.order.consumer.utils.TaxSpecialPolicyUtil;
import com.dxhy.order.exception.OrderReceiveException; import com.dxhy.order.exception.OrderReceiveException;
import com.dxhy.order.invoice.config.InvoiceConfig; import com.dxhy.order.invoice.config.InvoiceConfig;
import com.dxhy.order.invoice.module.fangge.service.FangGeService; 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.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.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.InvalidInvoiceService;
import com.dxhy.order.invoice.module.invoice.service.OrderInvoiceInfoService; import com.dxhy.order.invoice.module.invoice.service.OrderInvoiceInfoService;
import com.dxhy.order.invoice.module.invoice.service.UnifyService; 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.invoice.utils.HttpInvoiceRequestUtil;
import com.dxhy.order.model.*; import com.dxhy.order.model.*;
import com.dxhy.order.model.page.RedInvoiceStageReqPo;
import com.dxhy.order.model.queue.FpkjMqData; import com.dxhy.order.model.queue.FpkjMqData;
import com.dxhy.order.model.sk.kp.CommonInvoiceStatus; import com.dxhy.order.model.sk.kp.CommonInvoiceStatus;
import com.dxhy.order.model.sk.kp.InvoiceQuery; import com.dxhy.order.model.sk.kp.InvoiceQuery;
import com.dxhy.order.utils.CommonUtils; import com.dxhy.order.utils.CommonUtils;
import com.dxhy.order.utils.DistributedKeyMaker;
import com.dxhy.order.utils.JsonUtils; import com.dxhy.order.utils.JsonUtils;
import com.dxhy.order.utils.NsrsbhUtils; import com.dxhy.order.utils.NsrsbhUtils;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -60,7 +72,6 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author 杨士勇 * @author 杨士勇
@ -148,6 +159,14 @@ public class InvoiceServiceImpl implements InvoiceService {
@Resource @Resource
private OrderSplitService orderSplitService; 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 @Override
@ -1622,4 +1641,212 @@ 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.setFjh(blueInvoiceInfo.getFjh());
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.setXmsl("-"+orderItemInfo.getXmsl());
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,16 +1,25 @@
package com.dxhy.order.consumer.modules.order.controller; 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.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONException; 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.base.service.BaseService;
import com.dxhy.order.baseservice.module.thirdservice.redis.service.RedisService;
import com.dxhy.order.constant.ConfigureConstant; import com.dxhy.order.constant.ConfigureConstant;
import com.dxhy.order.constant.OrderInfoContentEnum; import com.dxhy.order.constant.OrderInfoContentEnum;
import com.dxhy.order.constant.OrderInfoEnum; import com.dxhy.order.constant.OrderInfoEnum;
import com.dxhy.order.constant.OrderManagementConstant; import com.dxhy.order.constant.OrderManagementConstant;
import com.dxhy.order.consumer.modules.order.model.dto.RewriteBzdhDTO; import com.dxhy.order.consumer.modules.order.model.dto.RewriteBzdhDTO;
import com.dxhy.order.consumer.modules.order.service.OrderBzdhService; import com.dxhy.order.consumer.modules.order.service.OrderBzdhService;
import com.dxhy.order.consumer.modules.order.service.OrderItemInfoService;
import com.dxhy.order.exception.OrderReceiveException;
import com.dxhy.order.model.*; import com.dxhy.order.model.*;
import com.dxhy.order.model.page.RedInvoiceCheckReqPo;
import com.dxhy.order.model.page.RedInvoicePreReqPo;
import com.dxhy.order.model.page.RedInvoiceRespPo;
import com.dxhy.order.model.page.RedInvoiceStageReqPo;
import com.dxhy.order.model.sk.kp.CommonInvoiceStatus; import com.dxhy.order.model.sk.kp.CommonInvoiceStatus;
import com.dxhy.order.utils.CommonUtils; import com.dxhy.order.utils.CommonUtils;
import com.dxhy.order.utils.JsonUtils; import com.dxhy.order.utils.JsonUtils;
@ -28,17 +37,18 @@ import com.dxhy.order.invoice.module.invoice.service.OrderInvoiceInfoService;
import com.dxhy.order.invoice.module.invoice.service.UnifyService; import com.dxhy.order.invoice.module.invoice.service.UnifyService;
import com.dxhy.order.invoice.module.invoicespecial.model.SpecialInvoiceReversalEntity; import com.dxhy.order.invoice.module.invoicespecial.model.SpecialInvoiceReversalEntity;
import com.dxhy.order.invoice.module.invoicespecial.service.SpecialInvoiceReversalService; import com.dxhy.order.invoice.module.invoicespecial.service.SpecialInvoiceReversalService;
import com.dxhy.order.utils.StringUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* @author 杨士勇 * @author 杨士勇
@ -82,6 +92,12 @@ public class OrderInvoiceController {
@Resource @Resource
private BaseService baseService; private BaseService baseService;
@Resource
private OrderItemInfoService itemInfoService;
@Resource
private RedisService redisService;
private static final String KEY_PREFIX = "order:red:";
/** /**
* 异常订单直接开票接口 * 异常订单直接开票接口
@ -138,6 +154,153 @@ public class OrderInvoiceController {
return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!"); return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!");
} }
} }
/**
* 山能定制冲红流程普票负数开具专票的红字申请数电红字确认单
*
* @param
* @return
*/
@ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程校验的接口")
@PostMapping("/checkRedInvoice")
@SysLog(operation = "冲红流程", operationDesc = "订单开具冲红流程校验", key = "冲红流程")
public R checkRedInvoice(@RequestBody @Validated RedInvoiceCheckReqPo redInvoiceReqPo) {
try {
return orderInvoiceInfoService.checkRedInvoice(redInvoiceReqPo);
} catch (OrderReceiveException e){
return R.error(e.getMessage());
} catch (Exception e) {
log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e);
return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!");
}
}
/**
* 山能定制冲红流程普票负数开具专票的红字申请数电红字确认单
*
* @param
* @return
*/
@ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程获取数据的接口")
@PostMapping("/getOrderInvoiceData")
@SysLog(operation = "冲红流程", operationDesc = "订单开具冲红流程校验", key = "冲红流程")
public R getOrderInvoiceData(@RequestBody @Validated RedInvoiceCheckReqPo redInvoiceReqPo) {
try {
RedInvoiceRespPo orderInvoiceData = orderInvoiceInfoService.getOrderInvoiceData(redInvoiceReqPo);
return R.ok().put(OrderManagementConstant.DATA,orderInvoiceData);
} catch (Exception e) {
log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e);
return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!");
}
}
@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
* @return
*/
@ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程获取发票明细数据的接口")
@PostMapping("/getOrderItemData")
@SysLog(operation = "冲红流程", operationDesc = "冲红流程获取发票明细数据的接口", key = "冲红流程")
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")));
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);
return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!");
}
}
/**
* 保存红字明细与蓝字发票的关联关系
* @param
* @return
*/
@ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程数据暂存接口")
@PostMapping("/stageRedInvoiceData")
@SysLog(operation = "冲红流程", operationDesc = "冲红流程数据暂存接口", key = "冲红流程")
public R stageRedInvoiceData(@RequestBody RedInvoiceStageReqPo redInvoiceSaveReqPo) {
try {
//红字
return orderInvoiceInfoService.stageRedInvoiceData(redInvoiceSaveReqPo);
} catch (Exception e) {
log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e);
return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!");
}
}
/**
* 生成预制
* @param
* @return
*/
@ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程生成预览数据接口")
@PostMapping("/generatePreInvoice")
@SysLog(operation = "冲红流程", operationDesc = "冲红流程生成预览数据接口", key = "冲红流程")
public R generatePreInvoice(@RequestBody RedInvoicePreReqPo redInvoicePreReqPo) {
try {
return R.ok();
} catch (Exception e) {
log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e);
return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!");
}
}
/**
* 发票开具专票冲红申请红字数电申请红字确认单
* @param
* @return
*/
@ApiOperation(value = "冲红流程", notes = "订单开票-冲红流程保存并开具发票")
@PostMapping("/saveInvoiceData")
@SysLog(operation = "冲红流程", operationDesc = "冲红流程保存并开具发票", key = "冲红流程")
public R saveInvoiceData(@RequestBody RedInvoicePreReqPo redInvoicePreReqPo) {
try {
//如果是普通
return R.ok();
} catch (Exception e) {
log.error("{}待开订单开具接口,参数转换异常e:{}", LOGGER_MSG, e);
return R.error().put(OrderManagementConstant.MESSAGE, "未知异常,请联系管理员!");
}
}
/** /**
* 生成预制发票(非拆分场景) * 生成预制发票(非拆分场景)

@ -4,15 +4,15 @@ spring:
nacos: nacos:
config: config:
# Nacos config 地址 # Nacos config 地址
server-addr: 172.31.36.147:33000 server-addr: 10.1.1.72:8848
# Nacos config 命名空间,对应配置中的名称(sims_order_namespace) # Nacos config 命名空间,对应配置中的名称(sims_order_namespace)
namespace: a049b41c-b0a8-4a66-91b1-f3f3cab0e524 namespace: sdenergy-order
# Nacos config 分组 # Nacos config 分组
group: sims-order-config group: sims-order-config
# Nacos config 登录用户名 # Nacos config 登录用户名
username: nacos username: nacos
# Nacos config 登录密码 # Nacos config 登录密码
password: Invoice.nacos.!1 password: nacos
# Nacos config 配置文件前缀 # Nacos config 配置文件前缀
prefix: sims-order-api prefix: sims-order-api
# Nacos config 配置文件后缀,拼接完URL需要对应NacosServer中的dataId对应配置,${prefix}-${spring.profiles.active}.${file-extension} # Nacos config 配置文件后缀,拼接完URL需要对应NacosServer中的dataId对应配置,${prefix}-${spring.profiles.active}.${file-extension}
@ -53,9 +53,7 @@ spring:
# Nacos discovery 配置 # Nacos discovery 配置
discovery: discovery:
# Nacos discovery 服务地址 # Nacos discovery 服务地址
server-addr: ${spring.cloud.nacos.config.server-addr} server-addr: 10.1.1.72:8848
username: ${spring.cloud.nacos.config.username}
password: ${spring.cloud.nacos.config.password}
#sentinel配置相关 #sentinel配置相关
sentinel: sentinel:
#sentinel是否开启控制 #sentinel是否开启控制

@ -17,8 +17,11 @@
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.12.5</version>
</dependency>
<!-- Spring Boot dependencies --> <!-- Spring Boot dependencies -->
<!--Spring Boot 初始化引用--> <!--Spring Boot 初始化引用-->
<dependency> <dependency>

@ -0,0 +1,40 @@
//package com.dxhy.order.invoice.config;
//
//import org.apache.commons.lang3.StringUtils;
//import org.redisson.Redisson;
//import org.redisson.api.RedissonClient;
//import org.redisson.config.Config;
//import org.redisson.config.ReadMode;
//import org.redisson.config.SentinelServersConfig;
//import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
//import org.springframework.context.annotation.Bean;
//
//import javax.annotation.Resource;
//import java.util.List;
//
//public class RedissonConfig {
//
// @Resource
// private RedisProperties redisProperties;
//
// //哨兵模式配置
// @Bean
// RedissonClient redissonSentinel() {
// Config config = new Config();
// RedisProperties.Sentinel sentinel = redisProperties.getSentinel();
// List<String> newNodes = sentinel.getNodes();
// newNodes.stream().forEach((index) -> newNodes.add(
// index.startsWith("redis://") ? index : "redis://" + index));
//
// SentinelServersConfig serverConfig = config.useSentinelServers()
// .addSentinelAddress(newNodes.toArray(new String[0]))
// .setMasterName(sentinel.getMaster())
// .setReadMode(ReadMode.SLAVE);
//
// if (StringUtils.isNotBlank(redisProperties.getPassword())) {
// serverConfig.setPassword(redisProperties.getPassword());
// }
// return Redisson.create(config);
// }
//
//}

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

@ -0,0 +1,9 @@
package com.dxhy.order.invoice.module.invoice.dao;
import com.dxhy.order.invoice.module.invoice.model.GsClient;
import java.util.List;
public interface GsClientFindMapper { ;
List<GsClient> selectByGsdm(String gsdm);
}

@ -6,6 +6,7 @@ import com.dxhy.order.model.OrderInvoiceInfo;
import com.dxhy.order.invoice.module.invoice.model.bo.CountInvoiceByMonthBO; import com.dxhy.order.invoice.module.invoice.model.bo.CountInvoiceByMonthBO;
import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO; import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO;
import com.dxhy.order.invoice.module.invoice.model.vo.*; import com.dxhy.order.invoice.module.invoice.model.vo.*;
import com.dxhy.order.model.page.OrderInvoiceInfoVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Date; import java.util.Date;
@ -248,4 +249,9 @@ public interface OrderInvoiceInfoMapper {
List<String> countInoviceInfo(@Param("orderInfoIds")List<String> orderInfoIds); List<String> countInoviceInfo(@Param("orderInfoIds")List<String> orderInfoIds);
List<OrderInvoiceInfo> selectInvoiceInfoByFpqqlshs(@Param("fpqqlshs") List<String> fpqqlshs); List<OrderInvoiceInfo> selectInvoiceInfoByFpqqlshs(@Param("fpqqlshs") List<String> fpqqlshs);
/**
* 根据报账单查询蓝字发票信息
*/
List<OrderInvoiceInfoVo> selectInvoiceInfoByBzdh(@Param("bzdh") String bzdh, @Param("shList") List<String> shList);
} }

@ -0,0 +1,19 @@
package com.dxhy.order.invoice.module.invoice.model;
import lombok.Data;
import java.util.Date;
@Data
public class GsClient {
private Integer id;
private String gsdm;
private String gsmc;
private String client;
private Date createTime;
}

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

@ -0,0 +1,32 @@
package com.dxhy.order.invoice.module.invoice.model.po;
import lombok.Data;
/**
* @Description: PO输出参数
* @Author liufeilong
* @Date 2023-02-06
**/
@Data
public class EsOutput {
/**
* 外围系统数据唯一标识
*/
private String BSKEY;
/**
* SAP数据唯一标识
*/
private String SAPKEY;
/**
* 数据处理标识(S成功E失败)
*/
private String ZTYPE;
/**
* 数据处理描述
*/
private String ZMESSAGE;
/**
* 业务报文
*/
private String ZDATA;
}

@ -0,0 +1,59 @@
package com.dxhy.order.invoice.module.invoice.model.po;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: PO输入参数
* @Author liufeilong
* @Date 2023-02-06
**/
@Data
public class IsInput implements Serializable {
/**
* 外围系统
*/
private String SYSID;
/**
* 接口业务ID
*/
private String IFYWID;
/**
* 外围系统数据唯一标识
*/
private String BSKEY;
/**
* SAP数据唯一标识
*/
private String SAPKEY;
/**
* 组织机构代码
*/
private String ZORG;
/**
* SAP模块编码OA用
*/
private String ZFILED1;
/**
* 预留字段
*/
private String ZFILED2;
/**
* 预留字段
*/
private String ZFILED3;
/**
* 预留字段
*/
private String ZFILED4;
/**
* SAP Client
*/
private String ZFILED5;
/**
* 业务参数
*/
private String ZDATA;
}

@ -0,0 +1,20 @@
package com.dxhy.order.invoice.module.invoice.model.po;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.io.Serializable;
/**
* @Description: PO接口公共请求参数
* @Author liufeilong
* @Date 2023-02-06
**/
@Data
public class PoCommonRequestParam implements Serializable {
/**
* IsInput
*/
@JSONField(name = "IS_INPUT")
private IsInput IS_INPUT;
}

@ -0,0 +1,16 @@
package com.dxhy.order.invoice.module.invoice.model.po;
import lombok.Data;
/**
* @Description: PO接口公共响应参数
* @Author liufeilong
* @Date 2023-02-06
**/
@Data
public class PoCommonResponseParam {
/**
* ES_OUTPUT
*/
private EsOutput ES_OUTPUT;
}

@ -1,17 +1,17 @@
package com.dxhy.order.invoice.module.invoice.service; package com.dxhy.order.invoice.module.invoice.service;
import com.dxhy.order.model.CommonOrderInvoiceAndOrderMxInfo;
import com.dxhy.order.model.InvoiceCount;
import com.dxhy.order.model.OrderInvoiceInfo;
import com.dxhy.order.model.PageUtils;
import com.dxhy.order.baseservice.module.thirdservice.rabbitmq.model.RabbitMqCommonInvoice; 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.FileDownLoad;
import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO; import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO;
import com.dxhy.order.invoice.module.invoice.model.vo.*; 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 org.apache.ibatis.annotations.Param;
import java.io.File;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -284,5 +284,13 @@ public interface OrderInvoiceInfoService {
String signInvoicePrint(String excelFile, List<String> ids) throws Exception; String signInvoicePrint(String excelFile, List<String> ids) throws Exception;
List<String> countInoviceInfo(@Param("orderInfoIds")List<String> orderInfoIds); List<String> countInoviceInfo(@Param("orderInfoIds")List<String> orderInfoIds);
R checkRedInvoice(RedInvoiceCheckReqPo redInvoiceReqPo) throws OrderReceiveException;
RedInvoiceRespPo getOrderInvoiceData(RedInvoiceCheckReqPo redInvoiceReqPo);
R stageRedInvoiceData(RedInvoiceStageReqPo redInvoiceSaveReqPo);
} }

@ -19,10 +19,10 @@ import java.util.List;
@Slf4j @Slf4j
public class OfdToPngSDEnergyServiceImpl implements OfdToPngSDEnergyService { public class OfdToPngSDEnergyServiceImpl implements OfdToPngSDEnergyService {
@Value("${yx.url}") @Value("${yx.url:}")
private String yxurl; private String yxurl;
@Value("${yx.simsSalt}") @Value("${yx.simsSalt:}")
private String simsSalt; private String simsSalt;

@ -6,6 +6,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.dxhy.base.file.common.ExcelReadContext; import com.dxhy.base.file.common.ExcelReadContext;
import com.dxhy.base.file.handle.ExcelExportHandle; import com.dxhy.base.file.handle.ExcelExportHandle;
import com.dxhy.order.baseservice.config.BaseServiceConfig; import com.dxhy.order.baseservice.config.BaseServiceConfig;
@ -20,11 +21,16 @@ import com.dxhy.order.baseservice.module.thirdservice.simsback.service.SimsBackS
import com.dxhy.order.baseservice.module.thirdservice.user.model.DeptEntity; import com.dxhy.order.baseservice.module.thirdservice.user.model.DeptEntity;
import com.dxhy.order.baseservice.module.thirdservice.user.service.UserInfoService; import com.dxhy.order.baseservice.module.thirdservice.user.service.UserInfoService;
import com.dxhy.order.constant.*; import com.dxhy.order.constant.*;
import com.dxhy.order.exception.OrderReceiveException;
import com.dxhy.order.invoice.config.InvoiceConfig; import com.dxhy.order.invoice.config.InvoiceConfig;
import com.dxhy.order.invoice.module.invoice.dao.*; import com.dxhy.order.invoice.module.invoice.dao.*;
import com.dxhy.order.invoice.module.invoice.model.FileDownLoad; import com.dxhy.order.invoice.module.invoice.model.FileDownLoad;
import com.dxhy.order.invoice.module.invoice.model.GsClient;
import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO; import com.dxhy.order.invoice.module.invoice.model.bo.QueryCountInvoiceBO;
import com.dxhy.order.invoice.module.invoice.model.excel.*; import com.dxhy.order.invoice.module.invoice.model.excel.*;
import com.dxhy.order.invoice.module.invoice.model.po.IsInput;
import com.dxhy.order.invoice.module.invoice.model.po.PoCommonRequestParam;
import com.dxhy.order.invoice.module.invoice.model.po.PoCommonResponseParam;
import com.dxhy.order.invoice.module.invoice.model.vo.*; import com.dxhy.order.invoice.module.invoice.model.vo.*;
import com.dxhy.order.invoice.module.invoice.service.EmailService; import com.dxhy.order.invoice.module.invoice.service.EmailService;
import com.dxhy.order.invoice.module.invoice.service.HistoryDataPdfService; import com.dxhy.order.invoice.module.invoice.service.HistoryDataPdfService;
@ -38,6 +44,10 @@ import com.dxhy.order.invoice.utils.HttpInvoiceRequestUtilQd;
import com.dxhy.order.invoice.utils.PDFExportUtil; import com.dxhy.order.invoice.utils.PDFExportUtil;
import com.dxhy.order.invoice.utils.generateinvoice.PdfProducer; import com.dxhy.order.invoice.utils.generateinvoice.PdfProducer;
import com.dxhy.order.model.*; import com.dxhy.order.model.*;
import com.dxhy.order.model.page.OrderInvoiceInfoVo;
import com.dxhy.order.model.page.RedInvoiceCheckReqPo;
import com.dxhy.order.model.page.RedInvoiceRespPo;
import com.dxhy.order.model.page.RedInvoiceStageReqPo;
import com.dxhy.order.model.qd.QdFileDownloadRequest; import com.dxhy.order.model.qd.QdFileDownloadRequest;
import com.dxhy.order.model.qd.QdFileDownloadResponse; import com.dxhy.order.model.qd.QdFileDownloadResponse;
import com.dxhy.order.model.queue.CommonTsMqData; import com.dxhy.order.model.queue.CommonTsMqData;
@ -49,12 +59,17 @@ import com.dxhy.order.model.sk.pdf.InvoicePdf;
import com.dxhy.order.utils.*; import com.dxhy.order.utils.*;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.google.common.collect.Maps;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.Duration; import org.joda.time.Duration;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
@ -65,6 +80,7 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@ -95,6 +111,9 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService {
private OrderInfoJdcMapper orderInfoJdcMapper; private OrderInfoJdcMapper orderInfoJdcMapper;
@Resource @Resource
private OrderInfoEscMapper orderInfoEscMapper; private OrderInfoEscMapper orderInfoEscMapper;
@Resource
private GsClientFindMapper gsClientFindMapper;
@Resource @Resource
private HistoryDataPdfService historyDataPdfService; private HistoryDataPdfService historyDataPdfService;
@Resource @Resource
@ -129,6 +148,9 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService {
@Qualifier("asyncExecutor") @Qualifier("asyncExecutor")
private Executor voucherTaskExecutor; private Executor voucherTaskExecutor;
private static final String KEY_PREFIX = "order:red:";
private static final String KEY_RED_SYJE = "order:red:syje";
/** /**
* 作用 * 作用
@ -1493,5 +1515,287 @@ public class OrderInvoiceInfoServiceImpl implements OrderInvoiceInfoService {
return orderInvoiceInfoMapper.countInoviceInfo(orderInfoIds); return orderInvoiceInfoMapper.countInoviceInfo(orderInfoIds);
} }
@Override
public R checkRedInvoice(RedInvoiceCheckReqPo redInvoiceReqPo) throws OrderReceiveException{
//根据报账单查询蓝字数据
RedInvoiceRespPo orderInvoiceData = this.getOrderInvoiceData(redInvoiceReqPo);
List<OrderInvoiceInfoVo> orderInvoiceInfos = orderInvoiceData.getOrderInvoiceInfos();
//查询报账单是否存在
if(orderInvoiceInfos.size() == 0){
return R.error("根据报账单号未查询到订单");//改为常量
}
//todo 根据蓝字报账单调用SAP接口查询SAP状态,是否允许冲红 明慧开发
//查询公司client
List<GsClient> gsClients = gsClientFindMapper.selectByGsdm(orderInvoiceData.getGsdm());
if (ObjectUtils.isEmpty(gsClients)){
return R.error("未查询到公司client");
}
try {
boolean bzhStatus = getBzhStatus(orderInvoiceData.getRedBzdh(), gsClients.get(0).getClient());
if (bzhStatus) {
return R.error("蓝字报账单状态不允许冲红");
}
}catch (Exception e){
log.error("{}获取蓝字报账单状态异常", LOGGER_MSG,e);
return R.error("未查询到订单");
}
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()));
if(orderInfo == null){
return R.error("当前红冲订单查询为空");
}
String xhfXx = (StringUtils.isNotBlank(orderInfo.getXhfNsrsbh()) ? orderInfo.getXhfNsrsbh() : "")
+ (StringUtils.isNotBlank(orderInfo.getXhfMc()) ? orderInfo.getXhfMc() : "");
String lzXhfXx = (StringUtils.isNotBlank(orderInvoiceInfos.get(0).getXhfNsrsbh()) ? orderInvoiceInfos.get(0).getXhfNsrsbh() : "")
+ (StringUtils.isNotBlank(orderInvoiceInfos.get(0).getXhfMc()) ? orderInvoiceInfos.get(0).getXhfMc() : "");
String ghfXx = (StringUtils.isNotBlank(orderInfo.getGhfNsrsbh()) ? orderInfo.getGhfNsrsbh() : "")
+ (StringUtils.isNotBlank(orderInfo.getGhfMc()) ? orderInfo.getGhfMc() : "");
String lzGhfXx = (StringUtils.isNotBlank(orderInvoiceInfos.get(0).getGhfNsrsbh()) ? orderInvoiceInfos.get(0).getGhfNsrsbh() : "")
+ (StringUtils.isNotBlank(orderInvoiceInfos.get(0).getGhfMc()) ? orderInvoiceInfos.get(0).getGhfMc() : "");
//购销方是否一致
if(!xhfXx.equals(lzXhfXx) ){
return R.error("负数订单的销方信息与对应蓝字报账单号不一致");//改为常量
}
if(!ghfXx.equals(lzGhfXx)){
return R.error("负数订单的购方信息与对应蓝字报账单号不一致");//改为常量
}
//校验发票种类是否一致
if(!orderInfo.getFpzlDm().equals(orderInvoiceInfos.get(0).getFpzlDm())){
return R.error("负数订单的发票种类与对应蓝字报账单号不一致");//改为常量
}
//比较金额(发票剩余金额、如果是专票的话需要加上红字申请的金额、如果是数电票的话需要调用接口查询红字查询)
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");//改为常量
}
}
/**
* 根据报账单查询蓝字数据
* 根据请求流水号查询红字明细
* @return
*/
@Override
public RedInvoiceRespPo getOrderInvoiceData(RedInvoiceCheckReqPo redInvoiceReqPo) {
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());
OrderInfo orderInfo = orderInfoMapper.selectOrderInfoByOrderId(redInvoiceReqPo.getOrderInfoId(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh()));
OrderProcessInfo orderProcessInfo = orderInfoMapper.selectProcessByFpqqlsh(orderInfo.getFpqqlsh(), Arrays.asList(redInvoiceReqPo.getXhfNsrsbh()));
//是否允许勾选,发票状态
orderInvoiceInfoVos.stream().map(t->{
Boolean selected = true;
t.setDdzt("开具成功");//枚举
if(OrderInfoEnum.ORDER_STATUS_0.getKey().equals(t.getDdzt())
||OrderInfoEnum.ORDER_STATUS_1.getKey().equals(t.getDdzt())
||OrderInfoEnum.ORDER_STATUS_2.getKey().equals(t.getDdzt())
||OrderInfoEnum.ORDER_STATUS_3.getKey().equals(t.getDdzt())
){
t.setDdzt("未开具");//枚举
selected = false;
}
if(OrderInfoEnum.ORDER_STATUS_4.getKey().equals(t.getDdzt())){
t.setDdzt("开具中");//枚举
selected = false;
}
if(OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) &&
(ConfigureConstant.STRING_1.equals(t.getZfBz())
|| ConfigureConstant.STRING_2.equals(t.getZfBz()))
){
t.setDdzt("已作废");//枚举
selected = false;
}
if(OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) &&
(ConfigureConstant.STRING_1.equals(t.getChBz())
|| ConfigureConstant.STRING_2.equals(t.getChBz())
|| ConfigureConstant.STRING_3.equals(t.getChBz()))
){
t.setDdzt("已冲红");//枚举
selected = false;
}
//
if(OrderInfoEnum.ORDER_STATUS_5.getKey().equals(t.getDdzt()) &&
(ConfigureConstant.STRING_4.equals(t.getChBz())
|| ConfigureConstant.STRING_5.equals(t.getChBz())
|| ConfigureConstant.STRING_6.equals(t.getChBz()))
){
t.setDdzt("部分冲红");//枚举
}
t.setSelected(selected);
return t;
}).collect(Collectors.toList());
redInvoiceRespPo.setOrderInvoiceInfos(orderInvoiceInfoVos);
redInvoiceRespPo.setRedItemInfoList(orderItemInfos);
//明细合并
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(orderInfo.getFpqqlsh());
redInvoiceRespPo.setRedBzdh(orderProcessInfo.getBzdh());
redInvoiceRespPo.setGsdm(orderProcessInfo.getGsdm());
return redInvoiceRespPo;
}
@Resource
private RedissonClient redisson;
@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 = StringUtils.isBlank(blueInvoiceInfo.getFpdm())?"":blueInvoiceInfo.getFpdm() + blueInvoiceInfo.getFphm();
//组装发票报文
//金额、数量、税额跟跟换为负数,折扣行要与被折扣行合并
//校验重复提交数据覆盖问题
RLock lock = redisson.getLock(redInvoiceSaveReqPo.getFpqqlsh());
// boolean redRedisLock = redisService.setNx(redInvoiceSaveReqPo.getFpqqlsh(), key, RedisConstant.REDIS_EXPIRE_TIME_2HOUR);
for (int i = 0; i < 3; i++) {
try {
if(!lock.isLocked()){
lock.lock();
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();
}
if(redItemList != null){
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);
}
}
lock.unlock();
return R.ok().put(OrderManagementConstant.DATA,hashMap);
} else {
Thread.sleep(2000);
log.info("获取redis锁请等待,三次之后还是获取锁失败则返回。。。");
}
} catch (InterruptedException e) {
lock.unlock();
throw new RuntimeException(e);
}
}
return R.ok();
}
public boolean getBzhStatus(String bzdh,String clint){
//拼凑报文
IsInput isInput = new IsInput();
isInput.setSYSID(OrderInfoEnum.SYS_SIGN_FP.getKey());
isInput.setIFYWID(OrderInfoEnum.INTERFACE_BUSINESS_ID_BZDSTATUS.getKey());
isInput.setBSKEY(UUID.randomUUID().toString().replace("-", ""));
isInput.setZORG("");
isInput.setZFILED5(clint);
Map<String,String> data = new HashMap<>();
data.put("ZBZDH",bzdh);
isInput.setZDATA(JsonUtils.getInstance().toJsonString(data));
PoCommonRequestParam poCommonRequestParam = new PoCommonRequestParam();
poCommonRequestParam.setIS_INPUT(isInput);
String param = JsonUtils.getInstance().toJsonString(poCommonRequestParam);
log.info("{}获取报账单号状态入参:{}",LOGGER_MSG,param);
String result = HttpUtils.sendPo(baseServiceConfig.getPoUrl(), param,baseServiceConfig.getPoUserName(),baseServiceConfig.getPoPassword());
log.info("{}获取报账单号状态出参:{}",LOGGER_MSG,result);
PoCommonResponseParam poCommonResponseParam = JSONObject.parseObject(result, PoCommonResponseParam.class);
String zdata = poCommonResponseParam.getES_OUTPUT().getZDATA();
JSONObject response = JSONObject.parseObject(zdata);
String bzdzt = response.getString("BZDZT");
//校验状态
String bzdStatus = baseServiceConfig.getBzdStatus();
String[] split = bzdStatus.split(",");
if (StringUtils.isNotBlank(bzdh)||Arrays.asList(split).contains(bzdzt)){
return false;
}
return true;
}
} }

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.dxhy.order.invoice.module.invoice.dao.GsClientFindMapper" >
<resultMap id="BaseResultMap" type="com.dxhy.order.invoice.module.invoice.model.GsClient" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="gsdm" property="gsdm" jdbcType="VARCHAR" />
<result column="gsmc" property="gsmc" jdbcType="VARCHAR" />
<result column="client" property="client" jdbcType="VARCHAR" />
<result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
</resultMap>
<sql id="Base_Column_List" >
id, gsdm, gsmc, client, create_time
</sql>
<select id="selectByGsdm" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from gs_client
where gsdm = #{gsdm,jdbcType=VARCHAR}
</select>
</mapper>

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

@ -222,6 +222,33 @@
<result column="totalkpse" jdbcType="VARCHAR" property="totalkpse"/> <result column="totalkpse" jdbcType="VARCHAR" property="totalkpse"/>
</resultMap> </resultMap>
<resultMap id="queryBzdhInvoiceResultMap" type="com.dxhy.order.model.page.OrderInvoiceInfoVo">
<result column="order_info_id" jdbcType="VARCHAR" property="orderInfoId"/>
<result column="fpqqlsh" jdbcType="VARCHAR" property="fpqqlsh"/>
<result column="ddh" jdbcType="VARCHAR" property="ddh"/>
<result column="bzdh" jdbcType="VARCHAR" property="bzdh"/>
<result column="ddzt" jdbcType="VARCHAR" property="ddzt"/>
<result column="fpzldm" jdbcType="VARCHAR" property="fpzlDm"/>
<result column="xhf_nsrsbh" jdbcType="VARCHAR" property="xhfNsrsbh"/>
<result column="xhf_mc" jdbcType="VARCHAR" property="xhfMc"/>
<result column="ghf_nsrsbh" jdbcType="VARCHAR" property="ghfNsrsbh"/>
<result column="ghf_mc" jdbcType="VARCHAR" property="ghfMc"/>
<result column="ent_id" jdbcType="VARCHAR" property="entId"/>
<result column="xtly" jdbcType="VARCHAR" property="xtly"/>
<result column="fpdm" jdbcType="VARCHAR" property="fpdm"/>
<result column="fphm" jdbcType="VARCHAR" property="fphm"/>
<result column="kphjje" jdbcType="VARCHAR" property="kphjje"/>
<result column="kpse" jdbcType="VARCHAR" property="kpse"/>
<result column="hjbhsje" jdbcType="VARCHAR" property="hjbhsje"/>
<result column="sykchje" jdbcType="VARCHAR" property="sykchje"/>
<result column="sykchbhsje" jdbcType="VARCHAR" property="sykchbhsje"/>
<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="fjh" jdbcType="VARCHAR" property="fjh"/>
<result column="kprq" jdbcType="TIMESTAMP" property="kprq"/>
</resultMap>
<resultMap id="countInvoiceByMonthResultMap" type="com.dxhy.order.invoice.module.invoice.model.bo.CountInvoiceByMonthBO"> <resultMap id="countInvoiceByMonthResultMap" type="com.dxhy.order.invoice.module.invoice.model.bo.CountInvoiceByMonthBO">
<result column="dm" jdbcType="VARCHAR" property="dm"/> <result column="dm" jdbcType="VARCHAR" property="dm"/>
<result column="zcount" jdbcType="VARCHAR" property="zcount"/> <result column="zcount" jdbcType="VARCHAR" property="zcount"/>
@ -2264,4 +2291,55 @@
</foreach> </foreach>
AND ( oii.zf_bz = '0' OR oii.ch_bz = '0' ) AND ( oii.zf_bz = '0' OR oii.ch_bz = '0' )
</select> </select>
<select id="selectInvoiceInfoByBzdh" resultMap="queryBzdhInvoiceResultMap">
SELECT
op.order_info_id,
op.fpqqlsh,
op.ddh,
op.bzdh,
op.ddzt,
op.fpzl_dm AS fpzldm,
op.xhf_nsrsbh,
op.xhf_mc,
op.ghf_nsrsbh,
op.ghf_mc,
op.ent_id,
op.xtly,
oii.fpdm,
oii.fphm,
oii.kphjje,
oii.kpse,
oii.hjbhsje,
oii.sykchje,
oii.sykchbhsje,
oii.sykchse,
oii.zf_bz,
oii.ch_bz,
oii.kprq,
oii.fjh,
op.ddzt
FROM
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 op.xhf_nsrsbh = ''
</if>
<if test="shList != null and shList.size() == 1">
and op.xhf_nsrsbh =
<foreach collection="shList" index="index" item="item">
#{item}
</foreach>
</if>
<if test="shList != null and shList.size() > 1">
and op.xhf_nsrsbh in
<foreach collection="shList" index="index" item="item"
open="(" separator="," close=")">
#{item}
</foreach>
</if>
AND op.order_status = '0'
</select>
</mapper> </mapper>

Loading…
Cancel
Save