Blame view

src/main/java/com/huaheng/pc/shipment/shippingCombination/controller/ShippingCombinationController.java 16.3 KB
pengcheng authored
1
2
3
package com.huaheng.pc.shipment.shippingCombination.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
pengcheng authored
4
import com.huaheng.common.constant.QuantityConstant;
pengcheng authored
5
import com.huaheng.common.exception.service.ServiceException;
6
import com.huaheng.common.support.Convert;
pengcheng authored
7
import com.huaheng.common.utils.StringUtils;
周鸿 authored
8
import com.huaheng.common.utils.Wrappers;
pengcheng authored
9
import com.huaheng.common.utils.security.ShiroUtils;
10
11
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
pengcheng authored
12
13
14
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
import com.huaheng.framework.web.page.TableDataInfo;
15
import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
xumiao authored
16
17
import com.huaheng.pc.config.warehouse.domain.WarehouseU8;
import com.huaheng.pc.config.warehouse.service.WarehouseU8Service;
18
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
19
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
pengcheng authored
20
21
import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentCombinationModel;
pengcheng authored
22
import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader;
pengcheng authored
23
24
25
26
27
28
import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailServiceImpl;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.shipment.shippingCombination.service.ShippingCombinationService;
pengcheng authored
29
import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel;
30
import com.huaheng.pc.task.taskHeader.service.ShipmentTaskService;
huhai authored
31
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
pengcheng authored
32
33
34
35
36
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
37
import javax.annotation.Resource;
38
import java.util.Arrays;
pengcheng authored
39
import java.util.List;
40
import java.util.stream.Collectors;
pengcheng authored
41
42
43
44
45
46
47

@Controller
@RequestMapping("/shipment/shippingCombination")
public class ShippingCombinationController extends BaseController {

    private String prefix = "shipment/shippingCombination";
48
肖超群 authored
49
    @Resource
pengcheng authored
50
    ShipmentDetailServiceImpl shipmentDetailService;
肖超群 authored
51
    @Resource
pengcheng authored
52
    ShippingCombinationService shippingCombinationService;
肖超群 authored
53
    @Resource
pengcheng authored
54
    ShipmentContainerHeaderService shipmentContainerHeaderService;
肖超群 authored
55
    @Resource
pengcheng authored
56
    ShipmentContainerDetailService shipmentContainerDetailService;
肖超群 authored
57
    @Resource
pengcheng authored
58
    ShipmentHeaderService shipmentHeaderService;
肖超群 authored
59
    @Resource
60
    ShipmentPreferenceService shipmentPreferenceService;
肖超群 authored
61
    @Resource
pengcheng authored
62
    TaskHeaderService taskHeaderService;
63
    @Resource
64
65
66
    ShipmentTaskService shipmentTaskService;
    @Resource
    ReceiptContainerHeaderService receiptContainerHeaderService;
xumiao authored
67
68
    @Resource
    private WarehouseU8Service warehouseU8Service;
69
pengcheng authored
70
71

    /**
周鸿 authored
72
73
     * 打开出库组盘页面
     *
pengcheng authored
74
75
76
77
78
79
     * @param shipmentCode
     * @param map
     * @return
     */
    @RequiresPermissions("shipment:shippingCombination:view")
    @GetMapping()
周鸿 authored
80
    public String ShippingCombination(String shipmentCode, ModelMap map) {
pengcheng authored
81
        map.put("code", shipmentCode);
周鸿 authored
82
        if (ShiroUtils.getWarehouseCode().equals(QuantityConstant.WAREHOUSE_KS)) {
周鸿 authored
83
84
            return prefix + "/shippingCombination-new";
        }
周鸿 authored
85
        return prefix + "/shippingCombination";
pengcheng authored
86
87
88
89
    }

    /**
     * 获取单据列表
周鸿 authored
90
     *
pengcheng authored
91
92
93
94
95
     * @param code
     * @return
     */
    @GetMapping("/listShipmentDetail")
    @ResponseBody
周鸿 authored
96
97
    public AjaxResult listShipmentDetail(String code) {
        if (StringUtils.isEmpty(code)) {
pengcheng authored
98
99
100
            return null;
        }
        LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
周鸿 authored
101
102
103
104
        lambdaQueryWrapper.eq(ShipmentDetail::getShipmentCode, code)
                .in(ShipmentDetail::getCompanyCode, ShiroUtils.getCompanyCodeList())
                .eq(ShipmentDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());
        List<ShipmentDetail> shipmentDetails = shipmentDetailService.list(lambdaQueryWrapper);
pengcheng authored
105
106
107
108
109
        return AjaxResult.success(shipmentDetails);
    }


