自动化立体仓库 - WMS系统
166fdccba064a3c18ece84cccba6cfb3093551a7..7cf2e143941e1548cc468992ada42106a27805a1
15 小时以前 skyouc
Merge branch 'jsxswms' of http://47.97.1.152:5880/r/zy-as...
7cf2e1 对比 | 目录
15 小时以前 skyouc
入库功能
afe9f0 对比 | 目录
17 小时以前 zhou zhou
#出库单
ba8f09 对比 | 目录
23 小时以前 skyouc
添加BSCode字段
7567c4 对比 | 目录
8个文件已添加
40个文件已修改
1592 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/BasStationDetlController.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderPakinController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderPakoutController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasStationDetl.java 486 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakin.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/WaitPakinLog.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CombParam.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/CompleteParam.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/FullStoreParam.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/enums/OrderTypeEnum.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/BasStationDetlMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/BasStationDetlService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/MobileService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/BasStationDetlServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 301 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderPakoutServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkLogScheduler.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/CodeBuilder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/DetlDto.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/LocDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/TaskDto.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/BasStationDetlMapper.xml 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/adjustOrder/adjustOrder.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/basStation/basStation.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/checkOrder/checkOrder.js 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/common.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/locCache/locCache.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/order.js 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakin/order.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderPakout/order.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/taskDetl/taskDetl.js 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/waitPakin/waitPakin.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/adjustOrder/adjustOrder.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/basStation/basStation.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/basStation/basStationDetl.html 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/checkOrder/checkOrder.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/order.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/orderPakout/order.html 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/task/taskDetl.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/BasStationDetlController.java
New file
@@ -0,0 +1,123 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.DateUtils;
import com.zy.asrs.entity.BasStationDetl;
import com.zy.asrs.service.BasStationDetlService;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
public class BasStationDetlController extends BaseController {
    @Autowired
    private BasStationDetlService basStationDetlService;
    @RequestMapping(value = "/basStationDetl/{id}/auth")
    @ManagerAuth
    public R get(@PathVariable("id") String id) {
        return R.ok(basStationDetlService.selectById(String.valueOf(id)));
    }
    @RequestMapping(value = "/basStationDetl/list/auth")
    @ManagerAuth
    public R list(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String orderByField,
                  @RequestParam(required = false)String orderByType,
                  @RequestParam Map<String, Object> param){
        EntityWrapper<BasStationDetl> wrapper = new EntityWrapper<>();
        excludeTrash(param);
        convert(param, wrapper);
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(basStationDetlService.selectPage(new Page<>(curr, limit), wrapper));
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
            if (val.contains(RANGE_TIME_LINK)){
                String[] dates = val.split(RANGE_TIME_LINK);
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
            }
        }
    }
    @RequestMapping(value = "/basStationDetl/add/auth")
    @ManagerAuth
    public R add(BasStationDetl basStationDetl) {
        basStationDetlService.insert(basStationDetl);
        return R.ok();
    }
    @RequestMapping(value = "/basStationDetl/update/auth")
    @ManagerAuth
    public R update(BasStationDetl basStationDetl){
        if (Cools.isEmpty(basStationDetl) || null==basStationDetl.getId()){
            return R.error();
        }
        basStationDetlService.updateById(basStationDetl);
        return R.ok();
    }
    @RequestMapping(value = "/basStationDetl/delete/auth")
    @ManagerAuth
    public R delete(@RequestParam(value="ids[]") Long[] ids){
         for (Long id : ids){
            basStationDetlService.deleteById(id);
        }
        return R.ok();
    }
    @RequestMapping(value = "/basStationDetl/export/auth")
    @ManagerAuth
    public R export(@RequestBody JSONObject param){
        EntityWrapper<BasStationDetl> wrapper = new EntityWrapper<>();
        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
        Map<String, Object> map = excludeTrash(param.getJSONObject("basStationDetl"));
        convert(map, wrapper);
        List<BasStationDetl> list = basStationDetlService.selectList(wrapper);
        return R.ok(exportSupport(list, fields));
    }
    @RequestMapping(value = "/basStationDetlQuery/auth")
    @ManagerAuth
    public R query(String condition) {
        EntityWrapper<BasStationDetl> wrapper = new EntityWrapper<>();
        wrapper.like("id", condition);
        Page<BasStationDetl> page = basStationDetlService.selectPage(new Page<>(0, 10), wrapper);
        List<Map<String, Object>> result = new ArrayList<>();
        for (BasStationDetl basStationDetl : page.getRecords()){
            Map<String, Object> map = new HashMap<>();
            map.put("id", basStationDetl.getId());
            map.put("value", basStationDetl.getId());
            result.add(map);
        }
        return R.ok(result);
    }
    @RequestMapping(value = "/basStationDetl/check/column/auth")
    @ManagerAuth
    public R query(@RequestBody JSONObject param) {
        Wrapper<BasStationDetl> wrapper = new EntityWrapper<BasStationDetl>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
        if (null != basStationDetlService.selectOne(wrapper)){
            return R.parse(BaseRes.REPEAT).add(getComment(BasStationDetl.class, String.valueOf(param.get("key"))));
        }
        return R.ok();
    }
}
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -310,13 +310,38 @@
        return R.ok().add(combParams);
    }
    @RequestMapping("/comb/auth")
    @ManagerAuth(memo = "组托")
    @RequestMapping("/comb/auth")
    public R comb(@RequestBody CombParam combParam){
        mobileService.comb(combParam, getUserId());
        return R.ok("组托成功");
    }
    @ManagerAuth(memo = "缓冲库入库组托")
    @RequestMapping("/cache/comb/auth")
    public R onlineComb(@RequestBody CombParam combParam) {
        if (Objects.isNull(combParam)) {
            return R.error("参数不能为空!!");
        }
        mobileService.cacheComb(combParam, getUserId());
        return R.ok("组托成功");
    }
    @ManagerAuth(memo = "缓冲库确认上架(模拟物理按钮)")
    @RequestMapping("/cache/comb/pub")
    public R cacheCombPub(@RequestBody CompleteParam combParam) {
        if (Objects.isNull(combParam)) {
            return R.error("参数不能为空!!");
        }
        mobileService.combInPub(combParam, getUserId());
        return R.ok("上架成功");
    }
    @RequestMapping("/pack/get/auth")
    @ManagerAuth
    public R packGet(@RequestParam String barcode){
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -163,7 +163,7 @@
        for (OrderDetl orderDetl : param.getOrderDetlList()) {
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getBrand(),
                    orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getThreeCode());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
                        orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
@@ -220,7 +220,7 @@
        for (OrderDetl orderDetl : param.getOrderDetlList()) {
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                    orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getThreeCode());
            if (DetlDto.has(list, dto)) {
                OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                        orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
src/main/java/com/zy/asrs/controller/OrderPakinController.java
@@ -155,7 +155,7 @@
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                    orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
                    orderDetl.getLineNumber(),
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getThreeCode());
            if (DetlDto.has(list, dto)) {
                OrderDetlPakin item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                        orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
@@ -213,7 +213,7 @@
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch(),
                    orderDetl.getBrand(),
                    orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getThreeCode());
            if (DetlDto.has(list, dto)) {
                OrderDetlPakin item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand()
                        ,orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
src/main/java/com/zy/asrs/controller/OrderPakoutController.java
@@ -186,7 +186,7 @@
        for (OrderDetlPakout orderDetl : param.getOrderDetlPakoutList()) {
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                    orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getThreeCode());
            if (DetlDto.has(list, dto)) {
                OrderDetlPakout item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                        orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
@@ -243,7 +243,7 @@
        for (OrderDetlPakout orderDetl : param.getOrderDetlPakoutList()) {
            DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                    orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3());
                    orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getThreeCode());
            if (DetlDto.has(list, dto)) {
                OrderDetlPakout item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(),
                        orderDetl.getBrand(),orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),
src/main/java/com/zy/asrs/entity/BasStationDetl.java
New file
@@ -0,0 +1,486 @@
package com.zy.asrs.entity;
import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.enums.IdType;
import com.baomidou.mybatisplus.annotations.TableField;
import com.core.common.SpringUtils;
import com.zy.system.service.UserService;
import com.zy.system.entity.User;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.core.common.SpringUtils;
import com.zy.system.service.UserService;
import com.zy.system.entity.User;
import java.text.SimpleDateFormat;
import java.util.Date;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
@Data
@TableName("agv_bas_station_detl")
public class BasStationDetl implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value= "")
    @TableId(value = "id", type = IdType.INPUT)
    private Long id;
    /**
     * 站点编码
     */
    @ApiModelProperty(value= "站点编码")
    @TableField("dev_no")
    private Integer devNo;
    /**
     * 数量
     */
    @ApiModelProperty(value= "数量")
    private Double anfme;
    /**
     * 托盘条码
     */
    @ApiModelProperty(value= "托盘条码")
    private String zpallet;
    /**
     * 商品编号
     */
    @ApiModelProperty(value= "商品编号")
    private String matnr;
    /**
     * 商品名称
     */
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    /**
     * 批号
     */
    @ApiModelProperty(value= "批号")
    private String batch;
    /**
     * 单据编号
     */
    @ApiModelProperty(value= "单据编号")
    @TableField("order_no")
    private String orderNo;
    /**
     * 规格
     */
    @ApiModelProperty(value= "规格")
    private String specs;
    /**
     * 型号
     */
    @ApiModelProperty(value= "型号")
    private String model;
    /**
     * 颜色
     */
    @ApiModelProperty(value= "颜色")
    private String color;
    /**
     * 品牌
     */
    @ApiModelProperty(value= "品牌")
    private String brand;
    /**
     * 单位
     */
    @ApiModelProperty(value= "单位")
    private String unit;
    /**
     * 单价
     */
    @ApiModelProperty(value= "单价")
    private Double price;
    /**
     * sku
     */
    @ApiModelProperty(value= "sku")
    private String sku;
    /**
     * 单位量
     */
    @ApiModelProperty(value= "单位量")
    private Double units;
    /**
     * 条码
     */
    @ApiModelProperty(value= "条码")
    private String barcode;
    /**
     * 产地
     */
    @ApiModelProperty(value= "产地")
    private String origin;
    /**
     * 厂家
     */
    @ApiModelProperty(value= "厂家")
    private String manu;
    /**
     * 生产日期
     */
    @ApiModelProperty(value= "生产日期")
    @TableField("manu_date")
    private String manuDate;
    /**
     * 品项数
     */
    @ApiModelProperty(value= "品项数")
    @TableField("item_num")
    private String itemNum;
    /**
     * 安全库存量
     */
    @ApiModelProperty(value= "安全库存量")
    @TableField("safe_qty")
    private Double safeQty;
    /**
     * 重量
     */
    @ApiModelProperty(value= "重量")
    private Double weight;
    /**
     * 长度
     */
    @ApiModelProperty(value= "长度")
    @TableField("man_length")
    private Double manLength;
    /**
     * 体积
     */
    @ApiModelProperty(value= "体积")
    private Double volume;
    /**
     * 三方编码
     */
    @ApiModelProperty(value= "三方编码")
    @TableField("three_code")
    private String threeCode;
    /**
     * 供应商
     */
    @ApiModelProperty(value= "供应商")
    private String supp;
    /**
     * 供应商编码
     */
    @ApiModelProperty(value= "供应商编码")
    @TableField("supp_code")
    private String suppCode;
    /**
     * 是否批次 1: 是  0: 否
     */
    @ApiModelProperty(value= "是否批次 1: 是  0: 否  ")
    @TableField("be_batch")
    private Integer beBatch;
    /**
     * 保质期
     */
    @ApiModelProperty(value= "保质期")
    @TableField("dead_time")
    private String deadTime;
    /**
     * 预警天数
     */
    @ApiModelProperty(value= "预警天数")
    @TableField("dead_warn")
    private Integer deadWarn;
    /**
     * 制购 1: 制造  2: 采购  3: 外协
     */
    @ApiModelProperty(value= "制购 1: 制造  2: 采购  3: 外协  ")
    private Integer source;
    /**
     * 要求检验 1: 是  0: 否
     */
    @ApiModelProperty(value= "要求检验 1: 是  0: 否  ")
    private Integer inspect;
    /**
     * 危险品 1: 是  0: 否
     */
    @ApiModelProperty(value= "危险品 1: 是  0: 否  ")
    private Integer danger;
    /**
     * 修改人员
     */
    @ApiModelProperty(value= "修改人员")
    @TableField("modi_user")
    private Long modiUser;
    /**
     * 修改时间
     */
    @ApiModelProperty(value= "修改时间")
    @TableField("modi_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date modiTime;
    /**
     * 添加人员
     */
    @ApiModelProperty(value= "添加人员")
    @TableField("appe_user")
    private Long appeUser;
    /**
     * 添加时间
     */
    @ApiModelProperty(value= "添加时间")
    @TableField("appe_time")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date appeTime;
    /**
     * 备注
     */
    @ApiModelProperty(value= "备注")
    private String memo;
    @ApiModelProperty(value= "")
    @TableField("line_number")
    private Long lineNumber;
    @ApiModelProperty(value= "")
    private String standby1;
    @ApiModelProperty(value= "")
    private String standby2;
    @ApiModelProperty(value= "")
    private String standby3;
    @ApiModelProperty(value= "")
    @TableField("box_type1")
    private String boxType1;
    @ApiModelProperty(value= "")
    @TableField("box_type2")
    private String boxType2;
    @ApiModelProperty(value= "")
    @TableField("box_type3")
    private String boxType3;
    public BasStationDetl() {}
    public BasStationDetl(Long id,Integer devNo,Double anfme,String zpallet,String matnr,String maktx,String batch,String orderNo,String specs,String model,String color,String brand,String unit,Double price,String sku,Double units,String barcode,String origin,String manu,String manuDate,String itemNum,Double safeQty,Double weight,Double manLength,Double volume,String threeCode,String supp,String suppCode,Integer beBatch,String deadTime,Integer deadWarn,Integer source,Integer inspect,Integer danger,Long modiUser,Date modiTime,Long appeUser,Date appeTime,String memo,Long lineNumber,String standby1,String standby2,String standby3,String boxType1,String boxType2,String boxType3) {
        this.id = id;
        this.devNo = devNo;
        this.anfme = anfme;
        this.zpallet = zpallet;
        this.matnr = matnr;
        this.maktx = maktx;
        this.batch = batch;
        this.orderNo = orderNo;
        this.specs = specs;
        this.model = model;
        this.color = color;
        this.brand = brand;
        this.unit = unit;
        this.price = price;
        this.sku = sku;
        this.units = units;
        this.barcode = barcode;
        this.origin = origin;
        this.manu = manu;
        this.manuDate = manuDate;
        this.itemNum = itemNum;
        this.safeQty = safeQty;
        this.weight = weight;
        this.manLength = manLength;
        this.volume = volume;
        this.threeCode = threeCode;
        this.supp = supp;
        this.suppCode = suppCode;
        this.beBatch = beBatch;
        this.deadTime = deadTime;
        this.deadWarn = deadWarn;
        this.source = source;
        this.inspect = inspect;
        this.danger = danger;
        this.modiUser = modiUser;
        this.modiTime = modiTime;
        this.appeUser = appeUser;
        this.appeTime = appeTime;
        this.memo = memo;
        this.lineNumber = lineNumber;
        this.standby1 = standby1;
        this.standby2 = standby2;
        this.standby3 = standby3;
        this.boxType1 = boxType1;
        this.boxType2 = boxType2;
        this.boxType3 = boxType3;
    }
//    BasStationDetl basStationDetl = new BasStationDetl(
//            null,    // [非空]
//            null,    // 站点编码[非空]
//            null,    // 数量
//            null,    // 托盘条码
//            null,    // 商品编号[非空]
//            null,    // 商品名称
//            null,    // 批号
//            null,    // 单据编号
//            null,    // 规格
//            null,    // 型号
//            null,    // 颜色
//            null,    // 品牌
//            null,    // 单位
//            null,    // 单价
//            null,    // sku
//            null,    // 单位量
//            null,    // 条码
//            null,    // 产地
//            null,    // 厂家
//            null,    // 生产日期
//            null,    // 品项数
//            null,    // 安全库存量
//            null,    // 重量
//            null,    // 长度
//            null,    // 体积
//            null,    // 三方编码
//            null,    // 供应商
//            null,    // 供应商编码
//            null,    // 是否批次
//            null,    // 保质期
//            null,    // 预警天数
//            null,    // 制购
//            null,    // 要求检验
//            null,    // 危险品
//            null,    // 修改人员
//            null,    // 修改时间
//            null,    // 添加人员
//            null,    // 添加时间
//            null,    // 备注
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null,    //
//            null    //
//    );
    public String getBeBatch$(){
        if (null == this.beBatch){ return null; }
        switch (this.beBatch){
            case 1:
                return "是";
            case 0:
                return "否";
            default:
                return String.valueOf(this.beBatch);
        }
    }
    public String getSource$(){
        if (null == this.source){ return null; }
        switch (this.source){
            case 1:
                return "制造";
            case 2:
                return "采购";
            case 3:
                return "外协";
            default:
                return String.valueOf(this.source);
        }
    }
    public String getInspect$(){
        if (null == this.inspect){ return null; }
        switch (this.inspect){
            case 1:
                return "是";
            case 0:
                return "否";
            default:
                return String.valueOf(this.inspect);
        }
    }
    public String getDanger$(){
        if (null == this.danger){ return null; }
        switch (this.danger){
            case 1:
                return "是";
            case 0:
                return "否";
            default:
                return String.valueOf(this.danger);
        }
    }
    public String getModiUser$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.modiUser);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getModiTime$(){
        if (Cools.isEmpty(this.modiTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime);
    }
    public String getAppeUser$(){
        UserService service = SpringUtils.getBean(UserService.class);
        User user = service.selectById(this.appeUser);
        if (!Cools.isEmpty(user)){
            return String.valueOf(user.getNickname());
        }
        return null;
    }
    public String getAppeTime$(){
        if (Cools.isEmpty(this.appeTime)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime);
    }
}
src/main/java/com/zy/asrs/entity/WaitPakin.java
@@ -36,6 +36,10 @@
    @TableField("loc_no")
    private String locNo;
    @ApiModelProperty("组托类型")
    @TableField("type")
    private String type;
    @ApiModelProperty(value= "商品编号")
    private String matnr;
@@ -242,6 +246,18 @@
        }
    }
    public String getType$(){
        if (null == this.type){ return null; }
        switch (this.type){
            case "1":
                return "AGV组托";
            case "0":
                return "堆垛机组托";
            default:
                return "堆垛机组托";
        }
    }
    public String getDanger$(){
        if (null == this.danger){ return null; }
        switch (this.danger){
src/main/java/com/zy/asrs/entity/WaitPakinLog.java
@@ -38,6 +38,10 @@
    @ApiModelProperty(value= "商品名称")
    private String maktx;
    @ApiModelProperty("组托类型")
    @TableField("type")
    private String type;
    @ApiModelProperty(value= "批号")
    private String batch;
@@ -222,6 +226,19 @@
        }
    }
    public String getType$(){
        if (null == this.type){ return null; }
        switch (this.type){
            case "1":
                return "AGV组托";
            case "0":
                return "堆垛机组托";
            default:
                return "堆垛机组托";
        }
    }
    public String getInspect$(){
        if (null == this.inspect){ return null; }
        switch (this.inspect){
src/main/java/com/zy/asrs/entity/param/CombParam.java
@@ -16,8 +16,15 @@
    // 托盘条码
    private String barcode;
    //站点
    private String station;
    // 库位编号
    private String locNo;
    //唯一编码
    private String bsCode;
    private String type;
    private List<CombMat> combMats;
@@ -49,6 +56,7 @@
        // 规格
        private String specs;
        private String threeCode;
    }
}
src/main/java/com/zy/asrs/entity/param/CompleteParam.java
New file
@@ -0,0 +1,19 @@
package com.zy.asrs.entity.param;
import lombok.Data;
import java.io.Serializable;
@Data
public class CompleteParam implements Serializable {
    private String barcode;
    // 库位规格( 0:未知, 1:低库位, 2:高库位)
    private Short locType1;
    private String station;
    private Integer IoType;
}
src/main/java/com/zy/asrs/entity/param/FullStoreParam.java
@@ -35,6 +35,7 @@
        private String boxType1 = "1";
        private String boxType2 = "1";
        private String boxType3 = "1";
        private String threeCode;
        // 物料数量
        private Double anfme;
