|
@@ -1,18 +1,27 @@
|
|
package com.fjhx.service.impl;
|
|
package com.fjhx.service.impl;
|
|
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.fjhx.base.BaseEntity;
|
|
import com.fjhx.base.BaseEntity;
|
|
|
|
+import com.fjhx.constants.ErrorMsgConstant;
|
|
import com.fjhx.constants.LibrarySupplyLockConstant;
|
|
import com.fjhx.constants.LibrarySupplyLockConstant;
|
|
import com.fjhx.entity.ApplyPurchase;
|
|
import com.fjhx.entity.ApplyPurchase;
|
|
import com.fjhx.entity.Order;
|
|
import com.fjhx.entity.Order;
|
|
|
|
+import com.fjhx.entity.Supplier;
|
|
|
|
+import com.fjhx.enums.OrderStatusEnum;
|
|
import com.fjhx.mapper.OrderMapper;
|
|
import com.fjhx.mapper.OrderMapper;
|
|
|
|
+import com.fjhx.service.ApplyPurchaseService;
|
|
import com.fjhx.service.OrderService;
|
|
import com.fjhx.service.OrderService;
|
|
|
|
+import com.fjhx.service.SupplierService;
|
|
|
|
+import com.fjhx.utils.Assert;
|
|
import org.springblade.core.redis.lock.RedisLockClient;
|
|
import org.springblade.core.redis.lock.RedisLockClient;
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
import org.springblade.core.secure.utils.AuthUtil;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -29,20 +38,66 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
@Resource
|
|
@Resource
|
|
private RedisLockClient redisLockClient;
|
|
private RedisLockClient redisLockClient;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private SupplierService supplierService;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ApplyPurchaseService applyPurchaseService;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
- public void createOrder(Long supplierId, List<ApplyPurchase> applyPurchaseList, String codePrefix) {
|
|
|
|
|
|
+ public void createOrder(Long supplierId, List<ApplyPurchase> applyPurchaseList, String code) {
|
|
|
|
+ createOrderFun(supplierId, applyPurchaseList, () -> {
|
|
|
|
+ int count = count(Wrappers.<Order>lambdaQuery()
|
|
|
|
+ .eq(Order::getCode, code)
|
|
|
|
+ .eq(BaseEntity::getTenantId, AuthUtil.getTenantId()));
|
|
|
|
+ Assert.eqZero(count, "订号已存在");
|
|
|
|
+ return code;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
+ public void createOrderAuth(Long supplierId, List<ApplyPurchase> applyPurchaseList, String codePrefix) {
|
|
|
|
+ createOrderFun(supplierId, applyPurchaseList, () -> createOrderCode(codePrefix));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void createOrderAuth(Long supplierId, List<ApplyPurchase> applyPurchaseList) {
|
|
|
|
+ String codePrefix = "PO" + DateUtil.format(new Date(), "yyMMdd-");
|
|
|
|
+ createOrderFun(supplierId, applyPurchaseList, () -> createOrderCode(codePrefix));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 生成订单
|
|
|
|
+ *
|
|
|
|
+ * @param supplierId 供应商id
|
|
|
|
+ * @param applyPurchaseList 申购列表
|
|
|
|
+ * @param fun 获取订单单号方法
|
|
|
|
+ */
|
|
|
|
+ private void createOrderFun(Long supplierId, List<ApplyPurchase> applyPurchaseList, java.util.function.Supplier<String> fun) {
|
|
String tenantId = AuthUtil.getTenantId();
|
|
String tenantId = AuthUtil.getTenantId();
|
|
|
|
|
|
- Boolean flag = redisLockClient.lockFair(LibrarySupplyLockConstant.ORDER_CODE_LOCK + tenantId,
|
|
|
|
- () -> {
|
|
|
|
|
|
+ // 获取供应商账期
|
|
|
|
+ Supplier supplier = supplierService.getById(supplierId);
|
|
|
|
+ Integer accountPeriod = supplier.getAccountPeriod();
|
|
|
|
+
|
|
|
|
+ Order order = redisLockClient.lockFair(LibrarySupplyLockConstant.ORDER_CODE_LOCK + tenantId, () -> {
|
|
|
|
+
|
|
|
|
+ String code = fun.get();
|
|
|
|
|
|
- String orderCode = createOrderCode(codePrefix);
|
|
|
|
|
|
+ Order orderTemp = new Order();
|
|
|
|
+ orderTemp.setSupplierId(supplierId);
|
|
|
|
+ orderTemp.setAccountPeriod(accountPeriod);
|
|
|
|
+ orderTemp.setCode(code);
|
|
|
|
+ orderTemp.setStatus(OrderStatusEnum.IN_APPROVAL.getValue());
|
|
|
|
+ save(orderTemp);
|
|
|
|
|
|
- return true;
|
|
|
|
- });
|
|
|
|
|
|
+ return orderTemp;
|
|
|
|
+ });
|
|
|
|
|
|
|
|
+ Assert.notEmpty(order, ErrorMsgConstant.SYSTEM_BUSY_ERROR);
|
|
|
|
|
|
|
|
+ // 赋值申购单属性
|
|
|
|
+ applyPurchaseService.flowOrder(applyPurchaseList, order.getId(), order.getCode(), supplierId, accountPeriod);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -52,13 +107,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
StringBuilder builder = new StringBuilder();
|
|
StringBuilder builder = new StringBuilder();
|
|
builder.append(codePrefix);
|
|
builder.append(codePrefix);
|
|
|
|
|
|
- Order order = getOne(Wrappers.<Order>lambdaQuery()
|
|
|
|
- .select(Order::getCode)
|
|
|
|
- .eq(BaseEntity::getTenantId, AuthUtil.getTenantId())
|
|
|
|
- .likeRight(Order::getCode, codePrefix)
|
|
|
|
- .orderByDesc(Order::getCode)
|
|
|
|
- .last("limit 1")
|
|
|
|
- );
|
|
|
|
|
|
+ Order order = getOne(Wrappers.<Order>lambdaQuery().select(Order::getCode).eq(BaseEntity::getTenantId, AuthUtil.getTenantId()).likeRight(Order::getCode, codePrefix).orderByDesc(Order::getCode).last("limit 1"));
|
|
|
|
|
|
if (order == null) {
|
|
if (order == null) {
|
|
return builder.append("001").toString();
|
|
return builder.append("001").toString();
|