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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
package com.consum.base.controller;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
import com.consum.base.service.FinSysTenantService;
import com.consum.model.po.FinSysTenant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import com.consum.base.BaseController;
import com.consum.base.core.type.StatesType;
import com.consum.base.core.utils.CommonUtil;
import com.consum.base.pojo.BaseWarehouseParam;
import com.consum.base.pojo.query.WarehouseQry;
import com.consum.base.service.BaseWarehouseService;
import com.consum.base.service.LWhGoodsService;
import com.consum.model.po.BaseWarehouse;
import com.consum.model.po.FinSysTenantUser;
import com.consum.model.po.LWhGoods;
import com.walker.db.page.GenericPager;
import com.walker.infrastructure.utils.CollectionUtils;
import com.walker.infrastructure.utils.StringUtils;
import com.walker.web.ResponseValue;
 
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
 
/**
 * @Description 仓库管理
 * @Author 卢庆阳
 * @Date 2023/10/26
 */
@Api(value = "仓库管理", tags = "仓库管理")
@RestController
@RequestMapping("/pc/base/warehouse")
@Slf4j
public class BaseWarehouseController extends BaseController {
 
    @Autowired
    private BaseWarehouseService baseWarehouseService;
 
    @Autowired
    private LWhGoodsService lWhGoodsService;
 
    @Autowired
    private FinSysTenantService finSysTenantService;
 
    /**
     * @Description 新增
     * @Author 卢庆阳
     * @Date 2023/10/26
     */
    @PostMapping("/add")
    public ResponseValue add() {
        BaseWarehouseParam param = CommonUtil.getObjFromReqBody(BaseWarehouseParam.class);
        BaseWarehouseParam param2 = new BaseWarehouseParam();
        CommonUtil.copyProperties(param, param2);
        param = param2;
 
        if (StringUtils.isEmpty(param.getWarehouseName())) {
            return ResponseValue.error("仓库名称为空");
        }
        Long agencyId = param.getAgencyId();
        BaseWarehouse baseWarehouse = new BaseWarehouse();
        baseWarehouse.setAgencyId(agencyId);
        List<BaseWarehouse> select = baseWarehouseService.select(baseWarehouse);
        if (!CollectionUtils.isEmpty(select)) {
            return ResponseValue.error("该机构已有仓库不能继续新增!");
        }
 
        int result = baseWarehouseService.add(param);
        if (result > 0) {
            return ResponseValue.success(1);
        }
        return ResponseValue.error("新增失败!");
    }
 
    // 供产品导数据临时用(可删)
    public String add1(BaseWarehouseParam param) {
        BaseWarehouseParam param2 = new BaseWarehouseParam();
        CommonUtil.copyProperties(param, param2);
        param = param2;
 
        if (StringUtils.isEmpty(param.getWarehouseName())) {
            return "仓库名称为空";
        }
        Long agencyId = param.getAgencyId();
        BaseWarehouse baseWarehouse = new BaseWarehouse();
        baseWarehouse.setAgencyId(agencyId);
        List<BaseWarehouse> select = baseWarehouseService.select(baseWarehouse);
        if (!CollectionUtils.isEmpty(select)) {
            return "该机构已有仓库不能继续新增!";
        }
        int result = baseWarehouseService.add(param);
        if (result > 0) {
            return "1";
        }
        return "新增失败!";
    }
 