src/main/java/com/zy/asrs/enums/OrderTypeEnum.java
@@ -3,13 +3,18 @@
public enum OrderTypeEnum {
    //上架派工单
    PICKING(1, "上架派工单"),
    //备货调拨单
    TRANSFER(2, "备货调拨单"),
    //备货派工单
    TRANSFER(2, "备货派工单"),
    INVENTORY(3, "盘点单"),
    ADJUSTMENT(4, "库存调整单"),
    //备货单
    STOCK(5, "备货单");
    STOCK(5, "备货单"),
    //备货出库单
    STOCK_OUT(6, "备货出库单"),
    //备货入库单
    STOCK_IN(7, "备货入库单");
    public Integer type;
src/main/java/com/zy/asrs/mapper/BasStationDetlMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.zy.asrs.entity.BasStationDetl;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface BasStationDetlMapper extends BaseMapper<BasStationDetl> {
}
src/main/java/com/zy/asrs/service/BasStationDetlService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.zy.asrs.entity.BasStationDetl;
import com.baomidou.mybatisplus.service.IService;
public interface BasStationDetlService extends IService<BasStationDetl> {
}
src/main/java/com/zy/asrs/service/MobileService.java
@@ -128,4 +128,24 @@
     * @return com.core.common.R
     */
    R combCacehList(AgvCallParams params);
    /**
     * 缓存区入库组托
     *
     * @param combParam
     * @param userId
     * @author Ryan
     * @date 2025/12/9 13:44
     */
    void cacheComb(CombParam combParam, Long userId);
    /**
     * 立库入库上架
     *
     * @param combParam
     * @param userId
     * @author Ryan
     * @date 2025/12/9 15:04
     */
    void combInPub(CompleteParam combParam, Long userId);
}
src/main/java/com/zy/asrs/service/impl/BasStationDetlServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.zy.asrs.mapper.BasStationDetlMapper;
import com.zy.asrs.entity.BasStationDetl;
import com.zy.asrs.service.BasStationDetlService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service("basStationDetlService")
public class BasStationDetlServiceImpl extends ServiceImpl<BasStationDetlMapper, BasStationDetl> implements BasStationDetlService {
}
src/main/java/com/zy/asrs/service/impl/CheckOrderServiceImpl.java
@@ -207,6 +207,9 @@
        }
        List<CheckOrderDetl> selectList = checkOrderDetlService.selectList(new EntityWrapper<CheckOrderDetl>().eq("order_id", orderId));
        for (CheckOrderDetl checkOrderDetl : selectList) {
            if (checkOrderDetl.getDiffQty().compareTo(BigDecimal.ZERO) == 0){
                continue;
            }
            LocDetl locDetl = locDetlService.selectById(checkOrderDetl.getLocDetlId());
            if (Cools.isEmpty(locDetl)) {
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -8,11 +8,11 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.entity.result.ForwardAGVTaskDTO;
import com.zy.asrs.entity.result.HIKApiDTO;
import com.zy.asrs.entity.result.HIKResultDTO;
import com.zy.asrs.enums.*;
import com.zy.asrs.enums.OrderSettle;
import com.zy.asrs.enums.LocAreaType;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.mapper.LocMastMapper;
@@ -24,8 +24,9 @@
import com.zy.common.constant.MesConstant;
import com.zy.common.entity.Parameter;
import com.zy.common.model.DetlDto;
import com.zy.common.model.LocDetlDto;
import com.zy.common.model.LocTypeDto;
import com.zy.common.model.MesCombParam;
import com.zy.common.model.StartupDto;
import com.zy.common.model.enums.IoWorkType;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
@@ -40,6 +41,7 @@
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@@ -126,6 +128,8 @@
    private BasAreasService basAreasService;
    @Autowired
    private StationRelaService stationRelaService;
    @Autowired
    private BasStationDetlService basStationDetlService;
    @Override
    @Transactional
@@ -603,7 +607,7 @@
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(),
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme());
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme(), elem.getThreeCode());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.findDto(detlDtos, detlDto);
                    assert one != null;
