skyouc
2 天以前 846b74917841f922795425d0f063dc35fbb9e39c
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
package com.vincent.rsf.server.api.service.impl;
 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.api.controller.params.SaveCheckDiffParams;
import com.vincent.rsf.server.api.service.PdaCheckOrderService;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.CheckDiffExceStatus;
import com.vincent.rsf.server.manager.enums.TaskStsType;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.system.constant.DictTypeCode;
import com.vincent.rsf.server.system.entity.DictData;
import com.vincent.rsf.server.system.service.DictDataService;
import com.vincent.rsf.server.system.service.DictTypeService;
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
public class PdaCheckOrderServiceImpl implements PdaCheckOrderService {
 
    @Autowired
    private CheckDiffService checkDiffService;
 
    @Autowired
    private CheckDiffItemService checkDiffItemService;
 
    @Autowired
    private TaskService taskService;
 
    @Autowired
    private TaskItemService taskItemService;
    @Autowired
    private DictTypeService dictTypeService;
    @Autowired
    private DictDataService dictDataService;
 
    @Override
    public R getCheckList(String code) {
        LambdaQueryWrapper<CheckDiff> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(!Cools.isEmpty(code),CheckDiff::getOrderCode,code);
        List<CheckDiff> waveList = checkDiffService.list(lambdaQueryWrapper);
        return R.ok(waveList);
 
    }
 
    @Override
    public R getCheckTaskItemList(String barcode,String checkCode) {
 
        List<CheckDiffItem> checkDiffItems = checkDiffItemService.list(new LambdaQueryWrapper<CheckDiffItem>()
                .eq(CheckDiffItem::getBarcode, barcode)
                .eq(CheckDiffItem::getOrderCode, checkCode)
        );
        if (checkDiffItems.isEmpty()){
            throw new CoolException("此条码不在当前盘点单中");
        }
        LambdaQueryWrapper<Task> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Task::getBarcode, barcode);
        Task task = taskService.getOne(lambdaQueryWrapper);
        if (null == task){
            throw new CoolException("未找到容器号对应任务");
        }
        if (!task.getTaskStatus().equals(TaskStsType.AWAIT.id)){
            return R.error("任务状态不是等待确认");
        }
 
 
        return R.ok(checkDiffItems);
    }
 
    @Override
    public R getCheckDiffReasonList() {
        List<DictData> list = dictDataService.list(new LambdaQueryWrapper<DictData>()
                .eq(DictData::getDictTypeCode, DictTypeCode.SYS_CHECK_DIFF_REASON)
        );
        return R.ok(list);
    }
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R saveCheckDiff(SaveCheckDiffParams params,Long loginUserId) {
        CheckDiff checkDiff = checkDiffService.getById(params.getCheckId());
        if (null == checkDiff){
            return R.error("未找到盘点差异单");
        }
        if (checkDiff.getExceStatus().equals(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_END.val)){
            return R.error("该盘点单已完成");
        }
        for (CheckDiffItem checkDiffItem: params.getCheckDiffItems()){
            CheckDiffItem diffItem = checkDiffItemService.getById(checkDiffItem.getId());
            if (null == diffItem){
                return R.error("数据错误,未找到差异单明细");
            }
            checkDiffItem.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val);
            if(!checkDiffItemService.updateById(checkDiffItem)){
                throw new CoolException("更新差异单明细失败");
            }
            checkDiff.setCheckQty(checkDiff.getCheckQty()+checkDiffItem.getCheckQty());
        }
        checkDiff.setExceStatus(CheckDiffExceStatus.CHECK_DIFF_EXCE_STATUS_HOLD.val);
 
        if(!checkDiffService.updateById(checkDiff)){
            throw new CoolException("更新差异单失败");
        }
        Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getContainer()));
        if (null == task){
            throw new CoolException("数据错误,未找到容器码对应盘点任务");
        }
        task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
        task.setUpdateBy(loginUserId);
        task.setUpdateTime(new Date());
        if (!taskService.updateById(task)){
            throw new CoolException("更新任务失败");
        }
        return R.ok("盘点完成");
    }
}