Blame view

src/main/java/com/huaheng/pc/task/taskDetail/service/TaskDetailServiceImpl.java 19.7 KB
mahuandong authored
1
2
package com.huaheng.pc.task.taskDetail.service;
3
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4
5
6
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huaheng.common.constant.QuantityConstant;
import com.huaheng.common.exception.service.ServiceException;
周鸿 authored
7
8
import com.huaheng.common.support.Convert;
import com.huaheng.common.utils.StringUtils;
周鸿 authored
9
import com.huaheng.common.utils.Wrappers;
周鸿 authored
10
11
import com.huaheng.common.utils.security.ShiroUtils;
import com.huaheng.framework.web.domain.AjaxResult;
12
13
import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail;
import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService;
14
15
import com.huaheng.pc.config.cycleCountPreference.domain.CycleCountPreference;
import com.huaheng.pc.config.cycleCountPreference.service.CycleCountPreferenceService;
16
17
import com.huaheng.pc.config.material.domain.Material;
import com.huaheng.pc.config.material.service.MaterialService;
18
19
20
21
import com.huaheng.pc.config.receiptPreference.domain.ReceiptPreference;
import com.huaheng.pc.config.receiptPreference.service.ReceiptPreferenceService;
import com.huaheng.pc.config.shipmentPreference.domain.ShipmentPreference;
import com.huaheng.pc.config.shipmentPreference.service.ShipmentPreferenceService;
22
23
import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail;
import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService;
周鸿 authored
24
25
import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail;
import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService;
26
import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail;
周鸿 authored
27
28
29
30
31
32
33
34
35
36
37
38
import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService;
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 com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail;
import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService;
import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail;
import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService;
import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader;
import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService;
import com.huaheng.pc.system.user.service.IUserService;
39
40
import com.huaheng.pc.task.taskDetail.domain.TaskDetail;
import com.huaheng.pc.task.taskDetail.mapper.TaskDetailMapper;
41
42
import com.huaheng.pc.task.taskHeader.domain.TaskHeader;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
mahuandong authored
43
import org.springframework.stereotype.Service;
44
45
import org.springframework.transaction.annotation.Transactional;
mahuandong authored
46
import javax.annotation.Resource;
周鸿 authored
47
import java.math.BigDecimal;
48
import java.util.ArrayList;
周鸿 authored
49
import java.util.Arrays;
mahuandong authored
50
import java.util.List;
51
mahuandong authored
52
@Service
53
public class TaskDetailServiceImpl extends ServiceImpl<TaskDetailMapper, TaskDetail> implements TaskDetailService {
mahuandong authored
54
55
56
57
58
59

    @Resource
    private CycleCountDetailService cycleCountDetailService;
    @Resource
    private CycleCountPreferenceService cycleCountPreferenceService;
60
61
62
63
64
65
66
67
    @Resource
    private TaskHeaderService taskHeaderService;
    @Resource
    private ReceiptPreferenceService receiptPreferenceService;
    @Resource
    private ShipmentPreferenceService shipmentPreferenceService;
    @Resource
    private FilterConfigDetailService filterConfigDetailService;
周鸿 authored
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
    @Resource
    private InventoryDetailService inventoryDetailService;
    @Resource
    private IUserService userService;
    @Resource
    private ReceiptContainerDetailService receiptContainerDetailService;
    @Resource
    private ReceiptHeaderService receiptHeaderService;
    @Resource
    private ReceiptDetailService receiptDetailService;
    @Resource
    private ShipmentHeaderService shipmentHeaderService;
    @Resource
    private ShipmentContainerDetailService shipmentContainerDetailService;
    @Resource
    private ShipmentDetailService shipmentDetailService;
84
85
    @Resource
    private MaterialService materialService;
周鸿 authored
86
87
88
89