@@ -627,6 +631,7 @@
                waitPakin.setZpallet(param.getBarcode());
                waitPakin.setIoStatus("N");
                waitPakin.setAnfme(detlDto.getAnfme());
                waitPakin.setThreeCode(detlDto.getThreeCode());
                waitPakin.setStatus("Y");
                waitPakin.setStandby1(detlDto.getStandby1());
                waitPakin.setStandby2(detlDto.getStandby2());
@@ -669,7 +674,7 @@
                OrderInAndOutUtil.increaseWorkQty(Boolean.TRUE, order.getId(), elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(),
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme());
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(),
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme());
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme(), elem.getThreeCode());
                detlDto.setOrderId(order.getId());
                detlDto.setOrderNo(order.getOrderNo());
                if (DetlDto.has(detlDtos, detlDto)) {
@@ -912,7 +917,7 @@
                Mat analyse = MatUtils.analyseMat(elem.getMatnr());
                // 条码、物料代码、序列号、数量
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), analyse.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(),
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme());
                        elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme(), elem.getThreeCode());
//                DetlDto detlDto = new DetlDto(elem.getMatnr(), analyse.getMatnr(), analyse.getBarcode(), elem.getAnfme());
//                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
@@ -1361,10 +1366,11 @@
    /**
     * 缓存出库组托上架
     *
     * @param params
     * @return com.core.common.R
     * @author Ryan
     * @date 2025/12/8 13:47
     * @param params
     * @return com.core.common.R
     */
    @Override
    public R combOutPub(AgvCallParams params) {
@@ -1374,10 +1380,11 @@
    /**
     * 缓存组托数据
     * @author Ryan
     * @date 2025/12/8 15:37
     *
     * @param params
     * @return com.core.common.R
     * @author Ryan
     * @date 2025/12/8 15:37
     */
    @Override
    public R combCacehList(AgvCallParams params) {
@@ -1407,7 +1414,240 @@
    }
    /**
     * 缓存区上架组托
     *
     * @param param
     * @param userId
     * @author Ryan
     * @date 2025/12/9 13:45
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void cacheComb(CombParam param, Long userId) {
        if (Objects.isNull(param.getBarcode())) {
            throw new CoolException("托盘码不能为空!!");
        }
        if (Objects.isNull(param.getCombMats()) || param.getCombMats().isEmpty()) {
            throw new CoolException("组托明细不能为空!!");
        }
        // 判断是否有相同条码的数据
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode())
                .eq("io_status", "N")) > 0) {
            throw new CoolException(param.getBarcode() + "数据正在进行入库");
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()));
        int countwait = waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()));
        if (countLoc > 0 || countWrk > 0 || countwait > 0) {
            throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + param.getBarcode());
        }
        // 生成入库通知档
        List<DetlDto> detlDtos = new ArrayList<>();
        param.getCombMats().forEach(elem -> {
            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(),
                    elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme(), elem.getThreeCode());
            if (DetlDto.has(detlDtos, detlDto)) {
                DetlDto one = DetlDto.findDto(detlDtos, detlDto);
                assert one != null;
                one.setAnfme(one.getAnfme() + detlDto.getAnfme());
            } else {
                detlDtos.add(detlDto);
            }
        });
        Date now = new Date();
        for (DetlDto detlDto : detlDtos) {
            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
            }
            if (mat.getUpQty().compareTo(detlDto.getAnfme()) < 0) {
                throw new CoolException("物料:" + detlDto.getMatnr() + "单次最大组托上限为:" + mat.getUpQty());
            }
            WaitPakin waitPakin = new WaitPakin();
            BeanUtils.copyProperties(mat, waitPakin);
            waitPakin.setBatch(detlDto.getBatch());
            waitPakin.setZpallet(param.getBarcode());
            //设置组托类型
            waitPakin.setType(CommonEnum.COMMON_ENUM_Y.type + "");
            waitPakin.setIoStatus("N");
            waitPakin.setAnfme(detlDto.getAnfme());
            waitPakin.setThreeCode(detlDto.getThreeCode());
            waitPakin.setStatus("Y");
            waitPakin.setStandby1(detlDto.getStandby1());
            waitPakin.setStandby2(detlDto.getStandby2());
            waitPakin.setStandby3(detlDto.getStandby3());
            waitPakin.setBoxType1(detlDto.getBoxType1());
            waitPakin.setBoxType2(detlDto.getBoxType2());
            waitPakin.setBoxType3(detlDto.getBoxType3());
            waitPakin.setAppeUser(userId);
            waitPakin.setAppeTime(now);
            waitPakin.setModiUser(userId);
            waitPakin.setModiTime(now);
            if (!waitPakinService.insert(waitPakin)) {
                throw new CoolException("保存入库通知档失败");
            }
        }
    }
    /**
     * 缓存入库上架
     *
     * @param param
     * @param userId
     * @author Ryan
     * @date 2025/12/9 15:05
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void combInPub(CompleteParam param, Long userId) {
        if (Objects.isNull(param.getBarcode())) {
            throw new CoolException("托盘码不能为空!!");
        }
        if (Objects.isNull(param.getStation())) {
            throw new CoolException("站点不能为空!!");
        }
        //TODO 修改缓存站点状态及数据
        Task task = taskService.selectOne(new EntityWrapper<Task>().eq("barcode", param.getBarcode()));
        if (Objects.isNull(task)) {
            throw new CoolException("数据错误,任务不存在!!");
        }
        List<TaskDetl> taskDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
        if (Objects.isNull(taskDetls) || taskDetls.isEmpty()) {
            throw new CoolException("数据错误,任务明细不存在!!");
        }
        BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
                .eq("dev_no", task.getStaNo()));
        if (Objects.isNull(station)) {
            throw new CoolException("站点不存在!!");
        }
        station.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
        if (!basStationService.updateById(station)) {
            throw new CoolException("站点状态修改失败!");
        }
        if (!basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo()))) {
            throw new CoolException("站点删除失败!");
        }
        //任务完成
        task.setWrkSts(15L);
        if (!taskService.updateById(task)) {
            throw new CoolException("AGV任务完成失败!!");
        }
        List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("barcodee", param.getBarcode()));
        if (Objects.isNull(waitPakins) || waitPakins.isEmpty()) {
            throw new CoolException("数据错误,组拖档已不存在!!");
        }
        generateCrnInTask(waitPakins, station, param.getLocType1(), userId);
    }
    /**
     * 生成堆垛机入库任务
     *
     * @param station
     * @author Ryan
     * @date 2025/12/9 13:54
     */
    @Transactional(rollbackFor = Exception.class)
    public void generateCrnInTask(List<WaitPakin> waitPakins, BasStation station, Short locType,  Long userId) {
        Date now = new Date();
        StationRela rela = stationRelaService.selectOne(new EntityWrapper<StationRela>()
                .eq("dev_no", station.getDevNo())
                .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
        if (Objects.isNull(rela)) {
            throw new CoolException("未绑定作业站点!!");
        }
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(Integer.parseInt(rela.getCrnSta()), true);
        sourceStaNo.setLocType1(locType);
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        WaitPakin pakin = waitPakins.stream().findFirst().get();
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(pakin);
        StartupDto dto = commonService.getLocNo( 1, sourceStaNo.getDevNo(),findLocNoAttributeVo, locTypeDto);
        int workNo = dto.getWorkNo();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(new Date());
        wrkMast.setWrkSts(2L); // 工作状态:生成入库ID
        wrkMast.setIoType(1); // 入出库状态:1.入库
        wrkMast.setIoPri(13D); // 优先级
        wrkMast.setCrnNo(dto.getCrnNo());
        wrkMast.setSourceStaNo(dto.getSourceStaNo() + "");
        wrkMast.setStaNo(dto.getStaNo() + "");
        wrkMast.setLocNo(dto.getLocNo());
        wrkMast.setBarcode(pakin.getBarcode()); // 托盘码
        wrkMast.setFullPlt("Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk("N"); // 空板
        wrkMast.setLinkMis("Y");
        wrkMast.setModiUser(userId);
        wrkMast.setAppeUser(userId);
        wrkMast.setCtnType(sourceStaNo.getCtnType()); // 容器类型
        // 操作人员数据
        wrkMast.setAppeTime(now);
        wrkMast.setModiTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 生成工作档明细
        waitPakins.forEach(waitPakin -> {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(waitPakin);
            wrkDetl.setWrkNo(wrkMast.getWrkNo());
            wrkDetl.setIoTime(wrkMast.getIoTime());
            wrkDetl.setAppeTime(now);
            wrkDetl.setModiTime(now);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作明细失败");
            }
        });
        // 更新入库通知档 ioStatus ===>> Y
        Wrapper<WaitPakin> wrapper = new EntityWrapper<WaitPakin>()
                .eq("zpallet", pakin.getBarcode());
        WaitPakin setParam = new WaitPakin();
        setParam.setLocNo(dto.getLocNo());
        setParam.setIoStatus("Y");
        setParam.setModiTime(now);
        if (!waitPakinService.update(setParam, wrapper)) {
            throw new CoolException("更新通知档失败");
        }
        // 更新源站点信息
        sourceStaNo.setWrkNo(workNo);
        sourceStaNo.setModiTime(now);
        if (!basDevpService.updateById(sourceStaNo)){
            throw new CoolException("更新源站失败");
        }
        // 更新目标库位状态
        LocMast locMast = locMastService.selectById(dto.getLocNo());
        if (locMast.getLocSts().equals("O")){
            locMast.setLocSts("S"); // S.入库预约
            locMast.setModiTime(now);
            if (!locMastService.updateById(locMast)){
                throw new CoolException("改变库位状态失败");
            }
        } else {
            throw new CoolException(dto.getLocNo()+"目标库位已被占用");
        }
    }
    /**
     * 生成立库出库任务
     * 台车过来默认是同一种物料类型
     *
     * @param locCaches
     * @author Ryan
@@ -1427,9 +1667,20 @@
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                .eq("area_id", basAreas.getId())
                .eq("loc_id", locCaches.getId()));
        if (Objects.isNull(locDetls)) {
        if (Objects.isNull(locDetls) || locDetls.isEmpty()) {
            throw new CoolException("库存明细不存在!!");
        }
        Set<String> set = locDetls.stream().map(LocDetl::getMatnr).collect(Collectors.toSet());
        List<Mat> matList = matService.selectList(new EntityWrapper<Mat>().in("matnr", set));
        if (Objects.isNull(matList) || matList.isEmpty()) {
            throw new CoolException("物料库不存在该物料!!");
        }
        Set<Long> longs = matList.stream().map(Mat::getTagId).collect(Collectors.toSet());
        if (!longs.isEmpty() && longs.size() > 1) {
            throw new CoolException("物料类型不一致,请检查数据是否正确!!");
        }
        //获取立库区信息
        BasAreas one = basAreasService.selectOne(new EntityWrapper<BasAreas>().eq("whs_type_id", LocAreaType.LOC_AREA_TYPE_CRN.type));
        if (Objects.isNull(one)) {
@@ -1449,9 +1700,9 @@
        }
        Collections.shuffle(devps);
        BasDevp basDevp = devps.stream().findFirst().get();
        List<LocMast> locMasts = new ArrayList<>();
        Map<String, List<LocDetl>> listMap = locDetls.stream().collect(Collectors.groupingBy(LocDetl::getMatnr));
        AtomicReference<Double> totalOut = new AtomicReference<>(locDetls.stream().mapToDouble(LocDetl::getAnfme).sum());
        listMap.forEach((matnr, detls) -> {
            //根据supId(供应商)分类,得到出库总数
            Map<String, List<LocDetl>> supIds = detls.stream().collect(Collectors.groupingBy(LocDetl::getStandby1));
@@ -1463,7 +1714,6 @@
                        .eq("area_id", one.getId())
                        .eq("standby1", supId).orderAsc(Arrays.asList("appe_time")));
                //TODO  判断是否有新库位,没有新库位,再找有空格的位置放   1. 判断当前物料是否有库存 2. 没有余料查询新库位
                if (!Objects.isNull(detlList) && !detlList.isEmpty()) {
                    Map<String, List<LocDetl>> locMaps = detlList.stream().collect(Collectors.groupingBy(LocDetl::getLocNo));
                    locMaps.forEach((locNo, adetls) -> {
@@ -1488,6 +1738,7 @@
                            if (sum.compareTo(v) <= 0) {
                                //可放下
                                locMasts.add(locMast);
                                totalOut.set(Math.round((totalOut.get() - sum) * 10000) / 10000.0);
                            }
                        }
                    });
@@ -1495,11 +1746,28 @@
            });
        });
        if (!locMasts.isEmpty()) {
            //生成堆垛机出库任务
            generateOutTask(locMasts, TaskIOType.MERGE_OUT.type, basDevp, userId);
        //判断根据分拣出库后,还需要出多少托盘或料箱;如果余料大于0, 出新托盘或料箱
        if (totalOut.get().compareTo(0.0) > 0) {
//            Set<String> matnrs = locDetls.stream().map(LocDetl::getMatnr).collect(Collectors.toSet());
//            List<Mat> mats = matService.selectList(new EntityWrapper<Mat>().in("matnr", matnrs));
            LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
                    //todo 根据物料种类,区分库区类型
                    .eq("loc_sts", LocStsType.LOC_STS_TYPE_D.type)
                    .orderAsc(Arrays.asList("row1", "bay1", "lev1"))
                    .last("OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY"));
            locMasts.add(locMast);
            //空板出库
            generateTask(locMasts, TaskIOType.EMPTY_OUT.type, basDevp, userId);
        } else {
            if (!locMasts.isEmpty()) {
                //生成堆垛机出库任务
                generateTask(locMasts, TaskIOType.MERGE_OUT.type, basDevp, userId);
            }
        }
    }
    /**
     * 生成堆垛机出库任务
@@ -1509,7 +1777,7 @@
     * @date 2025/12/6 14:44
     */
    @Transactional(rollbackFor = Exception.class)
    public void generateOutTask(List<LocMast> locMasts, Integer ioType, BasDevp devp, Long userId) {
    public void generateTask(List<LocMast> locMasts, Integer ioType, BasDevp devp, Long userId) {
        Date now = new Date();
        for (LocMast locMast : locMasts) {
            if (Objects.isNull(ioType)) {
@@ -1626,6 +1894,7 @@
                        .setBatch(pakin.getBatch())
                        .setMatnr(pakin.getMatnr())
                        .setMaktx(pakin.getMaktx())
                        .setThreeCode(pakin.getThreeCode())
                        .setAppeUser(userId)
                        .setUnit(pakin.getUnit())
                        .setModel(pakin.getModel())
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -112,7 +112,7 @@
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(),detail.getBrand(),detail.getStandby1(),detail.getStandby2(),detail.getStandby3(),detail.getLineNumber(),detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme());
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(),detail.getBrand(),detail.getStandby1(),detail.getStandby2(),detail.getStandby3(),detail.getLineNumber(),detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme(), detail.getThreeCode());
            if (DetlDto.hasLineNumber(list, dto)) {
                DetlDto detlDto = DetlDto.findLineNumber(list, dto.getMatnr(), dto.getBatch(),dto.getBrand(),dto.getStandby1(),dto.getStandby2(),dto.getStandby3(),dto.getLineNumber(),dto.getBoxType1(),dto.getBoxType2(),dto.getBoxType3());
                assert detlDto != null;
@@ -171,7 +171,7 @@
                for (OrderDetl orderDetl : orderDetls) {
                    result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                            orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getLineNumber(),
                            orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getQty()));
                            orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getQty(), orderDetl.getThreeCode()));
                }
                if (order.getSettle() == 4L) {
                    // 修改订单状态 4.完成 ===>> 6.已上报
@@ -201,7 +201,7 @@
                    result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                            orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getLineNumber(),
                            orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(),
                            orderDetl.getQty()));
                            orderDetl.getQty(), orderDetl.getThreeCode()));
                }
