|
|
@ -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.module.thirdservice.user.service.UserInfoService; |
|
|
|
import com.dxhy.base.service.openapi.protocol.qd.PageGfxxReq; |
|
|
|
import com.dxhy.base.service.openapi.protocol.qd.PageGfxxReq; |
|
|
|
import com.dxhy.base.thirdservice.module.base.service.BaseService; |
|
|
|
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.management.common.constant.ConfigureConstant; |
|
|
|
import com.dxhy.order.baseservice.constant.ConfigurerInfo; |
|
|
|
import com.dxhy.order.baseservice.constant.ConfigurerInfo; |
|
|
|
import com.dxhy.order.baseservice.constant.OrderValidateEnum; |
|
|
|
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.OrderInvoiceInfo; |
|
|
|
import com.dxhy.order.baseservice.model.OrderOriginExtendInfo; |
|
|
|
import com.dxhy.order.baseservice.model.OrderOriginExtendInfo; |
|
|
|
import com.dxhy.order.consumer.dao.SkOrderInfoMapper; |
|
|
|
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.SkOrderInfo; |
|
|
|
import com.dxhy.order.consumer.modules.bespoke.model.sk.SkOrderItemInfo; |
|
|
|
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.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.modules.bespoke.service.OrderService; |
|
|
|
import com.dxhy.order.consumer.openapi.protocol.v4.order.*; |
|
|
|
import com.dxhy.order.consumer.openapi.protocol.v4.order.*; |
|
|
|
import com.dxhy.order.consumer.openapi.protocol.v6.order.QdTxxBO; |
|
|
|
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 lombok.extern.slf4j.Slf4j; |
|
|
|
import org.apache.commons.collections4.CollectionUtils; |
|
|
|
import org.apache.commons.collections4.CollectionUtils; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
|
|
|
|
import org.redisson.api.RLock; |
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
@ -88,6 +92,9 @@ public class SkOrderServiceImpl implements OrderService { |
|
|
|
@Resource |
|
|
|
@Resource |
|
|
|
private TInvoiceInvmapMapper tInvoiceInvmapMapper; |
|
|
|
private TInvoiceInvmapMapper tInvoiceInvmapMapper; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
|
|
|
private RedissonService redissonService; |
|
|
|
|
|
|
|
|
|
|
|
// 订单读入
|
|
|
|
// 订单读入
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public R orderRead(ReqParam reqParam) { |
|
|
|
public R orderRead(ReqParam reqParam) { |
|
|
@ -167,28 +174,40 @@ public class SkOrderServiceImpl implements OrderService { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (SkOrderInfo skOrderInfo : skOrderInfoList) { |
|
|
|
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 { |
|
|
|
try { |
|
|
|
List<SkOrderItemInfo> skOrderItemInfoList = skOrderItemInfoMapper.queryOrderItemInfo(skOrderInfo.getId()); |
|
|
|
if (locked){ |
|
|
|
if (CollectionUtils.isNotEmpty(skOrderItemInfoList)) { |
|
|
|
List<SkOrderItemInfo> skOrderItemInfoList = skOrderItemInfoMapper.queryOrderItemInfo(skOrderInfo.getId()); |
|
|
|
DdpcxxReqBO ddpcxxReqBO = transitionReadData(skOrderInfo, skOrderItemInfoList, deptEntity); |
|
|
|
if (CollectionUtils.isNotEmpty(skOrderItemInfoList)) { |
|
|
|
DdpcxxRspBO ddpcxxRspBO = allocateInvoiceInterfaceServiceImplV3.allocateInvoicesV3(ddpcxxReqBO, "", null, ConfigurerInfo.INTERFACE_VERSION_V6); |
|
|
|
DdpcxxReqBO ddpcxxReqBO = transitionReadData(skOrderInfo, skOrderItemInfoList, deptEntity); |
|
|
|
log.debug("V3生成预制返回信息:{}", JSON.toJSONString(ddpcxxRspBO)); |
|
|
|
DdpcxxRspBO ddpcxxRspBO = allocateInvoiceInterfaceServiceImplV3.allocateInvoicesV3(ddpcxxReqBO, "", null, ConfigurerInfo.INTERFACE_VERSION_V6); |
|
|
|
String format = String.format(message, skOrderInfo.getXsddm(), ddpcxxRspBO.getZTXX()); |
|
|
|
log.debug("V3生成预制返回信息:{}", JSON.toJSONString(ddpcxxRspBO)); |
|
|
|
if (ddpcxxRspBO.getZTDM().equals(OrderValidateEnum.INVOICE_ERROR_CODE_010000_V3.getKey())) { |
|
|
|
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); |
|
|
|
skOrderInfoMapper.updateStatus(skOrderInfo.getXsddm(), ConfigureConstant.STRING_1); |
|
|
|
|
|
|
|
backMessage.add(com.dxhy.base.common.constant.ConfigureConstant.INT_0, format); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
backMessage.add(format); |
|
|
|
|
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
backMessage.add(format); |
|
|
|
backMessage.add(String.format(message, skOrderInfo.getXsddm(), "订单明细信息丢失请删除重新读入")); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
}else { |
|
|
|
backMessage.add(String.format(message, skOrderInfo.getXsddm(), "订单明细信息丢失请删除重新读入")); |
|
|
|
backMessage.add(String.format(message, skOrderInfo.getXsddm(), "订单正在生成发票,请稍后再试")); |
|
|
|
|
|
|
|
log.info("订单正在生成发票,请稍后再试"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("保存发票异常{}", e); |
|
|
|
log.error("保存发票异常{}", e); |
|
|
|
String format = String.format(message, skOrderInfo.getXsddm(), "生成发票异常请联系管理员"); |
|
|
|
String format = String.format(message, skOrderInfo.getXsddm(), "生成发票异常请联系管理员"); |
|
|
|
backMessage.add(format); |
|
|
|
backMessage.add(format); |
|
|
|
|
|
|
|
}finally { |
|
|
|
|
|
|
|
if (locked){ |
|
|
|
|
|
|
|
lock.unlock(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -368,22 +387,27 @@ public class SkOrderServiceImpl implements OrderService { |
|
|
|
String invoiceAmount = ConfigureConstant.STRING_0; |
|
|
|
String invoiceAmount = ConfigureConstant.STRING_0; |
|
|
|
String taxAmount = 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<>(); |
|
|
|
List<DdmxxxBO> ddmxxxBOList = new ArrayList<>(); |
|
|
|
int index = ConfigureConstant.INT_0; |
|
|
|
int index = ConfigureConstant.INT_0; |
|
|
|
boolean isZk = !skOrderItemInfoList.stream().filter(item->item.getXgdjbh().startsWith("XSB")).collect(Collectors.toList()).isEmpty(); |
|
|
|
|
|
|
|
for (SkOrderItemInfo orderItemInfo : skOrderItemInfoList) { |
|
|
|
for (SkOrderItemInfo orderItemInfo : skOrderItemInfoList) { |
|
|
|
DdmxxxBO ddmxxxBO = new DdmxxxBO(); |
|
|
|
DdmxxxBO ddmxxxBO = new DdmxxxBO(); |
|
|
|
ddmxxxBO.setXH(String.valueOf(++index)); |
|
|
|
ddmxxxBO.setXH(String.valueOf(++index)); |
|
|
|
ddmxxxBO.setXMMC(orderItemInfo.getCpmc()); |
|
|
|
ddmxxxBO.setXMMC(orderItemInfo.getCpmc()); |
|
|
|
ddmxxxBO.setGGXH(orderItemInfo.getXh()); |
|
|
|
ddmxxxBO.setGGXH(orderItemInfo.getXh()); |
|
|
|
ddmxxxBO.setDW(orderItemInfo.getCpdw()); |
|
|
|
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.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.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.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.setFPHXZ(ConfigureConstant.STRING_0); |
|
|
|
ddmxxxBO.setBZ(orderItemInfo.getBeizhu()); |
|
|
|
ddmxxxBO.setBZ(orderItemInfo.getBeizhu()); |
|
|
|
ddmxxxBO.setHSBZ(ConfigureConstant.STRING_1); |
|
|
|
ddmxxxBO.setHSBZ(ConfigureConstant.STRING_1); |
|
|
@ -400,10 +424,20 @@ public class SkOrderServiceImpl implements OrderService { |
|
|
|
if (orderItemInfo.getXgdjbh().startsWith("XSB")){ |
|
|
|
if (orderItemInfo.getXgdjbh().startsWith("XSB")){ |
|
|
|
ddmxxxBO.setXH(ConfigureConstant.STRING_2); |
|
|
|
ddmxxxBO.setXH(ConfigureConstant.STRING_2); |
|
|
|
ddmxxxBO.setFPHXZ(ConfigureConstant.STRING_1); |
|
|
|
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); |
|
|
|
ddmxxxBOList.add(ddmxxxBO); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isZk){ |
|
|
|
|
|
|
|
ddmxxxBOList.sort(Comparator.comparing(DdmxxxBO::getXH)); |
|
|
|
|
|
|
|
} |
|
|
|
//金额、税额、价税合计
|
|
|
|
//金额、税额、价税合计
|
|
|
|
ddtxxBO.setHJSE(taxAmount); |
|
|
|
ddtxxBO.setHJSE(taxAmount); |
|
|
|
ddtxxBO.setHJJE(DecimalCalculateUtil.bigDecimalSub(invoiceAmount, taxAmount, ConfigureConstant.INT_2)); |
|
|
|
ddtxxBO.setHJJE(DecimalCalculateUtil.bigDecimalSub(invoiceAmount, taxAmount, ConfigureConstant.INT_2)); |
|
|
|