Blame view

src/main/java/com/huaheng/api/mes/controller/MesController.java 26 KB
1
2
3
4
5
6
7
8
package com.huaheng.api.mes.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.api.mes.domain.*;
import com.huaheng.api.mes.service.SearchInventoryService;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
yuxiao authored
9
import com.huaheng.common.utils.StringUtils;
yuxiao authored
10
11
12
import com.huaheng.framework.aspectj.lang.annotation.ApiLogger;
import com.huaheng.framework.aspectj.lang.annotation.Log;
import com.huaheng.framework.aspectj.lang.constant.BusinessType;
13
14
import com.huaheng.framework.web.controller.BaseController;
import com.huaheng.framework.web.domain.AjaxResult;
yuxiao authored
15
16
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
yuxiao authored
17
18
import com.huaheng.pc.config.receiptType.domain.ReceiptType;
import com.huaheng.pc.config.receiptType.service.ReceiptTypeService;
yuxiao authored
19
20
import com.huaheng.pc.config.shipmentType.domain.ShipmentType;
import com.huaheng.pc.config.shipmentType.service.ShipmentTypeService;
21
22
23
24
25
26
27
28
29
30
31
import com.huaheng.pc.inventory.adjustDetail.domain.AdjustDetail;
import com.huaheng.pc.inventory.adjustDetail.service.AdjustDetailService;
import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader;
import com.huaheng.pc.inventory.adjustHeader.service.AdjustHeaderService;
import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail;
import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService;
import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader;
import com.huaheng.pc.inventory.cycleCountHeader.service.CycleCountHeaderService;
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptDetailHistory.domain.ReceiptDetailHistory;
import com.huaheng.pc.receipt.receiptDetailHistory.service.ReceiptDetailHistoryService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.mapper.ReceiptHeaderMapper;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import com.huaheng.pc.receipt.receiptHeaderHistory.domain.ReceiptHeaderHistory;
import com.huaheng.pc.receipt.receiptHeaderHistory.service.ReceiptHeaderHistoryService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentDetailHistory.domain.ShipmentDetailHistory;
import com.huaheng.pc.shipment.shipmentDetailHistory.service.ShipmentDetailHistoryService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.mapper.ShipmentHeaderMapper;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.shipment.shipmentHeaderHistory.domain.ShipmentHeaderHistory;
import com.huaheng.pc.shipment.shipmentHeaderHistory.service.ShipmentHeaderHistoryService;
yuxiao authored
50
51
52
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.service.TaskDetailService;
import io.swagger.annotations.ApiOperation;
53
import org.springframework.beans.BeanUtils;
yuxiao authored
54
import org.springframework.beans.factory.annotation.Autowired;
yuxiao authored
55
import org.springframework.transaction.annotation.Transactional;
56
57
58
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
yuxiao authored
59
import java.math.BigDecimal;
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
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@RestController
@RequestMapping("/api/mes/v2")
public class MesController extends BaseController {

    @Resource
    private SearchInventoryService searchInventoryService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptHeaderHistoryService receiptheaderhistoryService;
    @Resource
    private ReceiptDetailHistoryService receiptDetailHistoryService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptHeaderMapper receiptHeaderMapper;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ShipmentDetailService shipmentDetailService;
    @Resource
    private ShipmentHeaderMapper shipmentHeaderMapper;
    @Resource
    private ShipmentHeaderHistoryService shipmentHeaderHistoryService;
    @Resource
    private ShipmentDetailHistoryService shipmentDetailHistoryService;
yuxiao authored
90
91
    @Resource
    private ReceiptTypeService receiptTypeService;
yuxiao authored
92
93
94
95
    @Autowired
    private MaterialService materialService;
    @Resource
    private ShipmentTypeService shipmentTypeService;
96
97
98
99
100
101
102
103
    @Resource
    private CycleCountHeaderService cycleCountHeaderService;
    @Resource
    private CycleCountDetailService cycleCountDetailService;
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private AdjustDetailService adjustDetailService;
yuxiao authored
104
105
    @Resource
    private TaskDetailService taskDetailService;
106
107
108
109
110

    /**
     * 查询库存
     */
    @PostMapping("/searchInventory")
yuxiao authored
111
    @ApiLogger(from = "mes", apiName = "查询库存")
112
113
    @ResponseBody
    public AjaxResult searchInventory(@RequestBody SearchInventoryDomain domain) {
114
        List<SearchInventoryVo> vo = searchInventoryService.searchInventory(domain.getMaterialCode(), domain.getMaterialName());
115
116
117
118
119
120
121
        return AjaxResult.success(vo);
    }