//                // 修改订单状态 4.完成 ===>> 6.已上报
//                if (!orderService.updateSettle(order.getId(), 6L, null)) {
@@ -273,7 +273,7 @@
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(),detail.getBrand(),detail.getStandby1(),detail.getStandby2(),detail.getStandby3(),detail.getLineNumber(),
                    detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme());
                    detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme(), detail.getThreeCode());
            if (DetlDto.hasLineNumber(list, dto)) {
                DetlDto detlDto = DetlDto.findLineNumber(list, dto.getMatnr(), dto.getBatch(),dto.getBrand(),dto.getStandby1(),dto.getStandby2(),dto.getStandby3(),dto.getLineNumber(),
                        dto.getBoxType1(),dto.getBoxType2(),dto.getBoxType3());
@@ -330,7 +330,7 @@
                for (OrderDetl orderDetl : orderDetls) {
                    result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getBrand(),
                            orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getLineNumber(),
                            orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getQty()));
                            orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getQty(), orderDetl.getThreeCode()));
                }
                if (order.getSettle() == 4L) {
                    // 修改订单状态 4.完成 ===>> 6.已上报
@@ -355,7 +355,7 @@
                for (OrderDetl orderDetl : orderDetls) {
                    result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(),orderDetl.getBrand(),
                            orderDetl.getStandby1(),orderDetl.getStandby2(),orderDetl.getStandby3(),orderDetl.getLineNumber(),
                            orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getQty()));
                            orderDetl.getBoxType1(),orderDetl.getBoxType2(),orderDetl.getBoxType3(), orderDetl.getQty(), orderDetl.getThreeCode()));
                }
                // 修改订单状态 4.完成 ===>> 6.已上报
