自动化立体仓库 - WMS系统
skyouc
2 天以前 34aa40fffdda9155e77a7991ca8c7691102bb0b8
no message
30个文件已修改
735 ■■■■ 已修改文件
src/main/java/com/zy/api/entity/SyncMatParmas.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AppVersionController.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderPakoutController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/TaskLogController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/OrderPakout.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/TaskLog.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/ViewInOutBean.java 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakinLog.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WrkMastLog.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WorkService.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 210 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/constant/MesConstant.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/system/entity/license/LicenseCheckListener.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocDetlMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/LocMastMapper.xml 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/mat/mat.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderTablePakout.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/orderPakout/out.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/entity/SyncMatParmas.java
@@ -39,6 +39,9 @@
    @ApiModelProperty("重量")
    private String pro_wet;
    @ApiModelProperty("rank")
    private String pro_rank;
    @ApiModelProperty("更新时间")
    private String update_time;
src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java
@@ -86,7 +86,6 @@
                throw new CoolException("任务状态更新失败!!");
            }
        }
        return R.ok();
    }
@@ -173,6 +172,8 @@
                    .build()
                    .doPost();
            JSONObject jsonObject = JSON.parseObject(response);
            log.error("发送agv参数!!!url:{};request:{};response:{}", HIKApiConstant.AGV_IP + path, body, response);
            if (jsonObject.getString("code").equals("SUCCESS")) {
                result.setSuccess(true);
            } else {
src/main/java/com/zy/api/service/impl/KopenApiServiceImpl.java
@@ -295,6 +295,7 @@
                matnr.setSpecs(mats.getPro_size());
                matnr.setWeight(Objects.isNull(mats.getPro_wet()) ? 0.0 : Double.parseDouble(mats.getPro_wet()));
                matnr.setSuppCode(mats.getPro_id());
                matnr.setRank(mats.getPro_rank());
                matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
                matnr.setLocType(MatLocType.getTag(mats.getPro_type()));
                matnr.setManu(mats.getCompany_id());
@@ -315,6 +316,7 @@
                matnr.setSpecs(mats.getPro_size());
                matnr.setWeight(Double.parseDouble(mats.getPro_wet()));
                matnr.setSuppCode(mats.getPro_id());
                matnr.setRank(mats.getPro_rank());
                matnr.setTagId(MatLocType.getTag(mats.getPro_type()));
                matnr.setLocType(MatLocType.getTag(mats.getPro_type()));
                matnr.setManu(mats.getCompany_id());
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -190,7 +190,6 @@
        log.info("任务执行参数回写:{}", JSON.toJSONString(params));
        if (params.getMsgType().equals("task_complete") || params.getMsgType().equals("station_out_task_run_complete")) {
            JSONObject json = JSONObject.parseObject(params.getData());
            log.info(params.getSuperTaskNo() +  "==============>{}", json);
            if (mast.getIoType() == 1 || mast.getIoType() == 11 || mast.getIoType() == 10 || mast.getIoType() == 53 || mast.getIoType() == 54 || mast.getIoType() == 57) {
                if (params.getMsgType().equals("task_complete")) {
                    if (mast.getIoType() == 53 && !Objects.isNull(json) && json.getInteger("ioType") == 1) {
src/main/java/com/zy/asrs/controller/AppVersionController.java
@@ -54,21 +54,22 @@
    @RequestMapping(value = "/appVersion/checkUpdate/{version}/{type}")
    public R checkUpdate(@PathVariable("version") String version,
                         @PathVariable("type") Integer type) {
        EntityWrapper<AppVersion> wrapper = new EntityWrapper<>();
        AppVersion appVersion = appVersionService.selectOne(wrapper);
        if (Cools.isEmpty(appVersion)) {
            return R.ok("已是最新版本");
        }
        AppVersion latestApp = appVersionService.getLatestApp(type);
        if (latestApp == null) {
            return R.error();
        }
        if (latestApp.getVersion().equals(version)) {
            return R.ok("已是最新版本");
        }
        return R.ok("有新版本,需要更新").add(latestApp);
//        EntityWrapper<AppVersion> wrapper = new EntityWrapper<>();
//        AppVersion appVersion = appVersionService.selectOne(wrapper);
//        if (Cools.isEmpty(appVersion)) {
//            return R.ok("已是最新版本");
//        }
//        AppVersion latestApp = appVersionService.getLatestApp(type);
//        if (latestApp == null) {
//            return R.error();
//        }
//
//        if (latestApp.getVersion().equals(version)) {
//            return R.ok("已是最新版本");
//        }
//
//        return R.ok("有新版本,需要更新").add(latestApp);
        return R.ok();
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -413,7 +413,7 @@
        return mobileService.getTcAllInfos(params);
    }
    @ManagerAuth(memo = "确认台车出库")
    @ManagerAuth(memo = "呼叫台车出库")
    @RequestMapping("/confirm/all/out")
    public R confirmAllOut(@RequestBody AgvCallParams params) {
        if (Objects.isNull(params) || Objects.isNull(params.getCarBarcode())) {
@@ -492,7 +492,7 @@
    }
    @RequestMapping("/pack/comb/auth")
    @ManagerAuth(memo = "下线组托")
    @ManagerAuth(memo = "并板组托")
    public R packComb(@RequestBody CombParam combParam) {
        mobileService.packComb(combParam, 10031L);
        return R.ok("组托成功");
src/main/java/com/zy/asrs/controller/OrderPakoutController.java
@@ -52,7 +52,7 @@
            wrapper.like("order_no", orderNo);
        }
        if (!Cools.isEmpty(shipName)) {
            wrapper.like("ship_name", shipName);
            wrapper.like("target_location", shipName);
        }
        wrapper.le("settle", 2).eq("status", 1);
        // 筛选出库单,不为OrderTypeEnum.STOCK
src/main/java/com/zy/asrs/controller/TaskLogController.java
@@ -44,7 +44,8 @@
        allLike(TaskLog.class, param.keySet(), wrapper, condition);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        wrapper.orderBy("appe_time desc");
        return R.ok(taskLogService.selectPage(new Page<>(curr, limit), wrapper));
//        Page<TaskLog> taskLogPage = taskLogService.selectPage(new Page<>(curr, limit), wrapper);
        return R.ok().add(taskLogService.selectPage(new Page<>(curr, limit), wrapper));
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
src/main/java/com/zy/asrs/entity/OrderPakout.java
@@ -259,6 +259,10 @@
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    @TableField("target_location")
    private String targetLocation;
    /**
     * 备注
     */
@@ -372,6 +376,19 @@
        return null;
    }
    public String getOrderType$() {
        if (null == this.targetLocation) {
            return null;
        }
        if (this.targetLocation.equals("2")) {
            return OrderWkType.ORDER_WK_ORDER_OUT_SO.desc;
        } else if (this.targetLocation.equals("3")){
            return OrderWkType.ORDER_WK_ORDER_OUT_EO.desc;
        } else {
            return null;
        }
    }
    public String getDocType$(){
        DocTypeService service = SpringUtils.getBean(DocTypeService.class);
        DocType docType = service.selectById(this.docType);
src/main/java/com/zy/asrs/entity/TaskLog.java
@@ -1,5 +1,6 @@
package com.zy.asrs.entity;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;import com.core.common.SpringUtils;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.entity.WrkMast;
@@ -146,14 +147,14 @@
     */
    @ApiModelProperty(value= "目标站")
    @TableField("sta_no")
    private Integer staNo;
    private String staNo;
    /**
     * 源站
     */
    @ApiModelProperty(value= "源站")
    @TableField("source_sta_no")
    private Integer sourceStaNo;
    private String sourceStaNo;
    /**
     * 源库位
@@ -382,7 +383,7 @@
    public TaskLog() {}
    public TaskLog(Long id,Integer wrkNo,Long logId,String invWh,Date ymd,String mk,Integer whsType,Integer wrkSts,Integer ioType,Integer crnNo,String sheetNo,Double ioPri,Date wrkDate,String locNo,Integer staNo,Integer sourceStaNo,String sourceLocNo,String locSts,String picking,String linkMis,String onlineYn,String updMk,String exitMk,Integer pltType,String emptyMk,Date ioTime,Integer ctnType,String packed,String oveMk,Double mtnType,String userNo,Date crnStrTime,Date crnEndTime,Date plcStrTime,Date crnPosTime,Double loadTime,Double expTime,Double refWrkno,Date refIotime,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String pauseMk,Date errorTime,String errorMemo,Integer ctnKind,String manuType,String memoM,Double scWeight,String logMk,Date logErrTime,String logErrMemo,String barcode,String PdcType,String ctnNo,String fullPlt,String preHave,String takeNone,Long lineNumber) {
    public TaskLog(Long id,Integer wrkNo,Long logId,String invWh,Date ymd,String mk,Integer whsType,Integer wrkSts,Integer ioType,Integer crnNo,String sheetNo,Double ioPri,Date wrkDate,String locNo,String staNo,String sourceStaNo,String sourceLocNo,String locSts,String picking,String linkMis,String onlineYn,String updMk,String exitMk,Integer pltType,String emptyMk,Date ioTime,Integer ctnType,String packed,String oveMk,Double mtnType,String userNo,Date crnStrTime,Date crnEndTime,Date plcStrTime,Date crnPosTime,Double loadTime,Double expTime,Double refWrkno,Date refIotime,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String pauseMk,Date errorTime,String errorMemo,Integer ctnKind,String manuType,String memoM,Double scWeight,String logMk,Date logErrTime,String logErrMemo,String barcode,String PdcType,String ctnNo,String fullPlt,String preHave,String takeNone,Long lineNumber) {
        this.id = id;
        this.wrkNo = wrkNo;
        this.logId = logId;
@@ -568,30 +569,30 @@
    }
    public String getStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
        BasDevp basDevp = service.selectById(this.staNo);
        if (!Cools.isEmpty(basDevp)){
            return String.valueOf(basDevp.getDevNo());
        }
        return null;
//        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
//        BasDevp basDevp = service.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", this.staNo));
//        if (!Cools.isEmpty(basDevp)){
//            return String.valueOf(basDevp.getDevNo());
//        }
        return this.staNo;
    }
    public String getSourceStaNo$(){
        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
        BasDevp basDevp = service.selectById(this.sourceStaNo);
        if (!Cools.isEmpty(basDevp)){
            return String.valueOf(basDevp.getDevNo());
        }
        return null;
//        BasDevpService service = SpringUtils.getBean(BasDevpService.class);
//        BasDevp basDevp = service.selectById(this.sourceStaNo);
//        if (!Cools.isEmpty(basDevp)){
//            return String.valueOf(basDevp.getDevNo());
//        }
        return this.sourceStaNo;
    }
    public String getSourceLocNo$(){
        LocMastService service = SpringUtils.getBean(LocMastService.class);
        LocMast locMast = service.selectById(this.sourceLocNo);
        if (!Cools.isEmpty(locMast)){
            return String.valueOf(locMast.getLocNo());
        }
        return null;
//        LocMastService service = SpringUtils.getBean(LocMastService.class);
//        LocMast locMast = service.selectById(this.sourceLocNo);
//        if (!Cools.isEmpty(locMast)){
//            return String.valueOf(locMast.getLocNo());
//        }
        return this.sourceLocNo;
    }
    public String getIoTime$(){
src/main/java/com/zy/asrs/entity/ViewInOutBean.java
@@ -6,68 +6,68 @@
 * @date 2018年11月24日
 */
public class ViewInOutBean {
    private String ymd;
    private String source_sta_no;
    private Long sto_qty;
    private Long ret_qty;
    private Long total_qty;
    private String ymd;
    private String sourceStaNo;
    private Long stoQty;
    private Long retQty;
    private Long totalQty;
    private int pageNumber;
    private int pageSize;
    private String begin_date; //查询开始日期
    private String end_date;   //查询截止日期
    public String getYmd() {
        return ymd;
    }
    public void setYmd(String ymd) {
        this.ymd = ymd;
    }
    public String getSource_sta_no() {
        return source_sta_no;
    }
    public void setSource_sta_no(String source_sta_no) {
        this.source_sta_no = source_sta_no;
    }
    public Long getSto_qty() {
        return sto_qty;
    }
    public void setSto_qty(Long sto_qty) {
        this.sto_qty = sto_qty;
    }
    public Long getRet_qty() {
        return ret_qty;
    }
    public void setRet_qty(Long ret_qty) {
        this.ret_qty = ret_qty;
    }
    public Long getTotal_qty() {
        return total_qty;
    }
    public void setTotal_qty(Long total_qty) {
        this.total_qty = total_qty;
    }
    public int getPageNumber() {
        return pageNumber;
    }
    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public String getBegin_date() {
        return begin_date;
    }
    public void setBegin_date(String begin_date) {
        this.begin_date = begin_date;
    }
    public String getEnd_date() {
        return end_date;
    }
    public void setEnd_date(String end_date) {
        this.end_date = end_date;
    }
    private String beginDate; //查询开始日期
    private String endDate;   //查询截止日期
    public String getYmd() {
        return ymd;
    }
    public void setYmd(String ymd) {
        this.ymd = ymd;
    }
    public String getSource_sta_no() {
        return sourceStaNo;
    }
    public void setSource_sta_no(String source_sta_no) {
        this.sourceStaNo = source_sta_no;
    }
    public Long getSto_qty() {
        return stoQty;
    }
    public void setSto_qty(Long sto_qty) {
        this.stoQty = sto_qty;
    }
    public Long getRet_qty() {
        return retQty;
    }
    public void setRet_qty(Long ret_qty) {
        this.retQty = ret_qty;
    }
    public Long getTotal_qty() {
        return totalQty;
    }
    public void setTotal_qty(Long total_qty) {
        this.totalQty = total_qty;
    }
    public int getPageNumber() {
        return pageNumber;
    }
    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
    public String getBegin_date() {
        return beginDate;
    }
    public void setBegin_date(String begin_date) {
        this.beginDate = begin_date;
    }
    public String getEnd_date() {
        return endDate;
    }
    public void setEnd_date(String end_date) {
        this.endDate = end_date;
    }
}
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -214,6 +214,19 @@
    @TableField("box_type3")
    private String boxType3 = "1";
    @ApiModelProperty("破损数")
    @TableField("adjust_qty")
    private Double adjustQty;
    @ApiModelProperty("上架数")
    @TableField("work_qty")
    private Double workQty;
    @ApiModelProperty("差异数")
    @TableField("splus_qty")
    private Double splusQty;
    public String getBeBatch$(){
        if (null == this.beBatch){ return null; }
        switch (this.beBatch){
src/main/java/com/zy/asrs/entity/WaitPakinLog.java
@@ -200,6 +200,19 @@
    @TableField("box_type3")
    private String boxType3 = "1";
    @ApiModelProperty("破损数")
    @TableField("adjust_qty")
    private Double adjustQty;
    @ApiModelProperty("上架数")
    @TableField("work_qty")
    private Double workQty;
    @ApiModelProperty("差异数")
    @TableField("splus_qty")
    private Double splusQty;
    public String getBeBatch$(){
        if (null == this.beBatch){ return null; }
        switch (this.beBatch){
src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -30,6 +30,7 @@
    private Long id;
    @ApiModelProperty("日志ID")
    @TableId(value = "log_id")
    private Long logId;
    /**
src/main/java/com/zy/asrs/service/WorkService.java
@@ -1,18 +1,17 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.BasStation;
import com.zy.asrs.entity.WaitPakin;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.param.FullStoreParam;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.common.model.LocDetlDto;
import com.zy.common.model.OutLocDto;
import com.zy.common.model.StartupDto;
import com.zy.common.model.TaskDto;
import com.zy.common.model.enums.IoWorkType;
import java.util.Date;
import java.util.List;
public interface WorkService {
@@ -41,6 +40,8 @@
     */
    void stockOut(BasDevp staNo, List<LocDetlDto> locDetls, IoWorkType ioWorkType, Long userId);
    void moveShallowLocByF(BasDevp staNo, Long userId, OutLocDto dto, LocMast locMast, StaDesc staDesc, Date now)
    void stockOut(BasDevp staNo, TaskDto taskDto, Long userId);
    void checkStockOut(BasDevp staNo, TaskDto taskDto, Long userId);
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1312,7 +1312,7 @@
     */
    @Override
    @Transactional
    public synchronized R callAgvMove(AgvCallParams params, Long userId) {
    public R callAgvMove(AgvCallParams params, Long userId) {
        if (Objects.isNull(params.getOrgSite())) {
            throw new CoolException("源站点不能为空!!");
        }
@@ -1389,7 +1389,7 @@
        if (Objects.isNull(params)) {
            throw new CoolException("参数不能为空!!");
        }
        log.info("缓存区组托参数---{}", JSONObject.toJSONString(params));
        List<OrderDetlPakin> detlPakins = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>()
                        .eq(!Cools.isEmpty(params.getThreeCode()), "three_code", params.getThreeCode())
//                .eq(!Cools.isEmpty(params.getMatnr()), "matnr", params.getMatnr())
@@ -1398,7 +1398,7 @@
        if (Objects.isNull(detlPakins) || detlPakins.isEmpty()) {
            throw new CoolException("数据错误: 单据明细不存在!!");
        }
//        log.info("缓存区响应结果---{}", JSONObject.toJSONString(detlPakins));
        return R.ok().add(detlPakins);
    }
@@ -1410,7 +1410,7 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R OutCallAgv(AgvCallParams params, Long userId) {
    public  R OutCallAgv(AgvCallParams params, Long userId) {
        BasAreas basAreas = basAreasService.selectOne(new EntityWrapper<BasAreas>().eq("whs_type_id", LocAreaType.LOC_AREA_TYPE_IN_CACHE.type));
        if (Objects.isNull(basAreas)) {
            throw new CoolException("库区不存在!!");
@@ -1444,7 +1444,8 @@
            }
            Set<Long> longs = matList.stream().map(Mat::getTagId).collect(Collectors.toSet());
            if (!longs.isEmpty() && longs.size() > 1) {
                throw new CoolException("物料类型不一致,请检查数据是否正确!!");
                continue;
//                throw new CoolException("库位:" + locCache.getLocNo() + ",台车:"  + locCache.getBarcode()  + "物料类型不一致,请检查数据是否正确!!");
            }
            Mat mat = matList.stream().findFirst().get();
@@ -1641,7 +1642,7 @@
     * @date 2025/12/8 15:37
     */
    @Override
    public R combCacehList(AgvCallParams params) {
    public  R combCacehList(AgvCallParams params) {
        if (Objects.isNull(params.getCarBarcode())) {
            throw new CoolException("台车托盘码不能为空!!");
        }
@@ -2073,7 +2074,42 @@
                mast.setWrkSts(2L);
                mast.setSourceStaNo(mast.getSourceStaNo());
                mast.setStaNo(mast.getSourceStaNo());
                mast.setLocNo(mast.getSourceLocNo());
                //TODO 盘点出库不适用原库位
                if (wrkMast.getIoType().equals(TaskIOType.CHECK_OUT.type)) {
                    Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>()
                            .eq("whs_type", whsType)
                            .eq("loc_type1", locType)
                            .notIn("row1", Arrays.asList(11, 14))
                            .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type);
                    List<String> strings = wrkDetls103.stream().map(WrkDetl::getMatnr).collect(Collectors.toList());
                    List<Mat> mats = matService.selectList(new EntityWrapper<Mat>().in("matnr", strings));
                    List<Mat> matList = mats.stream().sorted(Comparator.comparing(Mat::getRank, Comparator.nullsLast(String::compareTo))).collect(Collectors.toList());
                    Mat mat = matList.stream().findFirst().get();
                    if (mat.getRank().compareTo("D") >= 0) {
                        wrapper.orderDesc(Arrays.asList("bay1", "lev1"));
                    } else {
                        wrapper.orderAsc(Arrays.asList("bay1", "lev1"));
                    }
//                    if (matList.stream().findFirst()) {
//                        //.sorted(Comparator.comparing(Person::getName,
//                        //        Comparator.nullsLast(String::compareTo)))  // null 放在最后
//                        //// 或 nullsFirst 放在最前
//                        Integer rank = max.get().getRank();
//                        if (rank > MesConstant.maxRank) {
//                            wrapper.
//                        }
//                    }
//                    wrapper.orderAsc(Arrays.asList("bay1", "lev1"));
                    LocMast mast1 = locMastService.selectOne(wrapper);
                    if (Objects.isNull(mast1)) {
                        mast.setLocNo(mast.getSourceLocNo());
                    } else {
                        mast.setLocNo(mast1.getLocNo());
                    }
                } else {
                    mast.setLocNo(mast.getSourceLocNo());
                }
                boolean res = wrkMastService.updateById(mast);
                BeanUtils.copyProperties(mast, wrkMast);
                if (!res) {
@@ -2183,6 +2219,29 @@
        }
        return wrkMast;
    }
    private LocMast getLocMast(LocMast locMast, List<String> locs) {
        String shallowLoc = Utils.getShallowLoc(locMast.getLocNo(), Arrays.asList(1, 4));
        if (Objects.isNull(shallowLoc)) {
            throw new CoolException(locMast.getLocNo() + ",深库位对应浅库位" + shallowLoc + "不存在,请联系管理员!!");
        }
        LocMast locNo1 = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc));
        if (Objects.isNull(locNo1) || !locNo1.getLocSts().equals(LocStsType.LOC_STS_TYPE_O.type)) {
            locs.add(locMast.getLocNo());
            locMast = locMastService.
                    selectOne(new EntityWrapper<LocMast>()
                            .eq("loc_sts", LocStsType.LOC_STS_TYPE_O.type)
                            .notIn(!locs.isEmpty(), "loc_no", locs)
                            .orderDesc(Arrays.asList("gro1"))
                            .orderAsc(Arrays.asList("row1", "bay1", "lev1"))
                    );
            getLocMast(locMast, locs);
        }
        return locMast;
    }
    /**
@@ -2388,12 +2447,11 @@
                        .orderAsc(Arrays.asList("row1", "bay1", "lev1"))
                        .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
                if (Objects.isNull(locMast)) {
                    throw new CoolException("未查询到可用的空板信息!!");
                if (!Objects.isNull(locMast)) {
                    CrnTaskDetlDTO crnTaskDetlDTO = new CrnTaskDetlDTO().setLocNo(locMast.getLocNo()).setLocDetlList(new ArrayList<>());
                    locMasts.add(crnTaskDetlDTO);
//                    throw new CoolException("未查询到可用的空板信息!!");
                }
                CrnTaskDetlDTO crnTaskDetlDTO = new CrnTaskDetlDTO().setLocNo(locMast.getLocNo()).setLocDetlList(new ArrayList<>());
                locMasts.add(crnTaskDetlDTO);
                // 空板出库
                generateTask(locMasts, TaskIOType.MERGE_OUT.type, basDevp, userId, station);
            }
@@ -2483,7 +2541,10 @@
                    throw new CoolException("预约库位状态失败,库位号:" + locMast.getLocNo());
                }
            } else {
                throw new CoolException(locMast.getLocNo() + "库位不是在库状态");
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_loc_no", locMast.getLocNo()));
                if (!Objects.isNull(wrkMast) && wrkMast.getIoType() != 104) {
                    throw new CoolException(locMast.getLocNo() + "库位不是在库状态");
                }
            }
        }
    }
@@ -2581,7 +2642,9 @@
     */
    @Transactional(rollbackFor = Exception.class)
    public void generateAgvTask(String type, LocCache loc, String orgSite, String barcode, Long userId, String isNewIn) {
        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>().eq("barcode", barcode));
        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>()
                .eq("source_sta_no", orgSite)
                .eq("barcode", barcode));
        if (!tasks.isEmpty()) {
            throw new CoolException("托盘已在任务执行中..");
        }
@@ -2948,7 +3011,10 @@
        taskDetls.forEach(taskDetl -> {
            OrderPakout orderDetlPakout = orderPakoutService.selectOne(new EntityWrapper<OrderPakout>()
                    .eq("order_no", taskDetl.getOrderNo()));
            taskDetl.setMemo(orderDetlPakout.getShipCode());
            if (!Objects.isNull(orderDetlPakout)) {
                taskDetl.setMemo(!Cools.isEmpty(orderDetlPakout.getShipCode()) ? orderDetlPakout.getShipCode() : "0" );
            }
        });
        return R.ok("查询成功").add(taskDetls);
@@ -2990,34 +3056,69 @@
                    .eq("doc_type", 5)
                    .eq("number", locDetl.getOrderNo()));
            if (Objects.isNull(orderPakouts) || orderPakouts.isEmpty()) {
                throw new CoolException("单据信息不存在或已上报完成!!");
            }
            for (OrderPakout orderPakout : orderPakouts) {
                OrderDetlPakout orderDetl = orderDetlPakoutService.selectOne(new EntityWrapper<OrderDetlPakout>()
                        .eq("matnr", locDetl.getMatnr())
                        .eq("supp_code", locDetl.getSuppCode())
                        .eq("order_no", orderPakout.getOrderNo()));
                if (Objects.isNull(orderDetl)) {
                    continue;
                List<OrderPakin> orderPakins = orderPakinService.selectList(new EntityWrapper<OrderPakin>()
                        .eq("doc_type", 7)
                        .eq("order_no", locDetl.getOrderNo()));
                if (Objects.isNull(orderPakins) || orderPakins.isEmpty()) {
                    throw new CoolException("单据信息不存在或已上报完成!!");
                }
                locDetl.setMemo(orderPakout.getShipCode());
                locDetl.setOrderNo(orderPakout.getOrderNo());
                for (OrderPakin orderPakout : orderPakins) {
                    OrderDetlPakin orderDetl = orderDetlPakinService.selectOne(new EntityWrapper<OrderDetlPakin>()
                            .eq("matnr", locDetl.getMatnr())
                            .eq("supp_code", locDetl.getSuppCode())
                            .eq("order_no", orderPakout.getOrderNo()));
                    if (Objects.isNull(orderDetl)) {
                        continue;
                    }
                    locDetl.setMemo(orderPakout.getShipCode());
                    locDetl.setOrderNo(orderPakout.getOrderNo());
                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), locDetl.getAnfme());
                    locDto.setFrozen(locDetl.getFrozen());
                    locDto.setFrozenLoc(locCache.getFrozen());
                    locDto.setAgvStaNo(params.getTarSite());
                    locDto.setBrand(orderDetl.getBrand());
                    locDto.setMatnr(orderDetl.getMatnr());
                    locDto.setMaktx(orderDetl.getMaktx());
                    locDto.setSuppCode(orderDetl.getSuppCode());
                    locDto.setStandby1(orderDetl.getStandby1());
                    locDto.setStandby2(orderDetl.getStandby2());
                    locDto.setStandby3(orderDetl.getStandby3());
                    locDto.setBoxType1(orderDetl.getBoxType1());
                    locDto.setBoxType2(orderDetl.getBoxType2());
                    locDto.setBoxType3(orderDetl.getBoxType3());
                    locDtos.add(locDto);
                }
            } else {
                for (OrderPakout orderPakout : orderPakouts) {
                    OrderDetlPakout orderDetl = orderDetlPakoutService.selectOne(new EntityWrapper<OrderDetlPakout>()
                            .eq("matnr", locDetl.getMatnr())
                            .eq("supp_code", locDetl.getSuppCode())
                            .eq("order_no", orderPakout.getOrderNo()));
                    if (Objects.isNull(orderDetl)) {
                        continue;
                    }
                    locDetl.setMemo(orderPakout.getShipCode());
                    locDetl.setOrderNo(orderPakout.getOrderNo());
                LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), locDetl.getAnfme());
                locDto.setFrozen(locDetl.getFrozen());
                locDto.setFrozenLoc(locCache.getFrozen());
                locDto.setAgvStaNo(params.getTarSite());
                locDto.setBrand(orderDetl.getBrand());
                locDto.setSuppCode(orderDetl.getSuppCode());
                locDto.setStandby1(orderDetl.getStandby1());
                locDto.setStandby2(orderDetl.getStandby2());
                locDto.setStandby3(orderDetl.getStandby3());
                locDto.setBoxType1(orderDetl.getBoxType1());
                locDto.setBoxType2(orderDetl.getBoxType2());
                locDto.setBoxType3(orderDetl.getBoxType3());
                locDtos.add(locDto);
                    LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(), locDetl.getAnfme());
                    locDto.setFrozen(locDetl.getFrozen());
                    locDto.setFrozenLoc(locCache.getFrozen());
                    locDto.setAgvStaNo(params.getTarSite());
                    locDto.setBrand(orderDetl.getBrand());
                    locDto.setMatnr(orderDetl.getMatnr());
                    locDto.setMaktx(orderDetl.getMaktx());
                    locDto.setSuppCode(orderDetl.getSuppCode());
                    locDto.setStandby1(orderDetl.getStandby1());
                    locDto.setStandby2(orderDetl.getStandby2());
                    locDto.setStandby3(orderDetl.getStandby3());
                    locDto.setBoxType1(orderDetl.getBoxType1());
                    locDto.setBoxType2(orderDetl.getBoxType2());
                    locDto.setBoxType3(orderDetl.getBoxType3());
                    locDtos.add(locDto);
                }
            }
//            exist.add(locDetl.getLocNo());
        });
@@ -3043,11 +3144,15 @@
//        if (!Cools.isEmpty(params.getMatnr())) {
//            return R.error("物料信息不能为空!!");
//        }
        BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
                .eq("dev_no", params.getOrgSite())
                .eq("barcode", params.getCarBarcode()));
        if (Objects.isNull(station)) {
            LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("dev_no", params.getOrgSite()));
//        BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
//                .eq("dev_no", params.getOrgSite())
//                .eq("barcode", params.getCarBarcode()));
        List<BasStationDetl> stationDetls = basStationDetlService.selectList(new EntityWrapper<BasStationDetl>()
                .eq(!Cools.isEmpty(params.getMatnr()), "matnr", params.getMatnr())
                .eq(!Cools.isEmpty(params.getCarBarcode()),"zpallet", params.getCarBarcode())
                .eq(!Cools.isEmpty(params.getOrgSite()),"dev_no", params.getOrgSite()));
        if (Objects.isNull(stationDetls) || stationDetls.isEmpty()) {
            LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", params.getOrgSite()));
            if (!Objects.isNull(locCache)) {
                BasAreas whsTypeId = basAreasService.selectOne(new EntityWrapper<BasAreas>().eq("whs_type_id", LocAreaType.LOC_AREA_TYPE_IN_CACHE.type));
                if (Objects.isNull(whsTypeId)) {
@@ -3055,15 +3160,15 @@
                }
                List<LocDetl>  locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                                .eq("area_id", whsTypeId.getId())
                        .eq("dev_no", params.getOrgSite()));
                        .eq("loc_no", params.getOrgSite()));
                if (!locDetls.isEmpty()) {
                    return R.ok().add(locDetls);
                }
            }
        } else {
            List<BasStationDetl> stationDetls = basStationDetlService.selectList(new EntityWrapper<BasStationDetl>()
                    .like(!Cools.isEmpty(params.getMatnr()), "matnr", params.getMatnr())
                    .eq("dev_no", station.getDevNo()));
//            List<BasStationDetl> stationDetls = basStationDetlService.selectList(new EntityWrapper<BasStationDetl>()
//                    .like(!Cools.isEmpty(params.getMatnr()), "matnr", params.getMatnr())
//                    .eq("dev_no", station.getDevNo()));
            if (!stationDetls.isEmpty()) {
                return R.ok().add(stationDetls);
            }
@@ -3167,9 +3272,10 @@
    public void generateAgvTaskByTc(List<LocDto> locDtos) {
        List<LocDto> locDtoArrayList = new ArrayList<>();
        for (LocDto locDto : locDtos) {
            if (locDto.getFrozen() != 1 && locDto.getFrozenLoc() != 1) {
                locDtoArrayList.add(locDto);
            }
//            if (locDto.getFrozen() != 1 && locDto.getFrozenLoc() != 1) {
//
//            }
            locDtoArrayList.add(locDto);
        }
        locDtos = locDtoArrayList;
        if (Cools.isEmpty(locDtos)) {
@@ -3300,7 +3406,7 @@
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R getEmptyOutStock(AgvCallParams params) {
    public  R getEmptyOutStock(AgvCallParams params) {
        if (Objects.isNull(params.getOrgSite())) {
            return R.error("托盘类型不能为空!!");
        }
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -64,10 +64,10 @@
                    throw new CoolException("站点状态修改失败!!");
                }
            }
            wrkMast.setWrkSts(4L);
            wrkMast.setWrkSts(204L);
            // 出库
        } else if (wrkMast.getWrkSts() > 10) {
            wrkMast.setWrkSts(14L);
            wrkMast.setWrkSts(304L);
        }
        Date now = new Date();
        wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -13,17 +13,20 @@
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.enums.ContainerType;
import com.zy.asrs.enums.LocAreaType;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.asrs.utils.Utils;
import com.zy.common.constant.MesConstant;
import com.zy.common.model.*;
import com.zy.common.model.enums.IoWorkType;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.properties.SlaveProperties;
import com.zy.common.service.CommonService;
import com.zy.common.web.WcsController;
import jdk.nashorn.internal.ir.annotations.Ignore;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -105,6 +108,8 @@
    private BasStationDetlService basStationDetlService;
    @Autowired
    private BasAreasService basAreasService;
    @Autowired
    private OrderPakoutServiceImpl orderPakoutService;
    @Override
    @Transactional
@@ -358,6 +363,10 @@
            // 获取路径
            StaDesc staDesc = staDescService.queryCrnStn(ioType, locMast.getCrnNo(), outSta);
            //移走潜库位在库或空板信息
            moveShallowLocByF(staNo, userId, dto, locMast, staDesc, now);
            // 生成工作号
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
            // 生成工作档
@@ -415,6 +424,47 @@
                }
            } else {
                throw new CoolException(dto.getLocNo() + "库位不是在库状态");
            }
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void moveShallowLocByF(BasDevp staNo, Long userId, OutLocDto dto, LocMast locMast, StaDesc staDesc, Date now) {
        String shallowLoc = Utils.getShallowLoc(locMast.getLocNo(), MesConstant.deepRows);
        if (!Objects.isNull(shallowLoc)) {
            LocMast locNo = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", shallowLoc));
            if (locNo.getLocSts().equals(LocStsType.LOC_STS_TYPE_F.type) || locNo.getLocSts().equals(LocStsType.LOC_STS_TYPE_D.type)) {
                //TODO 出库前判断是浅库位是否有货,如果有货优先生成移库任务
                BasDevp sourceStaNo = basDevpService.checkSiteStatus(staDesc.getCrnStn(), true);
                sourceStaNo.setLocType1(locMast.getLocType1());
                LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
                StartupDto mvDto = commonService.getLocNo(1, staNo.getDevNo(), 2, null, locTypeDto);
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(mvDto.getWorkNo());
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(1L); // 工作状态:11.移库任务
                wrkMast.setIoType(11); // 入出库状态
                wrkMast.setIoPri(999D); // 优先级:13
                wrkMast.setStaNo("");
                wrkMast.setCrnNo(locNo.getCrnNo());
                //源库位
                wrkMast.setSourceLocNo(locNo.getLocNo()); // 源库位
                //目标库位
                wrkMast.setLocNo(mvDto.getLocNo());
                wrkMast.setFullPlt("Y"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("N"); // 空板
                wrkMast.setLinkMis("N");
                wrkMast.setBarcode(locNo.getBarcode());
                wrkMast.setAppeUser(userId); // 操作人员数据
                wrkMast.setAppeTime(now);
                wrkMast.setModiUser(userId);
                wrkMast.setModiTime(now);
                if (!wrkMastService.insert(wrkMast)) {
                    throw new CoolException("保存移库工作档失败,移库库位号:" + locNo.getLocNo() + "目标库位号:" + dto.getLocNo());
                }
            }
        }
    }
@@ -682,6 +732,8 @@
            wrkDetl.setWrkNo(workNo)
                    .setId(null)
                    .setIoTime(new Date())
                    .setMatnr(locDto.getMatnr())
                    .setMaktx(locDto.getMaktx())
                    .setOrderNo(locDto.getOrderNo())
                    .setAnfme(locDto.getAnfme())
                    .setBoxType1(locDto.getBoxType1())
@@ -698,11 +750,14 @@
//                throw new CoolException("修改订单明细数量失败");
//            }
//            orderService.updateSettle(orderDetl.getOrderId(), 2L, userId);
            OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
                    orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
                    "1", orderDetl.getBoxType2(), orderDetl.getBoxType3()
                    , locDto.getAnfme());
            OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
            OrderPakout orderNo = orderPakoutService.selectOne(new EntityWrapper<OrderPakout>().eq("order_no", orderDetl.getOrderNo()));
            if (!Objects.isNull(orderNo)) {
                OrderInAndOutUtil.increaseWorkQty(Boolean.FALSE, orderDetl.getOrderId(), orderDetl.getMatnr(), orderDetl.getBatch(),
                        orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(),
                        "1", orderDetl.getBoxType2(), orderDetl.getBoxType3()
                        , locDto.getAnfme());
                OrderInAndOutUtil.updateOrder(Boolean.FALSE, orderDetl.getOrderId(), 2L, userId);
            }
        }
        // 修改库位状态:   F.在库 ====>>> R.出库预约/P.拣料/盘点/并板出库中