    /**
110
     * 获取能出库的库存列表
周鸿 authored
111
     *
112
113
114
115
116
     * @param code,id
     * @return
     */
    @PostMapping("/getInventory")
    @ResponseBody
周鸿 authored
117
    public TableDataInfo getInventory(String code, Integer id) {
118
        //找到主单
周鸿 authored
119
120
121
        ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(new LambdaQueryWrapper<ShipmentHeader>()
                .eq(ShipmentHeader::getCode, code)
                .eq(ShipmentHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()));
易文鹏 authored
122
周鸿 authored
123
        if (shipmentHeader == null) {
124
125
126
            throw new ServiceException("找不到主单");
        }
        //找到子单
127
        ShipmentDetail shipmentDetail = new ShipmentDetail();
肖超群 authored
128
        shipmentDetail = shipmentDetailService.getById(id);
周鸿 authored
129
        if (shipmentDetail == null) {
130
131
132
            throw new ServiceException("找不到子单");
        }
肖超群 authored
133
        List<InventoryDetail> list = shippingCombinationService.getInventorys(shipmentDetail);
周鸿 authored
134
        if (list.isEmpty()) {
pengcheng authored
135
136
            throw new ServiceException("该物料没有库存或没有符合出库规则的库存");
        }
周鸿 authored
137
138
        list.forEach(s -> {
            if (!StringUtils.isAnyEmpty(s.getUWarehouseCode(), s.getWarehouseCode(), s.getCompanyCode())) {
xumiao authored
139
140
141
142
143
144
145
146
147
148
149
                WarehouseU8 warehouseU8 = warehouseU8Service.getOne(new LambdaQueryWrapper<WarehouseU8>()
                        .eq(WarehouseU8::getUWarehouseCode, s.getUWarehouseCode())
                        .eq(WarehouseU8::getWarehouseCode, s.getWarehouseCode())
                        .eq(WarehouseU8::getCompanyCode, s.getCompanyCode())
                        .last("limit 1")
                );
                if (warehouseU8 != null) {
                    s.setUWarehouseName(warehouseU8.getUWarehouseName());
                }
            }
        });
xumiao authored
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
//        List<InventoryDetail> removeList = new ArrayList<>();
//        for(InventoryDetail item : list){
//            item.setQty(item.getQty().subtract(item.getTaskQty()));
//            //查询容器有无任务,返回任务头状态大于10的任务数
//            Integer number = taskHeaderService.UncompleteCount(item.getContainerCode());
//            if(number >= 1) {
//                removeList.add(item);
//            }
//        }
//        //查询所有小于上架完成的入库组盘头 (status<20)
//        List<ReceiptContainerHeader> unCompleteCombineList = receiptContainerHeaderService.getUnCompleteCombineList();
//        if(unCompleteCombineList != null && unCompleteCombineList.size() > 0) {
//            for(ReceiptContainerHeader receiptContainerHeader : unCompleteCombineList) {
//                String containerCode = receiptContainerHeader.getContainerCode();
//                for(InventoryDetail item : list) {
//                    if(containerCode.equals(item.getContainerCode())) {
//                        if(!removeList.contains(item)) {
//                            removeList.add(item);
//                        }
//                        break;
//                    }
//                }
//            }
//        }
//        list.removeAll(removeList);
175
176
177
178
179
        return getDataTable(list);
    }


