skyouc
2025-01-08 d1511d2d12b4223882fcfdabd3ba6b59c038edc4
#拣货单功能开发
13个文件已修改
6个文件已添加
730 ■■■■ 已修改文件
zy-asrs-admin/src/views/out/flat/index.vue 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/PageResult.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PickSheetController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PickSheet.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PickSheetDetl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/PickSheetDetlDto.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PageRequest.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java 192 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ManPickSheetDetlMapper.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MobileService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PickSheetDetlService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PickSheetService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PickSheetDetlServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PickSheetServiceImpl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/domain/BaseParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/resources/mapper/asrs/PickSheetDetlMapper.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/resources/mapper/asrs/PickSheetMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/views/out/flat/index.vue
New file
@@ -0,0 +1,142 @@
<template>
    <a-table :columns="columns" :data-source="datasource" bordered>
        <template #bodyCell="{column, record}">
            <template v-if="column.key === 'operate'">
                <a-button @click="viewDetail(record)" type="link">
                    {{ "查看明细" }}
                </a-button>
                <a-button @click="showDeleteConfirm(record)" danger type="link">{{"删除"}}</a-button>
            </template>
            <template v-if="column.key === 'status'">
               <a-tag :color="record.status === 1 ? 'green' : 'volcano'">
                   {{record.status === 1 ? "正常" : "禁用"}}
               </a-tag>
            </template>
        </template>
    </a-table>
    <a-modal ref="sheetDetl" v-model:open="show" :width="'80%'" title="拣货单明细" @ok="handleOk">
        <a-table :columns="childNodes" :data-source="childList">
            <template #bodyCell="{column, record}">
                <template v-if="column.key === 'status'">
                    <a-tag :color="record.status === 1 ? 'green' : 'volcano'">
                        {{record.status === 1 ? "正常" : "禁用"}}
                    </a-tag>
                </template>
            </template>
        </a-table>
    </a-modal>
</template>
<script>
    import {post, get} from "@/utils/request.js";
    import {message, Modal} from "ant-design-vue";
    import { createVNode } from 'vue';
    import {formatMessage} from "@/utils/localeUtils.js";
    import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
    export default {
        name: "out-stock-flat",
        data() {
            return {
                columns: [
                    {key: 'number', title: '序号', dataIndex: 'number'},
                    {key: 'pickNo', title: '单号', dataIndex: 'pickNo'},
                    {key: 'waveNo', title: '波次号', dataIndex: 'waveNo'},
                    {key: 'anfme', title: '数量', dataIndex: 'anfme'},
                    {key: 'status', title: '单据状态', dataIndex: 'status'},
                    {key: 'memo', title: '备注', dataIndex: ''},
                    {key: 'createdTime', title: '创建时间', dataIndex: 'createdTime'},
                    {key: 'updatedTime', title: '修改时间', dataIndex: 'updatedTime'},
                    {key: 'operate', title: '操作', dataIndex: 'operate'}
                ],
                childNodes: [
                    {key: 'number', title: '序号', dataIndex: 'number'},
                    {key: 'maktx', title: '物料名称', dataIndex: 'maktx'},
                    {key: 'matnr', title: '物料编码', dataIndex: 'matnr'},
                    {key: 'batch', title: '批号', dataIndex: 'batch'},
                    {key: 'locNo', title: '库位', dataIndex: 'locNo'},
                    {key: 'barcode', title: '拖盘码', dataIndex: 'barcode'},
                    {key: 'anfme', title: '数量', dataIndex: 'anfme'},
                    {key: 'memo', title: '备注', dataIndex: ''},
                    {key: 'status', title: '单据状态', dataIndex: 'status'},
                    // {key: 'operate', title: '操作', dataIndex: 'operate'}
                ],
                datasource: [],
                childList:[],
                show: false,
            }
        },
        mounted() {
            //获取拣货单数据源
            this.getOutFlatSheet();
        },
        methods: {
             showDeleteConfirm(record){
                 let that = this
                Modal.confirm({
                    title: '是否确认删除当前拣货单',
                    icon: createVNode(ExclamationCircleOutlined),
                    content: '连同明细一起删除',
                    okText: '确认',
                    okType: 'danger',
                    cancelText: '取消',
                    onOk() {
                        that.removeRow(record)
                    },
                    onCancel() {
                        console.log('Cancel');
                    },
                });
            },
            //删除当前行
            removeRow(record) {
                let that = this
                get('/api/pick/flat/remove/' + record.id).then((resp)=>{
                    let result = resp.data;
                    if (result.code == 200) {
                        that.getOutFlatSheet()
                        message.success(formatMessage('page.delete.success', '删除成功'));
                    } else {
                        message.error(result.msg);
                    }
                })
            },
            //查看明细
            viewDetail(record) {
                this.show = !this.show
                this.getSheetDetl(record)
            },
            getOutFlatSheet() {
                let that = this
                post('/api/pick/flat/page',{page: {currnt: 1, size: 10}}).then((resp) => {
                    let result = resp.data;
                    if (result.code == 200) {
                        // message.success(formatMessage('page.add.success', '成功'));
                        that.datasource = result.data
                    } else {
                        message.error(result.msg);
                    }
                })
            },
            getSheetDetl(record) {
              let that = this
                post('/api/pick/flat/detl/page',{page: {currnt: 1, size: 10}, params: {pickId: record.id}}).then((resp) => {
                    let result = resp.data;
                    if (result.code == 200) {
                        // message.success(formatMessage('page.add.success', '成功'));
                        that.childList = result.data
                    } else {
                        message.error(result.msg);
                    }
                })
            },
        }
    }
