|
|
|
@ -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,7 +178,11 @@ 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 { |
|
|
|
|
if (locked){ |
|
|
|
|
List<YyOrderItemInfo> yyOrderItemInfoList = yyOrderItemInfoMapper.queryOrderItemInfo(yyOrderInfo.getId()); |
|
|
|
|
if (CollectionUtils.isNotEmpty(yyOrderItemInfoList)) { |
|
|
|
|
DdpcxxReqBO ddpcxxReqBO = transitionReadData(yyOrderInfo, yyOrderItemInfoList, deptEntity); |
|
|
|
@ -188,11 +199,19 @@ public class YyOrderServiceImpl implements OrderService { |
|
|
|
|
} 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(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -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,12 +428,9 @@ 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.setBYZD1(yyOrderItemInfo.getIunitprice()); |
|
|
|
@ -415,8 +439,28 @@ public class YyOrderServiceImpl implements OrderService { |
|
|
|
|
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)); |
|
|
|
|