    /**
     * 入库单
     */
    @PostMapping("/receipt")
yuxiao authored
122
    @Transactional(rollbackFor = Exception.class)
123
    @ResponseBody
yuxiao authored
124
    @ApiLogger(from = "mes", apiName = "入库单")
125
    public AjaxResult receipt(@RequestBody ReceiptDomain domain) {
yuxiao authored
126
127
128
        ReceiptHeader receiptHeader = new ReceiptHeader();
        List<ReceiptDetail> list = new ArrayList<>();
        List<ReceiptDetails> receiptDetails = domain.getReceiptDetails();
yuxiao authored
129
        //入库单类型表是否有此MES单据类型
yuxiao authored
130
        List<ReceiptType> lst = receiptTypeService.list();
131
132
        if (lst.stream().noneMatch(w -> String.valueOf(w.getCode()).equals(domain.getReceiptType()))) {
            return AjaxResult.error("没有对应的入库单类型");
yuxiao authored
133
        }
yuxiao authored
134
135
        //入库单头表是否已存在此MES单据单号   唯一校验
        List<ReceiptHeader> headerList = receiptHeaderService.list();
136
137
        if (headerList.stream().anyMatch(w -> String.valueOf(w.getMesCode()).equals(domain.getReceiptHeader()))) {
            return AjaxResult.error("MES单据单号已存在");
yuxiao authored
138
139
140
141
142
143
144
        }
        List<ReceiptDetail> detailList = receiptDetailService.list();
        List<Material> material = materialService.list();
        BigDecimal totalQty = BigDecimal.ZERO;
        String warehouseCode = null;
        for (ReceiptDetails details : receiptDetails) {
            //出库单详情的物料批次为空
145
            if (details.getMaterialBatch() == null) {
yuxiao authored
146
147
148
                return AjaxResult.error("物料批次为空,新增失败");
            }
            //出库单详情的仓库编码为空
149
            if (details.getWarehouseCode() == null) {
yuxiao authored
150
151
152
                return AjaxResult.error("仓库编码为空,新增失败");
            }
            //出库单详情的条码数量为空
153
            if (details.getTotalQty() == null) {
yuxiao authored
154
155
156
                return AjaxResult.error("条码数量为空,新增失败");
            }
            //出库单详情的物料名称为空
157
            if (details.getMaterialName() == null) {
yuxiao authored
158
159
160
                return AjaxResult.error("物料名称为空,新增失败");
            }
            //出库单详情的物料条码为空
161
            if (details.getMaterialID() == null) {
yuxiao authored
162
163
164
                return AjaxResult.error("物料条码为空,新增失败");
            }
            //物料表是否有此MES单据明细中的物料编码
165
166
            if (material.stream().noneMatch(w -> String.valueOf(w.getCode()).equals(details.getMaterialCode())) || details.getMaterialCode() == null) {
                return AjaxResult.error("没有对应的物料");
yuxiao authored
167
168
            }
            //入库单详情表是否已存在此MES单据明细中的物料条码     唯一校验
169
170
            if (detailList.stream().anyMatch(w -> String.valueOf(w.getMaterialID()).equals(details.getMaterialID()))) {
                return AjaxResult.error("物料条码已存在");
yuxiao authored
171
172
173
174
            }
            totalQty = totalQty.add(details.getTotalQty());
            warehouseCode = details.getWarehouseCode();
        }
yuxiao authored
175
176
177
178
179
180
181
182
        String code = receiptHeaderService.createCode(domain.getReceiptType());
        if (StringUtils.isEmpty(code)) {
            throw new ServiceException("根据单据类型" + domain.getReceiptType() + "生成单号失败");
        }
        receiptHeader.setMesCode(domain.getReceiptHeader());
        receiptHeader.setCode(code);
        receiptHeader.setReceiptType(domain.getReceiptType());
        receiptHeader.setCompanyCode(QuantityConstant.COMPANYCODE);
yuxiao authored
183
        receiptHeader.setWarehouseCode(warehouseCode);
yuxiao authored
184
185
186
187
        receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        receiptHeader.setTotalQty(totalQty);
        receiptHeader.setTotalLines(receiptDetails.size());
yuxiao authored
188
189
        receiptHeader.setCreatedBy(QuantityConstant.PLATFORM_MES);
        receiptHeader.setLastUpdatedBy(QuantityConstant.PLATFORM_MES);
190
        if (receiptHeaderService.save(receiptHeader)) {
yuxiao authored
191
192
193
194
195
            ReceiptHeader header = receiptHeaderMapper.getByOrderHeader(domain.getReceiptHeader());
            for (ReceiptDetails details : receiptDetails) {
                ReceiptDetail receiptDetail = new ReceiptDetail();
                receiptDetail.setReceiptId(header.getId());
                receiptDetail.setReceiptCode(header.getCode());
yuxiao authored
196
                receiptDetail.setWarehouseCode(details.getWarehouseCode());
yuxiao authored
197
198
199
200
                receiptDetail.setCompanyCode(QuantityConstant.COMPANYCODE);
                receiptDetail.setMaterialCode(details.getMaterialCode());
                receiptDetail.setMaterialName(details.getMaterialName());
                receiptDetail.setBatch(details.getMaterialBatch());
yuxiao authored
201
202
                receiptDetail.setMesCode(header.getMesCode());
                receiptDetail.setMaterialID(details.getMaterialID());
yuxiao authored
203
                receiptDetail.setQty(details.getTotalQty());
yuxiao authored
204
205
206
                receiptDetail.setInventorySts(QuantityConstant.GOOD);
                receiptDetail.setCreatedBy(QuantityConstant.PLATFORM_MES);
                receiptDetail.setLastUpdatedBy(QuantityConstant.PLATFORM_MES);
yuxiao authored
207
208
                list.add(receiptDetail);
            }
209
        } else {
yuxiao authored
210
211
212
            return AjaxResult.error("新增入库单头表失败");
        }
        return AjaxResult.success(receiptDetailService.saveBatch(list));
213
214
215
216
217
218
219
    }