src/main/java/com/zy/asrs/task/OrderMoveHistoryScheduler.java
@@ -22,7 +22,7 @@
    /**
     * 将已上报order和orderDetl移动到log表
     */
    @Scheduled(cron = "0/30 * * * * ?")
    @Scheduled(cron = "0 0 04 * * ?")
    public void executeOrder(){
        orderMoveHistoryHandler.startOrder();
    }
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -81,6 +81,8 @@
    private OrderDetlPakoutService orderDetlPakoutService;
    @Autowired
    private OrderPakoutService orderPakoutService;
    @Autowired
    private WaitPakinLogServiceImpl waitPakinLogService;
    @Transactional
@@ -291,6 +293,11 @@
                        .eq("three_code", detl.getThreeCode())
                        .eq("supp_code", detl.getSuppCode())
                        .eq("order_no", detl.getOrderNo()));
//                List<WaitPakinLog> wrkDetls = waitPakinLogService.selectList(new EntityWrapper<WaitPakinLog>()
//                        .eq("matnr", detl.getMatnr())
//                        .eq("three_code", detl.getThreeCode())
//                        .eq("supp_code", detl.getSuppCode())
//                        .eq("order_no", detl.getOrderNo()));
                if (Objects.isNull(wrkDetls) || wrkDetls.isEmpty()) {
                    ReportOrderParams itemParam = new ReportOrderParams();
                    // BS Code
@@ -301,7 +308,7 @@
                            .setPro_komcode(detl.getMatnr())
                            // 上报时,默认产品id是供应商编码
                            .setPro_id(detl.getSuppCode())
                            .setLocation_no("LX000000000")
                            .setLocation_no("QH00000000")
                            .setSj_emp("9527")
                            .setLocation_type(MatLocType.getMatTag(material.getTagId() + ""))
                            // 上报时,默认上报时间是更新时间
@@ -316,6 +323,27 @@
                } else {
                    wrkDetls.forEach(wrkDetl -> {
                        ReportOrderParams itemParam = new ReportOrderParams();
                        WaitPakin waitPakin = waitPakinService.selectOne(new EntityWrapper<WaitPakin>()
                                .eq("matnr", detl.getMatnr())
                                .eq("three_code", detl.getThreeCode())
//                                .eq("zpallet", wrkDetl.getZpallet())
                                .eq("supp_code", detl.getSuppCode())
                                .eq("order_no", detl.getOrderNo()));
                        if (Objects.isNull(waitPakin)) {
                            WaitPakinLog waitPakinLog = waitPakinLogService.selectOne(new EntityWrapper<WaitPakinLog>()
                                    .eq("matnr", detl.getMatnr())
                                    .eq("three_code", detl.getThreeCode())
//                                    .eq("zpallet", wrkDetl.getZpallet())
                                    .eq("supp_code", detl.getSuppCode())
                                    .eq("order_no", detl.getOrderNo()));
                            if (Objects.isNull(waitPakinLog)) {
                                throw new CoolException("历史组托档不存在,请联系管理员!!");
                            }
                            itemParam.setPick_qty(waitPakinLog.getAnfme().intValue());
                        } else {
                            itemParam.setPick_qty(waitPakin.getAnfme().intValue());
                        }
//                        ReportOrderParams itemParam = new ReportOrderParams();
                        // BS Code
                        itemParam.setTotal_serial(detl.getThreeCode())
                                // 上报时,默认产品类型是null
@@ -330,12 +358,12 @@
                                // 上报时,默认上报时间是更新时间
                                .setSj_date(Utils.dateToStr(order.getUpdateTime(), "yyyy-MM-dd HH:mm:ss"))
                                // 上报时,默认上报数量是订单数量
                                .setPick_qty(wrkDetl.getAnfme().intValue())
//                                .setPick_qty(detl.getQty().intValue())
//                                .setPick_qty(wrkDetl.getAnfme().intValue())
//                                .setPick_qty(waitPakinLog.getAnfme().intValue())
                                // 上报时,默认损坏数量是0
                                .setDamage_qty(0)
                                .setDamage_qty(wrkDetl.getAdjustQty().intValue())
                                // 上报时,默认差异数量是0
                                .setDiff_qty(0);
                                .setDiff_qty(wrkDetl.getSplusQty().intValue());
                        reportOrderParams.add(itemParam);
                    });
                }