    /**
     * 盘点任务首选项
90
     *
91
92
93
94
95
96
97
98
99
     * @param taskDetailList
     * @return
     */
    @Transactional
    @Override
    public List<TaskDetail> preferenceRealize(List<TaskDetail> taskDetailList) {
        /*查出盘点明细,找出盘点首选项,根据首选项显示字段*/
        List<TaskDetail> taskDetails = new ArrayList<>();
100
        for (TaskDetail item : taskDetailList) {
101
102
103
104
105
106
            //盘点明细
            CycleCountDetail cycleCountDetailtemp = new CycleCountDetail();
            cycleCountDetailtemp.setCycleCountHeadCode(item.getBillCode());
            cycleCountDetailtemp.setId(item.getBillDetailId());
            LambdaQueryWrapper<CycleCountDetail> detailLambdaQueryWrapper = Wrappers.lambdaQuery(cycleCountDetailtemp);
            CycleCountDetail cycleCountDetail = cycleCountDetailService.getOne(detailLambdaQueryWrapper);
107
            if (cycleCountDetail == null) {
108
109
110
111
112
113
114
115
                throw new SecurityException("没有找到子任务对应的盘点明细!");
            }
            //找盘点首选项
            CycleCountPreference cycleCountPreferenceTemp = new CycleCountPreference();
            cycleCountPreferenceTemp.setCode(cycleCountDetail.getPreferenceCode());
            cycleCountPreferenceTemp.setWarehouseCode(cycleCountDetail.getWarehouseCode());
            LambdaQueryWrapper<CycleCountPreference> preferenceLambdaQueryWrapper = Wrappers.lambdaQuery(cycleCountPreferenceTemp);
            CycleCountPreference cycleCountPreference = cycleCountPreferenceService.getOne(preferenceLambdaQueryWrapper);
116
            if (cycleCountPreference == null) {
117
118
119
                throw new SecurityException("没有找到盘点首选项!");
            }
            //根据首选项判断数据
120
            if (cycleCountPreference.getPromptLocation() == false) {
121
122
123
124
                //库位
                item.setFromLocation("");
                item.setToLocation("");
            }
125
            if (cycleCountPreference.getPromptLpn() == false) {
126
127
128
                //容器
                item.setContainerCode("");
            }
129
            if (cycleCountPreference.getPromptItem() == false) {
130
131
132
133
                //物料
                item.setMaterialCode("");
                item.setMaterialName("");
                item.setMaterialUnit("");
134
                item.setMaterialSpec("");
135
            }
136
            if (cycleCountPreference.getPromptQuantity() == false) {
137
138
139
140
141
142
143
144
                //系统数量
                item.setQty(null);
            }
            taskDetails.add(item);
        }
        return taskDetails;
    }
145
    /**
xqs authored
146
147
     * 任务位置拣货单打印
     * 根据任务头表id查询任务明细,根据上架或拣货货规则排序
148
     *
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
     * @param ids 头表id数组
     * @return
     */
    @Override
    public List<TaskDetail> findByTaskId(Integer[] ids) {
        Integer taskType = taskHeaderService.getById(ids[0]).getTaskType();
        String filterConfigCode = "";
        if (taskType.equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT) || taskType.equals(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)) {
            ReceiptPreference receiptPreference = receiptPreferenceService.list().get(0);
            filterConfigCode = receiptPreference.getListingRules();
        }
        if (taskType.equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT) || taskType.equals(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT)) {
            ShipmentPreference shipmentPreference = shipmentPreferenceService.list().get(0);
            filterConfigCode = shipmentPreference.getShipmentPickingRule();
        }
        FilterConfigDetail filterConfigDetail = new FilterConfigDetail();
        if (StringUtils.isNotEmpty(filterConfigCode)) {
            LambdaQueryWrapper<FilterConfigDetail> detailQueryWrapper = Wrappers.lambdaQuery();
            detailQueryWrapper.eq(FilterConfigDetail::getCode, filterConfigCode);
            filterConfigDetail = filterConfigDetailService.getOne(detailQueryWrapper);
        }
170
171
        //Integer数组转object数组
        Object[] objects = new Object[ids.length];
172
173
174
        try {
            for (int i = 0; i < ids.length; i++) {
                Object a = (ids[i]);
175
176
                objects[i] = a;
            }
177
        } catch (Exception e) {
178
179
            throw new ServiceException(e.toString());
        }
180
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
181
        queryWrapper
182
                .in(TaskDetail::getTaskId, objects)
