自动化立体仓库 - WMS系统
zyx
2024-02-02 00b8e7a256d8508043784f061a4afe5b1107d9aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.zy.asrs.service.impl;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.GlobleParameter;
import com.zy.asrs.mapper.PakoutMapper;
import com.zy.asrs.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.Date;
import java.util.List;
 
@Service("pakoutService")
public class PakoutServiceImpl extends ServiceImpl<PakoutMapper, Pakout> implements PakoutService {
    @Autowired
    private OrderService orderService;
 
    @Autowired
    private OrderDetlService orderDetlService;
 
    @Autowired
    private ManLocDetlService manLocDetlService;
 
    @Autowired
    private PlaService plaService;
 
    @Autowired
    private PlaQtyService plaQtyService;
 
    @Override
    public void deletePakout(String docNum) {
        Order order = orderService.selectByNo(docNum);
        if (Cools.isEmpty(order)){
            throw new RuntimeException("未查询到订单档案");
        }
        List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", docNum));
 
        for (OrderDetl orderDetl: orderDetls){
            if (orderDetl.getQty() > 0.0){
                throw new RuntimeException("拣货单已有出库任务,不可删除!");
            }
            orderDetl.setWorkQty(0.0D);
        }
 
       if (!orderDetlService.updateBatchById(orderDetls)){
           throw new RuntimeException("订单明细批量更新失败");
       }
       order.setSettle(1L);
       if (!orderService.updateById(order)){
           throw new RuntimeException("订单明细批量更新失败");
       }
 
       List<Pakout> pakouts = selectList(new EntityWrapper<Pakout>().eq("doc_num", docNum));
       for (Pakout pakout: pakouts){
 
           Pla pla = plaService.selectByBatchAndPackageNo(pakout.getBatch(), pakout.getBarcode());
           if(!Cools.isEmpty(pla)){
               pla.setQtyAnfme(pla.getQtyAnfme() - pakout.getAnfme());
               pla.setModifyTime(new Date());
               if(pla.getQtyAnfme() <= 0){
                   pla.setStatus(GlobleParameter.PLA_STATUS_1);
               }
               plaService.updateById(pla);
               plaQtyService.deleteById(pakout.getNodeId());
 
           }else {
               ManLocDetl manLocDetl = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>()
                       .eq("loc_no", pakout.getLocNo())
                       .eq("matnr", pakout.getMatnr()));
               manLocDetl.setStatus(1);
               if (!manLocDetlService.update(manLocDetl,new EntityWrapper<ManLocDetl>()
                       .eq("loc_no", pakout.getLocNo())
                       .eq("matnr", pakout.getMatnr()))){
                   throw new RuntimeException("库存状态更新失败");
               }
           }
       }
 
        if (!delete(new EntityWrapper<Pakout>().eq("doc_num",docNum))){
          throw new RuntimeException("拣货单删除失败");
      }
    }
 
    @Override
    @Transactional
    public void deletePakoutByWrkNo(String wrkNo) {
        Pakout pakout = this.selectById(wrkNo);
        //更新单据信息
        if(pakout.getCount() > 0){
            throw new CoolException("该条拣货信息已完成,无法删除");
        }
        OrderDetl orderDetl = orderDetlService.selectById(pakout.getDocId());
        orderDetl.setWorkQty(orderDetl.getWorkQty() - pakout.getAnfme());
        orderDetl.setUpdateTime(new Date());
        orderDetlService.updateById(orderDetl);
 
        Order order = orderService.selectByNo(pakout.getDocNum());
        List<OrderDetl> orderDetlList = orderDetlService.selectByOrderId(order.getId());
        //判断单据是否有正在作业的任务,true为没有
        boolean flag = true;
        for (OrderDetl od : orderDetlList){
            if(od.getWorkQty() + od.getQty() > 0){
                flag = false;
            }
        }
 
        if(flag){
            order.setSettle(1L);
            order.setUpdateTime(new Date());
            orderService.updateById(order);
        }
 
        //更新pla信息
        Pla pla = plaService.selectByBatchAndPackageNo(pakout.getBatch(), pakout.getBarcode());
        pla.setQtyAnfme(pla.getQtyAnfme() - pakout.getAnfme());
        pla.setStatus(GlobleParameter.PLA_STATUS_1);
        pla.setModifyTime(new Date());
        plaService.updateById(pla);
 
        //更新plaQty信息
        plaQtyService.deleteById(pakout.getNodeId());
 
        //删除拣货单
        this.deleteById(wrkNo);
 
    }
}