Compare commits

...

4 Commits

  1. 2
      order-management-base-service/src/main/java/com/dxhy/order/baseservice/constant/OrderValidateEnum.java
  2. 10
      order-management-base-service/src/main/java/com/dxhy/order/baseservice/constant/RedisConstant.java
  3. 68
      order-management-order/src/main/java/com/dxhy/order/consumer/modules/bespoke/service/impl/SkOrderServiceImpl.java
  4. 79
      order-management-order/src/main/java/com/dxhy/order/consumer/modules/bespoke/service/impl/YyOrderServiceImpl.java
  5. 2
      order-management-order/src/main/java/com/dxhy/order/consumer/modules/validate/service/impl/ValidateInterfaceOrderServiceImpl.java

@ -781,7 +781,7 @@ public enum OrderValidateEnum {
CHECK_ISS7PRI_107058("107058", "订单明细信息中项目序号", 0, 5, true, false),
CHECK_ISS7PRI_107059("107059", "订单明细信息中规格型号", 0, 40, true, false),
CHECK_ISS7PRI_107059("107059", "订单明细信息中规格型号", 0, 150, true, false),
CHECK_ISS7PRI_107060("107060", "订单明细信息中项目单位", 0, 20, 14, true, false),
CHECK_ISS7PRI_107060A("107060", "订单明细信息中单位、数量、单价应同时为空或同时不为空"),

@ -47,6 +47,16 @@ public class RedisConstant {
*/
public static final String REDIS_INTERFACE_RECEIVE = "xxfp:order:receive:%s";
/**
* 用友生成预制发票
*/
public static final String REDIS_YY_ORDER_EXTRACT = "xxfp:order:yy:extract:%s";
/**
* 时空生成预制发票
*/
public static final String REDIS_SK_ORDER_EXTRACT = "xxfp:order:sk:extract:%s";
/**
* 订单接收数据,验证是否超过限制次数
*/

@ -14,9 +14,11 @@ import com.dxhy.base.service.module.thirdservice.user.model.DeptEntity;
import com.dxhy.base.service.module.thirdservice.user.service.UserInfoService;
import com.dxhy.base.service.openapi.protocol.qd.PageGfxxReq;
import com.dxhy.base.thirdservice.module.base.service.BaseService;
import com.dxhy.base.thirdservice.module.thirdservice.redis.service.RedissonService;
import com.dxhy.management.common.constant.ConfigureConstant;
import com.dxhy.order.baseservice.constant.ConfigurerInfo;
import com.dxhy.order.baseservice.constant.OrderValidateEnum;
import com.dxhy.order.baseservice.constant.RedisConstant;
import com.dxhy.order.baseservice.model.OrderInvoiceInfo;
import com.dxhy.order.baseservice.model.OrderOriginExtendInfo;
import com.dxhy.order.consumer.dao.SkOrderInfoMapper;
@ -32,6 +34,7 @@ import com.dxhy.order.consumer.modules.bespoke.model.sk.BackProduct;
import com.dxhy.order.consumer.modules.bespoke.model.sk.SkOrderInfo;
import com.dxhy.order.consumer.modules.bespoke.model.sk.SkOrderItemInfo;
import com.dxhy.order.consumer.modules.bespoke.model.yy.NewTable;
import com.dxhy.order.consumer.modules.bespoke.model.yy.YyOrderItemInfo;
import com.dxhy.order.consumer.modules.bespoke.service.OrderService;
import com.dxhy.order.consumer.openapi.protocol.v4.order.*;
import com.dxhy.order.consumer.openapi.protocol.v6.order.QdTxxBO;
@ -42,6 +45,7 @@ import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -88,6 +92,9 @@ public class SkOrderServiceImpl implements OrderService {
@Resource
private TInvoiceInvmapMapper tInvoiceInvmapMapper;
@Resource
private RedissonService redissonService;
// 订单读入
@Override
public R orderRead(ReqParam reqParam) {
@ -167,28 +174,40 @@ public class SkOrderServiceImpl implements OrderService {
for (SkOrderInfo skOrderInfo : skOrderInfoList) {
String cdlCodeKey = String.format(RedisConstant.REDIS_SK_ORDER_EXTRACT, skOrderInfo.getXsddm());
RLock lock = redissonService.getLock(cdlCodeKey);
boolean locked = lock.tryLock();
try {
List<SkOrderItemInfo> skOrderItemInfoList = skOrderItemInfoMapper.queryOrderItemInfo(skOrderInfo.getId());
if (CollectionUtils.isNotEmpty(skOrderItemInfoList)) {
DdpcxxReqBO ddpcxxReqBO = transitionReadData(skOrderInfo, skOrderItemInfoList, deptEntity);
DdpcxxRspBO ddpcxxRspBO = allocateInvoiceInterfaceServiceImplV3.allocateInvoicesV3(ddpcxxReqBO, "", null, ConfigurerInfo.INTERFACE_VERSION_V6);
log.debug("V3生成预制返回信息:{}", JSON.toJSONString(ddpcxxRspBO));
String format = String.format(message, skOrderInfo.getXsddm(), ddpcxxRspBO.getZTXX());
if (ddpcxxRspBO.getZTDM().equals(OrderValidateEnum.INVOICE_ERROR_CODE_010000_V3.getKey())) {
//添加状态修改
skOrderInfoMapper.updateStatus(skOrderInfo.getXsddm(), ConfigureConstant.STRING_1);
backMessage.add(com.dxhy.base.common.constant.ConfigureConstant.INT_0, format);
if (locked){
List<SkOrderItemInfo> skOrderItemInfoList = skOrderItemInfoMapper.queryOrderItemInfo(skOrderInfo.getId());
if (CollectionUtils.isNotEmpty(skOrderItemInfoList)) {
DdpcxxReqBO ddpcxxReqBO = transitionReadData(skOrderInfo, skOrderItemInfoList, deptEntity);
DdpcxxRspBO ddpcxxRspBO = allocateInvoiceInterfaceServiceImplV3.allocateInvoicesV3(ddpcxxReqBO, "", null, ConfigurerInfo.INTERFACE_VERSION_V6);
log.debug("V3生成预制返回信息:{}", JSON.toJSONString(ddpcxxRspBO));
String format = String.format(message, skOrderInfo.getXsddm(), ddpcxxRspBO.getZTXX());
if (ddpcxxRspBO.getZTDM().equals(OrderValidateEnum.INVOICE_ERROR_CODE_010000_V3.getKey())) {
//添加状态修改
skOrderInfoMapper.updateStatus(skOrderInfo.getXsddm(), ConfigureConstant.STRING_1);
backMessage.add(com.dxhy.base.common.constant.ConfigureConstant.INT_0, format);
} else {
backMessage.add(format);
}
} else {
backMessage.add(format);
backMessage.add(String.format(message, skOrderInfo.getXsddm(), "订单明细信息丢失请删除重新读入"));
}
} else {
backMessage.add(String.format(message, skOrderInfo.getXsddm(), "订单明细信息丢失请删除重新读入"));
}else {
backMessage.add(String.format(message, skOrderInfo.getXsddm(), "订单正在生成发票,请稍后再试"));
log.info("订单正在生成发票,请稍后再试");
}
} catch (Exception e) {
log.error("保存发票异常{}", e);
String format = String.format(message, skOrderInfo.getXsddm(), "生成发票异常请联系管理员");
backMessage.add(format);
}finally {
if (locked){
lock.unlock();
}
}
}
@ -368,22 +387,27 @@ public class SkOrderServiceImpl implements OrderService {
String invoiceAmount = ConfigureConstant.STRING_0;
String taxAmount = ConfigureConstant.STRING_0;
boolean isZk = skOrderItemInfoList.size()>ConfigureConstant.INT_1;
String xmmc = skOrderItemInfoList.get(ConfigureConstant.INT_0).getCpmc();
if (isZk){
List<SkOrderItemInfo> collect = skOrderItemInfoList.stream().filter(item -> DecimalCalculateUtil.stringCompare(item.getHsje(), ConfigureConstant.STRING_0) > ConfigureConstant.INT_0).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)){
xmmc = collect.get(ConfigureConstant.INT_0).getCpmc();
}
}
//发票明细信息
List<DdmxxxBO> ddmxxxBOList = new ArrayList<>();
int index = ConfigureConstant.INT_0;
boolean isZk = !skOrderItemInfoList.stream().filter(item->item.getXgdjbh().startsWith("XSB")).collect(Collectors.toList()).isEmpty();
for (SkOrderItemInfo orderItemInfo : skOrderItemInfoList) {
DdmxxxBO ddmxxxBO = new DdmxxxBO();
ddmxxxBO.setXH(String.valueOf(++index));
ddmxxxBO.setXMMC(orderItemInfo.getCpmc());
ddmxxxBO.setGGXH(orderItemInfo.getXh());
ddmxxxBO.setDW(orderItemInfo.getCpdw());
String sl = DecimalCalculateUtil.dynamicDecimalFormatToStringWithoutZero(orderItemInfo.getCpsl(), skOrderInfo.getFplx(), taxEquipmentInfo.getQdfwlx());
ddmxxxBO.setSPSL(sl);
ddmxxxBO.setJE(new BigDecimal(orderItemInfo.getHsje()).setScale(ConfigureConstant.INT_2, RoundingMode.HALF_UP).toPlainString());
ddmxxxBO.setSL(new BigDecimal(orderItemInfo.getSl()).divide(new BigDecimal(ConfigureConstant.STRING_100)).toPlainString());
ddmxxxBO.setSE(new BigDecimal(orderItemInfo.getSe()).setScale(ConfigureConstant.INT_2, RoundingMode.HALF_UP).toPlainString());
ddmxxxBO.setDJ(getDynamicLengthDecimal(ddmxxxBO.getJE(), ddmxxxBO.getSPSL()));
ddmxxxBO.setFPHXZ(ConfigureConstant.STRING_0);
ddmxxxBO.setBZ(orderItemInfo.getBeizhu());
ddmxxxBO.setHSBZ(ConfigureConstant.STRING_1);
@ -400,10 +424,20 @@ public class SkOrderServiceImpl implements OrderService {
if (orderItemInfo.getXgdjbh().startsWith("XSB")){
ddmxxxBO.setXH(ConfigureConstant.STRING_2);
ddmxxxBO.setFPHXZ(ConfigureConstant.STRING_1);
ddmxxxBO.setXMMC(xmmc);
}
}
//非折扣行计算单价和数量
if(StringUtils.isNotBlank(orderItemInfo.getHsje()) && DecimalCalculateUtil.stringCompare(orderItemInfo.getHsje(), ConfigureConstant.STRING_0) > ConfigureConstant.INT_0){
String sl = DecimalCalculateUtil.dynamicDecimalFormatToStringWithoutZero(orderItemInfo.getCpsl(), skOrderInfo.getFplx(), taxEquipmentInfo.getQdfwlx());
ddmxxxBO.setSPSL(sl);
ddmxxxBO.setDJ(getDynamicLengthDecimal(ddmxxxBO.getJE(), ddmxxxBO.getSPSL()));
}
ddmxxxBOList.add(ddmxxxBO);
}
if (isZk){
ddmxxxBOList.sort(Comparator.comparing(DdmxxxBO::getXH));
}
//金额、税额、价税合计
ddtxxBO.setHJSE(taxAmount);
ddtxxBO.setHJJE(DecimalCalculateUtil.bigDecimalSub(invoiceAmount, taxAmount, ConfigureConstant.INT_2));

@ -14,9 +14,11 @@ import com.dxhy.base.service.module.thirdservice.user.model.DeptEntity;
import com.dxhy.base.service.module.thirdservice.user.service.UserInfoService;
import com.dxhy.base.service.openapi.protocol.qd.PageGfxxReq;
import com.dxhy.base.thirdservice.module.base.service.BaseService;
import com.dxhy.base.thirdservice.module.thirdservice.redis.service.RedissonService;
import com.dxhy.management.common.constant.ConfigureConstant;
import com.dxhy.order.baseservice.constant.ConfigurerInfo;
import com.dxhy.order.baseservice.constant.OrderValidateEnum;
import com.dxhy.order.baseservice.constant.RedisConstant;
import com.dxhy.order.baseservice.model.OrderInvoiceInfo;
import com.dxhy.order.baseservice.model.OrderOriginExtendInfo;
import com.dxhy.order.consumer.dao.TInvoiceInvmapMapper;
@ -43,6 +45,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -50,6 +53,7 @@ import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
@Service("yyOrderService")
@ -94,6 +98,9 @@ public class YyOrderServiceImpl implements OrderService {
@Resource
private OrderInvoiceInfoServiceImpl orderInvoiceInfoService;
@Resource
private RedissonService redissonService;
//订单读入
@Override
public R orderRead(ReqParam reqParam) {
@ -171,28 +178,40 @@ public class YyOrderServiceImpl implements OrderService {
for (YyOrderInfo yyOrderInfo : yyOrderInfoList) {
String cdlCodeKey = String.format(RedisConstant.REDIS_YY_ORDER_EXTRACT, yyOrderInfo.getCdlcode());
RLock lock = redissonService.getLock(cdlCodeKey);
boolean locked = lock.tryLock();
try {
List<YyOrderItemInfo> yyOrderItemInfoList = yyOrderItemInfoMapper.queryOrderItemInfo(yyOrderInfo.getId());
if (CollectionUtils.isNotEmpty(yyOrderItemInfoList)) {
DdpcxxReqBO ddpcxxReqBO = transitionReadData(yyOrderInfo, yyOrderItemInfoList, deptEntity);
DdpcxxRspBO ddpcxxRspBO = allocateInvoiceInterfaceServiceImplV3.allocateInvoicesV3(ddpcxxReqBO, "", null, ConfigurerInfo.INTERFACE_VERSION_V6);
log.debug("V3生成预制返回信息:{}", JSON.toJSONString(ddpcxxRspBO));
String format = String.format(message, yyOrderInfo.getCdlcode(), ddpcxxRspBO.getZTXX());
if (ddpcxxRspBO.getZTDM().equals(OrderValidateEnum.INVOICE_ERROR_CODE_010000_V3.getKey())) {
//添加状态修改
yyOrderInfoMapper.updateStatus(yyOrderInfo.getCdlcode(), ConfigureConstant.STRING_1);
backMessage.add(ConfigureConstant.INT_0, format);
if (locked){
List<YyOrderItemInfo> yyOrderItemInfoList = yyOrderItemInfoMapper.queryOrderItemInfo(yyOrderInfo.getId());
if (CollectionUtils.isNotEmpty(yyOrderItemInfoList)) {
DdpcxxReqBO ddpcxxReqBO = transitionReadData(yyOrderInfo, yyOrderItemInfoList, deptEntity);
DdpcxxRspBO ddpcxxRspBO = allocateInvoiceInterfaceServiceImplV3.allocateInvoicesV3(ddpcxxReqBO, "", null, ConfigurerInfo.INTERFACE_VERSION_V6);
log.debug("V3生成预制返回信息:{}", JSON.toJSONString(ddpcxxRspBO));
String format = String.format(message, yyOrderInfo.getCdlcode(), ddpcxxRspBO.getZTXX());
if (ddpcxxRspBO.getZTDM().equals(OrderValidateEnum.INVOICE_ERROR_CODE_010000_V3.getKey())) {
//添加状态修改
yyOrderInfoMapper.updateStatus(yyOrderInfo.getCdlcode(), ConfigureConstant.STRING_1);
backMessage.add(ConfigureConstant.INT_0, format);
} else {
backMessage.add(format);
}
} else {
backMessage.add(format);
backMessage.add(String.format(message, yyOrderInfo.getCdlcode(), "订单明细信息丢失请删除重新读入"));
}
} else {
backMessage.add(String.format(message, yyOrderInfo.getCdlcode(), "订单明细信息丢失请删除重新读入"));
}else {
backMessage.add(String.format(message, yyOrderInfo.getCdlcode(), "订单正在生成发票,请稍后再试"));
log.info("订单正在生成发票,请稍后再试");
}
} catch (Exception e) {
log.error("保存发票异常{}", e);
String format = String.format(message, yyOrderInfo.getCdlcode(), "生成发票异常请联系管理员");
backMessage.add(format);
}finally {
if (locked) {
lock.unlock();
}
}
}
@ -381,7 +400,7 @@ public class YyOrderServiceImpl implements OrderService {
ddtxxBO.setGMFYH(yyOrderInfo.getBranchaccount());
// ddtxxBO.setGMFZH(ebsOrderInfo.getBankAccount());
// ddtxxBO.setGMFDZYX(buyerEntity.getEmail());
ddtxxBO.setBZ(yyOrderItemInfoList.get(ConfigureConstant.INT_0).getRemark());
ddtxxBO.setBZ(yyOrderInfo.getBz());
ddtxxBO.setDDH(yyOrderInfo.getCdlcode());
// ddtxxBO.setSFZSGFYHZH(ebsOrderInfo.getPurbankAccountJud());
// ddtxxBO.setSFZSXFYHZH(ebsOrderInfo.getSalebankAccountJud());
@ -392,6 +411,14 @@ public class YyOrderServiceImpl implements OrderService {
String invoiceAmount = ConfigureConstant.STRING_0;
String taxAmount = ConfigureConstant.STRING_0;
boolean isZk = yyOrderItemInfoList.size()>ConfigureConstant.INT_1;
String xmmc = yyOrderItemInfoList.get(ConfigureConstant.INT_0).getCinvname();
if (isZk){
List<YyOrderItemInfo> collect = yyOrderItemInfoList.stream().filter(item -> DecimalCalculateUtil.stringCompare(item.getIsum(), ConfigureConstant.STRING_0) > ConfigureConstant.INT_0).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)){
xmmc = collect.get(ConfigureConstant.INT_0).getCinvname();
}
}
//发票明细信息
List<DdmxxxBO> ddmxxxBOList = new ArrayList<>();
int index = ConfigureConstant.INT_0;
@ -401,22 +428,40 @@ public class YyOrderServiceImpl implements OrderService {
ddmxxxBO.setXMMC(yyOrderItemInfo.getCinvname());
ddmxxxBO.setGGXH(yyOrderItemInfo.getCinvstd());
ddmxxxBO.setDW(yyOrderItemInfo.getCcomunitname());
String sl = DecimalCalculateUtil.dynamicDecimalFormatToStringWithoutZero(yyOrderItemInfo.getIquantity(), yyOrderInfo.getCvouchtype(), taxEquipmentInfo.getQdfwlx());
ddmxxxBO.setSPSL(sl);
ddmxxxBO.setJE(new BigDecimal(yyOrderItemInfo.getIsum()).setScale(ConfigureConstant.INT_2, RoundingMode.HALF_UP).toPlainString());
ddmxxxBO.setSL(new BigDecimal(yyOrderItemInfo.getItaxrate()).divide(new BigDecimal(ConfigureConstant.STRING_100)).toPlainString());
ddmxxxBO.setSE(new BigDecimal(yyOrderItemInfo.getItax()).setScale(ConfigureConstant.INT_2, RoundingMode.HALF_UP).toPlainString());
ddmxxxBO.setDJ(getDynamicLengthDecimal(ddmxxxBO.getJE(), ddmxxxBO.getSPSL()));
ddmxxxBO.setFPHXZ(ConfigureConstant.STRING_0);
ddmxxxBO.setHSBZ(ConfigureConstant.STRING_1);
ddmxxxBO.setBZ(yyOrderItemInfo.getRemark());
ddmxxxBO.setBYZD1(yyOrderItemInfo.getIunitprice());
ddmxxxBO.setBYZD2(yyOrderItemInfo.getYyItemId());
//累计求金额和税额
invoiceAmount = DecimalCalculateUtil.bigDecimalAdd(invoiceAmount, yyOrderItemInfo.getIsum(), ConfigureConstant.INT_2);
taxAmount = DecimalCalculateUtil.bigDecimalAdd(taxAmount, yyOrderItemInfo.getItax(), ConfigureConstant.INT_2);
//添加则扣行判断
if (isZk){
ddmxxxBO.setXH(ConfigureConstant.STRING_1);
ddmxxxBO.setFPHXZ(ConfigureConstant.STRING_2);
if (StringUtils.isNotBlank(ddmxxxBO.getJE()) && DecimalCalculateUtil.stringCompare(ddmxxxBO.getJE(), ConfigureConstant.STRING_0) < ConfigureConstant.INT_0){
ddmxxxBO.setXH(ConfigureConstant.STRING_2);
ddmxxxBO.setFPHXZ(ConfigureConstant.STRING_1);
ddmxxxBO.setXMMC(xmmc);
}
}
//非折扣行计算单价和数量
if(StringUtils.isNotBlank(ddmxxxBO.getJE()) && DecimalCalculateUtil.stringCompare(ddmxxxBO.getJE(), ConfigureConstant.STRING_0) > ConfigureConstant.INT_0){
String sl = DecimalCalculateUtil.dynamicDecimalFormatToStringWithoutZero(yyOrderItemInfo.getIquantity(), yyOrderInfo.getCvouchtype(), taxEquipmentInfo.getQdfwlx());
ddmxxxBO.setSPSL(sl);
ddmxxxBO.setDJ(getDynamicLengthDecimal(ddmxxxBO.getJE(), ddmxxxBO.getSPSL()));
}
ddmxxxBOList.add(ddmxxxBO);
}
if (isZk){
ddmxxxBOList.sort(Comparator.comparing(DdmxxxBO::getXH));
}
//金额、税额、价税合计
ddtxxBO.setHJSE(taxAmount);
ddtxxBO.setHJJE(DecimalCalculateUtil.bigDecimalSub(invoiceAmount, taxAmount, ConfigureConstant.INT_2));

@ -813,7 +813,7 @@ public class ValidateInterfaceOrderServiceImpl implements ValidateInterfaceOrder
* 数电长度限制为200
*/
if (judgeSdyw) {
checkResultMap = OrderCheckParamUtil.checkParam(OrderValidateEnum.CHECK_ISS7PRI_107128, orderInfoBz, commonCheckConfig);
// checkResultMap = OrderCheckParamUtil.checkParam(OrderValidateEnum.CHECK_ISS7PRI_107128, orderInfoBz, commonCheckConfig);
} else {
//非数电时,验证长度
if (OrderInfoEnum.TAX_EQUIPMENT_C48.getKey().equals(terminalCode) || OrderInfoEnum.TAX_EQUIPMENT_D60.getKey().equals(terminalCode) || OrderInfoEnum.TAX_EQUIPMENT_A9.getKey().equals(terminalCode)) {

Loading…
Cancel
Save