    /**
     * 出库单
     */
    @PostMapping("/shipment")
    @ResponseBody
220
    @Transactional(rollbackFor = Exception.class)
yuxiao authored
221
    @ApiLogger(from = "mes", apiName = "出库单")
222
    public AjaxResult shipment(@RequestBody ShipmentDomain domain) {
yuxiao authored
223
224
225
226
227
        ShipmentHeader shipmentHeader = new ShipmentHeader();
        List<ShipmentDetail> list = new ArrayList<>();
        List<ShipmentDetails> shipmentDetails = domain.getShipmentDetails();
        //出库单类型表是否有此MES单据类型
        List<ShipmentType> lst = shipmentTypeService.list();
228
229
        if (lst.stream().noneMatch(w -> String.valueOf(w.getCode()).equals(domain.getShipmentType()))) {
            return AjaxResult.error("没有对应的出库单类型");
yuxiao authored
230
231
232
        }
        //出库单头表是否已存在此MES单据单号   唯一校验
        List<ShipmentHeader> headerList = shipmentHeaderService.list();
233
234
        if (headerList.stream().anyMatch(w -> String.valueOf(w.getMesCode()).equals(domain.getShipmentHeader()))) {
            return AjaxResult.error("MES单据单号已存在");
yuxiao authored
235
236
237
238
239
        }
        String warehouseCode = null;
        BigDecimal qty = BigDecimal.ZERO;
        List<Material> material = materialService.list();
        for (ShipmentDetails details : shipmentDetails) {
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
            //物料表是否有此MES单据明细中的物料编码
            if (details.getMaterialCode() == null || material.stream().noneMatch(w -> String.valueOf(w.getCode()).equals(details.getMaterialCode()))) {
                return AjaxResult.error("没有对应的物料");
            }
            //出库单详情的仓库编码为空
            if (details.getWarehouseCode() == null) {
                return AjaxResult.error("仓库编码为空,新增失败");
            }
            //出库单详情的条码数量为空
            if (details.getTotalQty() == null) {
                return AjaxResult.error("条码数量为空,新增失败");
            }
            //出库单详情的物料名称为空
            if (details.getMaterialName() == null) {
                return AjaxResult.error("物料名称为空,新增失败");
            }
yuxiao authored
256
257
258
259
260
261
262
263
            qty = qty.add(details.getTotalQty());
            warehouseCode = details.getWarehouseCode();
        }
        String code = shipmentHeaderService.createCode(domain.getShipmentType());
        shipmentHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        shipmentHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_BUILD);
        shipmentHeader.setLastUpdatedBy(QuantityConstant.PLATFORM_MES);
        shipmentHeader.setCreatedBy(QuantityConstant.PLATFORM_MES);
264
265
266
        shipmentHeader.setCompanyCode(QuantityConstant.COMPANYCODE);
        shipmentHeader.setShipmentType(domain.getShipmentType());
        shipmentHeader.setMesCode(domain.getShipmentHeader());
yuxiao authored
267
        shipmentHeader.setWarehouseCode(warehouseCode);
268
269
        shipmentHeader.setTotalQty(qty);
        shipmentHeader.setTotalLines(shipmentDetails.size());
yuxiao authored
270
        shipmentHeader.setCode(code);
271
        if (shipmentHeaderService.save(shipmentHeader)) {
yuxiao authored
272
273
274
275
276
277
278
279
280
281
282
283
284
            ShipmentHeader header = shipmentHeaderMapper.getByOrderHeader(domain.getShipmentHeader());
            for (ShipmentDetails details : shipmentDetails) {
                ShipmentDetail detail = new ShipmentDetail();
                detail.setShipmentId(header.getId());
                detail.setShipmentCode(header.getCode());
                detail.setCreatedBy(QuantityConstant.PLATFORM_MES);
                detail.setLastUpdatedBy(QuantityConstant.PLATFORM_MES);
                detail.setWarehouseCode(details.getWarehouseCode());
                detail.setMesCode(domain.getShipmentHeader());
                detail.setInventorySts(QuantityConstant.GOOD);
                detail.setCompanyCode(QuantityConstant.COMPANYCODE);
                detail.setMaterialName(details.getMaterialName());
                detail.setMaterialCode(details.getMaterialCode());
285
                detail.setQty(details.getTotalQty());
yuxiao authored
286
287
                list.add(detail);
            }
288
        } else {
yuxiao authored
289
290
291
            return AjaxResult.error("新增入库单头表失败");
        }
        return AjaxResult.success(shipmentDetailService.saveBatch(list));
292
293
294
    }

    /**
yuxiao authored
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
     *  入库回传
     */
    @PostMapping("/backReceipt")
    @ResponseBody
    @ApiLogger(from = "mes", apiName = "入库回传")
    public AjaxResult backReceipt(String id) {
        if (StringUtils.isEmpty(id)){
            return AjaxResult.error("id不能为空");
        }
        ReceiptHeader receiptHeader = receiptHeaderService.getById(id);
        if(receiptHeader == null) {
            return AjaxResult.error("没有找到入库单");
        }
        LambdaQueryWrapper<TaskDetail> query = Wrappers.lambdaQuery();
        query.eq(TaskDetail::getBillCode, receiptHeader.getCode());
        List<TaskDetail> list = taskDetailService.list(query);
        ReceiptDomain domain = new ReceiptDomain();
        List<ReceiptDetails> lst = new ArrayList<>();
        for (TaskDetail taskDetail : list) {
            ReceiptDetails details = new ReceiptDetails();
            details.setMaterialID(taskDetail.getMaterialID());
            details.setMaterialCode(taskDetail.getMaterialCode());
            details.setMaterialName(taskDetail.getMaterialName());
            details.setTotalQty(taskDetail.getQty());
            lst.add(details);
        }
        domain.setReceiptHeader(receiptHeader.getMesCode());
        domain.setReceiptType(receiptHeader.getReceiptType());
        domain.setReceiptDetails(lst);
        receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RETURN);
        receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RETURN);
        receiptHeaderService.updateById(receiptHeader);

        return AjaxResult.success(domain);
    }


    /**
     *	出库回传
     */
    @PostMapping( "/backShipment")
    @ResponseBody
    @ApiLogger(from = "mes", apiName = "出库回传")
    public AjaxResult backShipment(String id){
        if (StringUtils.isEmpty(id)) {
            return AjaxResult.error("id不能为空");
        }
        ShipmentHeader shipmentHeader = shipmentHeaderService.getById(id);
        if (shipmentHeader == null) {
            return AjaxResult.error("没有找到出库单");
        }
        LambdaQueryWrapper<TaskDetail> query = Wrappers.lambdaQuery();
        query.eq(TaskDetail::getBillCode, shipmentHeader.getCode());
        List<TaskDetail> list = taskDetailService.list(query);
        ShipmentDomain domain = new ShipmentDomain();
        List<ShipmentDetails> lst = new ArrayList<>();
        for (TaskDetail detail : list) {
            ShipmentDetails details = new ShipmentDetails();
            details.setTotalQty(detail.getQty());
            details.setMaterialCode(detail.getMaterialCode());
            details.setMaterialName(detail.getMaterialName());
            details.setMaterialId(detail.getMaterialID());
            lst.add(details);
        }
        domain.setShipmentHeader(shipmentHeader.getMesCode());
        domain.setShipmentType(shipmentHeader.getShipmentType());
        domain.setShipmentDetails(lst);
        shipmentHeader.setFirstStatus(QuantityConstant.SHIPMENT_HEADER_RETURN);
        shipmentHeader.setLastStatus(QuantityConstant.SHIPMENT_HEADER_RETURN);
        shipmentHeaderService.updateById(shipmentHeader);
        return AjaxResult.success(domain);
    }

    /**
369
370
371
372
     * 盘点结果
     */
    @PostMapping("/checkInventory")
    @ResponseBody