    //供产品导数据临时用(可删)
    //@PostMapping("/addCk")
    public String addCk() {
        int ok = 0;
        int isNull = 0;
        int bnxz = 0;
        int err = 0;
        // 查询所有的机构
        FinSysTenant finSysTenant = new FinSysTenant();
        List<FinSysTenant> finSysTenants = finSysTenantService.selectAll(finSysTenant);
        for (FinSysTenant fst : finSysTenants) {
            // 组装仓库数据
            BaseWarehouseParam baseWarehouseParam = new BaseWarehouseParam();
            baseWarehouseParam.setWarehouseName(fst.getName() + "仓库");
            baseWarehouseParam.setAdress("");
            baseWarehouseParam.setAgencyId(fst.getId());
            baseWarehouseParam.setClassificationCode("29");
            baseWarehouseParam.setStates(1);
            // 调用原本的新增接口新增仓库
            String resSta = add1(baseWarehouseParam);
            if("1".equals(resSta)){
                ok++;
            }else if("仓库名称为空".equals(resSta)){
                isNull++;
            }else if("该机构已有仓库不能继续新增!".equals(resSta)){
                bnxz++;
            }else if("新增失败!".equals(resSta)){
                err++;
            }
        }
        log.info("ok:"+ok);
        log.info("isNull:"+isNull);
        log.info("bnxz:"+bnxz);
        log.info("err:"+err);
        return "新增仓库..."+"##ok:"+ok+"##isNull:"+isNull+"##bnxz:"+bnxz+"##err:"+err;
    }
 
 
    /**
     * @Description 仓库列表查询
     * @Author 卢庆阳
     * @Date 2023/10/26
     */
    @GetMapping("/list")
    public ResponseValue queryList() {
        BaseWarehouseParam param = CommonUtil.getObjFromReq(BaseWarehouseParam.class);
        BaseWarehouseParam param2 = new BaseWarehouseParam();
        CommonUtil.copyProperties(param, param2);
        param = param2;
 
        FinSysTenantUser currentUser = this.getSysInfo();
        if (currentUser == null) {
            return ResponseValue.error("登录用户信息不存在");
        }
        param.setAgencyId(Long.valueOf(currentUser.getTenantId()));
        GenericPager<BaseWarehouse> pager = baseWarehouseService.queryList(param, currentUser);
        return ResponseValue.success(pager);
    }
 
    /**
     * @Description 编辑(修改状态)
     * @Author 卢庆阳
     * @Date 2023/10/26
     */
    @PostMapping("/edit")
    public ResponseValue edit() {
        BaseWarehouse baseWarehouse = CommonUtil.getObjFromReqBody(BaseWarehouse.class);
        BaseWarehouse param2 = new BaseWarehouse();
        CommonUtil.copyProperties(baseWarehouse, param2);
        baseWarehouse = param2;
 
        Long id = baseWarehouse.getId();
        if (id == null || id <= 0) {
            return ResponseValue.error("编辑的仓库不存在");
        }
        if (StringUtils.isEmpty(baseWarehouse.getWarehouseName())) {
            return ResponseValue.error("仓库名称为空");
        }
 
        int num = baseWarehouseService.updateBaseWarehouse(baseWarehouse);
        return num > 0 ? ResponseValue.success(1) : ResponseValue.error("编辑失败!");
    }
 
    /**
     * 根据仓库id查询仓库详情
     *
     * @author 卢庆阳
     * @Date 2023/10/26
     */
    @GetMapping("/detail")
    public ResponseValue getById(Long id) {
        if (id == null) {
            return ResponseValue.error("仓库id为空");
        }
        BaseWarehouse baseWarehouse = baseWarehouseService.getById(id);
        if (baseWarehouse == null) {
            return ResponseValue.error("查询失败!");
        }
        return ResponseValue.success("查询成功!", baseWarehouse);
    }
 
    /**
     * @Description 根据id删除仓库
     * @Author 卢庆阳
     * @Date 2023/10/26
     */
    @DeleteMapping("/del")
    public ResponseValue updateById() {
        BaseWarehouse baseWarehouse = CommonUtil.getObjFromReqBody(BaseWarehouse.class);
        BaseWarehouse param2 = new BaseWarehouse();
        CommonUtil.copyProperties(baseWarehouse, param2);
        baseWarehouse = param2;
 
        if (baseWarehouse.getId() == null) {
            return ResponseValue.error("仓库id为空");
        }
        Long id = baseWarehouse.getId();
        LWhGoods lWhGoods = new LWhGoods();
        lWhGoods.setWarehouseId(id);
        List<LWhGoods> select = lWhGoodsService.select(lWhGoods);
        if (!CollectionUtils.isEmpty(select)) {
            return ResponseValue.error("该仓库正在使用,不能删除");
        }
        int num = baseWarehouseService.updateById(baseWarehouse);
 
        return num > 0 ? ResponseValue.success(1) : ResponseValue.error("删除失败!");
    }
 
