#
23. PDA拣货单据,勾选或点击确认按钮后,完成当前单据 (已完成)
24. PDA出库成功后,界面数据重置,避免重复操作 (已修复)
25. PDA接口请求,添加一个Loading遮档 (已修复)
27. 非平库单据,在平库可做入库操作 (已修复)
28. 平库已组拖数据,组拖完成后依然可组拖 (已修复)
29. 平库入库后,订单明细没有添加(已修复)
30. 平库入库后,单据类型没有修改(已修复)
31. 没有绑定播种位,不能进行播种,前后端都需加判定(已修复)
33. 平库入库未修改入库已完成数量(已修复)
34. cacheSite缓存站点逻辑需重新梳理,入库生成波次时(已完成)
35. PDA添加发货确认,默认全选 (已修复)
36. 大屏获取任务时,是由容器到达的拖盘码确认通知 (已修复)
37. 拣货单序号不显示 问题修复 (已修复)
42. pda发货确认,添加不同颜色区分是否全部完成拣货,绿色全部拣货完成,红色完成部分拣货(已修复)
43. CTU入库完成后,订单明细没有删除,执行中数量清空(已修复)
44. 平库入库完成后,历史档明细完成数量没有更新 (已修复)
45. PDA料号不显示 (已修复)
46. 发货完成后,波次管理数据未加入历史档 (已修复)
24个文件已修改
1个文件已添加
433 ■■■■ 已修改文件
zy-asrs-admin/src/views/out/flat/index.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/views/out/order/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/CacheSite.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Order.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/ShippingOrderDetlDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/OrderPickStatus.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/BindPlatformParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaitPakinServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedServiceImpl.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/OrderTimer.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/resources/mapper/asrs/WaveSeedMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-admin/src/views/out/flat/index.vue
@@ -1,8 +1,11 @@
<template>
    <a-table :columns="columns" :data-source="datasource" bordered>
        <template #bodyCell="{column, record}">
        <template #bodyCell="{column, record, index}">
            <template v-if="column.key === 'number'">
                {{index + 1}}
            </template>
            <template v-if="column.key === 'operate'">
                <a-button @click="viewDetail(record)" type="link">
                <a-button @click="viewDetail(column)" type="link">
                    {{ "查看明细" }}
                </a-button>
                <a-button @click="showDeleteConfirm(record)" danger type="link">{{"删除"}}</a-button>
@@ -16,7 +19,10 @@
    </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 #bodyCell="{column, record, index}">
                <template v-if="column.key === 'number'">
                    {{index + 1}}
                </template>
                <template v-if="column.key === 'status'">
                    <a-tag :color="record.status === 1 ? 'green' : 'volcano'">
                        {{record.status === 1 ? "正常" : "禁用"}}
@@ -106,6 +112,7 @@
            },
            //查看明细
            viewDetail(record) {
                console.log(record)
                this.show = !this.show
                this.getSheetDetl(record)
            },
zy-asrs-admin/src/views/out/order/index.vue
@@ -24,4 +24,8 @@
    }
</script>
<style></style>
<style>
    .col {
        color: ;
    }
