Blame view

src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java 9.74 KB
1
2
package com.huaheng.pc.receipt.receiptContainerDetail.service;
3
4
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
5
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
pengcheng authored
6
import com.huaheng.common.constant.QuantityConstant;
mahuandong authored
7
import com.huaheng.common.exception.service.ServiceException;
游杰 authored
8
import com.huaheng.common.utils.StringUtils;
9
10
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
mahuandong authored
11
import com.huaheng.mobile.receipt.ReceiptBill;
游杰 authored
12
import com.huaheng.pc.config.location.service.LocationService;
mahuandong authored
13
14
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
huhai authored
15
16
17
18
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
19
20
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.mapper.ReceiptContainerDetailMapper;
21
22
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
mahuandong authored
23
24
25
26
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
27
import org.springframework.stereotype.Service;
28
import org.springframework.web.bind.annotation.ResponseBody;
29
mahuandong authored
30
import javax.annotation.Resource;
mahuandong authored
31
import java.util.ArrayList;
mahuandong authored
32
33
import java.util.List;
import java.util.Map;
huhai authored
34
35
36
37
38
39
40
41
42
43
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail;
import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService;
import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader;
import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
44
45
import java.util.List;
import java.util.Map;
46
47
48
@Service
public class ReceiptContainerDetailServiceImpl extends ServiceImpl<ReceiptContainerDetailMapper, ReceiptContainerDetail> implements ReceiptContainerDetailService{
mahuandong authored
49
50
51
52
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
53
54
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
mahuandong authored
55
56
    @Resource
    private MaterialService materialService;
游杰 authored
57
58
    @Resource
    private LocationService locationService;
mahuandong authored
59
60
    /**
     * 根据入库单编码查询入库组盘明细
mahuandong authored
61
62
     * @param receiptCode 入库单编码
     * @return AjaxResult
mahuandong authored
63
     */
64
65
66
67
68
69
70
71
72
73
    @Override
    public AjaxResult<List<Map<String, Object>>> getReceiptInfoByBill(String receiptCode) {
        LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper.eq(ReceiptContainerDetail::getReceiptCode, receiptCode)
                .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode());

        List<Map<String, Object>> detail = this.listMaps(lambdaQueryWrapper);
        return AjaxResult.success(detail);
    }
mahuandong authored
74
75
76
77
78
79
80
81
82
83
    /**
     * 撤销入库组盘明细
     * @param idList
     * @return
     */
    @Override
    public Boolean detailRemove(List<Integer> idList) {
        for (Integer id : idList){
            ReceiptContainerDetail receiptContainerDetail = this.getById(id);
            //如果已生成任务不允许撤销
pengcheng authored
84
            if (receiptContainerDetail.getStatus() < QuantityConstant.RECEIPT_CONTAINER_TASK){
mahuandong authored
85
86
                //回滚入库单明细收货数量
                ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
87
                receiptDetail.setOpenQty(receiptDetail.getOpenQty().subtract(receiptContainerDetail.getQty()));
mahuandong authored
88
89
90
91
                //如果为临时容器,则删除
                receiptContainerDetail.getContainerCode();
92
93
94
95
96
97
98
                if (!receiptDetailService.updateById(receiptDetail)){throw new SecurityException("回滚入库单明细失败");}
                //删除组盘明细
                if (!this.removeById(id)){ throw new ServiceException("回滚入库组盘失败");}
                LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
                lambdaQueryWrapper.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerDetail.getReceiptContainerId());
                List<ReceiptContainerDetail> list = this.list(lambdaQueryWrapper);
                if (list.size() == 0){
游杰 authored
99
100
                    String locationCode = receiptContainerDetail.getLocationCode();
                    if(StringUtils.isNotEmpty(locationCode)) {
游杰 authored
101
                        locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_EMPTY);
游杰 authored
102
                    }
103
104
105
106
                    if (!receiptContainerHeaderService.removeById(receiptContainerDetail.getReceiptContainerId())){
                        throw new ServiceException("删除入库组盘头失败");
                    }
                }
107
mahuandong authored
108
109
110
111
                //查询入库头表
                LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
                containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
                List<ReceiptContainerDetail> containerDetailList = this.list(containerDetailLambda);
112
113
mahuandong authored
114
                //如果入库组盘没有该入库单的组盘信息,回滚入库单状态
115
                if (containerDetailList.size() == 0){
mahuandong authored
116
117
                    ReceiptHeader receiptHeader = new ReceiptHeader();
                    receiptHeader.setId(receiptContainerDetail.getReceiptId());
pengcheng authored
118
119
                    receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
                    receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
mahuandong authored
120
121
122
123
124
125
126
127
128
129
130
131
                    receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());

                    if (!receiptHeaderService.updateById(receiptHeader)){ throw new ServiceException("回滚头表状态失败"); }
                }

            } else {
                throw new SecurityException("已生成任务,不允许取消");
            }
        }
        return true;
    }