183
184
185
186
187
                .last(StringUtils.isNotEmpty(filterConfigDetail.getStatement()), filterConfigDetail.getStatement());
        return this.list(queryWrapper);
    }

    /**
188
     * 根据任务头表id查询任务明细
189
     *
190
191
192
193
194
195
196
197
198
     * @param id
     * @return
     */
    @Override
    public List<TaskDetail> findByTaskId(Integer id) {
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(TaskDetail::getTaskId, id);
        return this.list(queryWrapper);
    }
199
200
    @Override
201
    public void createTaskDetailByReceipt(TaskHeader task, ReceiptContainerDetail item) {
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
        TaskDetail taskDetail = new TaskDetail();
        taskDetail.setTaskId(task.getId());
        taskDetail.setTaskType(task.getTaskType());
        taskDetail.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_RECEIPT);
        taskDetail.setWarehouseCode(task.getWarehouseCode());
        taskDetail.setAllocationId(item.getId());
        taskDetail.setCompanyCode(task.getCompanyCode());
        taskDetail.setMaterialCode(item.getMaterialCode());
        taskDetail.setMaterialName(item.getMaterialName());
        taskDetail.setMaterialSpec(item.getMaterialSpec());
        taskDetail.setMaterialUnit(item.getMaterialUnit());
        taskDetail.setInventorySts(item.getInventorySts());
        taskDetail.setBillCode(item.getReceiptCode());
        taskDetail.setBillDetailId(item.getReceiptDetailId());
        taskDetail.setQty(item.getQty());
        taskDetail.setContainerCode(task.getContainerCode());
        taskDetail.setFromLocation(task.getFromLocation());
周鸿 authored
219
        taskDetail.setGoodsShelfNo(task.getGoodsShelfNo());
220
        if (task.getToLocation() != null) {
221
222
            taskDetail.setToLocation(task.getToLocation());
        }
223
        String receiptCode = item.getReceiptCode();
周鸿 authored
224
225
        ReceiptHeader receiptHeader = receiptHeaderService.getOne(new LambdaQueryWrapper<ReceiptHeader>()
                .eq(ReceiptHeader::getCode, receiptCode)
226
                .eq(ReceiptHeader::getWarehouseCode, item.getWarehouseCode())
周鸿 authored
227
        );
228
229
        taskDetail.setReferenceCode(receiptHeader.getReferCode());
230
231
        taskDetail.setBatch(item.getBatch());
        taskDetail.setProjectNo(item.getProjectNo());
232
        taskDetail.setColor(item.getColor());
233
234
235
236
        if (!this.save(taskDetail)) {
            throw new ServiceException("生成任务明细失败");
        }
    }
237
周鸿 authored
238
239
240
    @Override
    public List<TaskDetail> selectListEntityUndone(TaskDetail taskDetail) {
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
241
242
243
244
245
        queryWrapper.eq(StringUtils.isNotEmpty(taskDetail.getContainerCode()), TaskDetail::getContainerCode, taskDetail.getContainerCode());
        queryWrapper.le(StringUtils.isNotNull(taskDetail.getStatus()), TaskDetail::getStatus, taskDetail.getStatus());
        queryWrapper.eq(StringUtils.isNotNull(taskDetail.getNumber()), TaskDetail::getNumber, taskDetail.getNumber());
        queryWrapper.eq(StringUtils.isNotEmpty(taskDetail.getWarehouseCode()), TaskDetail::getWarehouseCode, taskDetail.getWarehouseCode());
        queryWrapper.ne(TaskDetail::getTaskType, QuantityConstant.TASK_TYPE_EMPTYSHIPMENT);
246
247
        return this.list(queryWrapper);
    }
