소스 검색

新增采购合同状态,采购终止接口

fgd 1 년 전
부모
커밋
0a91ce9d2e

+ 8 - 0
sd-business/src/main/java/com/sd/business/controller/purchase/PurchaseController.java

@@ -81,4 +81,12 @@ public class PurchaseController {
         return purchaseService.getPurchaseInStorageList();
     }
 
+    /**
+     * 采购终止
+     */
+    @PostMapping("/purchaseTermination")
+    public void purchaseTermination(@RequestBody BaseSelectDto dto) {
+        purchaseService.purchaseTermination(dto.getId());
+    }
+
 }

+ 46 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/enums/PurchaseStatusEnum.java

@@ -0,0 +1,46 @@
+package com.sd.business.entity.purchase.enums;
+
+import com.ruoyi.common.exception.ServiceException;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 采购状态
+ */
+@Getter
+@AllArgsConstructor
+public enum PurchaseStatusEnum {
+    DRAFT(0, "草稿"),
+    UNDER_REVIEW(10, "审批中"),
+    UNDER_PURCHASE(20, "采购中"),
+    HAVE_PURCHASE(30, "已采购"),
+    REJECT(40, "驳回"),
+    CANCELLATION(50, "已作废"),
+    TERMINATION(60, "已终止"),
+    ;
+
+    private static final Map<Integer, PurchaseStatusEnum> map = new HashMap<>();
+
+    static {
+        for (PurchaseStatusEnum purchaseStatusEnum : values()) {
+            map.put(purchaseStatusEnum.getKey(), purchaseStatusEnum);
+        }
+    }
+
+    private final Integer key;
+    private final String value;
+
+    /**
+     * 通过key获取名称
+     */
+    public static PurchaseStatusEnum getEnum(Integer key) {
+        PurchaseStatusEnum purchaseStatusEnum = map.get(key);
+        if (purchaseStatusEnum == null) {
+            throw new ServiceException("未知采购状态:" + key);
+        }
+        return purchaseStatusEnum;
+    }
+
+}

+ 5 - 0
sd-business/src/main/java/com/sd/business/entity/purchase/po/Purchase.java

