home 2 лет назад
Родитель
Сommit
b8745cd5bf

+ 9 - 1
hx-common/library-supply/src/main/java/com/fjhx/service/ApplyPurchaseService.java

@@ -33,7 +33,7 @@ public interface ApplyPurchaseService extends BaseService<ApplyPurchase> {
     void initiateSubscription(List<ApplyPurchase> applyPurchaseList, Long flowLinkNo, String code);
 
     /**
-     * 发起申购(自动生成申购单号)
+     * 发起申购(指定前缀自动生成申购单号)
      *
      * @param applyPurchaseList 申购列表
      * @param flowLinkNo        流程关联编号
@@ -42,6 +42,14 @@ public interface ApplyPurchaseService extends BaseService<ApplyPurchase> {
     void initiateSubscriptionAuto(List<ApplyPurchase> applyPurchaseList, Long flowLinkNo, String codePrefix);
 
     /**
+     * 发起申购(默认前缀自动生成申购单号)
+     *
+     * @param applyPurchaseList 申购列表
+     * @param flowLinkNo        流程关联编号
+     */
+    void initiateSubscriptionAuto(List<ApplyPurchase> applyPurchaseList, Long flowLinkNo);
+
+    /**
      * 审批通过
      *
      * @param flowLinkNo 流程关联编号

+ 22 - 5
hx-common/library-supply/src/main/java/com/fjhx/service/OrderService.java

@@ -17,12 +17,29 @@ import java.util.List;
 public interface OrderService extends BaseService<Order> {
 
     /**
-     * 创建订单
+     * 创建订单/发起订单流程
      *
-     * @param supplierId
-     * @param applyPurchaseList
-     * @param codePrefix
+     * @param supplierId        供应商id
+     * @param applyPurchaseList 申购列表
+     * @param code              订单号
      */
-    void createOrder(Long supplierId, List<ApplyPurchase> applyPurchaseList, String codePrefix);
+    void createOrder(Long supplierId, List<ApplyPurchase> applyPurchaseList, String code);
+
+    /**
+     * 创建订单/发起订单流程(指定前缀自动生成申购)
+     *
+     * @param supplierId        供应商id
+     * @param applyPurchaseList 申购列表
+     * @param codePrefix        编码前缀
+     */
+    void createOrderAuth(Long supplierId, List<ApplyPurchase> applyPurchaseList, String codePrefix);
+
+    /**
+     * 创建订单/发起订单流程(默认前缀自动生成申购)
+     *
+     * @param supplierId        供应商id
+     * @param applyPurchaseList 申购列表
+     */
+    void createOrderAuth(Long supplierId, List<ApplyPurchase> applyPurchaseList);
 
 }

+ 47 - 38
hx-common/library-supply/src/main/java/com/fjhx/service/impl/ApplyPurchaseServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fjhx.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.BaseEntity;
@@ -61,40 +62,24 @@ public class ApplyPurchaseServiceImpl extends ServiceImpl<ApplyPurchaseMapper, A
 
     @Override
     public void initiateSubscription(List<ApplyPurchase> applyPurchaseList, Long flowLinkNo, String code) {
-        String tenantId = AuthUtil.getTenantId();
-
-        Boolean flag = redisLockClient.lockFair(LibrarySupplyLockConstant.APPLY_PURCHASE_CODE_LOCK + tenantId,
-                () -> {
-
-                    int count = count(Wrappers.<ApplyPurchase>lambdaQuery()
-                            .eq(ApplyPurchase::getCode, code)
-                            .eq(BaseEntity::getTenantId, tenantId));
-                    Assert.eqZero(count, "申购单号已存在");
-
-                    updateApplyPurchaseInApproval(applyPurchaseList, flowLinkNo, code);
-
-                    return true;
-                });
-
-        Assert.eqTrue(flag, ErrorMsgConstant.SYSTEM_BUSY_ERROR);
+        initiateSubscriptionFun(applyPurchaseList, flowLinkNo, () -> {
+            int count = count(Wrappers.<ApplyPurchase>lambdaQuery()
+                    .eq(ApplyPurchase::getCode, code)
+                    .eq(BaseEntity::getTenantId, AuthUtil.getTenantId()));
+            Assert.eqZero(count, "申购单号已存在");
+            return code;
+        });
     }
 
     @Override
     public void initiateSubscriptionAuto(List<ApplyPurchase> applyPurchaseList, Long flowLinkNo, String codePrefix) {
+        initiateSubscriptionFun(applyPurchaseList, flowLinkNo, () -> createApplyPurchaseCode(codePrefix));
+    }
 