//                if (!orderService.updateSettle(order.getId(), 6L, null)) {
src/main/java/com/zy/asrs/service/impl/OrderPakinServiceImpl.java
@@ -117,7 +117,7 @@
            List<DetlDto> detlDtos = new ArrayList<>();
            wrkDetls.forEach(wrkDetl -> {
                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(),wrkDetl.getBrand(),wrkDetl.getStandby1(),wrkDetl.getStandby2(),wrkDetl.getStandby3(),
                        wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3(), wrkDetl.getAnfme()));
                        wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3(), wrkDetl.getAnfme(), wrkDetl.getThreeCode()));
            });
            String orderNo = "HAND" + snowflakeIdWorker.nextId();
            if (pakin) {
src/main/java/com/zy/asrs/service/impl/OrderPakoutServiceImpl.java
@@ -116,7 +116,7 @@
        try {
            List<DetlDto> detlDtos = new ArrayList<>();
            wrkDetls.forEach(wrkDetl -> {
                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(),wrkDetl.getBrand(),wrkDetl.getStandby1(),wrkDetl.getStandby2(),wrkDetl.getStandby3(),wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3(), wrkDetl.getAnfme()));
                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(),wrkDetl.getBrand(),wrkDetl.getStandby1(),wrkDetl.getStandby2(),wrkDetl.getStandby3(),wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3(), wrkDetl.getAnfme(), wrkDetl.getThreeCode()));
            });
            String orderNo = "HAND" + snowflakeIdWorker.nextId();
            if (pakin) {
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -117,7 +117,7 @@
            List<DetlDto> detlDtos = new ArrayList<>();
            wrkDetls.forEach(wrkDetl -> {
                detlDtos.add(new DetlDto(wrkDetl.getMatnr(), wrkDetl.getBatch(),wrkDetl.getBrand(),wrkDetl.getStandby1(),wrkDetl.getStandby2(),wrkDetl.getStandby3(),
                        wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3(), wrkDetl.getAnfme()));
                        wrkDetl.getBoxType1(),wrkDetl.getBoxType2(),wrkDetl.getBoxType3(), wrkDetl.getAnfme(), wrkDetl.getThreeCode()));
            });
            String orderNo = "HAND" + snowflakeIdWorker.nextId();
            if (pakin) {
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -31,6 +31,7 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -148,7 +149,7 @@
        // 生成工作档明细
        List<DetlDto> detlDtos = new ArrayList<>();
        param.getList().forEach(elem -> {
            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(), elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme());
            DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getBrand(), elem.getStandby1(), elem.getStandby2(), elem.getStandby3(), elem.getBoxType1(), elem.getBoxType2(), elem.getBoxType3(), elem.getAnfme(), elem.getThreeCode());
            if (DetlDto.has(detlDtos, detlDto)) {
                DetlDto detlDto1 = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(), detlDto.getBrand(), detlDto.getStandby1(), detlDto.getStandby2(), detlDto.getStandby3(), detlDto.getBoxType1(), detlDto.getBoxType2(), detlDto.getBoxType3());
                assert detlDto1 != null;
@@ -274,7 +275,7 @@
                        }
                        detlDtos.add(new DetlDto(locDetl.getMatnr(), locDetl.getBatch(), locDetl.getBrand(),
                                locDetl.getStandby1(), locDetl.getStandby2(), locDetl.getStandby3(),
                                locDetl.getBoxType1(), locDetl.getBoxType2(), locDetl.getBoxType3(), locDetl.getAnfme()));
                                locDetl.getBoxType1(), locDetl.getBoxType2(), locDetl.getBoxType3(), locDetl.getAnfme(), locDetl.getThreeCode()));
                        locDetl.setOwner(param.getOwnerId());
                        try {
                            locDetlService.update(locDetl, new EntityWrapper<LocDetl>().eq("loc_no", locNo).eq("matnr", locDetl.getMatnr()));
@@ -411,6 +412,19 @@
//        OrderPakout orderPakout = orderPakOutService.selectByNo(orderNo);
        CheckOrder checkOrder = checkOrderService.selectOne(new EntityWrapper<CheckOrder>().eq("order_no", orderNo));
        int ioType = checkOrder.getDocType() == 8 ? 107 : (taskDto.isAll() ? 101 : 103);
        if(ioType == 101){
            boolean DiffQty = taskDto.getLocDtos().stream().allMatch(locDto ->
                    locDetlService.selectOne(new EntityWrapper<LocDetl>()
                            .eq("loc_no", locDto.getLocNo())
                            .eq("matnr", locDto.getMatnr())
                            .eq("batch", locDto.getBatch())
                            .eq("standby1",locDto.getStandby2())
                    ).getDiffQty().compareTo(BigDecimal.ZERO) == 0
            );
            if (!DiffQty){
                ioType = 103;
            }
        }
        StaDesc staDesc = staDescService.queryCrnStnAuto(ioType, locMast.getCrnNo(), staNo.getDevNo());
        // 生成工作号
        int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -2,6 +2,7 @@
import com.core.common.Cools;
import com.zy.asrs.entity.Order;
import com.zy.asrs.enums.OrderTypeEnum;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.core.ReturnT;
src/main/java/com/zy/asrs/task/WorkLogScheduler.java
@@ -37,4 +37,7 @@
        }
    }
}
src/main/java/com/zy/asrs/task/handler/OrderSyncHandler.java
@@ -5,13 +5,9 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.OrderTypeEnum;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.OrderInAndOutUtil;
@@ -21,6 +17,7 @@
import com.zy.common.model.MesPakoutParam;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@@ -46,6 +43,10 @@
    private ApiLogService apiLogService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private OrderPakinService  orderPakinService;
    @Autowired
    private OrderDetlPakinService orderDetlPakinService;
    @Transactional
    public ReturnT<String> startOrderIssuedOnceMore(Order order) {
@@ -97,7 +98,7 @@
        for (OrderDetl detail : orderDetls) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(),detail.getBrand(),detail.getStandby1(),detail.getStandby2(),detail.getStandby3(),
                    detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme());
                    detail.getBoxType1(),detail.getBoxType2(),detail.getBoxType3(), detail.getAnfme(), detail.getThreeCode());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(),dto.getBrand(),dto.getStandby1(),dto.getStandby2(),dto.getStandby3(),dto.getBoxType1(),dto.getBoxType2(),dto.getBoxType3());
                assert detlDto != null;