@@ -396,7 +424,7 @@
            List<OrderItemsParam> reportOrderParams = new ArrayList<>();
            orderDetls.forEach(detl -> {
                Mat material = matService.selectOne(new EntityWrapper<Mat>().eq("matnr",  detl.getMatnr())
                Mat material = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", detl.getMatnr())
                        .eq("supp_code", detl.getSuppCode()));
                if (Objects.isNull(material)) {
                    throw new CoolException(material.getMatnr() + "物料不存在");
@@ -417,7 +445,7 @@
                        .eq("order_no", detl.getOrderNo()));
                if (Objects.isNull(detlLog) || detlLog.isEmpty()) {
                    OrderItemsParam itemParam = new OrderItemsParam();
                    itemParam.setLocation_no("LX99999999");
                    itemParam.setLocation_no("QH00000000");
                    itemParam
                            // 上报时,默认产品类型是null
                            .setPro_type(material.getProType())
src/main/java/com/zy/asrs/utils/Utils.java
@@ -7,6 +7,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.RowLastno;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.RowLastnoService;
import com.zy.common.CodeBuilder;
import com.zy.common.model.LocDetlDto;
@@ -154,6 +155,36 @@
    }
    /**
     * 获取 深库位对应的浅库位号
     */
    public static String getShallowLoc(String deepLoc, List<Integer> doubleLocs) {
        LocMastService locService = SpringUtils.getBean(LocMastService.class);
        LocMast depLoc = locService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", deepLoc));
        int row;
        if (depLoc.getRow1() != 1) {
            row = depLoc.getRow1() - 1;
        } else {
            row = depLoc.getRow1();
        }
        boolean contains = doubleLocs.contains(row);
        LocMast shallowLoc = null;
        if (!contains) {
            shallowLoc = locService.selectOne(new EntityWrapper<LocMast>()
                    .eq("row1", row)
                    .eq("bay1", depLoc.getBay1())
                    .eq("lev1", depLoc.getLev1())
            );
        } else {
            shallowLoc = locService.selectOne(new EntityWrapper<LocMast>()
                    .eq("row1", depLoc.getRow1() + 1)
                    .eq("bay1", depLoc.getBay1())
                    .eq("lev1", depLoc.getLev1())
            );
        }
        return shallowLoc.getLocNo();
    }
    /**
     * 获取 深库位排对应的浅库位排
     */
    public static Integer getShallowRow(SlaveProperties slaveProperties, Integer deepRow) {
src/main/java/com/zy/common/constant/MesConstant.java
@@ -1,9 +1,14 @@
package com.zy.common.constant;
import java.util.Arrays;
import java.util.List;
/**
 * Created by vincent on 2022/4/21
 */
public class MesConstant {
    public static final Integer maxRank = 100;
    //小系统接口地址
//    public static final String URL = "http://webservice.kopen.com.cn:1482/kc-api/api/wms/ ";
@@ -48,4 +53,6 @@
     */
    public static final String TOKEN_PARAM_NAME = "access_token";
    public static List<Integer> deepRows = Arrays.asList(11, 14);
}
src/main/java/com/zy/common/service/CommonService.java
@@ -89,7 +89,9 @@
                throw new CoolException("生成工作号" + workNo + "在工作档中已存在");
            }
        }
        return workNo;
        // 在工作号后面直接拼接两位随机数,通过数学运算保持 int 类型
        int randomNum = (int) (Math.random() * 90 + 10);
        return workNo * 100 + randomNum;
    }
    // 拆盘机处空板扫码,驱动托盘向码垛位,不入库
