|
|
@@ -1,5 +1,6 @@
|
|
|
package com.sckw.order.serivce;
|
|
|
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
@@ -11,10 +12,9 @@ import com.sckw.core.exception.BusinessException;
|
|
|
import com.sckw.core.exception.CustomPromptException;
|
|
|
import com.sckw.core.model.constant.Global;
|
|
|
import com.sckw.core.model.enums.CooperateTypeEnum;
|
|
|
-import com.sckw.core.utils.BeanUtils;
|
|
|
-import com.sckw.core.utils.CollectionUtils;
|
|
|
-import com.sckw.core.utils.OrderGenerateUtils;
|
|
|
-import com.sckw.core.utils.StringUtils;
|
|
|
+import com.sckw.core.model.enums.OrderRuleEnum;
|
|
|
+import com.sckw.core.model.enums.RedisOrderGenerateEnum;
|
|
|
+import com.sckw.core.utils.*;
|
|
|
import com.sckw.core.web.constant.HttpStatus;
|
|
|
import com.sckw.core.web.context.LoginUserHolder;
|
|
|
import com.sckw.core.web.response.HttpResult;
|
|
|
@@ -47,7 +47,6 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.cloud.stream.function.StreamBridge;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
-import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
@@ -89,8 +88,6 @@ public class KwoTradeOrderService {
|
|
|
private final KwoTradeOrderContractService kwoTradeOrderContractService;
|
|
|
private final KwoTradeOrderTrackService kwoTradeOrderTrackService;
|
|
|
|
|
|
- private static final String ORDER_NO_PREFIX = "B";
|
|
|
-
|
|
|
/**
|
|
|
* @desc: 采购下单草稿
|
|
|
* @author: yzc
|
|
|
@@ -100,7 +97,7 @@ public class KwoTradeOrderService {
|
|
|
*/
|
|
|
public void addPurchaseOrderDraft(PurchaseOrderDraftParam param) {
|
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
- order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
|
|
|
+ order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo())
|
|
|
.setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
|
|
|
.setSource(DictEnum.TORDER_SOURCE_1.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
|
|
|
kwoTradeOrderMapper.insert(order);
|
|
|
@@ -140,7 +137,7 @@ public class KwoTradeOrderService {
|
|
|
.setGoodsName(goodsDetail.getName()).setGoodsType(goodsDetail.getGoodsType()).setGoodsCode(goodsDetail.getCode())
|
|
|
.setGoodsTaxRate(goodsDetail.getTaxRate()).setGoodsSpec(goodsDetail.getSpec()).setGoodsThumb(goodsDetail.getThumb());
|
|
|
}
|
|
|
- if (Objects.isNull(order.getUnitPrice())){
|
|
|
+ if (Objects.isNull(order.getUnitPrice())) {
|
|
|
order.setUnitPrice(new BigDecimal("0.00"));
|
|
|
}
|
|
|
//单位信息
|
|
|
@@ -235,7 +232,7 @@ public class KwoTradeOrderService {
|
|
|
*/
|
|
|
public void addValetOrderDraft(ValetOrderDraftParam param) {
|
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
- order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
|
|
|
+ order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo())
|
|
|
.setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
|
|
|
.setSource(DictEnum.TORDER_SOURCE_2.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
|
|
|
kwoTradeOrderMapper.insert(order);
|
|
|
@@ -260,7 +257,7 @@ public class KwoTradeOrderService {
|
|
|
.setOrderSource(DictEnum.TORDER_SOURCE_1.getValue());
|
|
|
orderCheck(orderCheckDTO, false);
|
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
- order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
|
|
|
+ order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo())
|
|
|
.setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue())
|
|
|
.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_1.getValue()));
|
|
|
kwoTradeOrderMapper.insert(order);
|
|
|
@@ -364,7 +361,6 @@ public class KwoTradeOrderService {
|
|
|
* @Param param:
|
|
|
* @return: void
|
|
|
*/
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
public void addValetOrderSubmit(ValetOrderParam param) {
|
|
|
OrderCheckDTO orderCheck = BeanUtils.copyProperties(param, OrderCheckDTO.class);
|
|
|
getTopEnt(orderCheck, param.getUnitInfo());
|
|
|
@@ -375,7 +371,7 @@ public class KwoTradeOrderService {
|
|
|
contractCheck(contract);
|
|
|
param.setContractInfo(contract);
|
|
|
KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
|
|
|
- order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
|
|
|
+ order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(getOrderNo())
|
|
|
.setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_2.getValue());
|
|
|
String contractStatus = contract.getContractStatus();
|
|
|
if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_0.getValue())) {
|
|
|
@@ -394,6 +390,34 @@ public class KwoTradeOrderService {
|
|
|
addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成贸易订单号
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getOrderNo() {
|
|
|
+ Date date = new Date();
|
|
|
+ String key = OrderGenerateSeqNoUtils.getKey(RedisOrderGenerateEnum.TRADE_ORDER, OrderRuleEnum.TRADE_ORDER, date);
|
|
|
+ String lockKey = String.format(RedisConstant.TORDER_NO_GENERATE_KEY, DateUtils.formatDateToYYMMDD(date));
|
|
|
+ try {
|
|
|
+ if (Boolean.FALSE.equals(RedissonUtils.exists(key))) {
|
|
|
+ if (Boolean.FALSE.equals(RedissonUtils.tryLock(lockKey, 5L, 10L))) {
|
|
|
+ throw new BusinessException("业务繁忙,请稍后再试!");
|
|
|
+ }
|
|
|
+ DateTime dateTime = DateUtils.beginOfDay(date);
|
|
|
+ String maxOrderNo = kwoTradeOrderMapper.getMaxOrderNoByDate(dateTime);
|
|
|
+ if (StringUtils.isNotBlank(maxOrderNo)) {
|
|
|
+ Long maxNum = Long.valueOf(StringUtils.subStrFromIndexToEnd(maxOrderNo, 4));
|
|
|
+ RedissonUtils.setAtomicLong(key, maxNum, DateUtils.getSecondsDay());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return OrderGenerateSeqNoUtils.getOtherSeqNo(RedisOrderGenerateEnum.TRADE_ORDER, OrderRuleEnum.TRADE_ORDER);
|
|
|
+ } finally {
|
|
|
+ RedissonUtils.unlock(lockKey);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @desc: 合同校验
|
|
|
* @author: yzc
|