yuxiao authored
373
    @ApiLogger(from = "mes", apiName = "盘点结果")
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
    public AjaxResult checkInventory(String code) {
        CheckInventoryVo vo = new CheckInventoryVo();
        LambdaQueryWrapper<CycleCountHeader> query = Wrappers.lambdaQuery();
        query.eq(CycleCountHeader::getCode, code);
        CycleCountHeader cycleCountHeader = cycleCountHeaderService.getOne(query);
        if (cycleCountHeader == null){
            return AjaxResult.error("未找到盘点单");
        }
        CycleCountDetail cycleCountDetail = cycleCountDetailService.getById(cycleCountHeader.getId());
        List<OrderDetails> list = new ArrayList<>();
        if (cycleCountHeader.getStatusCyc() == 100){
            LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery();
            inventory.eq(InventoryDetail::getContainerCode, cycleCountDetail.getContainerCode());
            List<InventoryDetail> lst = inventoryDetailService.list(inventory);
            for (InventoryDetail detail : lst) {
                OrderDetails details = new OrderDetails();
                details.setMaterialCode(detail.getMaterialCode());
                details.setMaterialName(detail.getMaterialName());
                details.setMaterialBatch(detail.getBatch());
                details.setTotalQty(detail.getQty());
                details.setMaterialID(null);
                list.add(details);
            }
            vo.setOrderHeader(code);
            vo.setOrderDetails(list);
        }else if(cycleCountHeader.getStatusCyc() == 110){
            LambdaQueryWrapper<AdjustDetail> queryWrapper = Wrappers.lambdaQuery();
            queryWrapper.eq(AdjustDetail::getCycleCountHeaderCode, code);
            List<AdjustDetail> details = adjustDetailService.list(queryWrapper);
            for (AdjustDetail detail : details) {
                if (detail.getStatus() != 3){
                   return AjaxResult.error("盘点单编码" + code + "有未调整的单据");
                }
                OrderDetails details1 = new OrderDetails();
                details1.setMaterialID(null);
                details1.setMaterialName(detail.getMaterialName());
                details1.setMaterialCode(detail.getMaterialCode());
                details1.setMaterialBatch(detail.getBatch());
                details1.setTotalQty(detail.getToQty());
                list.add(details1);
            }
            vo.setOrderHeader(code);
            vo.setOrderDetails(list);
        }
        if (vo.getOrderDetails().size() > 0){
            LambdaQueryWrapper<CycleCountHeader> queryWrapper = Wrappers.lambdaQuery();
            queryWrapper.eq(CycleCountHeader::getCode, code);
            cycleCountHeader.setCheckStatus(1);
            cycleCountHeaderService.update(cycleCountHeader,queryWrapper);
        }
        return AjaxResult.success(vo);
    }

    /**
428
429
430
431
     * 单据取消
     */
    @PostMapping("/cancelOrder")
    @ResponseBody