    /**
pengcheng authored
180
     * 保存组盘
周鸿 authored
181
     *
pengcheng authored
182
183
184
185
     * @param shipmentCombinationModel
     * @return
     */
    @RequiresPermissions("shipment:shippingCombination:combination")
肖超群 authored
186
    @PostMapping("/addcombination")
pengcheng authored
187
    @ResponseBody
周鸿 authored
188
    public AjaxResult addcombination(ShipmentCombinationModel shipmentCombinationModel) {
周鸿 authored
189
190
        String taskKey = "addcombination";
        AjaxResult ajaxResult = handleMultiProcessV1(taskKey, new MultiProcessListener() {
肖超群 authored
191
192
            @Override
            public AjaxResult doProcess() {
周鸿 authored
193
                ShipmentContainerHeader shipmentContainerHeader =
肖超群 authored
194
195
196
                        shipmentContainerHeaderService.combination(shipmentCombinationModel);
                ShipmentTaskCreateModel shipmentTask = new ShipmentTaskCreateModel();
                shipmentTask.setShipmentContainerHeaderIds(shipmentContainerHeader.getId());
197
198
199

                //表头
                List<Integer> idList = Arrays.asList(Convert.toIntArray(shipmentContainerHeader.getId().toString()));
周鸿 authored
200
201
                if (shipmentContainerHeader.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) {
                    return AjaxResult.success("OK!");
xumiao authored
202
                    // return AjaxResult.error("出库货箱编码(" + shipmentContainerHeader.getContainerCode() + ")已经生成任务,请不要重复生成,操作中止");
203
204
                }
                shipmentContainerHeaderService.createTask(idList);
肖超群 authored
205
206
207
208
                return AjaxResult.success(shipmentContainerHeader.getId());
            }
        });
        return ajaxResult;
pengcheng authored
209
210
    }
pengcheng authored
211
    /**
lector authored
212
     * 自动组盘并生成任务
周鸿 authored
213
     *
pengcheng authored
214
215
216
217
     * @param shipmentCode
     * @return
     */
    @RequiresPermissions("shipment:shippingCombination:combination")
lector authored
218
    @PostMapping("/autoCombinationAndCreateTask")
pengcheng authored
219
    @ResponseBody
周鸿 authored
220
    public AjaxResult autoCombinationAndCreateTask(String shipmentCode) {
周鸿 authored
221
222
        String taskKey = "autoCombinationAndCreateTask";
        AjaxResult ajaxResult = handleMultiProcessV1(taskKey, new MultiProcessListener() {
周鸿 authored
223
224
225
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = shipmentContainerHeaderService.autoCombination(shipmentCode);
226
//                System.out.println(ShiroUtils.getUserName());
周鸿 authored
227
                LambdaQueryWrapper<ShipmentContainerHeader> shipmentContainerHeader = Wrappers.lambdaQuery();
周鸿 authored
228
                shipmentContainerHeader.eq(ShipmentContainerHeader::getStatus, QuantityConstant.SHIPMENT_CONTAINER_BUILD);
229
                shipmentContainerHeader.eq(ShipmentContainerHeader::getCreatedBy, ShiroUtils.getUserName());
周鸿 authored
230
231
                List<ShipmentContainerHeader> shipmentContainerHeaders = shipmentContainerHeaderService.list(shipmentContainerHeader);
                for (ShipmentContainerHeader item : shipmentContainerHeaders) {
232
233
234
235
236
//                    ShipmentTaskCreateModel shipmentTask = new ShipmentTaskCreateModel();
//                    shipmentTask.setShipmentContainerHeaderIds(item.getId());
//                    AjaxResult ajaxResults = shipmentTaskService.createTaskFromShipmentContainers(shipmentTask);
                    List<Integer> idList = Arrays.asList(Convert.toIntArray(item.getId().toString()));
                    AjaxResult ajaxResults = shipmentContainerHeaderService.createTask(idList);
周鸿 authored
237
238
                    if (ajaxResults.hasErr()) {
                        throw new ServiceException("任务生成失败:" + ajaxResults.getMsg());
周鸿 authored
239
240
241
                    }
                }
                return ajaxResult;
pengcheng authored
242
            }
周鸿 authored
243
        });
pengcheng authored
244
245
246
        return ajaxResult;
    }
lector authored
247
248
    /**
     * 自动组盘并生成任务
周鸿 authored
249
     *
lector authored
250
251
252
253
254
255
256
     * @param shipmentCode
     * @return
     */
    @RequiresPermissions("shipment:shippingCombination:combination")
    @PostMapping("/autoCombination")
    @ResponseBody
    public AjaxResult autoCombination(String shipmentCode) {
周鸿 authored
257
258
259
260
261
262
263
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                return shipmentContainerHeaderService.autoCombination(shipmentCode);
            }
        });
        return ajaxResult;
lector authored
264
    }
pengcheng authored
265
266
周鸿 authored
267
268
    /**
     * 取消组盘
pengcheng authored
269
270
271
272
273
274
275
     *
     * @param shipmentContainerDetailIds
     * @return
     */
    @RequiresPermissions("shipment:shippingCombination:remove")
    @PostMapping("/cancelCombination")
    @ResponseBody
周鸿 authored
276
    public AjaxResult cancelCombination(@RequestBody List<Integer> shipmentContainerDetailIds) {
周鸿 authored
277
278
279
280
281
282
283
        AjaxResult ajaxResult = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                return shipmentContainerHeaderService.cancelCombinationDetail(shipmentContainerDetailIds);
            }
        });
        return ajaxResult;
pengcheng authored
284
    }
pengcheng authored
285
286
287
288
289
290
    /**
     * 获取出库组盘信息
     */
    @ResponseBody
    @PostMapping("/getShipmentInfoByCode")