</style>
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/controller/OutStockController.java
@@ -7,6 +7,7 @@
import com.zy.asrs.wms.apis.wcs.entity.request.RfidSingalRequest;
import com.zy.asrs.wms.apis.wcs.entity.request.TasksStatusCallbackParam;
import com.zy.asrs.wms.apis.wcs.services.WcsApiService;
import com.zy.asrs.wms.asrs.service.PlatformService;
import com.zy.asrs.wms.system.controller.BaseController;
import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j;
@@ -23,6 +24,7 @@
    @Autowired
    private WcsApiService wcsApiService;
    /**
     * 出库任务-接收回调状态接口
@@ -99,7 +101,7 @@
        if (Objects.isNull(request.get("taskNo"))) {
            throw new CoolException("任务号不能为空!!");
        }
        if (Objects.isNull(request.get("orderNO"))){
        if (Objects.isNull(request.get("orderNo"))){
            throw new CoolException("当前任务订单号不能为空!!");
        }
@@ -113,12 +115,11 @@
    /**
     * 信号回传接口,回传电子标签状态变化内容给上游系统。
     * 当人为操作(比如拍灯,更改数字,放箱等)导致电子标签的状态和信号等发生变化、或设备本身发生异常时,ESS接收到信号后,通过该接口将信号回传给上游系统。
     *
     * RFID回调接口
     *
     * @param request
     * @return
     */
    @PostMapping("/")
    public R rfidCallback(@RequestBody RfidSingalRequest request) {
        if (Objects.isNull(request)) {
            throw new CoolException("参数不能为空!!");
@@ -127,5 +128,16 @@
    }
    /**
     * 获取所有集货区
     * @return
     */
    @GetMapping("/all/platforms")
    public R getPlatforms() {
        return  wcsApiService.getPlatforms();
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WaveManagentServiceImpl.java
@@ -12,6 +12,7 @@
import com.zy.asrs.wms.asrs.entity.OrderDetl;
import com.zy.asrs.wms.asrs.entity.Task;
import com.zy.asrs.wms.asrs.entity.dto.LargeScreenTaskDto;
import com.zy.asrs.wms.asrs.entity.enums.OrderPickStatus;
import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam;
import com.zy.asrs.wms.asrs.mapper.CacheSiteMapper;
@@ -24,6 +25,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -104,17 +106,9 @@
        }
        orders.forEach(order -> {
            List<OrderDetl> detls = orderDetlMapper.selectList(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderId, order.getId()));
            if (detls.isEmpty()) {
                throw new CoolException("订单:" + order.getOrderNo() + " 没有明细,请联系管理员!!");
            }
            List<OrderDetl> orderDetls = detls.stream().filter(orderDetl -> {
                return orderDetl.getAnfme() == (orderDetl.getWorkQty() + orderDetl.getQty());
            }).collect(Collectors.toList());
            if (!orderDetls.isEmpty() && orderDetls.size() == detls.size()) {
            if (order.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_DONE.val) {
                order.setOrderStatus("已完成");//已完成
            } else if (orderDetls.size() < detls.size() && orderDetls.size() != 0) {//部分完成
            } else if (order.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_SECTION.val) {//部分完成
                order.setOrderStatus("部分完成");
            } else {//未完成
                order.setOrderStatus("未完成");
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/Impl/WcsApiServiceImpl.java
@@ -10,9 +10,9 @@
import com.zy.asrs.wms.apis.wcs.entity.request.*;
import com.zy.asrs.wms.apis.wcs.entity.response.CommonReponse;
import com.zy.asrs.wms.apis.wcs.services.WcsApiService;
import com.zy.asrs.wms.asrs.entity.Task;
import com.zy.asrs.wms.asrs.entity.TaskDetl;
import com.zy.asrs.wms.asrs.entity.WaveSeed;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType;
import com.zy.asrs.wms.asrs.entity.enums.OrderPickStatus;
import com.zy.asrs.wms.asrs.entity.enums.TaskStsType;
import com.zy.asrs.wms.asrs.service.*;
import io.jsonwebtoken.lang.Collections;
@@ -28,6 +28,8 @@
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -45,12 +47,20 @@
    private TaskService taskService;
    @Autowired
    private TaskDetlService taskDetlService;
    @Autowired
    private CacheSiteService cacheSiteService;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private WaveSeedService waveSeedService;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private PlatformService platformService;
    /**
@@ -77,7 +87,8 @@
            //DONE 根据ESS返回的容器编码修改任务档中的输送线起始位置节点,及任务档容器到达状态
            taskService.update(new LambdaUpdateWrapper<Task>()
                    .set(Task::getTaskSts, TaskStsType.WCS_CONTAINER_RECEIVE.id)
                    .set(Task::getOriginLoc, arrivedParam.getSlotCode())
                    //输送线节点编码,不是源库位
//                    .set(Task::getOriginLoc, arrivedParam.getSlotCode())
                    .eq(Task::getBarcode, arrivedParam.getContainerCode()));
        } else {
            //容器到达时更新任务状态为:入库完成,定时任务根据状态码更新库存
@@ -91,6 +102,9 @@
                    .set(Task::getTaskSts, TaskStsType.WAVE_SEED.id)
                    .set(Task::getOriginLoc, arrivedParam.getSlotCode())
                    .eq(Task::getBarcode, arrivedParam.getContainerCode()));
            if (!update) {
                throw new CoolException("容器到达任务更新失败!!");
            }
        }
@@ -272,9 +286,12 @@
    @Override
    public R rfidCallback(RfidSingalRequest request) {
        return null;
    }
    @Override
    public R getPlatforms() {
        return R.ok(platformService.list(new LambdaQueryWrapper<>()));
    }
    /**
@@ -292,39 +309,74 @@
        MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
        //默认流动
        boolean converyor = false;
        //判断是否还有物料未拣
        //判断当前任务是否还有物料未拣
        if (!checked(orderNo, taskNo)) {
            //调用三方接口,闪灯不做操作
            // 设置请求参数
            params.add("params", JSONObject.toJSONString(slapParam));
            log.info("请求地址:{},请求参数:{}", SystemProperties.SLAP_LIGHT, JSONObject.toJSONString(slapParam));
        } else {
            //调用三方接口,来灯通知容器流动, 传灭灯参数
            //调用三方接口,灭灯通知容器流动, 传灭灯参数
            //todo 判断当前订单是否完成,完成灭灯,未完成保持拣货状态亮灯
            Order one = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo));
            if (Objects.isNull(one)) {
                throw new CoolException("当前订单明细不存在!!");
            }
//            //获取播种已完成的订单明细
//            List<OrderDetl> detlList = orderDetls.stream().filter(detl -> {
//                return detl.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_DONE.val;
//            }).collect(Collectors.toList());
            //判断数量是否与订单明细的需求量相同,相同则订单完成
            if (one.getPickStatus() == OrderPickStatus.ORDER_PICK_STATUS_DONE.val) {
                //播种完成,释放绑定站点
                List<CacheSite> cacheSites = cacheSiteService.list(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderNo, orderNo));
                for (CacheSite cacheSite : cacheSites) {
                    if (!cacheSite.getSiteStatus().equals(CacheSiteStatusType.O.id)) {
                        cacheSite.setSiteStatus(CacheSiteStatusType.O.id);
                        cacheSite.setOrderId(null);
                        cacheSite.setBarcode(null);
                        cacheSite.setOrderNo(null);
                        cacheSite.setPlatformId(null);
                        cacheSite.setPlatformNo(null);
                        cacheSite.setUpdateTime(new Date());
                        if (!cacheSiteService.updateById(cacheSite)) {
                            throw new CoolException("播种站点更新失败");
                        }
                    }
                }
            }
            converyor = true;
            params.add("params", JSONObject.toJSONString(slapParam));
            log.info("请求地址:{},请求参数:{}", SystemProperties.SLAP_LIGHT, JSONObject.toJSONString(slapParam));
        }
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        HttpEntity httpEntity = new HttpEntity<>(params, headers);
        // 请求
        ResponseEntity<CommonReponse> exchange = restTemplate.exchange(SystemProperties.CONVEYOR_START, HttpMethod.POST, httpEntity, CommonReponse.class);
        log.info("下发流动通知 返回结果:{}", exchange);
        if (exchange.getBody() == null) {
            throw new CoolException("下发流动通知失败!!");
        } else {
            CommonReponse response = exchange.getBody();
            if (response.getCode() == 0) {
                if (!converyor) {
                    //* 2. 容器流动判断,如果料箱没有物料 code传200, 有物料传100 执行回库任务,修改任务状态为  调用containerConveryor(taskNo)方法
                    containerConveryor(request.get("taskNo").toString());
        if (converyor) {
            Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskNo, request.get("taskNo")));
            if (Objects.isNull(task)) {
                throw new CoolException("任务不存在!!");
                }
            containerConveryor(task.getBarcode());
            }
        }
//        HttpHeaders headers = new HttpHeaders();
//        headers.add("Content-Type", "application/json");
//        HttpEntity httpEntity = new HttpEntity<>(params, headers);
//        // 请求
//        ResponseEntity<CommonReponse> exchange = restTemplate.exchange(SystemProperties.CONVEYOR_START, HttpMethod.POST, httpEntity, CommonReponse.class);
//        log.info("下发流动通知 返回结果:{}", exchange);
//        if (exchange.getBody() == null) {
//            throw new CoolException("下发流动通知失败!!");
//        } else {
//            CommonReponse response = exchange.getBody();
//            if (response.getCode() == 0) {
//                if (!converyor) {
//                    //* 2. 容器流动判断,如果料箱没有物料 code传200, 有物料传100 执行回库任务,修改任务状态为  调用containerConveryor(taskNo)方法
//                    containerConveryor(request.get("taskNo").toString());
//                }
//            }
//        }
    }
    /**
zy-asrs-wms/src/main/java/com/zy/asrs/wms/apis/wcs/services/WcsApiService.java
@@ -18,4 +18,6 @@
    void slapLightLogic(Map<String, Object> request);
    R rfidCallback(RfidSingalRequest request);
    R getPlatforms();
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/MobileController.java
@@ -74,10 +74,17 @@
     */
    @PostMapping("/mat/auth")
    public R getProductForBarcode(@RequestBody Map<String, String> barcode) {
        if (Objects.isNull(barcode)) {
            return  R.error("参数不能为空!!");
        }
        if (StringUtil.isNullOrEmpty(barcode.get("barcode"))) {
            return  R.error("条码不能为空!!");
        }
        Order order =  orderService.selectByBarcode(barcode.get("barcode"));
        if (Objects.isNull(order)) {
            return R.error("订单不存在!");
        }
        List<OrderInfoDto> orders = orderService.getDetlForOrderId(order.getId());
@@ -240,7 +247,7 @@
            throw new CoolException("请求参数不能为空!!");
        }
        if (Objects.isNull(param.get("barcode"))) {
            throw new CoolException("容器编码不能为空");
            throw new CoolException("播种墙容器编码不能为空");
        }
        if (Objects.isNull(param.get("orderNo"))) {
            throw new CoolException("订单编号不能为空!!");
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/controller/PlatformController.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zy.asrs.framework.common.Cools;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.wms.asrs.entity.param.BindPlatformParam;
import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam;
import com.zy.asrs.wms.common.annotation.OperationLog;
import com.zy.asrs.wms.common.domain.BaseParam;
@@ -108,4 +109,14 @@
        return R.ok();
    }
    /**
     * 绑定订单与集货区关系
     * @param platform
     * @return
     */
    @PostMapping("/bind/shipping/platform")
    public R bindShippingAndPlatform(@RequestBody BindPlatformParam platform) {
        return platformService.bindShippingPlatform(platform);
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/CacheSite.java
@@ -137,6 +137,12 @@
    @TableField(updateStrategy = FieldStrategy.IGNORED)
    private String platformNo;
    /**
     * 播种墙库位容器码
     */
    @ApiModelProperty(value = "播种墙库位容器码")
    private String barcode;
    public CacheSite() {}
    public CacheSite(String siteNo,Integer siteStatus,Long orderId,String orderNo,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/Order.java
@@ -10,6 +10,7 @@
import com.zy.asrs.wms.asrs.service.OrderTypeService;
import com.zy.asrs.wms.system.entity.Host;
import com.zy.asrs.wms.system.entity.User;
import io.swagger.models.auth.In;
import org.springframework.format.annotation.DateTimeFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -150,6 +151,14 @@
    @TableField(exist = false)
    private String orderStatus;
    /**
     * 订单状态
     * 1. 已完成
     * 0. 未完成
     * 2. 部分完成
     */
    private Integer pickStatus;
    public Order() {}
    public Order(String orderNo,String orderTime,Long orderType,Long orderSettle,Long hostId,Integer status,Integer deleted,Date createTime,Long createBy,Date updateTime,Long updateBy,String memo) {
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/OrderDetl.java
@@ -98,6 +98,9 @@
    @ApiModelProperty(value= "状态 1: 正常  0: 禁用  ")
    private Integer status;
    @ApiModelProperty(value = "拣货状态:0 未拣货 1 完成拣货  2 ,部分拣货")
    private Integer pickStatus;
    /**
     * 是否删除 1: 是  0: 否  
     */
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/dto/ShippingOrderDetlDto.java
@@ -38,5 +38,9 @@
     * 备注
     */
    private String memo;
    /**
     * 物料编码
     */
    private String matnr;
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/enums/OrderPickStatus.java
New file
@@ -0,0 +1,22 @@
package com.zy.asrs.wms.asrs.entity.enums;
/**
 * 订单入库类型
 */
public enum OrderPickStatus {
    //手动入库单
   ORDER_PICK_STATUS_UNDO(0, "手动入库单"),
    //拣货完成
    ORDER_PICK_STATUS_DONE(1, "拣货完成"),
    //部分拣货
    ORDER_PICK_STATUS_SECTION(2, "部分拣货")
    ;
    public Integer val;
    public String desc;
    OrderPickStatus(Integer val, String desc) {
        this.val = val;
        this.desc = desc;
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/entity/param/BindPlatformParam.java
@@ -9,4 +9,6 @@
    private String siteNo;
    private String orderNo;
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/PlatformService.java
@@ -1,11 +1,14 @@
package com.zy.asrs.wms.asrs.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.wms.asrs.entity.Platform;
import com.zy.asrs.wms.asrs.entity.param.BindPlatformParam;
import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam;
public interface PlatformService extends IService<Platform> {
    void shipped(PlatformShippedParam param);
    R bindShippingPlatform(BindPlatformParam platform);
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/MobileServiceImpl.java
@@ -17,6 +17,7 @@
import com.zy.asrs.wms.system.entity.Host;
import com.zy.asrs.wms.system.service.HostService;
import io.netty.util.internal.StringUtil;
import org.aspectj.weaver.ast.Or;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -59,6 +60,12 @@
    private MatService matService;
    @Autowired
    private WaveService waveService;
    @Autowired
    private WaveLogService waveLogService;
    @Autowired
    private CacheSiteService cacheSiteService;
    @Autowired
    WaveDetlLogService waveDetlLogService;
    @Autowired
    private WaveDetlService waveDetlService;
    @Autowired
@@ -207,7 +214,6 @@
            }
            //修改订单状态为已完成
            order.setOrderSettle(OrderSettleType.COMPLETE.val());
            OrderLog orderLog = new OrderLog();
            BeanUtils.copyProperties(order, orderLog);
            if (!orderLogService.save(orderLog)) {
@@ -225,6 +231,8 @@
        detls.forEach(delt ->{
            OrderDetlLog detlLog = new OrderDetlLog();
            BeanUtils.copyProperties(delt, detlLog);
            detlLog.setQty(delt.getWorkQty());
            detlLog.setWorkQty(0.0);
            detlLogs.add(detlLog);
        });
@@ -376,9 +384,17 @@
            if (Objects.isNull(order)) {
                throw new CoolException("绑定订单不存在!!");
            }
            siteNo.setOrderNo(order.getOrderNo()).setOrderId(order.getId()).setSiteStatus(CacheSiteStatusType.R.id);
            siteNo.setOrderNo(order.getOrderNo()).setOrderId(order.getId()).setSiteStatus(CacheSiteStatusType.R.id).setBarcode(param.get("barcode").toString());
            if (cacheSiteMapper.updateById(siteNo) < 1) {
                throw new CoolException("订单播种位绑定失败!!" );
            }
            int update = waveSeedMapper.update(new LambdaUpdateWrapper<WaveSeed>()
                    .eq(WaveSeed::getOrderNo, order.getOrderNo())
                    .set(WaveSeed::getSiteId, siteNo.getId())
                    .set(WaveSeed::getSiteNo, siteNo.getSiteNo()));
            if (update < 1) {
                throw new CoolException("播种站点更新失败!!");
            }
        } else {
            if (StringUtil.isNullOrEmpty(siteNo.getOrderNo())) {
@@ -398,8 +414,16 @@
        if (StringUtil.isNullOrEmpty((String) params.get("orderNo"))) {
            throw new CoolException("订单编码号不能为空!!");
        }
        String orderId = params.get("orderNo").toString();
        List<ShippingOrderDetlDto> waveSeeds = waveSeedMapper.selectShippingOrderDtel(orderId);
        String orderNo = params.get("orderNo").toString();
        Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, orderNo));
        if (Objects.isNull(order)) {
            throw new CoolException("订单不存在!!");
        }
        if (!order.getOrderType().equals(OrderType.UTC_OUT_ORDER.id)) {
            throw new CoolException("订单为入库单据,不能发货!!");
        }
        List<ShippingOrderDetlDto> waveSeeds = waveSeedMapper.selectShippingOrderDtel(orderNo);
        return R.ok(waveSeeds);
    }
@@ -419,43 +443,30 @@
            throw new CoolException("发货单据明细为空,不可执行发货操作!!");
        }
        params.forEach(order -> {
            //删除出库订单及明细,加入订单历史档
            if (order.getAnfme() == order.getWorkQty()) { //完全拣货
                OrderDetl byId = orderDetlService.getById(order.getId());
            if (Objects.isNull(byId)) {
                throw new CoolException("订单明细不存在!!");
            }
                OrderDetlLog orderDetlLog = new OrderDetlLog();
                BeanUtils.copyProperties(orderDetlLog, byId);
            BeanUtils.copyProperties(byId, orderDetlLog);
                orderDetlLog.setQty(order.getWorkQty());
                orderDetlLog.setWorkQty(0.0);
                if (!orderDetlLogService.save(orderDetlLog)) {
                    throw new CoolException("订单明细转历史档失败!!");
                }
            //完全拣货,订单完成删除原始订单明细
            //new BigDecimal(order.getAnfme()).compareTo(new BigDecimal(order.getWorkQty())) == 0
            if (new BigDecimal(order.getAnfme()).compareTo(new BigDecimal(order.getWorkQty())) == 0) {
                if (!orderDetlService.removeById(byId)) {
                    throw new CoolException("订单明细不存在!!");
                }
                //查询当前订单下否还有明细存在
                List<OrderDetl> orders = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderNo, order.getOrderNo()));
                if (orders.isEmpty()) {
                    Order one = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, order.getOrderNo()));
                    if (Objects.isNull(one)) {
                        throw new CoolException("订单不存在!!");
            } else { //部分拣货
                byId.setQty(order.getWorkQty() + byId.getQty());
                byId.setWorkQty(0.0);
                if (!orderDetlService.updateById(byId)) {
                    throw new CoolException("部分拣料明细更新失败!!");
                    }
                    OrderLog orderLog = new OrderLog();
                    BeanUtils.copyProperties(one, orderLog);
                    if (!orderLogService.save(orderLog)) {
                        throw new CoolException("原始订单转历史档失败!!");
                    }
                    if (!orderService.remove(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, order.getOrderNo()))) {
                        throw new CoolException("原始订单删除失败!!");
                    }
                }
            } else {
                //todo 删除已完成明细,保留原始主单及未完成明细
            }
            List<WaveSeed> waveSeeds = waveSeedMapper.selectList(new LambdaQueryWrapper<WaveSeed>().eq(WaveSeed::getOrderDetlId, order.getId()));
@@ -464,11 +475,11 @@
                ArrayList<WaveSeedLog> waveSeedLogs = new ArrayList<>();
                waveSeeds.forEach(seed -> {
                   WaveSeedLog waveSeedLog = new WaveSeedLog();
                   BeanUtils.copyProperties(waveSeedLog, seed);
                   BeanUtils.copyProperties(seed, waveSeedLog);
                   waveSeedLog.setId(null);
                    waveSeedLogs.add(waveSeedLog);
               });
                if (waveSeedLogService.saveBatch(waveSeedLogs)) {
                if (!waveSeedLogService.saveBatch(waveSeedLogs)) {
                    throw new CoolException("波明历史档保存失败!!");
                }
            }
@@ -478,8 +489,71 @@
            }
        });
        //获取当前上传所有订单号
        Set<String> orderNoSet = params.stream().map(ShippingOrderDetlDto::getOrderNo).collect(Collectors.toSet());
        if (orderNoSet.isEmpty()) {
            throw new CoolException("主单信息不存在,请核对出库订单!!");
        }
        return null;
        List<Order> orderList = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getOrderNo, orderNoSet));
        if (orderList.isEmpty()) {
            throw new CoolException("订单不存在!!");
        }
        orderList.forEach(one -> {
            OrderLog orderLog = new OrderLog();
            BeanUtils.copyProperties(one, orderLog);
            orderLog.setOrderSettle(OrderSettleType.COMPLETE.val());
            if (!orderLogService.save(orderLog)) {
                throw new CoolException("原始订单转历史档失败!!");
            }
            //查询当前订单下否还有明细存在
            List<OrderDetl> orders = orderDetlService.list(new LambdaQueryWrapper<OrderDetl>().in(OrderDetl::getOrderNo, one.getOrderNo()));
            //订单明细为空,则删除主单
            if (orders.isEmpty()) {
                if (!orderService.remove(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, one.getOrderNo()))) {
                    throw new CoolException("原始订单删除失败!!");
                }
            } else { //不为空,修改订单状态,可重新组拖
                one.setOrderSettle(OrderSettleType.INIT.val());
                if (orderService.updateById(one));
            }
        });
        Set<Long> waveIds = orderList.stream().map(Order::getWaveId).collect(Collectors.toSet());
        if (waveIds.isEmpty()) {
            throw new CoolException("波次信息为空!!");
        }
        List<Wave> waves = waveService.list(new LambdaQueryWrapper<Wave>().eq(Wave::getId, waveIds));
        for (Wave wave : waves) {
            WaveLog waveLog = new WaveLog();
            waveLog.sync(wave);
            waveLog.setId(null);
            if (!waveLogService.save(waveLog)) {
                throw new CoolException("波次转历史失败");
            }
            List<WaveDetl> waveDetls = waveDetlService.list(new LambdaQueryWrapper<WaveDetl>().eq(WaveDetl::getWaveId, wave.getId()));
            for (WaveDetl waveDetl : waveDetls) {
                WaveDetlLog waveDetlLog = new WaveDetlLog();
                waveDetlLog.sync(waveDetl);
                waveDetlLog.setId(null);
                waveDetlLog.setWaveId(waveLog.getId());
                if (!waveDetlLogService.save(waveDetlLog)) {
                    throw new CoolException("波次明细转历史失败");
                }
                if (!waveDetlService.removeById(waveDetl.getId())) {
                    throw new CoolException("波次明细删除失败");
                }
            }
            if (!waveService.removeById(wave.getId())) {
                throw new CoolException("波次删除失败");
            }
        }
        return R.ok("发货完成!!");
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/PlatformServiceImpl.java
@@ -1,10 +1,12 @@
package com.zy.asrs.wms.asrs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.framework.common.R;
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.entity.enums.CacheSiteStatusType;
import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
import com.zy.asrs.wms.asrs.entity.param.BindPlatformParam;
import com.zy.asrs.wms.asrs.entity.param.PlatformShippedParam;
import com.zy.asrs.wms.asrs.mapper.PlatformMapper;
import com.zy.asrs.wms.asrs.service.*;
@@ -165,4 +167,9 @@
        }
    }
    @Override
    public R bindShippingPlatform(BindPlatformParam platform) {
        return null;
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaitPakinServiceImpl.java
@@ -4,6 +4,7 @@
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.entity.enums.OrderSettleType;
import com.zy.asrs.wms.asrs.entity.enums.OrderType;
import com.zy.asrs.wms.asrs.mapper.WaitPakinMapper;
import com.zy.asrs.wms.asrs.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -88,6 +89,12 @@
            throw new CoolException("订单不存在");
        }
        //如果是平库入库单,修改订单明细执行数量
        if (order.getOrderType() == OrderType.PK_IN_ORDER.id) {
            orderDetl.setWorkQty(waitPakin.getAnfme());
            orderDetlService.updateById(orderDetl);
        }
        //更新订单状态
        if (order.getOrderSettle().equals(OrderSettleType.INIT.val())) {
            order.setOrderSettle(OrderSettleType.WAIT.val());
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/service/impl/WaveSeedServiceImpl.java
@@ -5,6 +5,7 @@
import com.zy.asrs.framework.exception.CoolException;
import com.zy.asrs.wms.apis.wcs.entity.response.SowSeeds;
import com.zy.asrs.wms.asrs.entity.*;
import com.zy.asrs.wms.asrs.entity.enums.OrderPickStatus;
import com.zy.asrs.wms.asrs.entity.param.WaveSeedReviewParam;
import com.zy.asrs.wms.asrs.mapper.*;
import com.zy.asrs.wms.asrs.service.OrderDetlService;
@@ -14,6 +15,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@@ -59,7 +61,7 @@
        List<CacheSite> sites = cacheSiteMapper.selectList(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderNo, waveSeed.getOrderNo()));
        if (sites.isEmpty()) {
            throw new CoolException("当前订单未绑定播种库位,请绑定后再操作!!");
            throw new CoolException("当前订单未绑定播种库位,请使用PDA->地标绑定,功能绑定后再操作!!");
        }
        Double stock = Optional.of(waveSeed.getAnfme() - waveSeed.getWorkQty()).orElse(0.0D);
