Blame view

src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/service/ReceiptContainerDetailServiceImpl.java 12.7 KB
1
2
package com.huaheng.pc.receipt.receiptContainerDetail.service;
3
4
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
5
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
周鸿 authored
6
import com.huaheng.common.utils.Wrappers;
7
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
pengcheng authored
8
import com.huaheng.common.constant.QuantityConstant;
mahuandong authored
9
import com.huaheng.common.exception.service.ServiceException;
游杰 authored
10
import com.huaheng.common.utils.StringUtils;
11
import com.huaheng.common.utils.http.HttpUtils;
12
13
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
mahuandong authored
14
import com.huaheng.mobile.receipt.ReceiptBill;
15
16
import com.huaheng.pc.config.address.domain.Address;
import com.huaheng.pc.config.address.service.AddressService;
游杰 authored
17
import com.huaheng.pc.config.location.service.LocationService;
mahuandong authored
18
19
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
huhai authored
20
21
22
23
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;
24
25
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
import com.huaheng.pc.receipt.receiptContainerDetail.mapper.ReceiptContainerDetailMapper;
26
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader;
xumiao authored
27
import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView;
28
import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService;
mahuandong authored
29
30
31
32
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;
33
import org.springframework.stereotype.Service;
34
import org.springframework.web.bind.annotation.ResponseBody;
35
mahuandong authored
36
import javax.annotation.Resource;
mahuandong authored
37
import java.util.ArrayList;
mahuandong authored
38
39
import java.util.List;
import java.util.Map;
huhai authored
40
41
42
43
44
45
46
47
48
49
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;
50
51
import java.util.List;
import java.util.Map;
52
53
54
@Service
public class ReceiptContainerDetailServiceImpl extends ServiceImpl<ReceiptContainerDetailMapper, ReceiptContainerDetail> implements ReceiptContainerDetailService{
mahuandong authored
55
56
57
58
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
59
60
    @Resource
    private ReceiptContainerHeaderService receiptContainerHeaderService;
mahuandong authored
61
62
    @Resource
    private MaterialService materialService;
游杰 authored
63
64
    @Resource
    private LocationService locationService;
65
66
    @Resource
    private AddressService addressService;
xumiao authored
67
68
    @Resource
    private ReceiptContainerDetailMapper receiptContainerDetailMapper;
mahuandong authored
69
70
    /**
     * 根据入库单编码查询入库组盘明细
mahuandong authored
71
72
     * @param receiptCode 入库单编码
     * @return AjaxResult
mahuandong authored
73
     */
74
75
76
77
78
79
80
81
82
83
    @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
84
85
86
87
88
89
90
91
92
93
    /**
     * 撤销入库组盘明细
     * @param idList
     * @return
     */
    @Override
    public Boolean detailRemove(List<Integer> idList) {
        for (Integer id : idList){
            ReceiptContainerDetail receiptContainerDetail = this.getById(id);
            //如果已生成任务不允许撤销
pengcheng authored
94
            if (receiptContainerDetail.getStatus() < QuantityConstant.RECEIPT_CONTAINER_TASK){
mahuandong authored
95
96
                //回滚入库单明细收货数量
                ReceiptDetail receiptDetail = receiptDetailService.getById(receiptContainerDetail.getReceiptDetailId());
肖超群 authored
97
                receiptDetail.setTaskQty(receiptDetail.getTaskQty().subtract(receiptContainerDetail.getQty()));
mahuandong authored
98
99
100
101
                //如果为临时容器,则删除
                receiptContainerDetail.getContainerCode();
102
103
104
105
106
107
108
                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
109
110
                    String locationCode = receiptContainerDetail.getLocationCode();
                    if(StringUtils.isNotEmpty(locationCode)) {
游杰 authored
111
                        locationService.updateStatus(locationCode, QuantityConstant.STATUS_LOCATION_EMPTY);
游杰 authored
112
                    }
113
114
115
116
                    if (!receiptContainerHeaderService.removeById(receiptContainerDetail.getReceiptContainerId())){
                        throw new ServiceException("删除入库组盘头失败");
                    }
                }
117
mahuandong authored
118
119
120
121
                //查询入库头表
                LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
                containerDetailLambda.eq(ReceiptContainerDetail::getReceiptId, receiptContainerDetail.getReceiptId());
                List<ReceiptContainerDetail> containerDetailList = this.list(containerDetailLambda);
122
123
mahuandong authored
124
                //如果入库组盘没有该入库单的组盘信息,回滚入库单状态
125
                if (containerDetailList.size() == 0){
mahuandong authored
126
127
                    ReceiptHeader receiptHeader = new ReceiptHeader();
                    receiptHeader.setId(receiptContainerDetail.getReceiptId());
pengcheng authored
128
129
                    receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
                    receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
mahuandong authored
130
131
132
133
134
135
136
137
138
139
140
141
                    receiptHeader.setLastUpdatedBy(ShiroUtils.getLoginName());

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

            } else {
                throw new SecurityException("已生成任务,不允许取消");
            }
        }
        return true;
    }
142
mahuandong authored
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//    /**
//     * 移动端收货
//     *
//     * @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
158
    @Override
mahuandong authored
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
    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());