周鸿 authored
291
292
    @Log(title = "出库-获取出库组盘信息", operating = "获取出库组盘信息", action = BusinessType.OTHER)
    public AjaxResult getShipmentInfoByCode(String code) {
293
294
295
296
297
298
299
300
        AjaxResult result = shipmentContainerHeaderService.getShipmentInfoByCode(code);
        return result;
    }

    /**
     * 选择出库口
     */
    @GetMapping("/chooseStation/{ids}")
周鸿 authored
301
    public String chooseStation(@PathVariable("ids") String ids, ModelMap mmap) {
302
303
304
305
306
307
308
        List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
        List<Integer> idsList = idList.stream().distinct().collect(Collectors.toList());
        ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(idsList.get(0));
        String containerCode = shipmentContainerHeader.getContainerCode();
        mmap.put("containerCode", containerCode);
        mmap.put("id", ids);
        int taskType = shipmentContainerHeader.getTaskType().intValue();
周鸿 authored
309
310
        if (taskType == QuantityConstant.TASK_TYPE_WHOLESHIPMENT ||
                taskType == QuantityConstant.TASK_TYPE_EMPTYSHIPMENT) {
311
            mmap.put("type", QuantityConstant.STATION_OUT);
周鸿 authored
312
        } else if (taskType == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT ||
313
314
315
316
317
318
319
320
321
322
323
324
325
                taskType == QuantityConstant.TASK_TYPE_SORTINGSHIPMENT ||
                taskType == QuantityConstant.TASK_TYPE_VIEW ||
                taskType == QuantityConstant.TASK_TYPE_CYCLECOUNT) {
            mmap.put("type", QuantityConstant.STATION_PICK);
        } else {
            throw new ServiceException("任务类型不需要选站台");
        }
        return prefix + "/chooseStation";
    }

    @Log(title = "设置站台", operating = "设置站台", action = BusinessType.GRANT)
    @PostMapping("/setStation")
    @ResponseBody
周鸿 authored
326
    public AjaxResult setStation(String ids, String type, String containerCode, String port) {
327
328
        List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
        List<Integer> idsList = idList.stream().distinct().collect(Collectors.toList());
周鸿 authored
329
        for (Integer id : idsList) {
330
331
332
333
334
335
336
337
            LambdaQueryWrapper<ShipmentContainerHeader> shipmentContainerHeaderLambdaQueryWrapper = Wrappers.lambdaQuery();
            shipmentContainerHeaderLambdaQueryWrapper.eq(ShipmentContainerHeader::getId, id);
            ShipmentContainerHeader shipmentContainerHeader1 = shipmentContainerHeaderService.getOne(shipmentContainerHeaderLambdaQueryWrapper);
            shipmentContainerHeader1.setPort(port);
            shipmentContainerHeaderService.update(shipmentContainerHeader1, shipmentContainerHeaderLambdaQueryWrapper);
        }
        return createTask(ids);
    }
pengcheng authored
338
339
340
341
342
    /**
     * 生成任务
     */
    @RequiresPermissions("shipment:container:add")
周鸿 authored
343
344
    @Log(title = "出库-任务生成", operating = "批量生成任务", action = BusinessType.UPDATE)
    @PostMapping("/createTask")
345
    @ResponseBody
周鸿 authored
346
    public AjaxResult createTask(String ids) {
347
348
349
350
351
352
353
354
        AjaxResult ajaxResult = new AjaxResult();
        if (StringUtils.isEmpty(ids)) {
            return AjaxResult.error("id不能为空");
        }
        List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
        for (Integer id : idList) {
            //获取表头
            ShipmentContainerHeader shipmentContainerHeader = shipmentContainerHeaderService.getById(id);
周鸿 authored
355
            if (shipmentContainerHeader == null) {
356
357
                return AjaxResult.error("出库货箱id:" + id + "未找到,操作中止");
            }
周鸿 authored
358
            if (shipmentContainerHeader.getStatus() >= QuantityConstant.TASK_STATUS_RELEASE) {
周鸿 authored
359
//                return AjaxResult.error("出库货箱编码(" + shipmentContainerHeader.getContainerCode() + ")已经生成任务,请不要重复生成,操作中止");
360
361
            }
        }
362
363
364
365
366
367
368
369
        AjaxResult ajaxResult1 = handleMultiProcess(new MultiProcessListener() {
            @Override
            public AjaxResult doProcess() {
                AjaxResult ajaxResult = shipmentContainerHeaderService.createTask(idList);
                return ajaxResult;
            }
        });
        return ajaxResult1;
370
    }
pengcheng authored
371
}