</script>
<style scoped>
</style>
zy-asrs-framework/src/main/java/com/zy/asrs/framework/common/PageResult.java
New file
@@ -0,0 +1,13 @@
package com.zy.asrs.framework.common;
import lombok.Data;
public class PageResult<T> extends R {
    //总数
    Integer total;
    public PageResult (String msg, Integer code, T data) {
        super(code, msg);
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java
@@ -1,6 +1,9 @@
package com.zy.asrs.wms.asrs.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.common.domain.CodeRes;
import com.zy.asrs.common.domain.enums.LoginSystemType;
import com.zy.asrs.framework.annotations.ManagerAuth;
@@ -10,11 +13,14 @@
import com.zy.asrs.wms.asrs.entity.Order;
import com.zy.asrs.wms.asrs.entity.WaitPakin;
import com.zy.asrs.wms.asrs.entity.dto.OrderInfoDto;
import com.zy.asrs.wms.asrs.entity.dto.PickSheetDetlDto;
import com.zy.asrs.wms.asrs.entity.param.BatchMergeOrdersParam;
import com.zy.asrs.wms.asrs.entity.param.PageRequest;
import com.zy.asrs.wms.asrs.entity.param.PakinOnShelvesParams;
import com.zy.asrs.wms.asrs.service.MobileService;
import com.zy.asrs.wms.asrs.service.OrderService;
import com.zy.asrs.wms.asrs.service.WaitPakinService;
import com.zy.asrs.wms.common.domain.BaseParam;
import com.zy.asrs.wms.system.controller.BaseController;
import com.zy.asrs.wms.system.entity.Host;
import com.zy.asrs.wms.system.entity.User;
@@ -178,4 +184,37 @@
        }
    }
    /**
     * 获取拣货明细
     * @return
     */
    @GetMapping("/pick/detl/{code}")
    public R pickDetlByPickNo(@PathVariable String code) {
        if (StringUtil.isNullOrEmpty(code)) {
            return R.error("拣货单据编码不能为空!!");
        }
        PickSheetDetlDto pickSheetDetls =  mobileService.outFlatSheet(code);
        return R.ok(pickSheetDetls);
    }
    /**
     * 拣货单确认出库
     * @param code
     * @return
     */
    @GetMapping("/pick/confirm/{code}")
    public R confirmOutFlatSheet(@PathVariable String code) {
        if (StringUtil.isNullOrEmpty(code)) {
            return R.error("拣货单据编码不能为空!!");
        }
        if (!mobileService.confirmFlatSheet(code)) {
            return R.error("出库失败!!");
        }
        return R.ok("出库成功!!");
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PickSheetController.java
@@ -1,14 +1,55 @@
package com.zy.asrs.wms.asrs.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.wms.asrs.entity.PickSheetDetl;
import com.zy.asrs.wms.asrs.entity.param.PageRequest;
import com.zy.asrs.wms.asrs.service.PickSheetService;
import com.zy.asrs.wms.system.controller.BaseController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RequestMapping("/pick")
@RequestMapping("/api")
@RestController
public class PickSheetController extends BaseController {
    @Autowired
    private PickSheetService pickSheetService;
    /**
     * 平仓出库拣货单
     * @return
     */
    @PostMapping("/pick/flat/page")
    public R getOutFlatSheet(@RequestBody PageRequest params) {
        IPage page = pickSheetService.getOutFlatSheet(params);
        return R.ok(page.getRecords());
    }
    /**
     * 获取拣货单明细
     * @param pageRequest
     * @return
     */
    @PostMapping("/pick/flat/detl/page")
    public R getSheetDetl(@RequestBody PageRequest pageRequest) {
        IPage page = pickSheetService.getSheetDetl(pageRequest);
        return R.ok(page.getRecords());
    }
    /**
     * 获取拣货单明细
     * @param id
     * @return
     */
    @GetMapping("/pick/flat/remove/{id}")
    public R getRemoveSheet(@PathVariable String id) {
        int result = pickSheetService.removePickSheet(Long.valueOf(id));
        if (result > 0) {
            return R.ok("删除成功!!");
        } else {
            return R.error("删除失败!!");
        }
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PickSheet.java
@@ -3,16 +3,25 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
/**
 * man_pick_sheet
 */
@Data
@Accessors(chain = true)
@TableName("man_pick_sheet")
public class PickSheet implements Serializable {
    /**
     * 主键
     */
    @TableId
    private Long id;
    /**
@@ -33,7 +42,7 @@
    /**
     * 数量
     */
    private BigDecimal anfme;
    private Double anfme;
    /**
     * 备注
@@ -43,11 +52,15 @@
    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createdTime;
    /**
     * 修改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updatedTime;
    private Long hostId;
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/PickSheetDetl.java
@@ -3,32 +3,30 @@
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
/**
 * man_pick_sheet_detl
 */
@Data
@Accessors(chain = true)
@TableName("man_pick_sheet_detl")
public class PickSheetDetl implements Serializable {
    /**
     * 主键
     */
    @TableId
    private Long id;
    /**
     * 拣货单标识
     */
    private Long pickId;
    /**
     * 订单标识
     */
    private Long orderId;
    /**
     * 订单明细标识
     */
    private Long orderDetlId;
    /**
     * 物料主键标识
@@ -39,6 +37,11 @@
     * 库位主键标识
     */
    private Long locId;
    /**
     * 库位明细ID
     */
    private Long locDetlId;
    /**
     * 物料名称
@@ -53,7 +56,7 @@
    /**
     * 批号
     */
    private Long batch;
    private String batch;
    /**
     * 数量
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/PickSheetDetlDto.java
New file
@@ -0,0 +1,14 @@
package com.zy.asrs.wms.asrs.entity.dto;
import com.zy.asrs.wms.asrs.entity.PickSheet;
import com.zy.asrs.wms.asrs.entity.PickSheetDetl;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class PickSheetDetlDto extends PickSheet implements Serializable {
    private List<PickSheetDetl> pickSheetDetlList;
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/PageRequest.java
New file
@@ -0,0 +1,23 @@
package com.zy.asrs.wms.asrs.entity.param;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sun.xml.internal.ws.model.WrapperParameter;
import lombok.Data;
import java.sql.Wrapper;
import java.util.Map;
@Data
public class PageRequest{
    //请求参数拼接
    private QueryWrapper queryWrapper;
    Map<String, Object> params;
    /**
     * 分页, pageSize = 10 ,page = 1
     */
    Page page;
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/manage/OutManage.java
@@ -1,6 +1,7 @@
package com.zy.asrs.wms.asrs.manage;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.dto.*;
@@ -14,10 +15,13 @@
import com.zy.asrs.wms.utils.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -63,6 +67,12 @@
    private CacheSiteService cacheSiteService;
    @Autowired
    private WaveSeedService waveSeedService;
    @Autowired
    private PickSheetService pickSheetService;
    @Autowired
    private PickSheetDetlService pickSheetDetlService;
    @Autowired
    private MatService matService;
    /**
     * 出库
@@ -82,7 +92,7 @@
            long taskType = locDto.getAll() ? 101L : 103L;
            Loc loc = locService.getById(locDto.getLocId());
            if(loc == null) {
            if (loc == null) {
                throw new CoolException("库位不存在");
            }
@@ -105,7 +115,7 @@
            // 工作档明细保存
            for (OutDetlDto detl : locDto.getDetls()) {
                LocDetl locDetl = locDetlService.getById(detl.getDetlId());
                if(locDetl == null) {
                if (locDetl == null) {
                    throw new CoolException("明细不存在");
                }
@@ -132,7 +142,7 @@
                    taskDetlField.sync(locDetlField);
                    taskDetlField.setDetlId(taskDetl.getId());
                    boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
                    if(!taskDetlFieldSave){
                    if (!taskDetlFieldSave) {
                        throw new CoolException("明细扩展生成失败");
                    }
                }
@@ -142,7 +152,7 @@
            loc.setLocStsId(LocStsType.R.val());
            loc.setUpdateTime(new Date());
            boolean locUpdate = locService.updateById(loc);
            if(!locUpdate){
            if (!locUpdate) {
                throw new CoolException("库位状态更新失败");
            }
        }
@@ -195,7 +205,9 @@
        //获取TCU符合条件库位
        for (OrderDetl orderDetl : orderDetls) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty() - orderDetl.getWorkQty()).orElse(0.0D);
            if (issued <= 0.0D) { continue; }
            if (issued <= 0.0D) {
                continue;
            }
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMat$().getMatnr(), orderDetl.getBatch(), orderDetl.getUniqueField());
            orderDetlLocMap.put(orderDetl.getId(), locDetls);
            for (LocDetl locDetl : locDetls) {
@@ -207,7 +219,7 @@
                    outDetlDto.setOrderDetlId(orderDetl.getId());
                    detlDtos.add(outDetlDto);
                    issued = issued - outDetlDto.getAnfme();
                }else {
                } else {
                    break;
                }
            }
@@ -220,7 +232,7 @@
            if (dtos == null) {
                dtos = new ArrayList<>();
                dtos.add(detlDto);
            }else {
            } else {
                dtos.add(detlDto);
            }
            map.put(locDetl.getLocId(), dtos);
@@ -329,11 +341,11 @@
                continue;
            }
            if(detlMap.containsKey(previewDto.getLocDetlId())) {
            if (detlMap.containsKey(previewDto.getLocDetlId())) {
                List<OrderOutBatchPreviewDto> previewDtos = detlMap.get(previewDto.getLocDetlId());
                previewDtos.add(previewDto);
                detlMap.put(previewDto.getLocDetlId(), previewDtos);
            }else {
            } else {
                List<OrderOutBatchPreviewDto> previewDtos = new ArrayList<>();
                previewDtos.add(previewDto);
                detlMap.put(previewDto.getLocDetlId(), previewDtos);
@@ -361,11 +373,11 @@
        HashMap<Long, List<OrderOutBatchPreviewDto>> map = new HashMap<>();
        for (OrderOutBatchPreviewDto previewDto : dtos) {
            if(map.containsKey(previewDto.getLocId())) {
            if (map.containsKey(previewDto.getLocId())) {
                List<OrderOutBatchPreviewDto> previewDtos = map.get(previewDto.getLocId());
                previewDtos.add(previewDto);
                map.put(previewDto.getLocId(), previewDtos);
            }else {
            } else {
                List<OrderOutBatchPreviewDto> previewDtos = new ArrayList<>();
                previewDtos.add(previewDto);
                map.put(previewDto.getLocId(), previewDtos);
@@ -411,12 +423,12 @@
            for (OrderOutBatchPreviewDto dto : previewDtos) {
                LocDetl locDetl = locDetlService.getById(dto.getLocDetlId());
                if(locDetl == null) {
                if (locDetl == null) {
                    throw new CoolException("明细不存在");
                }
                OrderDetl orderDetl = orderDetlService.getById(dto.getOrderDetlId());
                if(orderDetl == null) {
                if (orderDetl == null) {
                    throw new CoolException("订单明细不存在");
                }
                orderUtils.updateWorkQty(dto.getOrderDetlId(), dto.getAnfme());
@@ -442,7 +454,7 @@
                    taskDetlField.setId(null);
                    taskDetlField.setDetlId(taskDetl.getId());
                    boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
                    if(!taskDetlFieldSave){
                    if (!taskDetlFieldSave) {
                        throw new CoolException("明细扩展生成失败");
                    }
                }
@@ -452,7 +464,7 @@
            loc.setLocStsId(LocStsType.R.val());
            loc.setUpdateTime(new Date());
            boolean locUpdate = locService.updateById(loc);
            if(!locUpdate){
            if (!locUpdate) {
                throw new CoolException("库位状态更新失败");
            }
@@ -477,7 +489,7 @@
        }
        List<OrderDetl> orderDetls = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderId, orderIds));
        if(orderDetls.isEmpty()){
        if (orderDetls.isEmpty()) {
            throw new CoolException("订单明细不存在");
        }
        orderDetls = orderDetlService.parseDetl(orderDetls);
@@ -490,7 +502,7 @@
                Double anfme = locDetlStockMap.get(matUniqueKey);
                anfme += issued;
                locDetlStockMap.put(matUniqueKey, anfme);
            }else {
            } else {
                locDetlStockMap.put(matUniqueKey, issued);
            }
        }
@@ -534,7 +546,7 @@
            dto.setFieldParams(fieldParams);
        }
        FieldSortParam sortParam = new FieldSortParam("anfme","desc");
        FieldSortParam sortParam = new FieldSortParam("anfme", "desc");
        List<FieldSortParam> sortParams = new ArrayList<>();
        sortParams.add(sortParam);
@@ -600,9 +612,11 @@
        for (MergePreviewDto dto : param) {
            Double anfme = dto.getAnfme() - dto.getWorkQty();
            //减去平库数量后,小于等于0,跳出处理
            if (anfme <= 0) {continue;}
            if (anfme <= 0) {
                continue;
            }
            List<LocDetl> locDetls = locDetlService.queryStock(dto.getMatnr(), dto.getBatch(), dto.getFieldParams(), sortParams);
            if(locDetls.isEmpty()){
            if (locDetls.isEmpty()) {
                MergePreviewResultDto resultDto = new MergePreviewResultDto();
                resultDto.sync(dto);
                resultDto.setLocs(new ArrayList<>());
@@ -673,7 +687,7 @@
    @Transactional(rollbackFor = Exception.class)
    public void orderOutMerge(OrderOutMergeParamDto dto) {
        if(dto == null){
        if (dto == null) {
            throw new CoolException("参数不能为空");
        }
@@ -723,7 +737,7 @@
                List<OrderDetl> detls = detlMap.get(matUniqueKey);
                detls.add(orderDetl);
                detlMap.put(matUniqueKey, detls);
            }else {
            } else {
                List<OrderDetl> detls = new ArrayList<>();
                detls.add(orderDetl);
                detlMap.put(matUniqueKey, detls);
@@ -757,7 +771,7 @@
                    orderOutMergeDto.setAnfme(issued);
                    updateWorkQty = issued;
                    requireAnfme -= issued;
                }else {
                } else {
                    orderOutMergeDto.setAnfme(requireAnfme);
                    updateWorkQty = requireAnfme;
                    requireAnfme -= requireAnfme;
@@ -777,7 +791,7 @@
            List<OrderOutMergeDto> list = null;
            if (map.containsKey(orderOutMergeDto.getLocId())) {
                list = map.get(orderOutMergeDto.getLocId());
            }else {
            } else {
                list = new ArrayList<>();
            }
            list.add(orderOutMergeDto);
@@ -823,12 +837,12 @@
            for (OrderOutMergeDto merge : list) {
                LocDetl locDetl = locDetlService.getById(merge.getLocDetlId());
                if(locDetl == null) {
                if (locDetl == null) {
                    throw new CoolException("明细不存在");
                }
                OrderDetl orderDetl = orderDetlService.getById(merge.getOrderDetlId());
                if(orderDetl == null) {
                if (orderDetl == null) {
                    throw new CoolException("订单明细不存在");
                }
@@ -853,7 +867,7 @@
                    taskDetlField.setId(null);
                    taskDetlField.setDetlId(taskDetl.getId());
                    boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
                    if(!taskDetlFieldSave){
                    if (!taskDetlFieldSave) {
                        throw new CoolException("明细扩展生成失败");
                    }
                }
@@ -865,7 +879,7 @@
            loc.setLocStsId(LocStsType.R.val());
            loc.setUpdateTime(new Date());
            boolean locUpdate = locService.updateById(loc);
            if(!locUpdate){
            if (!locUpdate) {
                throw new CoolException("库位状态更新失败");
            }
@@ -883,11 +897,12 @@
     * 4. 生成出库单PDA端,统一出库扣减库存
     * 5. 生成拣货单历史档,出库单据加入历史档,删除原单据
     * 6. 删除波次列表数据
     *
     * @param dto
     */
    @Transactional(rollbackFor = Exception.class)
    public void orderOutMergeWave(OrderOutMergeParamDto dto) {
        if(dto == null){
        if (dto == null) {
            throw new CoolException("参数不能为空");
        }
@@ -903,7 +918,6 @@
        /**
         * 波次合并出库
         * 1. 判断是平库还TCU库
         * 2. 根据单库单据类型
         * 2. 平库生成拣货单
         * 3. TCU库生成任务单
         */
@@ -917,17 +931,25 @@
        }
    }
    private Map<Long, List<OrderOutMergeDto>> checkLoc(List<OrderOutMergeParam>  mergeParams, Wave wave) {
    /**
     * 1. 判断当波次及库位明细是否存在
     * 2. 组合key-value(list)形式数据
     *
     * @param mergeParams
     * @param wave
     * @return
     */
    private Map<Long, List<OrderOutMergeDto>> checkLoc(List<OrderOutMergeParam> mergeParams, Wave wave) {
        HashMap<String, Double> stockMap = new HashMap<>();
        for (OrderOutMergeParam param : mergeParams) {
            String matUniqueKey = Utils.getMatUniqueKey(param.getMatnr(), param.getBatch(), param.getFieldParams());
            WaveDetl waveDetl = waveDetlService.getOne(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getStockIndex, matUniqueKey).eq(WaveDetl::getWaveId, wave.getId()));
            if(waveDetl == null){
            if (waveDetl == null) {
                throw new CoolException("波次数据不存在");
            }
            //获取当前需要执行数量
            double issued = Optional.of(waveDetl.getAnfme() - waveDetl.getWorkQty()).orElse(0.0D);
            if(!stockMap.containsKey(matUniqueKey)){
            if (!stockMap.containsKey(matUniqueKey)) {
                stockMap.put(matUniqueKey, issued);
            }
        }
@@ -935,33 +957,35 @@
        HashMap<Long, List<OrderOutMergeDto>> map = new HashMap<>();
        for (OrderOutMergeParam param : mergeParams) {
            LocDetl locDetl = locDetlService.getById(param.getLocDetlId());
            if(locDetl == null) {
            if (locDetl == null) {
                continue;
            }
            if (locDetl.getAnfme() - param.getAnfme() < 0) {
            //库位数量小于出库数量 //新增workQty用于平库锁库存
            if (locDetl.getAnfme() - locDetl.getWorkQty() - param.getAnfme() < 0) {
                continue;
            }
            OrderOutMergeDto orderOutMergeDto = new OrderOutMergeDto();
            orderOutMergeDto.sync(param);
            //fixme 确认stockMap是否有用,此处入值后却没有使用
            String matUniqueKey = Utils.getMatUniqueKey(param.getMatnr(), param.getBatch(), param.getFieldParams());
            Double issued = stockMap.get(matUniqueKey);
            if (issued - orderOutMergeDto.getAnfme() < 0) {
                orderOutMergeDto.setAnfme(issued);
                issued = 0D;
            }else {
            } else {
                issued -= orderOutMergeDto.getAnfme();
            }
            stockMap.put(matUniqueKey, issued);
            stockMap.put(matUniqueKey, issued);
            //根据库位做分类,可使用stream().groupby
            List<OrderOutMergeDto> list = null;
            if (map.containsKey(orderOutMergeDto.getLocId())) {
                list = map.get(orderOutMergeDto.getLocId());
            }else {
            } else {
                list = new ArrayList<>();
            }
            list.add(orderOutMergeDto);
            map.put(orderOutMergeDto.getLocId(), list);
        }
@@ -975,6 +999,7 @@
    /**
     * 根据不同库位类型生成出库拣单及TUC任务档
     *
     * @param dto
     * @param wave
     */
@@ -999,12 +1024,12 @@
                tucOrders.addAll(listMap.get(key));
            }
        });
        if (flatOrders.isEmpty()) {
        if (!flatOrders.isEmpty()) {
            //平库出库
            outStockByFlat(flatOrders, wave);
        }
        if (tucOrders.isEmpty()) {
        if (!tucOrders.isEmpty()) {
            //TUC出库
            outStockByTUC(tucOrders, wave);
        }
@@ -1018,12 +1043,15 @@
     * @param tucOrders
     * @param wave
     */
    private void outStockByTUC(List<OrderOutMergeParam> tucOrders, Wave wave) {
        Map<Long, List<OrderOutMergeDto>>  map = checkLoc(tucOrders, wave);
    private void outStockByTUC(List<OrderOutMergeParam> tucOrders, Wave wave) {//123
        Map<Long, List<OrderOutMergeDto>> map = checkLoc(tucOrders, wave);
        if (!Objects.isNull(map)) {
            return;
        }
        for (Map.Entry<Long, List<OrderOutMergeDto>> entry : map.entrySet()) {
            Long locId = entry.getKey();
            List<OrderOutMergeDto> list = entry.getValue();
            //判断是否全仓出库
            Boolean all = outUtils.isAllForMerge(locId, list);
            OrderOutMergeDto param = list.get(0);
            Long operationPortId = param.getOperationPort();
@@ -1041,7 +1069,7 @@
            if (operationPort == null) {
                throw new CoolException("作业口不存在");
            }
            //101 全拖出库   103 拣货出库
            long taskType = all ? 101L : 103L;
            Task task = new Task();
@@ -1059,7 +1087,7 @@
            for (OrderOutMergeDto merge : list) {
                LocDetl locDetl = locDetlService.getById(merge.getLocDetlId());
                if(locDetl == null) {
                if (locDetl == null) {
                    throw new CoolException("明细不存在");
                }
@@ -1085,7 +1113,7 @@
                    taskDetlField.setId(null);
                    taskDetlField.setDetlId(taskDetl.getId());
                    boolean taskDetlFieldSave = taskDetlFieldService.save(taskDetlField);
                    if(!taskDetlFieldSave){
                    if (!taskDetlFieldSave) {
                        throw new CoolException("明细扩展生成失败");
                    }
                }
@@ -1106,7 +1134,7 @@
            loc.setLocStsId(LocStsType.R.val());
            loc.setUpdateTime(new Date());
            boolean locUpdate = locService.updateById(loc);
            if(!locUpdate){
            if (!locUpdate) {
                throw new CoolException("库位状态更新失败");
            }
        }
@@ -1114,18 +1142,80 @@
    /**
     * 平库出库--生成出库拣货单
     * 1. 判断当前库位是否存在
     * 2. 一张单据一个波次
     * 3. 一个波次多条订单
     * 4. 一个库位可多条明细
     * 5. 拣货单完成后,释放库位明细锁定数量
     *
     * @param flatOrders
     * @param wave
     */
    private void outStockByFlat(List<OrderOutMergeParam> flatOrders, Wave wave) {
        //校验库存数量
        Map<Long, List<OrderOutMergeDto>> map = checkLoc(flatOrders, wave);
        //生成拣货单
        PickSheet pickSheet = new PickSheet();
        //波次数量汇总
        double sum = flatOrders.stream().mapToDouble(OrderOutMergeParam::getAnfme).sum();
        //生成拣货单号
        String pickNo = generatePickNO();
        pickSheet.setId(null)
                .setPickNo(pickNo)
                .setMemo(wave.getMemo())
                .setAnfme(sum)
                .setWaveId(wave.getId())
                .setWaveNo(wave.getWaveNo());
        if (!pickSheetService.save(pickSheet)) {
            throw new CoolException("拣货单写入失败!!");
        }
        //根据库位ID分组
        Map<Long, List<OrderOutMergeParam>> listMap = flatOrders.stream().collect(Collectors.groupingBy(OrderOutMergeParam::getLocId));
        //生成拣货明细
        listMap.keySet().forEach(key -> {
            Loc curLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getId, key));
            if (Objects.isNull(curLoc)) {
                throw new CoolException("主键." + key + "的库位不存在!!");
            }
            listMap.get(key).forEach(outOder -> {
                //获取库位明细信息
                LocDetl locDetl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getId, outOder.getLocDetlId()));
                PickSheetDetl sheetDetl = new PickSheetDetl();
                BeanUtils.copyProperties(outOder, sheetDetl);
                //获取物料信息
                Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, outOder.getMatnr()));
                //拣货单明细
                sheetDetl.setBarcode(curLoc.getBarcode())
                        .setPickId(pickSheet.getId())
                        .setAnfme(BigDecimal.valueOf(outOder.getAnfme()))
                        .setLocDetlId(locDetl.getId())
                        .setMaktx(mat.getMaktx())
                        .setMatId(mat.getId());
                if (!pickSheetDetlService.save(sheetDetl)) {
                    throw new CoolException("拣货明细列新失败");
                }
                //锁定库存量
                locDetl.setWorkQty(locDetl.getWorkQty() + outOder.getAnfme());
            });
        });
    }
    /**
     * 生成拣货单号
     *
     * @return
     */
    private String generatePickNO() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String format = simpleDateFormat.format(new Date());
        Random random = new Random();
        return "PN" + format + random.nextInt(10000);
    }
    @Transactional(rollbackFor = Exception.class)
    public void generateWave(GenerateWaveParam param) {
@@ -1277,7 +1367,7 @@
                    order.setWaveId(null);
                    order.setWaveNo(null);
                    order.setHasWave(0);
                    if(order.getOrderSettle().equals(OrderSettleType.WAVE.val())){
                    if (order.getOrderSettle().equals(OrderSettleType.WAVE.val())) {
                        order.setOrderSettle(OrderSettleType.WAIT.val());
                    }
                    if (!orderService.updateById(order)) {
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/mapper/ManPickSheetDetlMapper.java
@@ -1,21 +1,12 @@
package com.zy.asrs.wms.asrs.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zy.asrs.wms.asrs.entity.PickSheetDetl;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface ManPickSheetDetlMapper {
    int deleteByPrimaryKey(Long id);
public interface ManPickSheetDetlMapper extends BaseMapper<PickSheetDetl> {
    int insert(PickSheetDetl record);
    int insertSelective(PickSheetDetl record);
    PickSheetDetl selectByPrimaryKey(Long id);
    int updateByPrimaryKeySelective(PickSheetDetl record);
    int updateByPrimaryKey(PickSheetDetl record);
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/MobileService.java
@@ -1,7 +1,11 @@
package com.zy.asrs.wms.asrs.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zy.asrs.wms.asrs.entity.Loc;
import com.zy.asrs.wms.asrs.entity.PickSheet;
import com.zy.asrs.wms.asrs.entity.dto.PickSheetDetlDto;
import com.zy.asrs.wms.asrs.entity.param.BatchMergeOrdersParam;
import com.zy.asrs.wms.asrs.entity.param.PageRequest;
import com.zy.asrs.wms.asrs.entity.param.PakinOnShelvesParams;
import com.zy.asrs.wms.system.entity.Host;
@@ -15,4 +19,8 @@
    List<Host> getHosts();
    boolean pakinToStock(PakinOnShelvesParams shelvesParams);
    PickSheetDetlDto outFlatSheet(String code);
    boolean confirmFlatSheet(String code);
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PickSheetDetlService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.wms.asrs.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.wms.asrs.entity.PickSheetDetl;
public interface PickSheetDetlService extends IService<PickSheetDetl> {
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PickSheetService.java
@@ -1,8 +1,16 @@
package com.zy.asrs.wms.asrs.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.wms.asrs.entity.PickSheet;
import com.zy.asrs.wms.asrs.entity.PickSheetDetl;
import com.zy.asrs.wms.asrs.entity.param.PageRequest;
public interface PickSheetService extends IService<PickSheet> {
    IPage<PickSheet> getOutFlatSheet(PageRequest params);
    IPage<PickSheetDetl> getSheetDetl(PageRequest pageRequest);
    int removePickSheet(Long id);
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -1,12 +1,17 @@
package com.zy.asrs.wms.asrs.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.entity.dto.PickSheetDetlDto;
import com.zy.asrs.wms.asrs.entity.enums.*;
import com.zy.asrs.wms.asrs.entity.enums.OrderType;
import com.zy.asrs.wms.asrs.entity.param.BatchMergeOrdersParam;
import com.zy.asrs.wms.asrs.entity.param.GeneratePakInParam;
import com.zy.asrs.wms.asrs.entity.param.PageRequest;
import com.zy.asrs.wms.asrs.entity.param.PakinOnShelvesParams;
import com.zy.asrs.wms.asrs.service.*;
import com.zy.asrs.wms.system.entity.Host;
@@ -16,10 +21,8 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -45,7 +48,10 @@
    private LocAreaService locAreaService;
    @Autowired
    private LocAreaTypeService locAreaTypeService;
    @Autowired
    private PickSheetService pickSheetService;
    @Autowired
    private PickSheetDetlService pickSheetDetlService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -133,7 +139,8 @@
            LocDetl locDetl = new LocDetl();
            locDetl.setAnfme(pakin.getAnfme());
            locDetl.setBatch(pakin.getBatch());
            locDetl.setMatId(pakin.getMatnrId$());;
            locDetl.setMatId(pakin.getMatnrId$());
            ;
            locDetl.setCreateTime(new Date());
            locDetl.setOrderNo(pakin.getOrderNo());
            locDetl.setLocNo(loc.getLocNo());
@@ -178,15 +185,84 @@
        return true;
    }
//    /**
//     * 获取当前库位是否存在
//     * @param shelvesParams
//     * @return
//     */
//    @Override
//    public Loc selectPakinLocs(PakinOnShelvesParams shelvesParams) {
//        return locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getLocNo, shelvesParams.getLoc()));
//    }
    @Override
    public PickSheetDetlDto outFlatSheet(String code) {
        PickSheetDetlDto pickDetlDto = new PickSheetDetlDto();
        PickSheet pickSheet = pickSheetService.getOne(new LambdaQueryWrapper<PickSheet>()
                .eq(PickSheet::getPickNo, code)
                .eq(PickSheet::getDeleted, 0)
                .eq(PickSheet::getStatus, 1)
        );
        BeanUtils.copyProperties(pickSheet, pickDetlDto);
        if (Objects.isNull(pickDetlDto)) {
            throw new CoolException("对象复制失败!!");
        }
        List<PickSheetDetl> sheetDetls = pickSheetDetlService.list(new LambdaQueryWrapper<PickSheetDetl>()
                .eq(PickSheetDetl::getPickId, pickSheet.getId())
                .eq(PickSheetDetl::getStatus, 1)
                .eq(PickSheetDetl::getDeleted, 0));
        pickDetlDto.setPickSheetDetlList(sheetDetls);
        return pickDetlDto;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean confirmFlatSheet(String code) {
        PickSheet pickSheet = pickSheetService.getOne(new LambdaQueryWrapper<PickSheet>().eq(PickSheet::getPickNo, code));
        if (pickSheet.getStatus() == 1) {
            //状态修改为: 已转历史档
            pickSheet.setStatus(3);
            if (!pickSheetService.updateById(pickSheet)) {
                throw new CoolException("转历史档失败!!");
            } else{
                if (!pickSheetDetlService.update(new LambdaUpdateWrapper<PickSheetDetl>().eq(PickSheetDetl::getPickId, pickSheet.getId()).set(PickSheetDetl::getStatus, 3))) {
                    throw new CoolException("拣货单明细转历史档失败!!");
                }
            }
        } else {
            throw new CoolException("请勿操作历史档数据!!");
        }
        List<PickSheetDetl> sheetDetls = pickSheetDetlService.list(new LambdaQueryWrapper<PickSheetDetl>().eq(PickSheetDetl::getPickId, pickSheet.getId()));
        Map<Long, List<PickSheetDetl>> listMap = sheetDetls.stream().collect(Collectors.groupingBy(PickSheetDetl::getLocId));
        listMap.keySet().forEach(key -> {
            Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getId, key));
            listMap.get(key).forEach(pickDetl -> {
                LocDetl detl = locDetlService.getOne(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getId, pickDetl.getLocDetlId()));
                if (Objects.isNull(detl)) {
                    throw new CoolException("数据错误!!");
                }
                //更新锁定库存
                BigDecimal workQty = BigDecimal.valueOf(detl.getAnfme()).subtract(pickDetl.getAnfme());
                detl.setWorkQty(workQty.doubleValue());
                //计算结果小于等于零,移出库存明细
                BigDecimal qty = BigDecimal.valueOf(detl.getAnfme()).subtract(pickDetl.getAnfme());
                detl.setAnfme(qty.doubleValue());
                if (qty.compareTo(new BigDecimal("0.00")) <= 0) {
                    detl.setDeleted(1);
                    if (!locDetlService.removeById(detl)) {
                        throw new CoolException("库存明细删除失败!!");
                    }
                } else { //结果大于零,更新库存明细
                    if (!locDetlService.updateById(detl)) {
                        throw new CoolException("库存明细更新失败!!");
                    }
                }
            });
            /**明细更新完成后,判断是否为空,为空更新主单状态为空库,拖盘码清空,不为空不做更新**/
            List<LocDetl> list = locDetlService.list(new LambdaQueryWrapper<LocDetl>().eq(LocDetl::getLocId, loc.getId()).eq(LocDetl::getDeleted, 0));
            if (list.isEmpty()) {
                boolean update = locService.update(new LambdaUpdateWrapper<Loc>()
                        .eq(Loc::getId, loc.getId())
                        .set(Loc::getBarcode, null)
                        .set(Loc::getUpdateTime, new Date())
                        .set(Loc::getLocStsId, LocStsType.O.val()));
                if (update) {
                    throw new CoolException("库存更新失败!! ");
                }
            }
        });
        return true;
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PickSheetDetlServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.wms.asrs.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.asrs.wms.asrs.entity.PickSheetDetl;
import com.zy.asrs.wms.asrs.mapper.ManPickSheetDetlMapper;
import com.zy.asrs.wms.asrs.service.PickSheetDetlService;
import org.springframework.stereotype.Service;
@Service
public class PickSheetDetlServiceImpl extends ServiceImpl<ManPickSheetDetlMapper, PickSheetDetl> implements PickSheetDetlService {
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PickSheetServiceImpl.java
@@ -1,12 +1,72 @@
package com.zy.asrs.wms.asrs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zy.asrs.wms.asrs.entity.PickSheet;
import com.zy.asrs.wms.asrs.entity.PickSheetDetl;
import com.zy.asrs.wms.asrs.entity.param.PageRequest;
import com.zy.asrs.wms.asrs.mapper.ManPickSheetDetlMapper;
import com.zy.asrs.wms.asrs.mapper.ManPickSheetMapper;
import com.zy.asrs.wms.asrs.service.PickSheetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Objects;
@Service
public class PickSheetServiceImpl extends ServiceImpl<ManPickSheetMapper, PickSheet> implements PickSheetService {
    @Autowired
    private ManPickSheetDetlMapper pickSheetDetlMapper;
    /**
     * 获取拣货单列表
     * @param params
     * @return
     */
    @Override
    public IPage<PickSheet> getOutFlatSheet(PageRequest params) {
        LambdaQueryWrapper<PickSheet> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(PickSheet::getDeleted, 0).eq(PickSheet::getStatus, 1);
        if (!Objects.isNull(params.getParams())) {
            lambdaQueryWrapper.eq(!Objects.isNull(params.getParams().get("pickNo")),PickSheet::getPickNo, params.getParams().get("pickNo"))
                    .eq(!Objects.isNull(params.getParams().get("id")), PickSheet::getId, params.getParams().get("id"))
                    .eq(!Objects.isNull(params.getParams().get("waveNo")), PickSheet::getWaveNo, params.getParams().get("waveNo"));
        }
        return this.baseMapper.selectMapsPage(params.getPage(), lambdaQueryWrapper);
    }
    /**
     * 获取拣货单明细
     * @param pageRequest
     * @return
     */
    @Override
    public IPage<PickSheetDetl> getSheetDetl(PageRequest pageRequest) {
        LambdaQueryWrapper<PickSheetDetl> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(PickSheetDetl::getDeleted, 0).eq(PickSheetDetl::getStatus, 1);
        if (!Objects.isNull(pageRequest.getParams())) {
            lambdaQueryWrapper.eq(!Objects.isNull(pageRequest.getParams().get("maktx")),PickSheetDetl::getMaktx, pageRequest.getParams().get("maktx"))
                    .eq(!Objects.isNull(pageRequest.getParams().get("batch")), PickSheetDetl::getBatch, pageRequest.getParams().get("batch"))
                    .eq(!Objects.isNull(pageRequest.getParams().get("mantr")), PickSheetDetl::getMatnr, pageRequest.getParams().get("mantr"))
                    .eq(!Objects.isNull(pageRequest.getParams().get("locNo")), PickSheetDetl::getLocNo, pageRequest.getParams().get("locNo"))
                    .eq(!Objects.isNull(pageRequest.getParams().get("pickId")), PickSheetDetl::getPickId, pageRequest.getParams().get("pickId"))
                    .eq(!Objects.isNull(pageRequest.getParams().get("barcode")), PickSheetDetl::getBarcode, pageRequest.getParams().get("barcode"));
        }
        return pickSheetDetlMapper.selectMapsPage(pageRequest.getPage(), lambdaQueryWrapper);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int removePickSheet(Long id) {
        if (this.update(new LambdaUpdateWrapper<PickSheet>().eq(PickSheet::getId, id).set(PickSheet::getDeleted, 1))) {
            return pickSheetDetlMapper.update(new LambdaUpdateWrapper<PickSheetDetl>().eq(PickSheetDetl::getPickId, id).set(PickSheetDetl::getDeleted, 1));
        }
        return 0;
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/common/domain/BaseParam.java
@@ -1,6 +1,8 @@
package com.zy.asrs.wms.common.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;
import java.io.Serializable;
zy-asrs-wms/src/main/resources/mapper/asrs/PickSheetDetlMapper.xml
@@ -4,8 +4,6 @@
  <resultMap id="BaseResultMap" type="com.zy.asrs.wms.asrs.entity.PickSheetDetl">
    <id column="id" jdbcType="BIGINT" property="id" />
    <result column="pick_id" jdbcType="BIGINT" property="pickId" />
    <result column="order_id" jdbcType="BIGINT" property="orderId" />
    <result column="order_detl_id" jdbcType="BIGINT" property="orderDetlId" />
    <result column="mat_id" jdbcType="BIGINT" property="matId" />
    <result column="loc_id" jdbcType="BIGINT" property="locId" />
    <result column="maktx" jdbcType="VARCHAR" property="maktx" />
zy-asrs-wms/src/main/resources/mapper/asrs/PickSheetMapper.xml
@@ -21,4 +21,5 @@
    created_by, updated_by, `status`, deleted
  </sql>
</mapper>