248
249
250
251
    @Override
    public List<TaskDetail> selectListByGoodshelf(TaskDetail taskDetail) {
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
252
253
254
255
256
        queryWrapper.eq(StringUtils.isNotEmpty(taskDetail.getContainerCode()), TaskDetail::getContainerCode, taskDetail.getContainerCode());
        queryWrapper.eq(StringUtils.isNotNull(taskDetail.getStatus()), TaskDetail::getStatus, taskDetail.getStatus());
        queryWrapper.eq(StringUtils.isNotNull(taskDetail.getNumber()), TaskDetail::getNumber, taskDetail.getNumber());
        queryWrapper.eq(StringUtils.isNotEmpty(taskDetail.getWarehouseCode()), TaskDetail::getWarehouseCode, taskDetail.getWarehouseCode());
        queryWrapper.lt(TaskDetail::getStatus, 100);
周鸿 authored
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
        return this.list(queryWrapper);
    }

    @Override
    public void updateByInventory(TaskDetail taskDetail) {
        InventoryDetail inventory = new InventoryDetail();
        inventory.setContainerCode(taskDetail.getContainerCode());
        try {
            inventory.setCompanyCode(taskDetail.getCompanyCode());
        } catch (Exception e) {
            e.printStackTrace();
        }
        inventory.setWarehouseCode(taskDetail.getWarehouseCode());
        inventory.setMaterialCode(taskDetail.getMaterialCode());
        List<InventoryDetail> inventories = inventoryDetailService.selectListEntityByEqual(inventory);
        BigDecimal number = inventoryDetailService.addQty(inventories);
周鸿 authored
273
        taskDetail.setWarehouseQty(number);
274
        if (QuantityConstant.TASK_TYPE_WHOLESHIPMENT == taskDetail.getTaskType() || QuantityConstant.TASK_TYPE_SORTINGSHIPMENT == taskDetail.getTaskType()) {
周鸿 authored
275
276
277
278
279
            if (number.compareTo(taskDetail.getQty()) > 0) {
                taskDetail.setRemainder((number.subtract(taskDetail.getQty())));
            } else {
                taskDetail.setRemainder(new BigDecimal(0));
            }
280
        } else if (QuantityConstant.TASK_TYPE_WHOLERECEIPT == taskDetail.getTaskType() || QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT == taskDetail.getTaskType()) {
周鸿 authored
281
            taskDetail.setRemainder((number.add(taskDetail.getQty())));
282
        } else {
周鸿 authored
283
            taskDetail.setRemainder((number.add(taskDetail.getQty())));
周鸿 authored
284
        }
周鸿 authored
285
286
287
        Material material = materialService.getMaterialByCode(taskDetail.getMaterialCode());
        if (material != null) {
288
            taskDetail.setMaterialOldCode(material.getUserDef1());
289
290
            taskDetail.setMaterialSpec(material.getSpec());
            taskDetail.setMaterialName(material.getName());
291
        }
周鸿 authored
292
        taskDetail.setLastUpdatedBy(ShiroUtils.getUserName());
周鸿 authored
293
294
295
296
297
        inventoryDetailService.selectUwarehouse(taskDetail);
    }

    @Override
    public void updateTask(TaskDetail taskDetail, BigDecimal number) {
298
        if (taskDetail.getTaskType().equals("s")) {
周鸿 authored
299
            //修改出库子单据,修改出库组盘明细
300
301
            ShipmentDetail shipmentDetail = shipmentDetailService.getById(taskDetail.getBillDetailId());
            if (shipmentDetail == null) {
周鸿 authored
302
303
304
305
                throw new ServiceException("找不到子单");
            }
            shipmentDetail.setStatus(200);
            shipmentDetail.setQtyCompleted(shipmentDetail.getQtyCompleted().subtract(taskDetail.getQty()).add(number));
306
            if (!shipmentDetailService.updateById(shipmentDetail)) {
周鸿 authored
307
                throw new ServiceException("修改子单据失败");
308
309
            }
            ;
周鸿 authored
310
311
312
            ShipmentHeader shipmentHeader = shipmentHeaderService.getById(taskDetail.getBillId());
            if (shipmentHeader == null) {
周鸿 authored
313
314
                throw new ServiceException("找不到主单");
            }
315
            if (shipmentHeader.getLastStatus() > 200) {
周鸿 authored
316
                shipmentHeader.setLastStatus(200);
317
                if (!shipmentHeaderService.updateById(shipmentHeader)) {
周鸿 authored
318
319
320
321
                    throw new ServiceException("修改主单据失败");
                }
            }
            //修改出库组盘明细
322
323
            ShipmentContainerDetail shipmentContainerDetail = shipmentContainerDetailService.getById(taskDetail.getAllocationId());
            if (shipmentContainerDetail == null) {
周鸿 authored
324
325
326
                throw new ServiceException("找不到组盘明细");
            }
            shipmentContainerDetail.setQty(number);
327
            if (!shipmentContainerDetailService.updateById(shipmentContainerDetail)) {
周鸿 authored
328
                throw new ServiceException("修改组盘明细失败");
329
330
331
            }
            ;
        } else {
周鸿 authored
332
            //修改入库子单据,修改入库组盘明细
333
334
            ReceiptDetail receiptDetail = receiptDetailService.getById(taskDetail.getBillDetailId());
            if (receiptDetail == null) {
周鸿 authored
335
336
                throw new ServiceException("找不到子单");
            }
337
            receiptDetail.setStatus((short) 200);
周鸿 authored
338
            receiptDetail.setTaskQty(receiptDetail.getTaskQty().subtract(taskDetail.getQty()).add(number));
339
            if (!receiptDetailService.updateById(receiptDetail)) {
周鸿 authored
340
                throw new ServiceException("修改子单据失败");
341
342
            }
            ;
周鸿 authored
343
344
345
            ReceiptHeader receiptHeader = receiptHeaderService.getById(taskDetail.getBillId());
            if (receiptHeader == null) {
周鸿 authored
346
347
                throw new ServiceException("找不到主单");
            }
348
            if (receiptHeader.getLastStatus() > 200) {
周鸿 authored
349
                receiptHeader.setLastStatus(200);
350
                if (!receiptHeaderService.updateById(receiptHeader)) {
周鸿 authored
351
352
353
354
                    throw new ServiceException("修改主单据失败");
                }
            }
            //修改出库组盘明细
355
356
            ReceiptContainerDetail receiptContainerDetail = receiptContainerDetailService.getById(taskDetail.getAllocationId());
            if (receiptContainerDetail == null) {
周鸿 authored
357
358
359
                throw new ServiceException("找不到组盘明细");
            }
            receiptContainerDetail.setQty(number);
360
            if (!receiptContainerDetailService.updateById(receiptContainerDetail)) {
周鸿 authored
361
                throw new ServiceException("修改组盘明细失败");
362
363
            }
            ;
周鸿 authored
364
365
366
        }
        //修改子任务
        taskDetail.setQty(number);
367
        if (!this.updateById(taskDetail)) {
周鸿 authored
368
369
370
371
372
            throw new ServiceException("修改子任务失败");
        }
    }

    public List<TaskDetail> selectByIdList(List<Integer> ids) {
373
        if (ids == null) {
周鸿 authored
374
375
376
377
378
379
380
            return null;
        }
        String[] idArray = ids.toArray(new String[ids.size()]);
        LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.in(TaskDetail::getId, idArray);
        return this.list(queryWrapper);
    }