@@ -306,7 +308,7 @@
                .le("row1", rowLastno.geteRow())
                .eq("loc_type1", locTypeDto.getLocType1())
                .eq("loc_sts", "O")
                .orderAsc(Arrays.asList( "row1", "bay1","lev1"));
                .orderAsc(Arrays.asList("bay1","lev1"));
        if (locTypeDto.getLocType1() != 2) {
            wrapper.eq("crn_no", crnNo);
src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
@@ -89,24 +89,24 @@
                logger.info("++++++++ 许可证加载结束 ++++++++");
                logger.info("++++++++ 许可证加载标记,搜索修改 ++++++++");
//                licenseTimer.setSystemSupport(true);
//                licenseTimer.setLicenseDays(9999);
//                return true;
                licenseTimer.setSystemSupport(true);
                licenseTimer.setLicenseDays(9999);
                return true;
                licenseTimer.setSystemSupport(install!=null);
                if (install != null) {
                    Date start = new Date();
                    Date end = install.getNotAfter();
                    Long starTime = start.getTime();
                    Long endTime = end.getTime();
                    Long num = endTime - starTime;//时间戳相差的毫秒数
                    int day = (int) (num / 24 / 60 / 60 / 1000);
                    licenseTimer.setLicenseDays(day);
                }
                return install != null;
//                licenseTimer.setSystemSupport(install!=null);
//
//                if (install != null) {
//                    Date start = new Date();
//                    Date end = install.getNotAfter();
//                    Long starTime = start.getTime();
//                    Long endTime = end.getTime();
//                    Long num = endTime - starTime;//时间戳相差的毫秒数
//                    int day = (int) (num / 24 / 60 / 60 / 1000);
//                    licenseTimer.setLicenseDays(day);
//                }
//
//
//                return install != null;
            } catch (Exception e) {
                return false;
            }
