杨凯
2023-10-17 e7c9fc40786f387f2c0d65e10294317480b0f621
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
package com.consum.base.core;
 
import com.consum.base.core.po.WhFormInventory;
import com.consum.base.core.tools.SqlParameter;
import com.consum.model.po.*;
import com.walker.infrastructure.utils.NumberGenerator;
import com.walker.jdbc.service.BaseServiceImpl;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
/**
 * 进出库 业务处 类
 */
@Service
public class WarehouseBusinessService extends BaseServiceImpl {
 
 
    private WarehouseCoreService coreService;
 
    /**
     * 执行采购入库
     * 第一步:通过采购单【WH_FORM_PROCURE】查询采购单型号【WH_FORM_PROCURE_MODEL】数据
     * 第二步:组织CheckWarehouseParam,调用WarehouseCoreService.unifyCheck()执行入库
     * 第三步:更新采购单型号【WH_FORM_PROCURE_MODEL】库存物品编号字段及主表WH_FORM_PROCURE状态信息
     * 第四步:更新 进出库流水(仓库)【WH_GOODS_DETAILS】
     * @param procure
     */
    public void doProcure(WhFormProcure procure){
 
        String sql = "SELECT\n" +
                "    * \n" +
                "FROM\n" +
                "    WH_FORM_PROCURE_MODEL A \n" +
                "WHERE\n" +
                "    A.WH_FORM_PROCURE_ID = : PROCURE_ID";
 
        List<WhFormProcureModel>  modelList = this.select(sql,new SqlParameter().put("PROCURE_ID",procure.getId()),new WhFormProcureModel());
 
        for (WhFormProcureModel model : modelList){
            CheckWarehouseParam param = new CheckWarehouseParam();
            param.setIsCheckIn(true);
            param.setWarehouseId(procure.getId());
            param.setCount(model.getCounts());
            param.setFirstInputCode(model.getId().toString());
            param.setFirst_input_type(1);
            param.setModelId(model.getBaseGoodsModelsId());
            CheckWarehouseResult result =  coreService.unifyCheck(param)[0];
 
 
            WhGoodsDetails details = new WhGoodsDetails();
            details.setId(result.getWhGoods().getFirstInputHisId());
            details.setBusinessFormId(procure.getId());
            details.setBusinessFormCode(procure.getBusinessFormCode());
            details.setBusinessFormName(procure.getWarehouseName() + "采购入库单:" + details.getBusinessFormCode());
            details.setInitialCount(result.getInitial_count());
            details.setThisType(1);
            details.setEndCount(result.getEnd_count());
            details.setWarehouseId(param.getWarehouseId());
            details.setWarehouseName(procure.getWarehouseName());
            details.setClassification(1);
            details.setOperatorId(procure.getOperatorId2());
            details.setOperatorName(procure.getOperatorName2());
            details.setDealTime(procure.getIncomeTime());
            details.setWhGoodsId(result.getWhGoods().getId());
 
            this.insert(details);
 
 
            model.setInWhGoodsDetailsId(details.getId());
            update(model);
 
            procure.setStates(2);
            update(procure);
        }
    }
 
    /**
     * 执行调拨出库操作
     * 1. 通过调拨单【WH_FORM_TRANSFER】、调拨单物品【WH_FORM_TRANSFER_GOODS】组织CheckWarehouseParam
     * 2. 调用调用WarehouseCoreService.unifyCheck()执行出库
     * 3. 更新进出库流水(仓库)【WH_GOODS_DETAILS】
     * 4. 更新调拨单【WH_FORM_TRANSFER】为待接收,更新调拨单物品【WH_FORM_TRANSFER_MODEL】出库流水ID
     * @param transfer
     */
    public void doTransferOutPut(WhFormTransfer transfer){
        String sql = "SELECT\n" +
                "    * \n" +
                "FROM\n" +
                "    WH_FORM_TRANSFER_GOODS A \n" +
                "WHERE\n" +
                "    A.WH_FORM_TRANSFER_ID = : TRANSFER_ID";
 
        List<WhFormTransferGoods>  goodsList = this.select(sql,new SqlParameter()
                .put("TRANSFER_ID",transfer.getId()),new WhFormTransferGoods());
 
        for (WhFormTransferGoods goods : goodsList){
            CheckWarehouseParam param = new CheckWarehouseParam();
            param.setIsCheckIn(false);
            param.setWarehouseId(transfer.getOutWarehouseId());
            param.setCount(goods.getCounts());
            CheckWarehouseResult[] results =  coreService.unifyCheck(param);
            for (CheckWarehouseResult result : results){
                WhFormTransferModel model = new WhFormTransferModel();
                model.setId(NumberGenerator.getLongSequenceNumber());
                model.setWhFormTransferId(transfer.getId());
                model.setWorehouseCount(result.getInitial_count());
                model.setCounts(result.getInitial_count() - result.getInitial_count());
                model.setOutWhGoodsDetailsId(result.getWhGoods().getId());
                model.setWhFormTransferGoodsId(goods.getId());
                insert(model);
 
                WhGoodsDetails details = new WhGoodsDetails();
                details.setBusinessFormId(transfer.getId());
                details.setBusinessFormCode(transfer.getBusinessFormCode());
                details.setBusinessFormName("调拨出库单:" + transfer.getBusinessFormCode());
                details.setInitialCount(result.getInitial_count());
                details.setThisType(2);
                details.setThisCount(result.getInitial_count() - result.getEnd_count());
                details.setEndCount(result.getEnd_count());
                details.setWarehouseId(result.getWhGoods().getWarehouseId());
                details.setWarehouseName(result.getWhGoods().getWarehouseName());
                details.setClassification(5);
                details.setOperatorId(transfer.getOperatorId());
                details.setOperatorName(transfer.getOperatorName());
                details.setDealTime(transfer.getOutputTime());
                details.setWhGoodsId(result.getWhGoods().getId());
                this.insert(details);
            }
        }
    }
 
    /**
     * 执行调拨入库操作
     * 1. 通过调拨单【WH_FORM_TRANSFER】、调拨单物品【WH_FORM_TRANSFER_GOODS】组织CheckWarehouseParam
     * 2. 调用调用WarehouseCoreService.unifyCheck()执行出库
     * 3. 更新进出库流水(仓库)【WH_GOODS_DETAILS】
     * 4. 更新调拨单【WH_FORM_TRANSFER】为已入库,,更新调拨单物品【WH_FORM_TRANSFER_MODEL】入库流水ID
     * @param transfer
     */
    public void doTransferInPut(WhFormTransfer transfer){
 
        String sql = "SELECT\n" +
                "    * \n" +
                "FROM\n" +
                "    WH_FORM_TRANSFER_GOODS A \n" +
                "WHERE\n" +
                "    A.WH_FORM_TRANSFER_ID = : TRANSFER_ID";
 
        List<WhFormTransferGoods>  goodsList = this.select(sql,new SqlParameter()
                                    .put("TRANSFER_ID",transfer.getId()),new WhFormTransferGoods());
 
    }
 
    /**
     * 创建盘点任务,创建盘点任务时,根据当时时间会将库存数据冻结一份放入待盘点单。
     * 1.从库存物品【WH_GOODS】中按照仓库将数据放入盘点单物品【WH_FORM_INVENTORY_GOODS】,主要是
     * 期初数量INIT_COUNTS,和 库存物品编号WH_GOODS_ID字段
     * @param inventory
     */
    public void createInventory(WhFormInventory inventory){
 
    }
 
}