132
mahuandong authored
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//    /**
//     * 移动端收货
//     *
//     * @param code
//     * @return
//     */
//    @Override
//    public AjaxResult scanReceiptCode(String code) {
//        LambdaQueryWrapper<ReceiptDetail> lambdaQueryWrapper = Wrappers.lambdaQuery();
//        lambdaQueryWrapper.eq(ReceiptDetail::getReceiptCode, code);
//        List<ReceiptDetail> receiptContainerDetails = list(lambdaQueryWrapper);
//        return AjaxResult.success(receiptContainerDetails);
//    }

    /**保存到组盘详细*/
mahuandong authored
148
    @Override
mahuandong authored
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
    public List<Integer> insertTodayReceiptcContainerDetail(int headerId, int receiptId, List<Integer> receiptDetailId, List<ReceiptBill> receiptBills) {
        List<Integer> mReceiptContainerIds = new ArrayList<>();

        ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptId);
        if(receiptHeader == null) {
            throw new ServiceException("没有找到入库单表头!");
        }
        for(int i=0; i<receiptBills.size(); i++) {
            ReceiptBill receiptBill = receiptBills.get(i);
            Material condition2 = new Material();
            condition2.setCode(receiptBill.getMaterialCode());
            condition2.setWarehouseCode(ShiroUtils.getWarehouseCode());
            condition2.setDeleted(false);
            condition2.setEnable(true);
            LambdaQueryWrapper<Material> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.eq(Material::getCode, receiptBill.getMaterialCode())
                    .eq(Material::getWarehouseCode, ShiroUtils.getWarehouseCode());
            Material material = materialService.getOne(lambdaQueryWrapper);
            ReceiptContainerDetail record = new ReceiptContainerDetail();
            record.setReceiptContainerId(headerId);
            record.setReceiptCode(receiptHeader.getCode());
            record.setReceiptId(receiptId);
            record.setReceiptDetailId(receiptDetailId.get(i));
            record.setMaterialCode(receiptBill.getMaterialCode());
            record.setMaterialName(material.getName());
            record.setMaterialSpec(material.getSpec());
            record.setQty(receiptBill.getQty());
176
            record.setContainerCode(receiptBills.get(0).getReceiptContainerCode());
mahuandong authored
177
178
179
180
            if(receiptBill.getWeight() != null) {
                record.setWeight(receiptBill.getWeight());
            }
            record.setCreatedBy(ShiroUtils.getLoginName());
181
            record.setLastUpdatedBy(ShiroUtils.getLoginName());
mahuandong authored
182
183
184
185
186
187
188
189
190
191
192
193
194

            LambdaQueryWrapper<ReceiptContainerDetail> detailyWrapper = Wrappers.lambdaQuery();
            detailyWrapper.eq(ReceiptContainerDetail::getReceiptContainerId, headerId)
                    .eq(ReceiptContainerDetail::getReceiptCode, receiptHeader.getCode());
            ReceiptContainerDetail receiptContainerDetail = getOne(detailyWrapper);
            if(receiptContainerDetail == null) {
                save(record);
                mReceiptContainerIds.add(record.getId());
            } else {
                mReceiptContainerIds.add(receiptContainerDetail.getId());
            }
        }
        return mReceiptContainerIds;
mahuandong authored
195
    }
196
}