@@ -32,6 +32,11 @@ public class Purchase extends BasePo {
     private Long applyBuyId;
 
     /**
+     * 采购状态
+     */
+    private Integer status;
+
+    /**
      * 供应商id
      */
     private Long supplierId;

+ 10 - 0
sd-business/src/main/java/com/sd/business/flow/PurchaseFlow.java

@@ -1,5 +1,6 @@
 package com.sd.business.flow;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.flow.enums.FlowStatusEnum;
@@ -9,6 +10,7 @@ import com.ruoyi.common.utils.SecurityUtils;
 import com.sd.business.entity.apply.po.ApplyBuy;
 import com.sd.business.entity.apply.po.ApplyBuyBom;
 import com.sd.business.entity.purchase.dto.PurchaseDto;
+import com.sd.business.entity.purchase.enums.PurchaseStatusEnum;
 import com.sd.business.entity.purchase.po.Purchase;
 import com.sd.business.entity.purchase.po.PurchaseBom;
 import com.sd.business.service.apply.ApplyBuyBomService;
@@ -51,6 +53,7 @@ public class PurchaseFlow extends FlowDelegate {
         PurchaseDto purchase = submitData.toJavaObject(PurchaseDto.class);
         purchase.setFlowStatus(FlowStatusEnum.IN_PROGRESS.getKey());
         purchase.setFlowId(flowId);
+        purchase.setStatus(PurchaseStatusEnum.UNDER_REVIEW.getKey());
 
         if (purchase.getId() == null) {
             purchaseService.add(purchase);
@@ -68,6 +71,7 @@ public class PurchaseFlow extends FlowDelegate {
         Purchase purchase = purchaseService.getById(businessId);
         purchase.setFlowStatus(FlowStatusEnum.PASS.getKey());
         purchase.setFlowId(flowId);
+        purchase.setStatus(PurchaseStatusEnum.UNDER_PURCHASE.getKey());
         purchaseService.updateById(purchase);
 
         Map<Long, PurchaseBom> purchaseBomMap = purchaseBomService.mapKEntity(
@@ -106,6 +110,7 @@ public class PurchaseFlow extends FlowDelegate {
         purchaseService.update(q -> q
                 .eq(BaseIdPo::getId, businessId)
                 .set(Purchase::getFlowStatus, flowStatus.getKey())
+                .set(Purchase::getStatus, PurchaseStatusEnum.DRAFT.getKey())
                 .set(BasePo::getUpdateTime, new Date())
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
         );
@@ -115,6 +120,7 @@ public class PurchaseFlow extends FlowDelegate {
     public void relaunch(Long flowId, Long businessId, FlowStatusEnum flowStatus, JSONObject submitData) {
         PurchaseDto purchase = submitData.toJavaObject(PurchaseDto.class);
         purchase.setFlowStatus(FlowStatusEnum.IN_PROGRESS.getKey());
+        purchase.setStatus(PurchaseStatusEnum.UNDER_REVIEW.getKey());
         purchaseService.edit(purchase);
     }
 
@@ -140,6 +146,10 @@ public class PurchaseFlow extends FlowDelegate {
         purchaseService.update(q -> q
                 .eq(BaseIdPo::getId, businessId)
                 .set(Purchase::getFlowStatus, flowStatus.getKey())
+                .set(Purchase::getStatus,
+                        ObjectUtil.equals(FlowStatusEnum.REJECT.getKey(), flowStatus.getKey()) ?
+                        PurchaseStatusEnum.REJECT.getKey() : PurchaseStatusEnum.CANCELLATION.getKey()
+                    )
                 .set(BasePo::getUpdateTime, new Date())
                 .set(BasePo::getUpdateUser, SecurityUtils.getUserId())
         );

+ 6 - 0
sd-business/src/main/java/com/sd/business/service/purchase/PurchaseService.java

@@ -58,4 +58,10 @@ public interface PurchaseService extends BaseService<Purchase> {
      * @param inOutStorageBomList
      */
     void updatePurchaseBomArrivalQuantity(Long purchaseId, List<InOutStorageBom> inOutStorageBomList);
+
+    /**
+     * 采购合同终止
+     * @param id
+     */
+    void purchaseTermination(Long id);
 }

+ 3 - 0
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchaseBomServiceImpl.java

@@ -17,6 +17,7 @@ import com.sd.business.entity.purchase.dto.PurchaseBoardSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseBomDetailsSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseBomSelectDto;
 import com.sd.business.entity.purchase.dto.PurchaseInTransitBomSelectDto;
+import com.sd.business.entity.purchase.enums.PurchaseStatusEnum;
 import com.sd.business.entity.purchase.po.Purchase;
 import com.sd.business.entity.purchase.po.PurchaseBom;
 import com.sd.business.entity.purchase.vo.*;
@@ -130,6 +131,7 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
     @Override
     public Page<PurchaseInTransitBomVo> getPurchaseInTransitBomPage(PurchaseInTransitBomSelectDto dto) {
         IWrapper<PurchaseInTransitBomVo> wrapper = IWrapper.getWrapper();
+        wrapper.eq("p", Purchase::getStatus, PurchaseStatusEnum.UNDER_PURCHASE.getKey());
         wrapper.like("p", Purchase::getCode, dto.getPurchaseCode());
         wrapper.like("bs", BomSpec::getCode, dto.getBomSpecCode());
         wrapper.like("bs", BomSpec::getName, dto.getBomSpecName());
@@ -192,6 +194,7 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
             // 获取在途总数
             IWrapper<PurchaseBom> wrapper = getWrapper();
             wrapper.eq("pb", PurchaseBom::getBomSpecId, bomSpecId);
+            wrapper.eq("p", Purchase::getStatus, PurchaseStatusEnum.UNDER_PURCHASE.getKey());
             wrapper.apply("pb.purchase_quantity > pb.arrival_quantity");
             purchaseBomBoard.setInTransitSum(this.baseMapper.getPurchaseBomInTransitSum(wrapper));
 

+ 22 - 1
sd-business/src/main/java/com/sd/business/service/purchase/impl/PurchaseServiceImpl.java

@@ -15,6 +15,7 @@ import com.sd.business.entity.apply.po.ApplyBuyBom;
 import com.sd.business.entity.in.po.InOutStorageBom;
 import com.sd.business.entity.purchase.dto.PurchaseDto;
 import com.sd.business.entity.purchase.dto.PurchaseSelectDto;
+import com.sd.business.entity.purchase.enums.PurchaseStatusEnum;
 import com.sd.business.entity.purchase.po.Purchase;
 import com.sd.business.entity.purchase.po.PurchaseBom;
 import com.sd.business.entity.purchase.vo.PurchaseBomVo;
@@ -240,6 +241,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
         IWrapper<Purchase> wrapper = getWrapper();
         wrapper.eq("p", Purchase::getFlowStatus, FlowStatusEnum.PASS.getKey());
         wrapper.eq("p", Purchase::getStorageStatus, StatusConstant.NO);
+        wrapper.eq("p", Purchase::getStatus, PurchaseStatusEnum.UNDER_PURCHASE.getKey());
         wrapper.orderByDesc(Purchase::getId);
         return this.baseMapper.getPurchaseInStorageList(wrapper);
     }
@@ -255,10 +257,29 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase> i
                 long count = purchaseBomService.count(q -> q.eq(PurchaseBom::getPurchaseId, purchaseId).apply("purchase_quantity > arrival_quantity"));
                 if (count == 0) {
                     // 如果为0,将入库状态设置为已完成
-                    this.update(q -> q.eq(Purchase::getId, purchaseId).set(Purchase::getStorageStatus, StatusConstant.YES));
+                    this.update(q -> q.set(Purchase::getStorageStatus, StatusConstant.YES)
+                            .set(Purchase::getStatus, PurchaseStatusEnum.HAVE_PURCHASE.getKey())
+                            .eq(Purchase::getId, purchaseId));
                 }
             }
         }
+    }
 
+    @Override
+    public void purchaseTermination(Long id) {
+        Purchase purchase = this.getById(id);
+        if (purchase == null) {
+            return;
+        }
+        purchase.setStatus(PurchaseStatusEnum.TERMINATION.getKey());
+        purchase.setStorageStatus(StatusConstant.YES);
+        this.updateById(purchase);
+
+        // 合同终止将bom到货数量设置为采购数量
+        List<PurchaseBom> purchaseBomList = purchaseBomService.list(q -> q.eq(PurchaseBom::getPurchaseId, id).apply("purchase_quantity > arrival_quantity"));
+        for (PurchaseBom purchaseBom : purchaseBomList) {
+            purchaseBom.setArrivalQuantity(purchaseBom.getPurchaseQuantity());
+        }
+        purchaseBomService.updateBatchById(purchaseBomList);
     }
 }

+ 1 - 0
sd-business/src/main/resources/mapper/purchase/PurchaseBomMapper.xml

@@ -96,6 +96,7 @@
             ifnull(sum(pb.purchase_quantity - pb.arrival_quantity), 0)
         from
             purchase_bom pb
+            left join purchase p on pb.purchase_id = p.id
             ${ew.customSqlSegment}
     </select>