yuxiao authored
432
    @ApiLogger(from = "mes", apiName = "单据取消")
433
    public AjaxResult cancelOrder(@RequestBody CancelOrderDomain domain) {
434
        if ("receipt".equals(domain.getOrderType())) {
435
436
437
438
            ReceiptHeader receiptHeader = receiptHeaderMapper.getByOrderHeader(domain.getOrderHeader());
            if (receiptHeader == null) {
                return AjaxResult.error("没有找到单据" + domain.getOrderHeader());
            }
439
            if (!Objects.equals(receiptHeader.getFirstStatus(), QuantityConstant.RECEIPT_HEADER_BUILD)) {
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
                return AjaxResult.error("非新建单据不能取消");
            }
            LambdaQueryWrapper<ReceiptDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader.getId());
            List<ReceiptDetail> list = receiptDetailService.list(lambdaQueryWrapper);
            List<ReceiptDetailHistory> receiptDetailHistoryList = new ArrayList<>();
            if (!receiptHeaderService.removeById(receiptHeader)) {
                throw new ServiceException("删除头表失败");
            }
            List<Integer> receiptDetailIds = new ArrayList<>();
            ReceiptHeaderHistory receiptHeaderHistory = new ReceiptHeaderHistory();
            BeanUtils.copyProperties(receiptHeader, receiptHeaderHistory);
            if (!receiptheaderhistoryService.save(receiptHeaderHistory)) {
                throw new ServiceException("新增历史头表失败");
            }
455
            for (ReceiptDetail receiptDetail : list) {
456
457
458
459
460
461
                receiptDetailIds.add(receiptDetail.getId());
                ReceiptDetailHistory receiptDetailHistory = new ReceiptDetailHistory();
                BeanUtils.copyProperties(receiptDetail, receiptDetailHistory);
                receiptDetailHistory.setReceiptId(receiptHeaderHistory.getId());
                receiptDetailHistoryList.add(receiptDetailHistory);
            }
462
            if (receiptDetailIds.size() > 0) {
463
464
465
466
                if (!receiptDetailService.removeByIds(receiptDetailIds)) {
                    throw new ServiceException("删除明细表失败");
                }
            }
467
            if (receiptDetailHistoryList.size() > 0) {
468
469
470
471
                if (!receiptDetailHistoryService.saveBatch(receiptDetailHistoryList)) {
                    throw new ServiceException("新增历史入库明细失败");
                }
            }
472
        } else if ("shipment".equals(domain.getOrderType())) {
473
            ShipmentHeader shipmentHeader = shipmentHeaderMapper.getByOrderHeader(domain.getOrderHeader());
474
            if (shipmentHeader == null) {
475
476
                return AjaxResult.error("没有找到单据" + domain.getOrderHeader());
            }
477
            if (!Objects.equals(shipmentHeader.getFirstStatus(), QuantityConstant.RECEIPT_HEADER_BUILD)) {
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
                return AjaxResult.error("非新建单据不能取消");
            }
            LambdaQueryWrapper<ShipmentDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(ShipmentDetail::getShipmentId, shipmentHeader.getId());
            List<ShipmentDetail> list = shipmentDetailService.list(lambdaQueryWrapper);
            List<ShipmentDetailHistory> shipmentDetailHistories = new ArrayList<>();
            List<Integer> shipmentDetailIds = new ArrayList<>();

            if (!shipmentHeaderService.removeById(shipmentHeader)) {
                throw new ServiceException("删除头表失败");
            }

            ShipmentHeaderHistory shipmentHeaderHistory = new ShipmentHeaderHistory();
            BeanUtils.copyProperties(shipmentHeader, shipmentHeaderHistory);

            if (!shipmentHeaderHistoryService.save(shipmentHeaderHistory)) {
                throw new ServiceException("新增历史头表失败");
            }
            for (ShipmentDetail shipmentDetail : list) {
                shipmentDetailIds.add(shipmentDetail.getId());
                ShipmentDetailHistory shipmentDetailHistory = new ShipmentDetailHistory();
                BeanUtils.copyProperties(shipmentDetail, shipmentDetailHistory);
                shipmentDetailHistory.setShipmentId(shipmentHeaderHistory.getId());
                shipmentDetailHistories.add(shipmentDetailHistory);
            }
503
            if (shipmentDetailIds.size() > 0) {
504
505
506
507
                if (!shipmentDetailService.removeByIds(shipmentDetailIds)) {
                    throw new ServiceException("删除明细表失败");
                }
            }
508
            if (shipmentDetailHistories.size() > 0) {
509
510
511
512
                if (!shipmentDetailHistoryService.saveBatch(shipmentDetailHistories)) {
                    throw new ServiceException("新增历史出库明细失败");
                }
            }
513
        } else {
514
515
516
517
518
            return AjaxResult.error("没有找到此类型的单据" + domain.getOrderType());
        }
        return AjaxResult.success("取消成功");
    }
}