-        String tenantId = AuthUtil.getTenantId();
-
-        Boolean flag = redisLockClient.lockFair(LibrarySupplyLockConstant.APPLY_PURCHASE_CODE_LOCK + tenantId,
-                () -> {
-
-                    String code = createApplyPurchaseCode(codePrefix);
-
-                    updateApplyPurchaseInApproval(applyPurchaseList, flowLinkNo, code);
-
-                    return true;
-                });
-
-        Assert.eqTrue(flag, ErrorMsgConstant.SYSTEM_BUSY_ERROR);
+    @Override
+    public void initiateSubscriptionAuto(List<ApplyPurchase> applyPurchaseList, Long flowLinkNo) {
+        String codePrefix = "PA" + DateUtil.format(new Date(), "yyMMdd-");
+        initiateSubscriptionAuto(applyPurchaseList, flowLinkNo, codePrefix);
     }
 
     @Override
@@ -229,6 +214,38 @@ public class ApplyPurchaseServiceImpl extends ServiceImpl<ApplyPurchaseMapper, A
     }
 
     /**
+     * 发起申购
+     *
+     * @param applyPurchaseList 申购列表
+     * @param flowLinkNo        流程关联编号
+     * @param fun               获取申购单号方法
+     */
+    private void initiateSubscriptionFun(List<ApplyPurchase> applyPurchaseList, Long flowLinkNo, java.util.function.Supplier<String> fun) {
+
+        String tenantId = AuthUtil.getTenantId();
+
+        Boolean flag = redisLockClient.lockFair(LibrarySupplyLockConstant.APPLY_PURCHASE_CODE_LOCK + tenantId,
+                () -> {
+
+                    String code = fun.get();
+
+                    applyPurchaseList.forEach(applyPurchase -> {
+                        // 赋值申购单号
+                        applyPurchase.setCode(code);
+                        // 状态改为审批中
+                        applyPurchase.setStatus(ApplyPurchaseStatusEnum.IN_APPROVAL.getValue());
+                        // 赋值流程id
+                        applyPurchase.setFlowLinkNo(flowLinkNo);
+                    });
+                    updateBatchById(applyPurchaseList);
+
+                    return true;
+                });
+
+        Assert.eqTrue(flag, ErrorMsgConstant.SYSTEM_BUSY_ERROR);
+    }
+
+    /**
      * 自动生成申购单编号
      */
     public String createApplyPurchaseCode(String codePrefix) {
@@ -256,15 +273,7 @@ public class ApplyPurchaseServiceImpl extends ServiceImpl<ApplyPurchaseMapper, A
      * 赋值申购单状态为审批中
      */
     private void updateApplyPurchaseInApproval(List<ApplyPurchase> applyPurchaseList, Long flowLinkNo, String code) {
-        applyPurchaseList.forEach(applyPurchase -> {
-            // 赋值申购单号
-            applyPurchase.setCode(code);
-            // 状态改为审批中
-            applyPurchase.setStatus(ApplyPurchaseStatusEnum.IN_APPROVAL.getValue());
-            // 赋值流程id
-            applyPurchase.setFlowLinkNo(flowLinkNo);
-        });
-        updateBatchById(applyPurchaseList);
+
     }
 
     /**

+ 62 - 13
hx-common/library-supply/src/main/java/com/fjhx/service/impl/OrderServiceImpl.java

@@ -1,18 +1,27 @@
 package com.fjhx.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.BaseEntity;
+import com.fjhx.constants.ErrorMsgConstant;
 import com.fjhx.constants.LibrarySupplyLockConstant;
 import com.fjhx.entity.ApplyPurchase;
 import com.fjhx.entity.Order;
+import com.fjhx.entity.Supplier;
+import com.fjhx.enums.OrderStatusEnum;
 import com.fjhx.mapper.OrderMapper;
+import com.fjhx.service.ApplyPurchaseService;
 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.secure.utils.AuthUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -29,20 +38,66 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Resource
     private RedisLockClient redisLockClient;
 
+    @Autowired
+    private SupplierService supplierService;
+
+    @Autowired
+    private ApplyPurchaseService applyPurchaseService;
+
     @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();
 
-        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();
         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) {
             return builder.append("001").toString();