@@ -80,12 +82,36 @@
        if (Objects.isNull(orderDetl)) {
            throw new CoolException("当前播种订单明细不存在!!");
        }
        orderDetl.setWorkQty(orderDetl.getWorkQty() + param.getReviewNum());
        if (orderDetl.getWorkQty() + orderDetl.getQty() > orderDetl.getAnfme()) {
        if (param.getReviewNum() + orderDetl.getQty() > orderDetl.getAnfme()) {
            throw new CoolException("请核对明细数量后,再进行操作!!");
        }
        //如果拣货数量与订单明细数量相等,表明拣货完成
        if (new BigDecimal(param.getReviewNum() + orderDetl.getQty()).compareTo(new BigDecimal(orderDetl.getAnfme())) == 0) {
            orderDetl.setPickStatus(OrderPickStatus.ORDER_PICK_STATUS_DONE.val);
        } else {
            orderDetl.setPickStatus(OrderPickStatus.ORDER_PICK_STATUS_SECTION.val);
        }
        if (orderDetlMapper.updateById(orderDetl) < 1) {
            throw new CoolException("订单明细数量更新失败");
            throw new CoolException("订单状态更新失败!!");
        }
        List<OrderDetl> detls = orderDetlMapper.selectList(new LambdaQueryWrapper<OrderDetl>().eq(OrderDetl::getOrderNo, orderDetl.getOrderNo()));
        List<OrderDetl> detlList = detls.stream().filter(ord -> {
            return ord.getPickStatus() != OrderPickStatus.ORDER_PICK_STATUS_DONE.val;
        }).collect(Collectors.toList());
        int update;
        if (detlList.isEmpty()) {
             update = orderMapper.update(new LambdaUpdateWrapper<Order>().eq(Order::getOrderNo, orderDetl.getOrderNo()).set(Order::getPickStatus, OrderPickStatus.ORDER_PICK_STATUS_DONE.val));
        } else {
            update = orderMapper.update(new LambdaUpdateWrapper<Order>().eq(Order::getOrderNo, orderDetl.getOrderNo()).set(Order::getPickStatus, OrderPickStatus.ORDER_PICK_STATUS_SECTION.val));
        }
        if (update < 1) {
            throw new CoolException("原始订单主单拣货状态更新失败!!");
        }
        waveSeed.setUpdateTime(new Date());
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/OrderTimer.java
@@ -74,7 +74,7 @@
                    }
                    //删除订单明细
                    if (!orderDetlService.removeById(orderDetl.getId())) {
                    if (!orderDetlService.removeById(orderDetl)) {
                        throw new CoolException("删除订单明细失败");
                    }
                }
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskLogTimer.java
@@ -74,13 +74,6 @@
                if (taskDetls.isEmpty()) {
                    throw new CoolException("任务明细不存在");
                } else { //TODO 先更新订单,后删除任务明细。任务为53时,需更新明细。
//                    if (task.getTaskType() == 53L) {
//                        List<Long> waveIds = taskDetls.stream().map(TaskDetl::getWaveId).collect(Collectors.toList());
//                        List<Order> orders = orderService.list(new LambdaQueryWrapper<Order>().in(Order::getWaveId, waveIds));
//                        orders.forEach(order -> {
//
//                        });
//                    } else {
                        //任务类型为53,根据WaveId修改订单明细
                        for (TaskDetl taskDetl : taskDetls) {
                            if (taskDetl.getDetlId() == null) {
@@ -98,6 +91,7 @@
                            }
                            //检测订单是否完成
                            boolean checkOrderComplete = orderService.checkOrderComplete(orderDetl.getOrderId());
                            if (checkOrderComplete) {
                                //订单已经完成
                                Order order = orderService.getById(orderDetl.getOrderId());
@@ -112,7 +106,6 @@
                            }
                        }
//                    }
                }
                //删除任务历史档案
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskTimer.java
@@ -67,6 +67,9 @@
    private CacheSiteService cacheSiteService;
    /**
     * 入库执行任务
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    @Transactional(rollbackFor = Exception.class)
    public void inExecute() {
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/TaskWaveTimer.java
@@ -117,7 +117,7 @@
                            anfme -= workQty;
                            orderUtils.updateWorkQty(orderDetl.getId(), workQty, true);
//
                            //fixme 生成波次播种数据时,不自动添加站点绑定,站点绑定调整至出库绑定播种库位时更新
//                            CacheSite cacheSite = cacheSiteService.getOne(new LambdaQueryWrapper<CacheSite>().eq(CacheSite::getOrderId, orderDetl.getOrderId()).eq(CacheSite::getHostId, hostId));
//                            if (cacheSite == null) {
zy-asrs-wms/src/main/resources/application.yml
@@ -41,7 +41,7 @@
  #  global-config:
  #    field-strategy: 0
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    cache-enabled: true
  global-config:
zy-asrs-wms/src/main/resources/mapper/asrs/WaveSeedMapper.xml
@@ -18,6 +18,7 @@
            wcs.wave_no,
            mo.anfme,
            mo.batch,
            wcs.matnr,
            wcs.site_no,
            wcs.work_qty,
            wcs.memo