381
周鸿 authored
382
383
    @Override
    public AjaxResult updateTaskDetail(String ids, String code) {
384
        if (StringUtils.isEmpty(ids) || StringUtils.isEmpty(code)) {
周鸿 authored
385
386
387
            return AjaxResult.error("容器编码不能为空!");
        }
        List<Integer> idList = Arrays.asList(Convert.toIntArray(ids));
388
        if (idList.isEmpty()) {
周鸿 authored
389
390
            return AjaxResult.error("任务详情id不能为空值!");
        }
391
392
        List<TaskDetail> taskDetails = this.selectByIdList(idList);
        if (taskDetails.isEmpty()) {
周鸿 authored
393
394
            return AjaxResult.error("未查询到任务详情!");
        }
395
        taskDetails.forEach(item -> {
周鸿 authored
396
397
398
399
400
401
            item.setContainerCode(code);
            item.setLastUpdatedBy(ShiroUtils.getLoginName());
        });
        this.updateContainerCode(taskDetails);
        return AjaxResult.success("容器修改成功!");
    }
402
周鸿 authored
403
    public int updateContainerCode(List<TaskDetail> list) {
404
        if (list.isEmpty()) {
周鸿 authored
405
406
            return 0;
        }
407
        for (int a = 0; a < list.size(); a++) {
周鸿 authored
408
409
            LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery();
            queryWrapper.in(TaskDetail::getId, list.get(a).getId());
410
            TaskDetail taskDetail = new TaskDetail();
周鸿 authored
411
            taskDetail.setLastUpdatedBy(list.get(a).getLastUpdatedBy());
412
            this.update(taskDetail, queryWrapper);
周鸿 authored
413
414
415
416
        }
        return 1;
    }
mahuandong authored
417
}