src/main/resources/application-dev.yml
@@ -11,8 +11,10 @@
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    username: sa
    password: sa@123
    url: jdbc:sqlserver://192.168.238.31:1433;databasename=jsxsasrs
#    password: sa@123
    password: MyP@ssw0rd2024!
#    url: jdbc:sqlserver://192.168.238.31:1433;databasename=jsxsasrs
    url: jdbc:sqlserver://localhost:1433;databasename=jsxsasrs
#    url: jdbc:sqlserver://192.168.4.34:1433;databasename=jsxsasrs
  mvc:
    static-path-pattern: /**
src/main/resources/mapper/LocDetlMapper.xml
@@ -301,7 +301,7 @@
            DATEPART( yyyy, a.modi_time ),
            DATEPART( mm, a.modi_time ),
            DATEPART( dd, a.modi_time ),
            a.anfme,b.lev1,b.bay1
            a.anfme,b.bay1,b.lev1
        ASC
    </select>
@@ -335,7 +335,7 @@
            DATEPART( yyyy, a.modi_time ),
            DATEPART( mm, a.modi_time ),
            DATEPART( dd, a.modi_time ),
            a.anfme,b.lev1,b.bay1
            a.anfme,b.bay1,b.lev1
        ASC
    </select>
src/main/resources/mapper/LocMastMapper.xml
@@ -215,22 +215,45 @@
            #{item}
        </foreach>
    </select>
    <select id="selectNotFull" resultType="com.zy.asrs.entity.LocMast">
        SELECT
            TOP 1 *
        FROM
            asr_loc_mast
        WHERE
            barcode IN (SELECT zpallet  FROM asr_loc_detl ald
                INNER JOIN man_mat mt ON ald.matnr = mt.matnr AND ald.supp_code = mt.supp_code
                                        WHERE mt.loc_type =#{locType}  AND area_id = #{id} GROUP BY zpallet HAVING COUNT (*) &lt; 2)
        <if test="locs != null and locs.size > 0" >
            AND loc_no NOT IN
        SELECT TOP 1
        loc_no, barcode, modi_time, whs_type,ctn_type,loc_sts,crn_no,row1,bay1,lev1,loc_type,loc_type1,io_time,first_time,appe_time,frozen,area_id,move_status
        FROM asr_loc_mast alm
            WHERE EXISTS (
                SELECT 1
                 FROM asr_loc_detl ald
                  INNER JOIN man_mat mt ON ald.matnr = mt.matnr AND ald.supp_code = mt.supp_code
                WHERE mt.loc_type = #{locType}  AND alm.area_id = #{id} AND ald.zpallet = alm.barcode
                GROUP BY ald.zpallet
                HAVING COUNT(*) &lt; 2
            )
        <if test="locs != null and locs.size > 0">
            AND alm.loc_no NOT IN
            <foreach collection="locs" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        ORDER BY loc_no, modi_time ASC
        ORDER BY alm.loc_no, alm.modi_time ASC
    </select>
<!--    <select id="selectNotFull" resultType="com.zy.asrs.entity.LocMast">-->
    <!--        SELECT-->
    <!--            TOP 1 *-->
    <!--        FROM-->
    <!--            asr_loc_mast-->
    <!--        WHERE-->
    <!--            barcode IN (SELECT zpallet  FROM asr_loc_detl ald-->
    <!--                INNER JOIN man_mat mt ON ald.matnr = mt.matnr AND ald.supp_code = mt.supp_code-->
    <!--                                        WHERE mt.loc_type =#{locType}  AND area_id = #{id} GROUP BY zpallet HAVING COUNT (*) &lt; 2)-->
    <!--        <if test="locs != null and locs.size > 0" >-->
    <!--            AND loc_no NOT IN-->
    <!--            <foreach collection="locs" item="item" index="index" separator="," open="(" close=")">-->
    <!--                #{item}-->
    <!--            </foreach>-->
    <!--        </if>-->
    <!--        ORDER BY loc_no, modi_time ASC-->
    <!--    </select>-->
</mapper>
src/main/webapp/static/js/mat/mat.js
@@ -7,6 +7,7 @@
        {type: 'checkbox'}
        , {field: 'tagId$', align: 'center', title: '归类', templet: '#tagTpl', width: 90}
        , {field: 'locType$', align: 'center', title: '库位类型', width: 90}
        , {field: 'rank', align: 'center', title: 'ABC类', width: 90}
        // ,{field: 'store_max', align: 'center',title: '库存上限'}
        // ,{field: 'store_min', align: 'center',title: '库存下限'}
        // ,{field: 'store_max_date', align: 'center',title: '库龄上限(天)'}
src/main/webapp/static/js/orderTablePakout.js
@@ -42,7 +42,9 @@
            // {type: 'numbers', title: '#'},
            {field: 'orderTime', title: '日期', width: 160},
            {field: 'orderNo', title: '单据编号', align: 'center', width: 155},
            {field: 'shipName$', title: '单据类型', align: 'center'}
            // {field: 'shipName$', title: '单据类型', align: 'center'}
            {field: 'orderType$', title: '单据类型', align: 'center'}
            // {field: 'docType$', title: '单据类型', align: 'center'}
        ]],
        done: function (res, curr, count) {
src/main/webapp/views/orderPakout/out.html
@@ -78,9 +78,8 @@
                                <div class="layui-input-inline">
                                    <select name="shipName">
                                        <option value="">单据类型</option>
                                        <option value="11">SO</option>
                                        <option value="12">EO</option>
                                        <option value="13">MD</option>
                                        <option value="2">SO</option>
                                        <option value="3">EO</option>
                                    </select>
                                </div>
                            </div>