185
            record.setInventorySts("good");
mahuandong authored
186
            record.setQty(receiptBill.getQty());
187
            record.setContainerCode(receiptBills.get(0).getReceiptContainerCode());
mahuandong authored
188
189
190
191
            if(receiptBill.getWeight() != null) {
                record.setWeight(receiptBill.getWeight());
            }
            record.setCreatedBy(ShiroUtils.getLoginName());
192
            record.setLastUpdatedBy(ShiroUtils.getLoginName());
mahuandong authored
193
194
195
196
197
198
199
200
201
202
203
204
205

            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
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

    @Override
    public void autoSendMmsByReceiptContainer(ReceiptContainerDetail receiptContainerDetail){
        //调用mms更改采购状态
        Address address = addressService.getAddressByUrl(QuantityConstant.ADDRESS_MMS,receiptContainerDetail.getWarehouseCode());
        try{
            String url=address.getUrl();
            JSONObject json=new JSONObject();
            json.put("code",receiptContainerDetail.getReceiptCode().trim());
            json.put("materialCode",receiptContainerDetail.getMaterialCode().trim());
            json.put("status","2");
            json.put("inQty",receiptContainerDetail.getQty());
            String workNo=receiptDetailService.getWorkNo(receiptContainerDetail.getReceiptDetailId());
            json.put("workNo",workNo);
            String JsonParam = JSON.toJSONString(json);
            String result2 = HttpUtils.bodypost(url, JsonParam,receiptContainerDetail.getWarehouseCode());
            if(result2!=null){
                receiptContainerDetail.setSyncMms(2);
            }else{
                receiptContainerDetail.setSyncMmsNum(receiptContainerDetail.getSyncMmsNum()+1);
            }
            this.updateById(receiptContainerDetail);
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
233
234
235
236
237
238
239
240
    @Override
    public List<ReceiptContainerDetail> getReceiptContainerDetailByHeaderId(int receiptContainerHeaderId){
        //查询入库组盘明细
        LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
        containerDetailLambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeaderId);
        List<ReceiptContainerDetail> list = this.list(containerDetailLambda);
        return list;
    }
周鸿 authored
241
242
243
244
245
246
247
248
    @Override
    public ReceiptContainerDetail selectFirstEntity(ReceiptContainerDetail domain){
        LambdaQueryWrapper<ReceiptContainerDetail> containerDetailLambda = Wrappers.lambdaQuery();
        containerDetailLambda.eq(StringUtils.isNotNull(domain.getReceiptContainerId()),ReceiptContainerDetail::getReceiptContainerId, domain.getReceiptContainerId());
        containerDetailLambda.eq(StringUtils.isNotNull(domain.getReceiptDetailId()),ReceiptContainerDetail::getReceiptDetailId, domain.getReceiptDetailId());
        containerDetailLambda.last("limit 1");
        return  this.getOne(containerDetailLambda);
    }
xumiao authored
249
250
251
252
253

    @Override
    public List<ReceiptContainerView> selectOfView(ReceiptContainerView receiptContainerView) {
        return receiptContainerDetailMapper.selectOfView(receiptContainerView);
    }
254
}