    /**
     * @Description 根据机构id查询机构仓库
     * @Author 卢庆阳
     * @Date 2023/10/27
     */
    @GetMapping("/select/tenant_warehouse")
    public ResponseValue getByAgencyId(Long agencyId) {
        if (agencyId == null) {
            return ResponseValue.success(new ArrayList<>());
        }
        List<BaseWarehouse> list = baseWarehouseService.getBaseWareHouseList(agencyId, StatesType.NORMAL.getValue());
        if (list == null) {
            return ResponseValue.error("查询失败!");
        }
        return ResponseValue.success("查询成功!", list);
    }
 
    @ApiOperation(value = "根据仓库id和型号id 查询库存", notes = "根据仓库id和型号id 查询库存")
    @ApiImplicitParams({@ApiImplicitParam(name = "warehouseQry", value = "仓库id和型号id", required = true,
            dataType = "WarehouseQry", paramType = "query")})
    @GetMapping("/select/number")
    public ResponseValue selectNumber() {
        WarehouseQry warehouseQry = CommonUtil.getObjFromReq(WarehouseQry.class);
        WarehouseQry param2 = new WarehouseQry();
        CommonUtil.copyProperties(warehouseQry, param2);
        warehouseQry = param2;
 
        Long warehouseId = warehouseQry.getWarehouseId();
        if (warehouseId == null) {
            Long agencyId = warehouseQry.getAgencyId();
            BaseWarehouse baseWarehouse = baseWarehouseService.getWarehouseByAgencyId(agencyId, null);
            warehouseId = baseWarehouse.getId();
        }
        Long baseGoodsModelsId = warehouseQry.getBaseGoodsModelsId();
        Integer warehouseType = warehouseQry.getWarehouseType();
        Integer buyType = warehouseQry.getBuyType();
 
        // 其他类型的库存查询是否也要查部门类型的库存
        List<Long> warehouseIds = new ArrayList<>(Arrays.asList(warehouseId));
        int num = lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseIds, baseGoodsModelsId, 1, buyType);
        return ResponseValue.success(num);
    }
 
    @ApiOperation(value = "根据仓库id和型号id 查询库存", notes = "根据仓库id和型号id 查询库存")
    @ApiImplicitParams({@ApiImplicitParam(name = "warehouseQry", value = "仓库id和型号id", required = true,
            dataType = "WarehouseQry", paramType = "query")})
    @GetMapping("/select/in/warehouse/num")
    public ResponseValue selectAllNumber() {
        WarehouseQry warehouseQry = CommonUtil.getObjFromReq(WarehouseQry.class);
        WarehouseQry param2 = new WarehouseQry();
        CommonUtil.copyProperties(warehouseQry, param2);
        warehouseQry = param2;
 
        Long agencyId = warehouseQry.getAgencyId();
        List<BaseWarehouse> baseWarehouseList =
                baseWarehouseService.getBaseWareHouseList(agencyId, StatesType.NORMAL.getValue());
        List<Long> warehouseIdList = baseWarehouseList.stream().map(BaseWarehouse::getId).collect(Collectors.toList());
 
        Long baseGoodsModelsId = warehouseQry.getBaseGoodsModelsId();
        Integer warehouseType = warehouseQry.getWarehouseType();
        Integer states = warehouseQry.getStates();
        Integer buyType = warehouseQry.getBuyType();
 
        // 调拨时只查机构类型的集采仓库库存
        // 部门分发时不分机构和部门,因为调拨进来的物品也算在库存里只是类型为部门,同样检视所有仓库该型号的数量
        int num = lWhGoodsService.queryGoodsModelInWareHouseNum(warehouseType, warehouseIdList, baseGoodsModelsId,
                states, buyType);
        return ResponseValue.success(num);
    }
 
}