@@ -114,6 +115,15 @@
        for (OrderDetl orderDetl : orderDetlList){
            orderDetl.setWorkQty(0D);
            OrderInAndOutUtil.insertOrderDetl(order.getPakinPakoutStatus$(),order,orderDetl);
            //小松:如果下发备货派工单,则生成备货出库+备货入库
            if (order.getDocType().equals(OrderTypeEnum.TRANSFER.type.longValue())){
                try {
                    ifTransfetInsertStockIn(order,orderDetl);
                }catch (Exception e){
                    throw new CoolException(e.getMessage());
                }
            }
        }
        // 修改订单状态 1.未作业 ===>> 2.作业中
        if (!orderService.updateSettle(order.getId(), 2L, null)) {
@@ -122,8 +132,41 @@
        return SUCCESS;
    }
    @Transactional(rollbackFor = Exception.class)
    public void ifTransfetInsertStockIn(Order order, OrderDetl orderDetl){
        OrderPakin orderPakin = new OrderPakin();
        BeanUtils.copyProperties(order,orderPakin);
        orderPakin.setDocType(OrderTypeEnum.STOCK_IN.type.longValue());
        if (!orderPakinService.insert(orderPakin)){
            throw new CoolException("插入备货入库单失败");
        }
        OrderDetlPakin orderDetlPakin = new OrderDetlPakin();
        BeanUtils.copyProperties(orderDetl,orderDetlPakin);
        orderDetlPakin.setOrderId(orderPakin.getId());
        if (!orderDetlPakinService.insert(orderDetlPakin)){
            throw new CoolException("插入备货入库单失败");
        }
    }
    @Transactional
    public ReturnT<String> startOrderInAndOutUtil(Order order) {
        //小松:轮训到备货派工单是查询备货入库单是否完成
        if (order.getDocType().equals(OrderTypeEnum.STOCK_IN.type.longValue())){
            return SUCCESS;
        }
        if (order.getDocType().equals(OrderTypeEnum.TRANSFER.type.longValue())){
            OrderPakin orderPakin = orderPakinService.selectByNo(order.getOrderNo());
            if (null != orderPakin) {
                if (!orderPakin.getSettle().equals(4L)){
                    return SUCCESS;
                }
            }
        }
        DocType docType = docTypeService.selectById(order.getDocType());
        if (null == docType) {
            return SUCCESS;
src/main/java/com/zy/common/CodeBuilder.java
@@ -20,7 +20,7 @@
        generator.url="192.168.4.15:1433;databasename=jsxsasrs";
        generator.username="sa";
        generator.password="sa@123";
        generator.table="agv_station_rela";
        generator.table="agv_bas_station_detl";
        generator.packagePath="com.zy.asrs";
        generator.html = false;
        generator.js = false;
src/main/java/com/zy/common/model/DetlDto.java
@@ -21,6 +21,7 @@
    private String matnr;
    private String batch = "";
    private String brand = "";
    private String standby1 = "";
@@ -34,11 +35,12 @@
    private String boxType3 = "1";
    private Double anfme;
    private String threeCode;
    public DetlDto() {
    }
    public DetlDto(String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3) {
    public DetlDto(String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, String threeCode) {
        this.matnr = matnr;
        this.batch = batch;
        this.brand = brand;
@@ -48,9 +50,10 @@
        this.boxType1 = boxType1;
        this.boxType2 = boxType2;
        this.boxType3 = boxType3;
        this.threeCode = threeCode;
    }
    public DetlDto(String matnr, String batch, String brand, String standby1, String standby2, String standby3, Long lineNumber, String boxType1, String boxType2, String boxType3) {
    public DetlDto(String matnr, String batch, String brand, String standby1, String standby2, String standby3, Long lineNumber, String boxType1, String boxType2, String boxType3, String threeCode) {
        this.matnr = matnr;
        this.batch = batch;
        this.brand = brand;
@@ -61,9 +64,11 @@
        this.boxType1 = boxType1;
        this.boxType2 = boxType2;
        this.boxType3 = boxType3;
        this.threeCode = threeCode;
    }
    public DetlDto(String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double anfme) {
    public DetlDto(String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double anfme, String threeCode) {
        this.matnr = matnr;
        this.batch = batch;
        this.brand = brand;
@@ -74,9 +79,11 @@
        this.boxType2 = boxType2;
        this.boxType3 = boxType3;
        this.anfme = anfme;
        this.threeCode = threeCode;
    }
    public DetlDto(String matnr, String batch, String brand, String standby1, String standby2, String standby3, Long lineNumber, String boxType1, String boxType2, String boxType3, Double anfme) {
    public DetlDto(String matnr, String batch, String brand, String standby1, String standby2, String standby3, Long lineNumber, String boxType1, String boxType2, String boxType3, Double anfme, String threeCode) {
        this.matnr = matnr;
        this.batch = batch;
        this.brand = brand;
@@ -88,6 +95,8 @@
        this.boxType2 = boxType2;
        this.boxType3 = boxType3;
        this.anfme = anfme;
        this.threeCode = threeCode;
    }
//    public DetlDto(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, String boxType1, String boxType2, String boxType3, Double anfme) {
@@ -104,7 +113,7 @@
//        this.anfme = anfme;
//    }
    public DetlDto(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, Long lineNumber, String boxType1, String boxType2, String boxType3, Double anfme) {
    public DetlDto(String orderNo, String matnr, String batch, String brand, String standby1, String standby2, String standby3, Long lineNumber, String boxType1, String boxType2, String boxType3, Double anfme, String threeCode) {
        this.orderNo = orderNo;
        this.matnr = matnr;
        this.batch = batch;
@@ -117,6 +126,8 @@
        this.boxType2 = boxType2;
        this.boxType3 = boxType3;
        this.anfme = anfme;
        this.threeCode = threeCode;
    }
    public static boolean hasList(Set<DetlDto> detlDtos, OrderDetl orderDetl) {
src/main/java/com/zy/common/model/LocDto.java
@@ -32,6 +32,8 @@
    private Double anfme;
    private String threeCode;
    /**
     * 是否冻结  "是否冻结,0.未冻结,1.已冻结"
     */
src/main/java/com/zy/common/model/TaskDto.java
@@ -81,7 +81,7 @@
        // 汇总不考虑序列码
        List<DetlDto> detlDtos = new ArrayList<>();
        for (LocDto locDto : this.getLocDtos()) {
            DetlDto dto = new DetlDto(locDto.getMatnr(), locDto.getBatch(),locDto.getBrand(),locDto.getStandby1(),locDto.getStandby2(),locDto.getStandby3(),locDto.getBoxType1(),locDto.getBoxType2(),locDto.getBoxType3(), locDto.getAnfme());
            DetlDto dto = new DetlDto(locDto.getMatnr(), locDto.getBatch(),locDto.getBrand(),locDto.getStandby1(),locDto.getStandby2(),locDto.getStandby3(),locDto.getBoxType1(),locDto.getBoxType2(),locDto.getBoxType3(), locDto.getAnfme(), locDto.getThreeCode());
            if (DetlDto.has(detlDtos, dto)) {
                DetlDto detlDto = DetlDto.find(detlDtos, locDto.getMatnr(), dto.getBatch(),dto.getBrand(),dto.getStandby1(),dto.getStandby2(),dto.getStandby3(),dto.getBoxType1(),dto.getBoxType2(),dto.getBoxType3());
                assert detlDto != null;
@@ -89,7 +89,7 @@
            } else {
                detlDtos.add(new DetlDto(locDto.getMatnr(), locDto.getBatch()
                        ,locDto.getBrand(),locDto.getStandby1(),locDto.getStandby2(),locDto.getStandby3(),locDto.getBoxType1(),locDto.getBoxType2(),locDto.getBoxType3()
                        , locDto.getAnfme()));
                        , locDto.getAnfme(), locDto.getThreeCode()));
            }
        }
src/main/resources/mapper/BasStationDetlMapper.xml
New file
@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zy.asrs.mapper.BasStationDetlMapper">
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.zy.asrs.entity.BasStationDetl">
        <result column="id" property="id" />
        <result column="dev_no" property="devNo" />
        <result column="anfme" property="anfme" />
        <result column="zpallet" property="zpallet" />
        <result column="matnr" property="matnr" />
        <result column="maktx" property="maktx" />
        <result column="batch" property="batch" />
        <result column="order_no" property="orderNo" />
        <result column="specs" property="specs" />
        <result column="model" property="model" />
        <result column="color" property="color" />
        <result column="brand" property="brand" />
        <result column="unit" property="unit" />
        <result column="price" property="price" />
        <result column="sku" property="sku" />
        <result column="units" property="units" />
        <result column="barcode" property="barcode" />
        <result column="origin" property="origin" />
        <result column="manu" property="manu" />
        <result column="manu_date" property="manuDate" />
        <result column="item_num" property="itemNum" />
        <result column="safe_qty" property="safeQty" />
        <result column="weight" property="weight" />
        <result column="man_length" property="manLength" />
        <result column="volume" property="volume" />
        <result column="three_code" property="threeCode" />
        <result column="supp" property="supp" />
        <result column="supp_code" property="suppCode" />
        <result column="be_batch" property="beBatch" />
        <result column="dead_time" property="deadTime" />
        <result column="dead_warn" property="deadWarn" />
        <result column="source" property="source" />
        <result column="inspect" property="inspect" />
        <result column="danger" property="danger" />
        <result column="modi_user" property="modiUser" />
        <result column="modi_time" property="modiTime" />
        <result column="appe_user" property="appeUser" />
        <result column="appe_time" property="appeTime" />
        <result column="memo" property="memo" />
        <result column="line_number" property="lineNumber" />
        <result column="standby1" property="standby1" />
        <result column="standby2" property="standby2" />
        <result column="standby3" property="standby3" />
        <result column="box_type1" property="boxType1" />
        <result column="box_type2" property="boxType2" />
        <result column="box_type3" property="boxType3" />
    </resultMap>
</mapper>
src/main/webapp/static/js/adjustOrder/adjustOrder.js
@@ -107,24 +107,22 @@
            var offset = $a.offset();
            var top = offset.top;
            var left = offset.left;
            layer.open({
            admin.open({
                type: 1,
                title: false,
                area: '1000px',
                offset: [top + 'px', (left - 700 + $a.outerWidth()) + 'px'],
                shade: .01,
                shadeClose: true,
                fixed: false,
                content: '<table id="lookSSXMTable" lay-filter="lookSSXMTable"></table>',
                success: function (layero) {
                title: '单据明细',
                height: '450px',
                content: $('#orderItem').html(),
                area: '78%',
                success: function (layero, dIndex) {
                    table.render({
                        elem: '#lookSSXMTable',
                        headers: {token: localStorage.getItem('token')},
                        url: baseUrl+'/checkOrderDetl/list/auth',
                        elem: '#itemTable',
                        headers: { token: localStorage.getItem('token') },
                        url: baseUrl + '/checkOrderDetl/list/auth',
                        where: {
                            order_id: data.id
                        },
                        page: true,
                        height: '450px;',
                        cellMinWidth: 100,
                        cols: [[
                            {type: 'numbers'},
@@ -134,14 +132,6 @@
                            {field: 'maktx', title: '商品名称', width: 160},
                            {field: 'batch', title: '批号'},
                            {field: 'diffQty', title: '差异数量', style: 'font-weight: bold'},
                            // {field: 'unit', title: '单位'},
                            // {
                            //     field: 'createTime$', title: '创建时间', sort: true, templet: function (d) {
                            //         return util.toDateString(d.createTime);
                            //     },  width: 180
                            // },
                            // {field: 'inQty', title: '已入库量'},
                            // {field: 'color', title: '颜色'},
                            {field: 'specs', title: '规格'},
                            {field: 'status$', title: '状态'}
                        ]],
@@ -160,10 +150,7 @@
                        response: {
                            statusCode: 200
                        },
                        done:  (res) => {
                            if(res.code == 403){
                                window.top.location.href = baseUrl+"/";
                            }
                        done: function () {
                            $(layero).find('.layui-table-view').css('margin', '0');
                        },
                        size: ''
src/main/webapp/static/js/basStation/basStation.js
@@ -31,7 +31,7 @@
            , {field: 'modiTime$', align: 'center', title: '修改时间'}
            , {field: 'appeUser$', align: 'center', title: '创建者'}
            , {field: 'appeTime$', align: 'center', title: '添加时间'}
            , {fixed: 'right', title: '操作', align: 'center', toolbar: '#operate', width: 120}
            , {fixed: 'right', title: '操作', align: 'center', toolbar: '#operate', width: 220}
        ]],
        request: {
            pageName: 'curr',
@@ -138,9 +138,27 @@
            case "del":
                del([data.id]);
                break;
            case "detlShow":
                detail(data);
                break;
        }
    });
    function detail(data) {
        devNo = data?.devNo
        // 弹层显示
        layer.open({
            type: 2,
            title: '查看明细',
            maxmin: true,
            area: [top.detailWidth, top.detailHeight],
            shadeClose: true,
            content: 'basStationDetl.html',
            success: function (layero, index) {
            }
        });
    }
    /* 弹窗 - 新增、修改 */
    function showEditModel(mData) {
        admin.open({
src/main/webapp/static/js/checkOrder/checkOrder.js
@@ -109,24 +109,22 @@
            var offset = $a.offset();
            var top = offset.top;
            var left = offset.left;
            layer.open({
            admin.open({
                type: 1,
                title: false,
                area: '1000px',
                offset: [top + 'px', (left - 700 + $a.outerWidth()) + 'px'],
                shade: .01,
                shadeClose: true,
                fixed: false,
                content: '<table id="lookSSXMTable" lay-filter="lookSSXMTable"></table>',
                success: function (layero) {
                title: '单据明细',
                height: '450px',
                content: $('#orderItem').html(),
                area: '78%',
                success: function (layero, dIndex) {
                    table.render({
                        elem: '#lookSSXMTable',
                        headers: {token: localStorage.getItem('token')},
                        url: baseUrl+'/checkOrderDetl/list/auth',
                        elem: '#itemTable',
                        headers: { token: localStorage.getItem('token') },
                        url: baseUrl + '/checkOrderDetl/list/auth',
                        where: {
                            order_id: data.id
                        },
                        page: true,
                        height: '450px;',
                        cellMinWidth: 100,
                        cols: [[
                            {type: 'numbers'},
@@ -138,14 +136,6 @@
                            {field: 'anfme', title: '数量'},
                            {field: 'workQty', title: '盘点数量'},
                            {field: 'diffQty', title: '差异数量', style: 'font-weight: bold'},
                            // {field: 'unit', title: '单位'},
                            // {
                            //     field: 'createTime$', title: '创建时间', sort: true, templet: function (d) {
                            //         return util.toDateString(d.createTime);
                            //     },  width: 180
                            // },
                            // {field: 'inQty', title: '已入库量'},
                            // {field: 'color', title: '颜色'},
                            {field: 'specs', title: '规格'},
                            {field: 'status$', title: '状态'}
                        ]],
@@ -164,10 +154,7 @@
                        response: {
                            statusCode: 200
                        },
                        done:  (res) => {
                            if(res.code == 403){
                                window.top.location.href = baseUrl+"/";
                            }
                        done: function () {
                            $(layero).find('.layui-table-view').css('margin', '0');
                        },
                        size: ''
src/main/webapp/static/js/common.js
@@ -32,7 +32,7 @@
    } else {
        var p = time.getMilliseconds();
        if (p < 10) {
            p = "00" + p;
            p = "0" + p;
        }
        if (p <  100) {
            p = "0" + p;
@@ -245,6 +245,8 @@
    {field: 'matnr', align: 'center',title: '商品编号', sort:true}
    ,{field: 'maktx', align: 'center',title: '商品名称', sort:true}
    ,{field: 'orderNo', align: 'center',title: '单据编号', hide: false}
    ,{field: 'suppCode', align: 'center',title: '供应商编码', hide: false}
    ,{field: 'threeCode', align: 'center',title: 'BS Code', hide: false}
    ,{field: 'batch', align: 'center',title: '批号', sort:true}
    ,{field: 'anfme', align: 'center',title: '数量', hide: false}
    ,{field: 'zpallet', align: 'center',title: '托盘条码', hide: false}
@@ -265,9 +267,7 @@
    ,{field: 'weight', align: 'center',title: '单箱净重', hide: true}
    ,{field: 'length', align: 'center',title: '单箱毛重', hide: true}
    ,{field: 'volume', align: 'center',title: '单箱体积', hide: true}
    ,{field: 'threeCode', align: 'center',title: '箱子尺寸', hide: true}
    ,{field: 'supp', align: 'center',title: '供应商', hide: true}
    ,{field: 'suppCode', align: 'center',title: '供应商编码', hide: true}
    ,{field: 'beBatch$', align: 'center',title: '是否批次', hide: true}
    ,{field: 'deadTime', align: 'center',title: '保质期', hide: true}
    ,{field: 'deadWarn', align: 'center',title: '预警天数', hide: true}
src/main/webapp/static/js/locCache/locCache.js
@@ -136,6 +136,7 @@
                    shadeClose: true,
                    content: 'locDetail.html',
                    success: function (layero, index) {
                    }
                });
                break;
src/main/webapp/static/js/order/order.js
@@ -101,42 +101,34 @@
            var offset = $a.offset();
            var top = offset.top;
            var left = offset.left;
            layer.open({
            admin.open({
                type: 1,
                title: false,
                area: '820px',
                offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
                shade: .01,
                shadeClose: true,
                fixed: false,
                content: '<table id="lookSSXMTable" lay-filter="lookSSXMTable"></table>',
                success: function (layero) {
                title: '单据明细',
                height: '450px',
                content: $('#orderItem').html(),
                area: '78%',
                success: function (layero, dIndex) {
                    table.render({
                        elem: '#lookSSXMTable',
                        headers: {token: localStorage.getItem('token')},
                        url: baseUrl+'/orderDetl/list/auth',
                        elem: '#itemTable',
                        headers: { token: localStorage.getItem('token') },
                        url: baseUrl + '/orderDetl/list/auth',
                        where: {
                            order_id: data.id
                        },
                        page: true,
                        height: '450px;',
                        cellMinWidth: 100,
                        cols: [[
                            {type: 'numbers'},
                            {field: 'matnr', title: '商品编码', width: 160},
                            {field: 'maktx', title: '商品名称', width: 160},
                            {field: 'specs', title: '规格'},
                            {field: 'batch', title: '批号'},
                            {field: 'anfme', title: '待完结数量'},
                            {field: 'qty', title: '待上报数量', style: 'font-weight: bold'},
                            {field: 'workQty', title: '已上报数量'},
                            // {field: 'unit', title: '单位'},
                            // {
                            //     field: 'createTime$', title: '创建时间', sort: true, templet: function (d) {
                            //         return util.toDateString(d.createTime);
                            //     },  width: 180
                            // },
                            // {field: 'inQty', title: '已入库量'},
                            // {field: 'color', title: '颜色'}
                            { type: 'numbers' },
                            { field: 'matnr', title: '商品编码', width: 160 },
                            { field: 'maktx', title: '商品名称', width: 160 },
                            { field: 'standby1', title: '供应商编码', width: 160 },
                            { field: 'batch', title: '批号' },
                            { field: 'anfme', title: '待完结数量' },
                            { field: 'workQty', title: '待上报数量' },
                            { field: 'qty', title: '已完结数量', style: 'font-weight: bold' },
                            { field: 'specs', title: '规格' }
                        ]],
                        request: {
                            pageName: 'curr',
src/main/webapp/static/js/orderPakin/order.js
@@ -119,7 +119,7 @@
                            { type: 'numbers' },
                            { field: 'matnr', title: '商品编码', width: 160 },
                            { field: 'maktx', title: '商品名称', width: 160 },
                            { field: 'suppCode', title: '供应商编码', width: 160 },
                            { field: 'standby1', title: '供应商编码', width: 160 },
                            { field: 'batch', title: '批号' },
                            { field: 'anfme', title: '数量' },
                            { field: 'workQty', title: '作业数量' },
src/main/webapp/static/js/orderPakout/order.js
@@ -99,46 +99,33 @@
            doModify(data.id, data.orderNo, 4);
        } else if (layEvent === 'look') {
            var $a = $(obj.tr).find('a[lay-event="look"]');
            var offset = $a.offset();
            var top = offset.top;
            var left = offset.left;
            layer.open({
            admin.open({
                type: 1,
                title: false,
                area: '820px',
                offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
                shade: .01,
                shadeClose: true,
                fixed: false,
                content: '<table id="lookSSXMTable" lay-filter="lookSSXMTable"></table>',
                success: function (layero) {
                title: '单据明细',
                height: '450px',
                content: $('#orderItem').html(),
                area: '78%',
                success: function (layero, dIndex) {
                    table.render({
                        elem: '#lookSSXMTable',
                        headers: {token: localStorage.getItem('token')},
                        url: baseUrl+'/order/pakout/orderDetl/list/auth',
                        elem: '#itemTable',
                        headers: { token: localStorage.getItem('token') },
                        url: baseUrl + '/order/pakout/orderDetl/list/auth',
                        where: {
                            order_id: data.id
                        },
                        page: true,
                        height: '450px;',
                        cellMinWidth: 100,
                        cols: [[
                            {type: 'numbers'},
                            {field: 'matnr', title: '零件代码', width: 160},
                            {field: 'maktx', title: '零件名称', width: 160},
                            // {field: 'batch', title: '批号'},
                            {field: 'standby1', title: '供应商代码'},
                            {field: 'anfme', title: '数量'},
                            {field: 'workQty', title: '作业数量'},
                            {field: 'qty', title: '完成数量', style: 'font-weight: bold'},
                            // {field: 'unit', title: '单位'},
                            // {
                            //     field: 'createTime$', title: '创建时间', sort: true, templet: function (d) {
                            //         return util.toDateString(d.createTime);
                            //     },  width: 180
                            // },
                            // {field: 'inQty', title: '已入库量'},
                            // {field: 'color', title: '颜色'},
                            {field: 'specs', title: '规格'}
                            { type: 'numbers' },
                            { field: 'matnr', title: '商品编码', width: 160 },
                            { field: 'maktx', title: '商品名称', width: 160 },
                            { field: 'standby1', title: '供应商编码', width: 160 },
                            { field: 'batch', title: '批号' },
                            { field: 'anfme', title: '数量' },
                            { field: 'workQty', title: '作业数量' },
                            { field: 'qty', title: '完成数量', style: 'font-weight: bold' },
                            { field: 'specs', title: '规格' }
                        ]],
                        request: {
                            pageName: 'curr',
src/main/webapp/static/js/taskDetl/taskDetl.js
@@ -35,40 +35,16 @@
            ,{field: 'color', align: 'center',title: '颜色'}
            ,{field: 'brand', align: 'center',title: '品牌'}
            ,{field: 'unit', align: 'center',title: '单位'}
            ,{field: 'price', align: 'center',title: '单价'}
            ,{field: 'sku', align: 'center',title: 'sku'}
            ,{field: 'units', align: 'center',title: '单位量'}
            ,{field: 'barcode', align: 'center',title: '条码'}
            ,{field: 'origin', align: 'center',title: '产地'}
            ,{field: 'manu', align: 'center',title: '厂家'}
            ,{field: 'manuDate', align: 'center',title: '生产日期'}
            ,{field: 'itemNum', align: 'center',title: '品项数'}
            ,{field: 'safeQty', align: 'center',title: '安全库存量'}
            ,{field: 'weight', align: 'center',title: '重量'}
            ,{field: 'manLength', align: 'center',title: '长度'}
            ,{field: 'volume', align: 'center',title: '体积'}
            ,{field: 'threeCode', align: 'center',title: '三方编码'}
            ,{field: 'supp', align: 'center',title: '供应商'}
            ,{field: 'suppCode', align: 'center',title: '供应商编码'}
            ,{field: 'beBatch$', align: 'center',title: '是否批次'}
            ,{field: 'deadTime', align: 'center',title: '保质期'}
            ,{field: 'deadWarn', align: 'center',title: '预警天数'}
            ,{field: 'source$', align: 'center',title: '制购'}
            ,{field: 'inspect$', align: 'center',title: '要求检验'}
            ,{field: 'danger$', align: 'center',title: '危险品'}
            ,{field: 'modiUser$', align: 'center',title: '修改人员'}
            ,{field: 'modiTime$', align: 'center',title: '修改时间'}
            ,{field: 'appeUser$', align: 'center',title: '添加人员'}
            ,{field: 'appeTime$', align: 'center',title: '添加时间'}
            ,{field: 'memo', align: 'center',title: '备注'}
            ,{field: 'lineNumber', align: 'center',title: ''}
            ,{field: 'standby1', align: 'center',title: ''}
            ,{field: 'standby2', align: 'center',title: ''}
            ,{field: 'standby3', align: 'center',title: ''}
            ,{field: 'boxType1', align: 'center',title: ''}
            ,{field: 'boxType2', align: 'center',title: ''}
            ,{field: 'boxType3', align: 'center',title: ''}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width:120}
        ]],
        request: {
src/main/webapp/static/js/waitPakin/waitPakin.js
@@ -1,7 +1,9 @@
var pageCurr;
function getCol() {
    var cols = [{type: 'checkbox'}];
    var cols = [{type: 'checkbox'},
        {field: 'type$', align: 'center', title: '组托类型'}
    ];
    cols.push.apply(cols, detlCols);
    cols.push({field: 'locNo', align: 'center', title: '库位号'}
        , {
src/main/webapp/views/adjustOrder/adjustOrder.html
@@ -118,6 +118,9 @@
        </a>
    </span>
</script>
<script type="text/html" id="orderItem">
    <table id="itemTable" lay-filter="itemTable"></table>
</script>
<script type="text/html" id="orderNoTpl">
    {{d.orderNo}}
    {{# if(d.settle > 1 && d.settle !== 3){ }}
src/main/webapp/views/basStation/basStation.html
@@ -57,6 +57,7 @@
</script>
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-xs btn-detlShow" lay-event="detlShow">明细</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">删除</a>
</script>
src/main/webapp/views/basStation/basStationDetl.html
New file
@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <style>
    </style>
</head>
<body>
<div class="layui-inline" style="width:31%;margin-top: 20px">
    <label class="layui-form-label">站点台号:</label>
    <div class="layui-input-inline">
        <input id="devNo" class="layui-input" type="text" disabled="disabled">
    </div>
</div>
<table class="layui-hide" id="locCacheDetls" lay-filter="locCacheDetls"></table>
</body>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/locMast/locMast.js" charset="utf-8"></script>
<script type="text/javascript">
    var pageCur;
    function getCol() {
        var cols = [
            {field: 'devNo', align: 'center', title: '站点台号'}
        ];
        cols.push.apply(cols, cacheCols);
        return cols;
    }
    layui.use(['table', 'laydate', 'form'], function () {
        table = layui.table;
        var $ = layui.jquery;
        var form = layui.form;
        $('#devNo').val(parent.devNo);
        // 数据渲染
        tableIns1 = table.render({
            elem: '#locCacheDetls',
            headers: {token: localStorage.getItem('token')},
            url: baseUrl + '/basStationDetl/list/auth',
            where: {dev_no: parent.devNo},
            page: true,
            limit: 16,
            limits: [16, 30, 50, 100, 200, 500],
            even: true,
            toolbar: '#toolbar',
            cellMinWidth: 50,
            cols: [getCol()],
            request: {
                pageName: 'curr',
                pageSize: 'limit'
            },
            parseData: function (res) {
                return {
                    'code': res.code,
                    'msg': res.msg,
                    'count': res.data.total,
                    'data': res.data.records
                }
            },
            response: {
                statusCode: 200
            },
            done: function (res, curr, count) {
                if (res.code === 403) {
                    top.location.href = baseUrl + "/";
                }
                pageCur = curr;
                form.on('checkbox(tableCheckbox)', function (data) {
                    var _index = $(data.elem).attr('table-index') || 0;
                    if (data.elem.checked) {
                        res.data[_index][data.value] = 'Y';
                    } else {
                        res.data[_index][data.value] = 'N';
                    }
                });
            }
        });
    });
</script>
</html>
src/main/webapp/views/checkOrder/checkOrder.html
@@ -124,6 +124,9 @@
        </a>
    </span>
</script>
<script type="text/html" id="orderItem">
    <table id="itemTable" lay-filter="itemTable"></table>
</script>
<script type="text/html" id="orderNoTpl">
    {{d.orderNo}}
    {{# if(d.settle > 1 && d.settle !== 3){ }}
src/main/webapp/views/order/order.html
@@ -301,6 +301,9 @@
</script>
<script type="text/html" id="orderItem">
    <table id="itemTable" lay-filter="itemTable"></table>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
src/main/webapp/views/orderPakout/order.html
@@ -309,6 +309,9 @@
</script>
<script type="text/html" id="orderItem">
    <table id="itemTable" lay-filter="itemTable"></table>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
src/main/webapp/views/task/taskDetl.html
@@ -32,7 +32,7 @@
    function getCol() {
        var cols = [
            {field: 'wrkNo', align: 'center', title: '工作号'}
            , {field: 'ioTime$', align: 'center', title: '工作时间'}
            ,{field: 'ioTime$', align: 'center', title: '工作时间'}
        ];
        cols.push.apply(cols, detlCols);
        return cols;