自动化立体仓库 - WMS系统
zhang
2025-09-23 839dde0f9ac90050f24226b59131945cddb14b92
对接
1个文件已删除
57个文件已添加
9个文件已修改
3510 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OutController.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdCustomer.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdDepartment.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdEmp.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdInstockSource.java 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdInstockTarget.java 214 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdMaterial.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdOutstockSource.java 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdOutstockTarget.java 220 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdSupplier.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/entity/ExdUser.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdCustomerMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdDepartmentMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdEmpMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdInstockSourceMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdInstockTargetMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdMaterialMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdOutstockSourceMapper.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdOutstockTargetMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdSupplierMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/mapper/ExdUserMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdCustomerService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdDepartmentService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdEmpService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdInstockSourceService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdInstockTargetService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdMaterialService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdOutstockSourceService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdOutstockTargetService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdSupplierService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/ExdUserService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdCustomerServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdDepartmentServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdEmpServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdInstockSourceServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdInstockTargetServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdMaterialServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdOutstockSourceServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdOutstockTargetServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdSupplierServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/service/impl/ExdUserServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/task/BaseDataScheduler.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/task/OrderScheduler.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/task/handler/BaseDataHandler.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/third/task/handler/OrderHandler.java 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/license.lic 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/license.lic2 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/asrs/LocDetlMapper.xml 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ConfigMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdCustomerMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdDepartmentMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdEmpMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdInstockSourceMapper.xml 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdInstockTargetMapper.xml 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdMaterialMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdOutstockSourceMapper.xml 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdOutstockTargetMapper.xml 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdSupplierMapper.xml 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/third/ExdUserMapper.xml 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/out.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/outAll.js 387 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/outAll.html 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java
@@ -4,7 +4,6 @@
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.BasDevp;
import com.zy.asrs.entity.LocDetl;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.service.*;
@@ -63,7 +62,9 @@
        for (OrderDetl orderDetl : orderDetls) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
            if (issued <= 0.0D) { continue; }
            if (issued <= 0.0D) {
                continue;
            }
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            for (LocDetl locDetl : locDetls) {
                if (issued > 0) {
@@ -113,7 +114,83 @@
        List<TaskDto> taskDtos = new ArrayList<>();
        // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务
        for (LocDto locDto : locDtos) {
            if (locDto.isLack()) { continue; }
            if (locDto.isLack()) {
                continue;
            }
            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
            if (TaskDto.has(taskDtos, taskDto)) {
                TaskDto dto = TaskDto.find(taskDtos, taskDto);
                assert dto != null;
                dto.getLocDtos().addAll(taskDto.getLocDtos());
            } else {
                taskDtos.add(taskDto);
            }
        }
        // -----------------------------------------------------------------------------------------------
        for (TaskDto taskDto : taskDtos) {
            workService.stockOut(null, taskDto, getUserId(), taskDto.getStaNo());
        }
        return R.ok();
    }
    @PostMapping("/out/pakout2/preview/auth")
    @ManagerAuth
    public R pakoutPreview2(@RequestBody List<Long> ids) {
        if (Cools.isEmpty(ids)) {
            return R.parse(BaseRes.PARAM);
        }
        List<OrderDetl> orderDetls = orderDetlService.selectBatchIds(ids);
        List<LocDto> locDtos = new ArrayList<>();
        Set<String> exist = new HashSet<>();
        for (OrderDetl orderDetl : orderDetls) {
            double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
            if (issued <= 0.0D) {
                continue;
            }
            List<LocDetl> locDetls = locDetlService.queryStockAll(orderDetl.getMatnr(), orderDetl.getBatch(), null, exist);
            for (LocDetl locDetl : locDetls) {
                LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                        issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
                List<String> staNos = new ArrayList<>();
                staNos.add("C1");
                staNos.add("C2");
                staNos.add("C3");
                locDto.setStaNos(staNos);
                locDtos.add(locDto);
                exist.add(locDetl.getLocNo());
            }
        }
        return R.ok().add(locDtos);
    }
    @PostMapping("/out/pakoutV2/auth")
    @ManagerAuth(memo = "订单出库")
    public synchronized R pakout2(@RequestBody List<LocDto> locDtos) throws InterruptedException {
        if (Cools.isEmpty(locDtos)) {
            return R.parse(BaseRes.PARAM);
        }
        boolean lack = true;
        for (LocDto locDto : locDtos) {
            if (!locDto.isLack()) {
                lack = false;
                break;
            }
        }
        if (lack) {
            return R.error("库存不足");
        }
        Thread.sleep(1000L);
        List<TaskDto> taskDtos = new ArrayList<>();
        // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务
        for (LocDto locDto : locDtos) {
            if (locDto.isLack()) {
                continue;
            }
            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
            if (TaskDto.has(taskDtos, taskDto)) {
                TaskDto dto = TaskDto.find(taskDtos, taskDto);
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -56,6 +56,10 @@
    List<LocDetl> queryStock(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos);
    List<LocDetl> queryStockAll(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos);
    List<LocDetl> queryStockOther(@Param("matnr")String matnr, @Param("batch")String batch, @Param("orderNo")String orderNo, @Param("locNos") Set<String> locNos,@Param("locNo")String locNo);
src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -46,6 +46,10 @@
    List<LocDetl> queryStock(String matnr, String batch, String orderNo, Set<String> locNos);
    List<LocDetl> queryStockAll(String matnr, String batch, String orderNo, Set<String> locNos);
    List<LocDetl> queryStockOther(String matnr, String batch, String orderNo, Set<String> locNos,String locNo);
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -82,6 +82,11 @@
    }
    @Override
    public List<LocDetl> queryStockAll(String matnr, String batch, String orderNo, Set<String> locNos) {
        return this.baseMapper.queryStockAll(matnr, batch, orderNo, locNos);
    }
    @Override
    public List<LocDetl> queryStockOther(String matnr, String batch, String orderNo, Set<String> locNos,String locNo) {
        return this.baseMapper.queryStockOther(matnr, batch, orderNo, locNos,locNo);
    }
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -38,7 +38,7 @@
        }
    }
//    @Scheduled(cron = "0/5 * * * * ? ")
    @Scheduled(cron = "0/5 * * * * ? ")
    @Async("orderThreadPool")
    public void completeAndReport(){
        String erpReport = Parameter.get().getErpReport();
src/main/java/com/zy/third/entity/ExdCustomer.java
New file
@@ -0,0 +1,69 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName Exd_Customer
 */
@TableName(value ="Exd_Customer")
@Data
public class ExdCustomer implements Serializable {
    /**
     *
     */
    private String id;
    /**
     *
     */
    private String fnumber;
    /**
     *
     */
    private String fname;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdDepartment.java
New file
@@ -0,0 +1,69 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName Exd_Department
 */
@TableName(value ="Exd_Department")
@Data
public class ExdDepartment implements Serializable {
    /**
     *
     */
    private String id;
    /**
     *
     */
    private String fnumber;
    /**
     *
     */
    private String fname;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdEmp.java
New file
@@ -0,0 +1,69 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName Exd_Emp
 */
@TableName(value ="Exd_Emp")
@Data
public class ExdEmp implements Serializable {
    /**
     *
     */
    private String id;
    /**
     *
     */
    private String fnumber;
    /**
     *
     */
    private String fname;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdInstockSource.java
New file
@@ -0,0 +1,175 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName Exd_Instock_Source
 */
@TableName(value ="Exd_Instock_Source")
@Data
public class ExdInstockSource implements Serializable {
    /**
     *
     */
    private Integer finterid;
    /**
     *
     */
    private String fbillno;
    /**
     *
     */
    private Integer ftrantype;
    /**
     *
     */
    private Date fdate;
    /**
     *
     */
    private Integer frob;
    /**
     *
     */
    private Integer fdeptid;
    /**
     *
     */
    private Integer fsupplyid;
    /**
     *
     */
    private Integer fbillerid;
    /**
     *
     */
    private Integer fentryid;
    /**
     *
     */
    private Integer fitemid;
    /**
     *
     */
    private Double fqty;
    /**
     *
     */
    private Double fprice;
    /**
     *
     */
    private String fbatchno;
    /**
     *
     */
    private Integer funitid;
    /**
     *
     */
    private String fsourcebillno;
    /**
     *
     */
    private Integer fsourceentryid;
    /**
     *
     */
    private Integer fsourceinterid;
    /**
     *
     */
    private Integer fsourcetrantype;
    /**
     *
     */
    private Integer fdcspid;
    /**
     *
     */
    private Integer fdcstockid;
    /**
     *
     */
    private String forderbillno;
    /**
     *
     */
    private Integer forderentryid;
    /**
     *
     */
    private Integer forderinterid;
    /**
     *
     */
    private Integer fplanmode;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdInstockTarget.java
New file
@@ -0,0 +1,214 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName Exd_Instock_Target
 */
@TableName(value ="Exd_Instock_Target")
@Data
public class ExdInstockTarget implements Serializable {
    /**
     *
     */
    private Integer finterid;
    /**
     *
     */
    private String fbillno;
    /**
     *
     */
    private Integer ftrantype;
    /**
     *
     */
    private Date fdate;
    /**
     *
     */
    private Integer frob;
    /**
     *
     */
    private Integer fuserid;
    /**
     *
     */
    private Integer fdeptid;
    /**
     *
     */
    private Integer fsupplyid;
    /**
     *
     */
    private Integer fbillerid;
    /**
     *
     */
    private Integer ffmanagerid;
    /**
     *
     */
    private Integer fsmanagerid;
    /**
     *
     */
    private Integer fentryid;
    /**
     *
     */
    private Integer fitemid;
    /**
     *
     */
    private Double fqty;
    /**
     *
     */
    private Double fprice;
    /**
     *
     */
    private String fbatchno;
    /**
     *
     */
    private Integer funitid;
    /**
     *
     */
    private String fsourcebillno;
    /**
     *
     */
    private Integer fsourceentryid;
    /**
     *
     */
    private Integer fsourceinterid;
    /**
     *
     */
    private Integer fsourcetrantype;
    /**
     *
     */
    private Integer fdcspid;
    /**
     *
     */
    private Integer fdcstockid;
    /**
     *
     */
    private String forderbillno;
    /**
     *
     */
    private Integer forderentryid;
    /**
     *
     */
    private Integer forderinterid;
    /**
     *
     */
    private Integer fplanmode;
    /**
     *
     */
    private String barcode;
    /**
     *
     */
    private Double gross;
    /**
     *
     */
    private Double width;
    /**
     *
     */
    private Double defects;
    /**
     *
     */
    private String backcode;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdMaterial.java
New file
@@ -0,0 +1,77 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
/**
 *
 * @TableName Exd_Material
 */
@TableName(value ="Exd_Material")
@Data
public class ExdMaterial implements Serializable {
    /**
     *
     */
    @TableId(value = "id", type = IdType.AUTO)
    private String id;
    /**
     *
     */
    private String fnumber;
    /**
     *
     */
    private String fname;
    /**
     *
     */
    private String fmodel;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdOutstockSource.java
New file
@@ -0,0 +1,185 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName Exd_Outstock_Source
 */
@TableName(value ="Exd_Outstock_Source")
@Data
public class ExdOutstockSource implements Serializable {
    /**
     *
     */
    private Integer finterid;
    /**
     *
     */
    private String fbillno;
    /**
     *
     */
    private Integer ftrantype;
    /**
     *
     */
    private Date fdate;
    /**
     *
     */
    private Integer frob;
    /**
     *
     */
    private Integer fdeptid;
    /**
     *
     */
    private Integer fsupplyid;
    /**
     *
     */
    private Integer fbillerid;
    /**
     *
     */
    private Integer fentryid;
    /**
     *
     */
    private Integer fitemid;
    /**
     *
     */
    private Double fqty;
    /**
     *
     */
    private Double fprice;
    /**
     *
     */
    private String fbatchno;
    /**
     *
     */
    private Integer funitid;
    /**
     *
     */
    private String fsourcebillno;
    /**
     *
     */
    private Integer fsourceentryid;
    /**
     *
     */
    private Integer fsourceinterid;
    /**
     *
     */
    private Integer fsourcetrantype;
    /**
     *
     */
    private Integer fdcspid;
    /**
     *
     */
    private Integer fdcstockid;
    /**
     *
     */
    private Integer fscspid;
    /**
     *
     */
    private Integer fscstockid;
    /**
     *
     */
    private String forderbillno;
    /**
     *
     */
    private Integer forderentryid;
    /**
     *
     */
    private Integer forderinterid;
    /**
     *
     */
    private Integer fplanmode;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdOutstockTarget.java
New file
@@ -0,0 +1,220 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName Exd_Outstock_Target
 */
@TableName(value ="Exd_Outstock_Target")
@Data
public class ExdOutstockTarget implements Serializable {
    /**
     *
     */
    private Integer finterid;
    /**
     *
     */
    private String fbillno;
    /**
     *
     */
    private Integer ftrantype;
    /**
     *
     */
    private Date fdate;
    /**
     *
     */
    private Integer frob;
    /**
     *
     */
    private Integer fuserid;
    /**
     *
     */
    private Integer fdeptid;
    /**
     *
     */
    private Integer fsupplyid;
    /**
     *
     */
    private Integer fbillerid;
    /**
     *
     */
    private Integer fentryid;
    /**
     *
     */
    private Integer fitemid;
    /**
     *
     */
    private Double fqtymust;
    /**
     *
     */
    private Double fqty;
    /**
     *
     */
    private Double fprice;
    /**
     *
     */
    private String fbatchno;
    /**
     *
     */
    private Integer funitid;
    /**
     *
     */
    private String fsourcebillno;
    /**
     *
     */
    private Integer fsourceentryid;
    /**
     *
     */
    private Integer fsourceinterid;
    /**
     *
     */
    private Integer fsourcetrantype;
    /**
     *
     */
    private Integer fdcspid;
    /**
     *
     */
    private Integer fdcstockid;
    /**
     *
     */
    private Integer fscspid;
    /**
     *
     */
    private Integer fscstockid;
    /**
     *
     */
    private String forderbillno;
    /**
     *
     */
    private Integer forderentryid;
    /**
     *
     */
    private Integer forderinterid;
    /**
     *
     */
    private Integer fplanmode;
    /**
     *
     */
    private String barcode;
    /**
     *
     */
    private BigDecimal gross;
    /**
     *
     */
    private BigDecimal width;
    /**
     *
     */
    private BigDecimal defects;
    /**
     *
     */
    private String backcode;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdSupplier.java
New file
@@ -0,0 +1,69 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName Exd_Supplier
 */
@TableName(value ="Exd_Supplier")
@Data
public class ExdSupplier implements Serializable {
    /**
     *
     */
    private String id;
    /**
     *
     */
    private String fnumber;
    /**
     *
     */
    private String fname;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/entity/ExdUser.java
New file
@@ -0,0 +1,68 @@
package com.zy.third.entity;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
import org.springframework.data.annotation.Id;
/**
 *
 * @TableName Exd_User
 */
@TableName(value ="Exd_User")
@Data
public class ExdUser implements Serializable {
    /**
     *
     */
    @TableId(value = "id", type = IdType.AUTO)
    private String id;
    /**
     *
     */
    private String name;
    /**
     *
     */
    private Date writetime;
    /**
     *
     */
    private String writor;
    /**
     *
     */
    private Integer status;
    /**
     *
     */
    private Date readtime;
    /**
     *
     */
    private String reador;
    /**
     *
     */
    private String writormsg;
    /**
     *
     */
    private String readormsg;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
src/main/java/com/zy/third/mapper/ExdCustomerMapper.java
New file
@@ -0,0 +1,15 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdCustomer;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* @author zc857
* @description 针对表【Exd_Customer】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdCustomer
*/
public interface ExdCustomerMapper extends BaseMapper<ExdCustomer> {
}
src/main/java/com/zy/third/mapper/ExdDepartmentMapper.java
New file
@@ -0,0 +1,15 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdDepartment;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* @author zc857
* @description 针对表【Exd_Department】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdDepartment
*/
public interface ExdDepartmentMapper extends BaseMapper<ExdDepartment> {
}
src/main/java/com/zy/third/mapper/ExdEmpMapper.java
New file
@@ -0,0 +1,15 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdEmp;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* @author zc857
* @description 针对表【Exd_Emp】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdEmp
*/
public interface ExdEmpMapper extends BaseMapper<ExdEmp> {
}
src/main/java/com/zy/third/mapper/ExdInstockSourceMapper.java
New file
@@ -0,0 +1,24 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdInstockSource;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.third.entity.ExdUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author zc857
* @description 针对表【Exd_Instock_Source】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdInstockSource
*/
public interface ExdInstockSourceMapper extends BaseMapper<ExdInstockSource> {
    List<String> listOrderNo();
    List<ExdInstockSource> listAll(@Param("fbillno") String fbillno);
}
src/main/java/com/zy/third/mapper/ExdInstockTargetMapper.java
New file
@@ -0,0 +1,15 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdInstockTarget;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* @author zc857
* @description 针对表【Exd_Instock_Target】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdInstockTarget
*/
public interface ExdInstockTargetMapper extends BaseMapper<ExdInstockTarget> {
}
src/main/java/com/zy/third/mapper/ExdMaterialMapper.java
New file
@@ -0,0 +1,17 @@
package com.zy.third.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.third.entity.ExdMaterial;
import java.util.List;
/**
 * @author zc857
 * @description 针对表【Exd_Material】的数据库操作Mapper
 * @createDate 2025-09-23 08:36:03
 * @Entity com.zy.third.entity.ExdMaterial
 */
public interface ExdMaterialMapper extends BaseMapper<ExdMaterial> {
    List<ExdMaterial> listAll();
}
src/main/java/com/zy/third/mapper/ExdOutstockSourceMapper.java
New file
@@ -0,0 +1,21 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdOutstockSource;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.third.entity.ExdUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author zc857
* @description 针对表【Exd_Outstock_Source】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdOutstockSource
*/
public interface ExdOutstockSourceMapper extends BaseMapper<ExdOutstockSource> {
    List<String> listOrderNo();
    List<ExdOutstockSource> listAll(@Param("fbillno") String fbillno);
}
src/main/java/com/zy/third/mapper/ExdOutstockTargetMapper.java
New file
@@ -0,0 +1,15 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdOutstockTarget;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* @author zc857
* @description 针对表【Exd_Outstock_Target】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdOutstockTarget
*/
public interface ExdOutstockTargetMapper extends BaseMapper<ExdOutstockTarget> {
}
src/main/java/com/zy/third/mapper/ExdSupplierMapper.java
New file
@@ -0,0 +1,15 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdSupplier;
import com.baomidou.mybatisplus.mapper.BaseMapper;
/**
* @author zc857
* @description 针对表【Exd_Supplier】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdSupplier
*/
public interface ExdSupplierMapper extends BaseMapper<ExdSupplier> {
}
src/main/java/com/zy/third/mapper/ExdUserMapper.java
New file
@@ -0,0 +1,17 @@
package com.zy.third.mapper;
import com.zy.third.entity.ExdUser;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import java.util.List;
/**
* @author zc857
* @description 针对表【Exd_User】的数据库操作Mapper
* @createDate 2025-09-23 08:36:03
* @Entity com.zy.third.entity.ExdUser
*/
public interface ExdUserMapper extends BaseMapper<ExdUser> {
  List<ExdUser> listAll();
}
src/main/java/com/zy/third/service/ExdCustomerService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdCustomer;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Customer】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdCustomerService extends IService<ExdCustomer> {
}
src/main/java/com/zy/third/service/ExdDepartmentService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdDepartment;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Department】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdDepartmentService extends IService<ExdDepartment> {
}
src/main/java/com/zy/third/service/ExdEmpService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdEmp;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Emp】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdEmpService extends IService<ExdEmp> {
}
src/main/java/com/zy/third/service/ExdInstockSourceService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdInstockSource;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Instock_Source】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdInstockSourceService extends IService<ExdInstockSource> {
}
src/main/java/com/zy/third/service/ExdInstockTargetService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdInstockTarget;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Instock_Target】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdInstockTargetService extends IService<ExdInstockTarget> {
}
src/main/java/com/zy/third/service/ExdMaterialService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdMaterial;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Material】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdMaterialService extends IService<ExdMaterial> {
}
src/main/java/com/zy/third/service/ExdOutstockSourceService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdOutstockSource;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Outstock_Source】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdOutstockSourceService extends IService<ExdOutstockSource> {
}
src/main/java/com/zy/third/service/ExdOutstockTargetService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdOutstockTarget;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Outstock_Target】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdOutstockTargetService extends IService<ExdOutstockTarget> {
}
src/main/java/com/zy/third/service/ExdSupplierService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdSupplier;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_Supplier】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdSupplierService extends IService<ExdSupplier> {
}
src/main/java/com/zy/third/service/ExdUserService.java
New file
@@ -0,0 +1,13 @@
package com.zy.third.service;
import com.zy.third.entity.ExdUser;
import com.baomidou.mybatisplus.service.IService;
/**
* @author zc857
* @description 针对表【Exd_User】的数据库操作Service
* @createDate 2025-09-23 08:36:03
*/
public interface ExdUserService extends IService<ExdUser> {
}
src/main/java/com/zy/third/service/impl/ExdCustomerServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdCustomer;
import com.zy.third.service.ExdCustomerService;
import com.zy.third.mapper.ExdCustomerMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Customer】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdCustomerServiceImpl extends ServiceImpl<ExdCustomerMapper, ExdCustomer>
implements ExdCustomerService{
}
src/main/java/com/zy/third/service/impl/ExdDepartmentServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdDepartment;
import com.zy.third.service.ExdDepartmentService;
import com.zy.third.mapper.ExdDepartmentMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Department】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdDepartmentServiceImpl extends ServiceImpl<ExdDepartmentMapper, ExdDepartment>
implements ExdDepartmentService{
}
src/main/java/com/zy/third/service/impl/ExdEmpServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdEmp;
import com.zy.third.service.ExdEmpService;
import com.zy.third.mapper.ExdEmpMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Emp】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdEmpServiceImpl extends ServiceImpl<ExdEmpMapper, ExdEmp>
implements ExdEmpService{
}
src/main/java/com/zy/third/service/impl/ExdInstockSourceServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdInstockSource;
import com.zy.third.service.ExdInstockSourceService;
import com.zy.third.mapper.ExdInstockSourceMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Instock_Source】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdInstockSourceServiceImpl extends ServiceImpl<ExdInstockSourceMapper, ExdInstockSource>
implements ExdInstockSourceService{
}
src/main/java/com/zy/third/service/impl/ExdInstockTargetServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdInstockTarget;
import com.zy.third.service.ExdInstockTargetService;
import com.zy.third.mapper.ExdInstockTargetMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Instock_Target】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdInstockTargetServiceImpl extends ServiceImpl<ExdInstockTargetMapper, ExdInstockTarget>
implements ExdInstockTargetService{
}
src/main/java/com/zy/third/service/impl/ExdMaterialServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdMaterial;
import com.zy.third.service.ExdMaterialService;
import com.zy.third.mapper.ExdMaterialMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Material】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdMaterialServiceImpl extends ServiceImpl<ExdMaterialMapper, ExdMaterial>
implements ExdMaterialService{
}
src/main/java/com/zy/third/service/impl/ExdOutstockSourceServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdOutstockSource;
import com.zy.third.service.ExdOutstockSourceService;
import com.zy.third.mapper.ExdOutstockSourceMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Outstock_Source】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdOutstockSourceServiceImpl extends ServiceImpl<ExdOutstockSourceMapper, ExdOutstockSource>
implements ExdOutstockSourceService{
}
src/main/java/com/zy/third/service/impl/ExdOutstockTargetServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdOutstockTarget;
import com.zy.third.service.ExdOutstockTargetService;
import com.zy.third.mapper.ExdOutstockTargetMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Outstock_Target】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdOutstockTargetServiceImpl extends ServiceImpl<ExdOutstockTargetMapper, ExdOutstockTarget>
implements ExdOutstockTargetService{
}
src/main/java/com/zy/third/service/impl/ExdSupplierServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdSupplier;
import com.zy.third.service.ExdSupplierService;
import com.zy.third.mapper.ExdSupplierMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_Supplier】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdSupplierServiceImpl extends ServiceImpl<ExdSupplierMapper, ExdSupplier>
implements ExdSupplierService{
}
src/main/java/com/zy/third/service/impl/ExdUserServiceImpl.java
New file
@@ -0,0 +1,18 @@
package com.zy.third.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.third.entity.ExdUser;
import com.zy.third.service.ExdUserService;
import com.zy.third.mapper.ExdUserMapper;
import org.springframework.stereotype.Service;
/**
* @author zc857
* @description 针对表【Exd_User】的数据库操作Service实现
* @createDate 2025-09-23 08:36:03
*/
@Service
public class ExdUserServiceImpl extends ServiceImpl<ExdUserMapper, ExdUser>
implements ExdUserService{
}
src/main/java/com/zy/third/task/BaseDataScheduler.java
New file
@@ -0,0 +1,95 @@
package com.zy.third.task;
import com.zy.third.entity.ExdMaterial;
import com.zy.third.entity.ExdUser;
import com.zy.third.mapper.ExdMaterialMapper;
import com.zy.third.mapper.ExdUserMapper;
import com.zy.third.task.handler.BaseDataHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class BaseDataScheduler {
    @Autowired
    private BaseDataHandler baseDataHandler;
    @Autowired
    private ExdUserMapper exdUserMapper;
    @Autowired
    private ExdMaterialMapper exdMaterialMapper;
    /**
     * 读取用户信息
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    public void readUser() {
        log.info("读取用户信息");
        List<ExdUser> exdUsers = exdUserMapper.listAll();
        for (ExdUser exdUser : exdUsers) {
            try {
                if (baseDataHandler.readUser(exdUser).isSuccess()) {
                    exdUser.setStatus(1);
                } else {
                    exdUser.setStatus(2);
                }
            } catch (Exception e) {
                log.error("读取用户信息失败:{},{}", exdUser, e.getMessage());
                exdUser.setStatus(2);
                exdUser.setReadormsg(e.getMessage());
            } finally {
                exdUser.setReadtime(new Date());
                exdUserMapper.updateById(exdUser);
            }
        }
    }
    /**
     * 读取物料信息
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    public void readMat() {
        log.info("读取物料信息");
        List<ExdMaterial> exdMaterials = exdMaterialMapper.listAll();
        for (ExdMaterial exdMaterial : exdMaterials) {
            try {
                if (baseDataHandler.readMat(exdMaterial).isSuccess()) {
                    exdMaterial.setStatus(1);
                } else {
                    exdMaterial.setStatus(2);
                }
            } catch (Exception e) {
                log.error("读取物料信息失败:{},{}", exdMaterial, e.getMessage());
                exdMaterial.setStatus(2);
                exdMaterial.setReadormsg(e.getMessage());
            } finally {
                exdMaterial.setReadtime(new Date());
                exdMaterialMapper.updateById(exdMaterial);
            }
        }
    }
    /**
     * 读取部门信息
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    public void readDept() {
        log.info("读取部门信息");
    }
}
src/main/java/com/zy/third/task/OrderScheduler.java
New file
@@ -0,0 +1,99 @@
package com.zy.third.task;
import com.zy.third.entity.ExdInstockSource;
import com.zy.third.entity.ExdOutstockSource;
import com.zy.third.mapper.ExdInstockSourceMapper;
import com.zy.third.mapper.ExdOutstockSourceMapper;
import com.zy.third.task.handler.OrderHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class OrderScheduler {
    @Autowired
    private OrderHandler orderHandler;
    @Autowired
    private ExdInstockSourceMapper exdInstockSourceMapper;
    @Autowired
    private ExdOutstockSourceMapper exdOutstockSourceMapper;
    /**
     * 读取入库单据
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    public void readInOrder() {
        log.info("读取入库单据");
        List<String> orderNos = exdInstockSourceMapper.listOrderNo();
        for (String orderNo : orderNos) {
            List<ExdInstockSource> exdInstockSources = exdInstockSourceMapper.listAll(orderNo);
            try {
                boolean success = orderHandler.readInOrder(exdInstockSources).isSuccess();
                for (ExdInstockSource exdInstockSource : exdInstockSources) {
                    if (success) {
                        exdInstockSource.setReadtime(new Date());
                        exdInstockSource.setStatus(1);
                        exdInstockSourceMapper.updateById(exdInstockSource);
                    } else {
                        exdInstockSource.setReadtime(new Date());
                        exdInstockSource.setStatus(2);
                        exdInstockSourceMapper.updateById(exdInstockSource);
                    }
                }
            } catch (Exception e) {
                log.error("读取入库单据信息失败:{},{}", exdInstockSources, e.getMessage());
                for (ExdInstockSource exdInstockSource : exdInstockSources) {
                    exdInstockSource.setReadormsg(e.getMessage());
                    exdInstockSource.setStatus(2);
                    exdInstockSourceMapper.updateById(exdInstockSource);
                }
            }
        }
    }
    /**
     * 读取出库单据
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    public void readOutOrder() {
        log.info("读取出库单据");
        List<String> orderNos = exdInstockSourceMapper.listOrderNo();
        for (String orderNo : orderNos) {
            List<ExdOutstockSource> exdOutstockSources = exdOutstockSourceMapper.listAll(orderNo);
            try {
                boolean success = orderHandler.readOutOrder(exdOutstockSources).isSuccess();
                for (ExdOutstockSource exdOutstockSource : exdOutstockSources) {
                    if (success) {
                        exdOutstockSource.setReadtime(new Date());
                        exdOutstockSource.setStatus(1);
                        exdOutstockSourceMapper.updateById(exdOutstockSource);
                    } else {
                        exdOutstockSource.setReadtime(new Date());
                        exdOutstockSource.setStatus(2);
                        exdOutstockSourceMapper.updateById(exdOutstockSource);
                    }
                }
            } catch (Exception e) {
                log.error("读取出库单据信息失败:{},{}", exdOutstockSources, e.getMessage());
                for (ExdOutstockSource exdOutstockSource : exdOutstockSources) {
                    exdOutstockSource.setStatus(2);
                    exdOutstockSource.setReadormsg(e.getMessage());
                    exdOutstockSourceMapper.updateById(exdOutstockSource);
                }
            }
        }
    }
}
src/main/java/com/zy/third/task/handler/BaseDataHandler.java
New file
@@ -0,0 +1,66 @@
package com.zy.third.task.handler;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.TagService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.system.entity.User;
import com.zy.system.service.UserService;
import com.zy.third.entity.ExdMaterial;
import com.zy.third.entity.ExdUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
@Component
@Slf4j
public class BaseDataHandler extends AbstractHandler<String> {
    @Autowired
    private MatService matService;
    @Autowired
    private UserService userService;
    @Autowired
    private TagService tagService;
    @Transactional
    public ReturnT<String> readUser(ExdUser exdUser) {
        User user = userService.selectOne(new EntityWrapper<User>().eq("username", exdUser.getName()));
        if (user == null) {
            user = new User();
            user.setUsername(exdUser.getName());
            user.setNickname(exdUser.getName());
            user.setMobile(exdUser.getName());
            user.setRoleId(2L);
            user.setCreateTime(new Date());
            user.setStatus(1);
            userService.insert(user);
        }
        return SUCCESS;
    }
    @Transactional
    public ReturnT<String> readMat(ExdMaterial exdMaterial) {
        Mat mat = matService.selectOne(new EntityWrapper<Mat>().eq("matnr", exdMaterial.getFnumber()));
        if (mat == null) {
            mat = new Mat();
            mat.setMatnr(exdMaterial.getFnumber());
            mat.setMaktx(exdMaterial.getFname());
            mat.setSpecs(exdMaterial.getFmodel());
            mat.setTagId(tagService.getTop().getId());
            mat.setStatus(1);
            mat.setCreateTime(new Date());
            matService.insert(mat);
        }
        return SUCCESS;
    }
}
src/main/java/com/zy/third/task/handler/OrderHandler.java
New file
@@ -0,0 +1,232 @@
package com.zy.third.task.handler;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.DocType;
import com.zy.asrs.entity.Mat;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.service.DocTypeService;
import com.zy.asrs.service.MatService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.model.DetlDto;
import com.zy.third.entity.ExdInstockSource;
import com.zy.third.entity.ExdOutstockSource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class OrderHandler extends AbstractHandler<String> {
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private MatService matService;
    @Transactional
    public ReturnT<String> readInOrder(List<ExdInstockSource> exdInstockSource) {
        String fbillno = exdInstockSource.get(0).getFbillno();
        Integer ftrantype = exdInstockSource.get(0).getFtrantype();
        Order order = orderService.selectByNo(fbillno);
        if (!Cools.isEmpty(order)) {
            throw new CoolException(fbillno + "单据已存在,请勿重复提交");
        }
        DocType docType = docTypeService.selectById(ftrantype);
        if (docType == null) {
        }
        Date now = new Date();
        // 单据主档
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                fbillno,    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
                null,    // 项目编号
                null,    //
                null,    // 调拨项目编号
                null,    // 初始票据号
                null,    // 票据号
                null,    // 客户编号
                null,    // 客户
                null,    // 联系方式
                null,    // 操作人员
                null,    // 合计金额
                null,    // 优惠率
                null,    // 优惠金额
                null,    // 销售或采购费用合计
                null,    // 实付金额
                null,    // 付款类型
                null,    // 业务员
                null,    // 结算天数
                null,    // 邮费支付类型
                null,    // 邮费
                null,    // 付款时间
                null,    // 发货时间
                null,    // 物流名称
                null,    // 物流单号
                1L,    // 订单状态
                1,    // 状态
                9527L,    // 添加人员
                now,    // 添加时间
                9527L,    // 修改人员
                now,    // 修改时间
                null    // 备注
        );
        if (!orderService.insert(order)) {
            throw new CoolException("生成单据主档失败,请联系管理员");
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        for (ExdInstockSource detail : exdInstockSource) {
            DetlDto dto = new DetlDto(detail.getFitemid() + "", detail.getFbatchno(), detail.getFqty());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getFqty());
            } else {
                list.add(dto);
            }
        }
        for (DetlDto detlDto : list) {
            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
            }
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            orderDetl.setBatch(detlDto.getBatch());
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateTime(now);
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
        return SUCCESS;
    }
    @Transactional
    public ReturnT<String> readOutOrder(List<ExdOutstockSource> exdOutstockSource) {
        String fbillno = exdOutstockSource.get(0).getFbillno();
        Integer ftrantype = exdOutstockSource.get(0).getFtrantype();
        Order order = orderService.selectByNo(fbillno);
        // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据
        if (!Cools.isEmpty(order)) {
            if (order.getSettle() > 1L) {
                throw new CoolException(fbillno + "正在出库,无法修改单据");
            }
            orderService.remove(order.getId());
        }
        DocType docType = docTypeService.selectById(ftrantype);
        Date now = new Date();
        // 单据主档
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                fbillno,    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
                null,    // 项目编号
                null,    //
                null,    // 调拨项目编号
                null,    // 初始票据号
                null,    // 票据号
                null,    // 客户编号
                null,    // 客户
                null,    // 联系方式
                null,    // 操作人员
                null,    // 合计金额
                null,    // 优惠率
                null,    // 优惠金额
                null,    // 销售或采购费用合计
                null,    // 实付金额
                null,    // 付款类型
                null,    // 业务员
                null,    // 结算天数
                null,    // 邮费支付类型
                null,    // 邮费
                null,    // 付款时间
                null,    // 发货时间
                null,    // 物流名称
                null,    // 物流单号
                1L,    // 订单状态
                1,    // 状态
                9527L,    // 添加人员
                now,    // 添加时间
                9527L,    // 修改人员
                now,    // 修改时间
                null    // 备注
        );
        if (!orderService.insert(order)) {
            throw new CoolException("生成单据主档失败,请联系管理员");
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        for (ExdOutstockSource detail : exdOutstockSource) {
            DetlDto dto = new DetlDto(detail.getFitemid()+"", detail.getFbatchno(), detail.getFqty());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getFqty());
            } else {
                list.add(dto);
            }
        }
        for (DetlDto detlDto : list) {
            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
            }
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            orderDetl.setBatch(detlDto.getBatch());
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateTime(now);
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
        return SUCCESS;
    }
}
src/main/resources/application.yml
@@ -33,7 +33,7 @@
    #    password: root
    #driver-class-name: com.mysql.cj.jdbc.Driver
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    jdbc-url: jdbc:sqlserver://127.0.0.2:1433;databasename=hcwcs
    jdbc-url: jdbc:sqlserver://127.0.0.1:1433;databasename=wms_middle
    username: sa
    password: sa@123
src/main/resources/license.lic
Binary files differ
src/main/resources/license.lic2
New file
@@ -0,0 +1,3 @@
¸!´;ɉ‡r-C—>•?ÍF=î°0+¢åxµ¬¨Zâ[ö¤±¼9}½
ÑÅöıV]“Aw"öŸcÚ{|Á= &Y<±Ƽû'W~à®í;”\$Ì/H$ ÈB};…Š.º,X:YÒQc:æg•&JªGf°‚Ö^½’:6‰ŽÊKç¨\ß-Ì©ü78|ÃqÇ ”oQÙca†špÙxQUÆûđ­ŽP¤öoø€$ü k¤|+js¾Vs­)vz!‚áQÆ¥œ©ÍV³_uÂMùb"Õx±ú ™Îæ¾×lë€-ÿ©M¬9MڐþÎeA]š¤±*-•c”nµQRO‚5ÕkJBö¢¸´5Íñ _)£éöjƒQ‹Cú ¢*l‘iz©mN`}Þížì g$‚(ÿ¡?ë1òT}ïœjÇÇP½±im½Ûò\¸Y« NÚþm(ÊÙ"‰d³BXc¿EÀۃB>™ß[!QI:‘àº2Øt+Ykmd”ðîk^ôÁ.øôÑÀƀcHß¿:mU$„š,ýlŒÜQeŽqcµº¤µÖqåZ*òVØæ©$!BÖ㕞Š}”ÿY#NQ”~ÜÈO6åïBƾo[&sC    uDìw“(œ™ŠÈ<VÀŒmå¡Qä^eÂðŽwŸ{ø8ò{þqۋïû<¼‹¾;L×û±ŸYô_ôСWˆ½b`’=`ýÇÆwÒŒ.Ô¿ÓTlø’ôÒßèÑ7QØËË
‚Y8¶‰òÒ[YᅭM.wŽ8GÕéhӇwìèo—“ ž~óÎ^Û%Úe’¼˜Ý^Ûéÿƒ‡•)P…º,t“»«šf>°ºDˆD1t³,WméŒéhæÒU!ڀÁ;½´àTWš
src/main/resources/mapper/asrs/LocDetlMapper.xml
@@ -228,7 +228,7 @@
        </if>
        order by
        DATEPART(yyyy,a.modi_time),DATEPART(mm,a.modi_time),DATEPART(dd,a.modi_time), a.anfme
        a.batch asc, a.anfme
        desc,
        NEWID(),
        case
@@ -285,6 +285,93 @@
        desc
    </select>
    <select id="queryStockAll" resultMap="BaseResultMap">
        select a.*
        from asr_loc_detl a
        left join asr_loc_mast b on a.loc_no = b.loc_no
        where 1=1
        and b.loc_sts = 'F'
        and a.matnr = #{matnr}
        <!--        <choose>-->
        <!--            <when test="batch != null and batch != ''">-->
        <!--                and a.batch = #{batch}-->
        <!--            </when>-->
        <!--            <otherwise>-->
        <!--                and (a.batch IS NULL OR a.batch = '')-->
        <!--            </otherwise>-->
        <!--        </choose>-->
        <if test="batch != null and batch != ''">
            and a.batch = #{batch}
        </if>
        <if test="orderNo != null and orderNo != ''">
            and a.order_no = #{orderNo}
        </if>
        <if test="locNos != null and locNos.size > 0">
            and b.loc_no not in
            <foreach item="item" collection="locNos" index="index"  separator="," open="(" close=")">
                #{item}
            </foreach>
        </if>
        order by
        a.batch asc, a.anfme desc,
        NEWID(),
        case
        when (left(a.loc_no, 2) = '01') then 0
        when (left(a.loc_no, 2) = '02') then 1
        when (left(a.loc_no, 2) = '03') then 1
        when (left(a.loc_no, 2) = '04') then 0
        when (left(a.loc_no, 2) = '05') then 0
        when (left(a.loc_no, 2) = '06') then 1
        when (left(a.loc_no, 2) = '07') then 1
        when (left(a.loc_no, 2) = '08') then 0
        when (left(a.loc_no, 2) = '09') then 0
        when (left(a.loc_no, 2) = '10') then 1
        when (left(a.loc_no, 2) = '11') then 1
        when (left(a.loc_no, 2) = '12') then 0
        when (left(a.loc_no, 2) = '13') then 0
        when (left(a.loc_no, 2) = '14') then 1
        when (left(a.loc_no, 2) = '15') then 1
        when (left(a.loc_no, 2) = '16') then 0
        when (left(a.loc_no, 2) = '17') then 0
        when (left(a.loc_no, 2) = '18') then 1
        when (left(a.loc_no, 2) = '19') then 1
        when (left(a.loc_no, 2) = '20') then 0
        when (left(a.loc_no, 2) = '21') then 0
        when (left(a.loc_no, 2) = '22') then 1
        when (left(a.loc_no, 2) = '23') then 1
        when (left(a.loc_no, 2) = '24') then 0
        when (left(a.loc_no, 2) = '25') then 0
        when (left(a.loc_no, 2) = '26') then 1
        when (left(a.loc_no, 2) = '27') then 1
        when (left(a.loc_no, 2) = '28') then 0
        when (left(a.loc_no, 2) = '29') then 0
        when (left(a.loc_no, 2) = '30') then 1
        when (left(a.loc_no, 2) = '31') then 1
        when (left(a.loc_no, 2) = '32') then 0
        when (left(a.loc_no, 2) = '33') then 0
        when (left(a.loc_no, 2) = '34') then 1
        when (left(a.loc_no, 2) = '35') then 1
        when (left(a.loc_no, 2) = '36') then 0
        when (left(a.loc_no, 2) = '37') then 0
        when (left(a.loc_no, 2) = '38') then 1
        when (left(a.loc_no, 2) = '39') then 1
        when (left(a.loc_no, 2) = '40') then 0
        when (left(a.loc_no, 2) = '41') then 0
        when (left(a.loc_no, 2) = '42') then 1
        when (left(a.loc_no, 2) = '43') then 1
        when (left(a.loc_no, 2) = '44') then 0
        when (left(a.loc_no, 2) = '45') then 0
        when (left(a.loc_no, 2) = '46') then 1
        when (left(a.loc_no, 2) = '47') then 1
        when (left(a.loc_no, 2) = '48') then 0
        else 0
        end
        desc
    </select>
    <select id="queryStockAnfme" resultType="java.lang.Double">
        select sum(anfme) as count from man_loc_detl
        where 1=1
src/main/resources/mapper/third/ConfigMapper.xml
File was deleted
src/main/resources/mapper/third/ExdCustomerMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.third.mapper.ExdCustomerMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdCustomer">
            <result property="id" column="ID" />
            <result property="fnumber" column="Fnumber" />
            <result property="fname" column="Fname" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        ID,Fnumber,Fname,WriteTime,Writor,Status,
        ReadTime,Reador,WritorMsg,ReadorMsg
    </sql>
</mapper>
src/main/resources/mapper/third/ExdDepartmentMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.third.mapper.ExdDepartmentMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdDepartment">
            <result property="id" column="ID" />
            <result property="fnumber" column="Fnumber" />
            <result property="fname" column="Fname" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        ID,Fnumber,Fname,WriteTime,Writor,Status,
        ReadTime,Reador,WritorMsg,ReadorMsg
    </sql>
</mapper>
src/main/resources/mapper/third/ExdEmpMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.third.mapper.ExdEmpMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdEmp">
            <result property="id" column="ID" />
            <result property="fnumber" column="Fnumber" />
            <result property="fname" column="Fname" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        ID,Fnumber,Fname,WriteTime,Writor,Status,
        ReadTime,Reador,WritorMsg,ReadorMsg
    </sql>
</mapper>
src/main/resources/mapper/third/ExdInstockSourceMapper.xml
New file
@@ -0,0 +1,64 @@
<?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.third.mapper.ExdInstockSourceMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdInstockSource">
            <result property="finterid" column="FInterID" />
            <result property="fbillno" column="FBillNo" />
            <result property="ftrantype" column="FTranType" />
            <result property="fdate" column="FDate" />
            <result property="frob" column="FROB" />
            <result property="fdeptid" column="FDeptID" />
            <result property="fsupplyid" column="FSupplyID" />
            <result property="fbillerid" column="FBillerID" />
            <result property="fentryid" column="FEntryID" />
            <result property="fitemid" column="FItemID" />
            <result property="fqty" column="FQty" />
            <result property="fprice" column="Fprice" />
            <result property="fbatchno" column="FBatchNo" />
            <result property="funitid" column="FUnitID" />
            <result property="fsourcebillno" column="FSourceBillNo" />
            <result property="fsourceentryid" column="FSourceEntryID" />
            <result property="fsourceinterid" column="FSourceInterId" />
            <result property="fsourcetrantype" column="FSourceTranType" />
            <result property="fdcspid" column="FDCSPID" />
            <result property="fdcstockid" column="FDCStockID" />
            <result property="forderbillno" column="FOrderBillNo" />
            <result property="forderentryid" column="FOrderEntryID" />
            <result property="forderinterid" column="FOrderInterID" />
            <result property="fplanmode" column="FPlanMode" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        FInterID,FBillNo,FTranType,FDate,FROB,FDeptID,
        FSupplyID,FBillerID,FEntryID,FItemID,FQty,
        Fprice,FBatchNo,FUnitID,FSourceBillNo,FSourceEntryID,
        FSourceInterId,FSourceTranType,FDCSPID,FDCStockID,FOrderBillNo,
        FOrderEntryID,FOrderInterID,FPlanMode,WriteTime,Writor,
        Status,ReadTime,Reador,WritorMsg,ReadorMsg
    </sql>
    <select id="listOrderNo" resultMap="BaseResultMap">
        select top 100 distinct FBillNo
        <include refid="Base_Column_List" />
        from Exd_Instock_Source
        where status = 0
    </select>
    <select id="listAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from Exd_Instock_Source
        where FBillNo = #{fbillno}
    </select>
</mapper>
src/main/resources/mapper/third/ExdInstockTargetMapper.xml
New file
@@ -0,0 +1,59 @@
<?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.third.mapper.ExdInstockTargetMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdInstockTarget">
            <result property="finterid" column="FInterID" />
            <result property="fbillno" column="FBillNo" />
            <result property="ftrantype" column="FTranType" />
            <result property="fdate" column="FDate" />
            <result property="frob" column="FROB" />
            <result property="fuserid" column="FUserID" />
            <result property="fdeptid" column="FDeptID" />
            <result property="fsupplyid" column="FSupplyID" />
            <result property="fbillerid" column="FBillerID" />
            <result property="ffmanagerid" column="FFManagerID" />
            <result property="fsmanagerid" column="FSManagerID" />
            <result property="fentryid" column="FEntryID" />
            <result property="fitemid" column="FItemID" />
            <result property="fqty" column="FQty" />
            <result property="fprice" column="Fprice" />
            <result property="fbatchno" column="FBatchNo" />
            <result property="funitid" column="FUnitID" />
            <result property="fsourcebillno" column="FSourceBillNo" />
            <result property="fsourceentryid" column="FSourceEntryID" />
            <result property="fsourceinterid" column="FSourceInterId" />
            <result property="fsourcetrantype" column="FSourceTranType" />
            <result property="fdcspid" column="FDCSPID" />
            <result property="fdcstockid" column="FDCStockID" />
            <result property="forderbillno" column="FOrderBillNo" />
            <result property="forderentryid" column="FOrderEntryID" />
            <result property="forderinterid" column="FOrderInterID" />
            <result property="fplanmode" column="FPlanMode" />
            <result property="barcode" column="Barcode" />
            <result property="gross" column="Gross" />
            <result property="width" column="Width" />
            <result property="defects" column="Defects" />
            <result property="backcode" column="BackCode" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        FInterID,FBillNo,FTranType,FDate,FROB,FUserID,
        FDeptID,FSupplyID,FBillerID,FFManagerID,FSManagerID,
        FEntryID,FItemID,FQty,Fprice,FBatchNo,
        FUnitID,FSourceBillNo,FSourceEntryID,FSourceInterId,FSourceTranType,
        FDCSPID,FDCStockID,FOrderBillNo,FOrderEntryID,FOrderInterID,
        FPlanMode,Barcode,Gross,Width,Defects,
        BackCode,WriteTime,Writor,Status,ReadTime,
        Reador,WritorMsg,ReadorMsg
    </sql>
</mapper>
src/main/resources/mapper/third/ExdMaterialMapper.xml
New file
@@ -0,0 +1,34 @@
<?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.third.mapper.ExdMaterialMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdMaterial">
            <result property="id" column="ID" />
            <result property="fnumber" column="Fnumber" />
            <result property="fname" column="Fname" />
            <result property="fmodel" column="Fmodel" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        ID,Fnumber,Fname,Fmodel,WriteTime,Writor,
        Status,ReadTime,Reador,WritorMsg,ReadorMsg
    </sql>
    <select id="listAll" resultMap="BaseResultMap">
        select top 200
        <include refid="Base_Column_List" />
        from Exd_Material
        where status = 0
    </select>
</mapper>
src/main/resources/mapper/third/ExdOutstockSourceMapper.xml
New file
@@ -0,0 +1,67 @@
<?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.third.mapper.ExdOutstockSourceMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdOutstockSource">
            <result property="finterid" column="FInterID" />
            <result property="fbillno" column="FBillNo" />
            <result property="ftrantype" column="FTranType" />
            <result property="fdate" column="FDate" />
            <result property="frob" column="FROB" />
            <result property="fdeptid" column="FDeptID" />
            <result property="fsupplyid" column="FSupplyID" />
            <result property="fbillerid" column="FBillerID" />
            <result property="fentryid" column="FEntryID" />
            <result property="fitemid" column="FItemID" />
            <result property="fqty" column="FQty" />
            <result property="fprice" column="Fprice" />
            <result property="fbatchno" column="FBatchNo" />
            <result property="funitid" column="FUnitID" />
            <result property="fsourcebillno" column="FSourceBillNo" />
            <result property="fsourceentryid" column="FSourceEntryID" />
            <result property="fsourceinterid" column="FSourceInterId" />
            <result property="fsourcetrantype" column="FSourceTranType" />
            <result property="fdcspid" column="FDCSPID" />
            <result property="fdcstockid" column="FDCStockID" />
            <result property="fscspid" column="FSCSPID" />
            <result property="fscstockid" column="FSCStockID" />
            <result property="forderbillno" column="FOrderBillNo" />
            <result property="forderentryid" column="FOrderEntryID" />
            <result property="forderinterid" column="FOrderInterID" />
            <result property="fplanmode" column="FPlanMode" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        FInterID,FBillNo,FTranType,FDate,FROB,FDeptID,
        FSupplyID,FBillerID,FEntryID,FItemID,FQty,
        Fprice,FBatchNo,FUnitID,FSourceBillNo,FSourceEntryID,
        FSourceInterId,FSourceTranType,FDCSPID,FDCStockID,FSCSPID,
        FSCStockID,FOrderBillNo,FOrderEntryID,FOrderInterID,FPlanMode,
        WriteTime,Writor,Status,ReadTime,Reador,
        WritorMsg,ReadorMsg
    </sql>
    <select id="listOrderNo" resultMap="BaseResultMap">
        select top 100 distinct FBillNo
        <include refid="Base_Column_List" />
        from Exd_Instock_Source
        where status = 0
    </select>
    <select id="listAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from Exd_Outstock_Source
        where FBillNo = #{fbillno}
    </select>
</mapper>
src/main/resources/mapper/third/ExdOutstockTargetMapper.xml
New file
@@ -0,0 +1,60 @@
<?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.third.mapper.ExdOutstockTargetMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdOutstockTarget">
            <result property="finterid" column="FInterID" />
            <result property="fbillno" column="FBillNo" />
            <result property="ftrantype" column="FTranType" />
            <result property="fdate" column="FDate" />
            <result property="frob" column="FROB" />
            <result property="fuserid" column="FUserID" />
            <result property="fdeptid" column="FDeptID" />
            <result property="fsupplyid" column="FSupplyID" />
            <result property="fbillerid" column="FBillerID" />
            <result property="fentryid" column="FEntryID" />
            <result property="fitemid" column="FItemID" />
            <result property="fqtymust" column="FQtyMust" />
            <result property="fqty" column="FQty" />
            <result property="fprice" column="Fprice" />
            <result property="fbatchno" column="FBatchNo" />
            <result property="funitid" column="FUnitID" />
            <result property="fsourcebillno" column="FSourceBillNo" />
            <result property="fsourceentryid" column="FSourceEntryID" />
            <result property="fsourceinterid" column="FSourceInterId" />
            <result property="fsourcetrantype" column="FSourceTranType" />
            <result property="fdcspid" column="FDCSPID" />
            <result property="fdcstockid" column="FDCStockID" />
            <result property="fscspid" column="FSCSPID" />
            <result property="fscstockid" column="FSCStockID" />
            <result property="forderbillno" column="FOrderBillNo" />
            <result property="forderentryid" column="FOrderEntryID" />
            <result property="forderinterid" column="FOrderInterID" />
            <result property="fplanmode" column="FPlanMode" />
            <result property="barcode" column="Barcode" />
            <result property="gross" column="Gross" />
            <result property="width" column="Width" />
            <result property="defects" column="Defects" />
            <result property="backcode" column="BackCode" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        FInterID,FBillNo,FTranType,FDate,FROB,FUserID,
        FDeptID,FSupplyID,FBillerID,FEntryID,FItemID,
        FQtyMust,FQty,Fprice,FBatchNo,FUnitID,
        FSourceBillNo,FSourceEntryID,FSourceInterId,FSourceTranType,FDCSPID,
        FDCStockID,FSCSPID,FSCStockID,FOrderBillNo,FOrderEntryID,
        FOrderInterID,FPlanMode,Barcode,Gross,Width,
        Defects,BackCode,WriteTime,Writor,Status,
        ReadTime,Reador,WritorMsg,ReadorMsg
    </sql>
</mapper>
src/main/resources/mapper/third/ExdSupplierMapper.xml
New file
@@ -0,0 +1,24 @@
<?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.third.mapper.ExdSupplierMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdSupplier">
            <result property="id" column="ID" />
            <result property="fnumber" column="Fnumber" />
            <result property="fname" column="Fname" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        ID,Fnumber,Fname,WriteTime,Writor,Status,
        ReadTime,Reador,WritorMsg,ReadorMsg
    </sql>
</mapper>
src/main/resources/mapper/third/ExdUserMapper.xml
New file
@@ -0,0 +1,31 @@
<?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.third.mapper.ExdUserMapper">
    <resultMap id="BaseResultMap" type="com.zy.third.entity.ExdUser">
            <result property="id" column="ID" />
            <result property="name" column="Name" />
            <result property="writetime" column="WriteTime" />
            <result property="writor" column="Writor" />
            <result property="status" column="Status" />
            <result property="readtime" column="ReadTime" />
            <result property="reador" column="Reador" />
            <result property="writormsg" column="WritorMsg" />
            <result property="readormsg" column="ReadorMsg" />
    </resultMap>
    <sql id="Base_Column_List">
        ID,Name,WriteTime,Writor,Status,ReadTime,
        Reador,WritorMsg,ReadorMsg
    </sql>
    <select id="listAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from Exd_User
        where status = 0
    </select>
</mapper>
src/main/webapp/static/js/order/out.js
@@ -179,7 +179,7 @@
                                let data = tableCache[index];
                                for (let i = 0; i<tableCache.length; i++) {
                                    if (tableCache[i].locNo === data.locNo) {
                                        tableCache[i]['staNo'] = Number(obj.elem.value);
                                        tableCache[i]['staNo'] = obj.elem.value;
                                    }
                                }
                                obj.othis.children().find("input").css("color", "blue");
@@ -229,7 +229,7 @@
                                        // 确认
                                        form.on('submit(staBatchSelectConfirm)', function (obj) {
                                            let loadIdx = layer.load(2);
                                            let batchSta = Number(obj.field.batchSta);
                                            let batchSta = obj.field.batchSta;
                                            let arr = [];
                                            for (let j = 0; j<stoPreTabData.length; j++) {
                                                for (let i = 0; i<tableCache.length; i++) {
src/main/webapp/static/js/order/outAll.js
New file
@@ -0,0 +1,387 @@
var pageCurr;
var insTb2;
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).extend({
    notice: 'notice/notice',
}).use(['table','laydate', 'form', 'util', 'admin', 'notice', 'treeTable', 'xmSelect', 'tableMerge', 'tableX'], function(){
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    var util = layui.util;
    var notice = layui.notice;
    var treeTable = layui.treeTable;
    var xmSelect = layui.xmSelect;
    var tableMerge = layui.tableMerge;
    var tableX = layui.tableX;
    insTb2 = table.render({
        elem: '#orderDetlTable',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/orderDetl/pakout/list/auth',
        page: true,
        limit: 15,
        limits: [15, 30, 50, 100, 200, 500],
        toolbar: '#orderDetToolbar',
        height: 'full-120',
        where: {order_id: 9999999999},
        cols: [[
            {type: 'checkbox'}
            ,{type: 'numbers', title: '#'}
            ,{field: 'orderNo', align: 'center',title: '单据编号', templet: '#orderNoTpl', width: 160}
            ,{field: 'matnr', align: 'center',title: '商品编码', width: 160}
            ,{field: 'maktx', align: 'center',title: '商品名称', width: 200}
            ,{field: 'batch', align: 'center',title: '序列码'}
            ,{field: 'specs', align: 'center',title: '规格'}
            // ,{field: 'anfme', align: 'center',title: '数量'}
            // ,{field: 'qty', align: 'center',title: '作业数量', style: 'font-weight: bold'}
            ,{field: 'enableQty', align: 'center',title: '待出数量', style: 'font-weight: bold'}
            // ,{field: 'name', align: 'center',title: '名称'}
            // ,{field: 'model', align: 'center',title: '型号'}
            ,{field: 'unit', align: 'center',title: '单位', hide: true}
            ,{field: 'barcode', align: 'center',title: '商品条码', hide: true}
            // ,{field: 'supplier', align: 'center',title: '供应商'}
            // ,{field: 'unitPrice', align: 'center',title: '单价'}
            // ,{field: 'itemNum', align: 'center',title: '品项数'}
            // ,{field: 'count', align: 'center',title: '数量'}
            // ,{field: 'weight', align: 'center',title: '重量'}
            // ,{field: 'status$', align: 'center',title: '状态'}
            // ,{field: 'createBy$', align: 'center',title: '添加人员'}
            // ,{field: 'createTime$', align: 'center',title: '添加时间'}
            // ,{field: 'updateBy$', align: 'center',title: '修改人员'}
            // ,{field: 'updateTime$', align: 'center',title: '修改时间'}
            // ,{field: 'memo', align: 'center',title: '备注'}
            ,{fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 160}
        ]],
        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+"/";
            }
            pageCurr=curr;
            limit();
        }
    });
    /* 表格2搜索 */
    form.on('submit(sensorTbSearch)', function (data) {
        insTb2.reload({where: data.field, page: {curr: 1}});
        return false;
    });
    /* 表格2头工具栏点击事件 */
    table.on('toolbar(orderDetlTable)', function (obj) {
        var checkStatus = table.checkStatus(obj.config.id).data;
        if (obj.event === 'pakoutPreview') { // 添加
            if (checkStatus.length === 0) {
                layer.msg('请选择至少一条出库明细', {icon: 2});
                return;
            }
            pakoutPreview(checkStatus.map(function (d) {
                return d.id;
            }));
        } else if (obj.event === 'del') { // 删除
            var checkRows = table.checkStatus('sensorTable');
            if (checkRows.data.length === 0) {
                layer.msg('请选择要删除的数据', {icon: 2});
                return;
            }
            var ids = checkRows.data.map(function (d) {
                return d.id;
            });
            doDelSensor({ids: ids});
        }
    });
    /* 表格2工具条点击事件 */
    table.on('tool(orderDetlTable)', function (obj) {
        console.log(obj);
        var data = obj.data;
        switch (obj.event) {
            // 出库
            case 'pakoutPreview':
                pakoutPreview([data.id])
                break;
        }
    });
    function pakoutPreview(ids) {
        let loadIndex = layer.load(2);
        console.log("1111")
        $.ajax({
            url: baseUrl + "/out/pakout2/preview/auth",
            headers: {'token': localStorage.getItem('token')},
            contentType: 'application/json;charset=UTF-8',
            data: JSON.stringify(ids),
            method: 'POST',
            success: function (res) {
                layer.close(loadIndex);
                var tableCache;
                if (res.code === 200){
                    layer.open({
                        type: 1
                        ,title: false
                        ,closeBtn: false
                        ,offset: '50px'
                        ,area: ['1200px', '700px']
                        ,shade: 0.5
                        ,shadeClose: false
                        ,btn: ['立即出库', '稍后处理']
                        ,btnAlign: 'c'
                        ,moveType: 1 //拖拽模式,0或者1
                        ,content: $('#pakoutPreviewBox').html()
                        ,success: function(layero, index){
                            stoPreTabIdx = table.render({
                                elem: '#stoPreTab',
                                data: res.data,
                                height: 520,
                                page: false,
                                limit: Number.MAX_VALUE,
                                cellMinWidth: 100,
                                cols: [[
                                    // {type: 'checkbox', merge: ['orderNo']},
                                    {field: 'orderNo', title: '单据编号', merge: true, align: 'center'},
                                    {field: 'title', title: '商品', merge: true, align: 'center', width: 350},
                                    {field: 'batch', title: '序列码', align: 'center'},
                                    {field: 'anfme', title: '数量', align: 'center', width: 90, style: 'font-weight: bold'},
                                    {field: 'locNo', title: '货位', align: 'center', width: 100, templet: '#locNoTpl'},
                                    {field: 'staNos', align: 'center', title: '出库站', merge: ['locNo'], templet: '#tbBasicTbStaNos'},
                                    //{field: 'staState', title: '状态', align: 'center'},
                                    {type: 'checkbox', merge: ['locNo']},
                                ]],
                                done: function (res) {
                                    tableMerge.render(this);
                                    $('.layui-table-body.layui-table-main').css("overflow", "auto");
                                    tableCache = tableData = table.cache.stoPreTab;
                                }
                            });
                            // 修改出库站
                            form.on('select(tbBasicTbStaNos)', function (obj) {
                                let index  = obj.othis.parents('tr').attr("data-index");
                                let data = tableCache[index];
                                for (let i = 0; i<tableCache.length; i++) {
                                    if (tableCache[i].locNo === data.locNo) {
                                        tableCache[i]['staNo'] = obj.elem.value;
                                    }
                                }
                                obj.othis.children().find("input").css("color", "blue");
                                return false;
                            });
                            // 批量修改出库站
                            form.on('submit(batchModifySta)', function () {
                                let stoPreTabData = layui.table.checkStatus('stoPreTab').data;
                                if (stoPreTabData.length < 1) {
                                    layer.msg("请至少选择一条以上合并数据", {icon: 7});
                                    return false;
                                }
                                modifySta(stoPreTabData);
                            });
                            // 批量修改出库站 - 站点选择
                            function modifySta(stoPreTabData) {
                                // 出库站取交集
                                let staBatchSelectVal = [];
                                for(let i = 0; i<stoPreTabData.length; i++) {
                                    let staNos = stoPreTabData[i].staNos;
                                    if (staNos !== null) {
                                        if (staBatchSelectVal.length === 0) {
                                            staBatchSelectVal = staNos;
                                        } else {
                                            staBatchSelectVal = staBatchSelectVal.filter(val =>
                                                {
                                                    return new Set(staNos).has(val)
                                                }
                                            )
                                        }
                                    }
                                }
                                if (staBatchSelectVal.length === 0) {
                                    layer.msg("出库站没有交集,无法批量修改", {icon: 2});
                                    return;
                                }
                                admin.open({
                                    type: 1,
                                    area: '300px',
                                    offset: 'auto',
                                    title: '请选择站点',
                                    content: $('#staBatchSelectDialog').html(),
                                    success: function (layero, ddIndex) {
                                        // 渲染下拉框
                                        let template = Handlebars.compile($('#batchStaSelectTpl').html());
                                        $('#batchSelectStaBox').html(template({list: staBatchSelectVal}));
                                        // 确认
                                        form.on('submit(staBatchSelectConfirm)', function (obj) {
                                            let loadIdx = layer.load(2);
                                            let batchSta = obj.field.batchSta;
                                            let arr = [];
                                            for (let j = 0; j<stoPreTabData.length; j++) {
                                                for (let i = 0; i<tableCache.length; i++) {
                                                    if (tableCache[i].orderNo === stoPreTabData[j].orderNo
                                                        && tableCache[i].matnr === stoPreTabData[j].matnr
                                                        && tableCache[i].locNo === stoPreTabData[j].locNo) {
                                                        tableCache[i]['staNo'] = batchSta;
                                                        arr.push(i);
                                                    }
                                                }
                                            }
                                            stoPreTabIdx.reload({data: tableCache});
                                            arr.forEach(item => {
                                                $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .order-sta-select').val(batchSta);
                                            });
                                            layui.form.render('select');
                                            arr.forEach(item => {
                                                $('div[lay-id=stoPreTab] tr[data-index="' + item + '"] .layui-select-title').find("input").css("color", "blue");
                                            });
                                            layer.close(loadIdx); layer.close(ddIndex);
                                            return false;
                                        });
                                        // 弹窗不出现滚动条
                                        $(layero).children('.layui-layer-content').css('overflow', 'visible');
                                        layui.form.render('select');
                                    },
                                })
                            }
                        }
                        ,yes: function(index, layero){
                            //按钮【立即出库】的回调
                            pakout(tableCache, index);
                        }
                        ,btn2: function(index, layero){
                            //按钮【稍后处理】的回调
                            layer.close(index)
                            //return false 开启该代码可禁止点击该按钮关闭
                        }
                    });
                } else if (res.code === 403){
                    top.location.href = baseUrl+"/";
                } else {
                    layer.msg(res.msg, {icon: 2})
                }
            }
        })
    }
    function pakout(tableCache, layerIndex) {
        // let loadIndex = layer.load(2);
        notice.msg('正在生成出库任务......', {icon: 4});
        console.info(tableCache);
        $.ajax({
            url: baseUrl + "/out/pakout2/auth",
            headers: {'token': localStorage.getItem('token')},
            contentType: 'application/json;charset=UTF-8',
            data: JSON.stringify(tableCache),
            method: 'POST',
            success: function (res) {
                notice.destroy();
                if (res.code === 200) {
                    layer.close(layerIndex);
                    layer.msg(res.msg, {icon: 1});
                    insTb.reload({where: null});
                    insTb2.reload({where: null, page: {curr: 1}});
                } else if (res.code === 403) {
                    top.location.href = baseUrl + "/";
                } else {
                    layer.msg(res.msg, {icon: 2})
                }
            }
        });
    }
    /* 删除订单 */
    function doDelSensor(obj) {
        layer.confirm('确定要删除选中数据吗?', {
            skin: 'layui-layer-admin',
            shade: .1
        }, function (i) {
            layer.close(i);
            var loadIndex = layer.load(2);
            $.ajax({
                url: baseUrl+"/sensor/delete/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {ids: obj.ids},
                method: 'POST',
                success: function (res) {
                    layer.close(loadIndex);
                    if (res.code === 200){
                        layer.msg(res.msg, {icon: 1});
                        $(".layui-laypage-btn")[0].click();
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    }else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
    // 修改状态
    form.on('switch(statusSwitch)', function (obj) {
        var index  = obj.othis.parents('tr').attr("data-index");
        var data = tableData[index];
        data[this.name] = obj.elem.checked?1:0;
        http.post(baseUrl+"/sensor/edit/auth", {id: data.id, status: data[this.name]}, function (res) {
            layer.msg(res.msg, {icon: 1});
        })
    })
    window.pakoutPreview = pakoutPreview;
});
function tableReload(child) {
    var searchData = {};
    $.each($('#search-box [name]').serializeArray(), function() {
        searchData[this.name] = this.value;
    });
    (child ? parent.tableIns : tableIns).reload({
        where: searchData,
        page: {
            curr: pageCurr
        }
    });
}
/**
 * 一键出库
 */
function autoOut(orderId) {
    let loadIndex = layer.msg('请求中...', {icon: 16, shade: 0.01, time: false});
    $.ajax({
        url: baseUrl + "/out/pakout/orderDetlIds/auth",
        headers: {'token': localStorage.getItem('token')},
        data: { orderId : orderId },
        method: 'POST',
        success: function (res) {
            layer.close(loadIndex);
            if (res.code === 200){
                pakoutPreview(res.data);
            } else if (res.code === 403){
                top.location.href = baseUrl+"/";
            } else {
                layer.msg(res.msg, {icon: 2});
            }
        }
    })
}
src/main/webapp/views/order/outAll.html
New file
@@ -0,0 +1,314 @@
<!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/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/originTable.css" media="all">
    <style>
        body {
            color: #595959;
            background-color: #f5f7f9;
        }
        .admin-form {
            padding: 25px 30px 0 0 !important;
            margin: 0 !important;
        }
        .layui-table-view .layui-table-cell .layui-select-title .layui-input {
            height: 28px;
            line-height: 28px;
        }
        .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input {
            height: 40px;
            line-height: 40px;
        }
        .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input {
            height: 40px;
            line-height: 40px;
        }
        .layui-table-view [lay-size="sm"] .layui-table-cell .layui-select-title .layui-input {
            height: 20px;
            line-height: 20px;
        }
        .layui-table-view [lay-size="sm"] .layui-table-cell .layui-btn-xs {
            height: 18px;
            line-height: 18px;
        }
        /* 权限控制 */
        #btn-pakoutPreview {
            display: none;
        }
        /*#btn-delete {*/
        /*    display: none;*/
        /*}*/
        /*.btn-edit {*/
        /*    display: none;*/
        /*}*/
        /*.btn-more {*/
        /*    display: none;*/
        /*}*/
    </style>
</head>
<body>
<!-- 正文开始 -->
<div class="layui-fluid" style="padding-bottom: 0;">
    <div class="layui-row layui-col-space15">
        <!-- 左 -->
        <div class="layui-col-md3" id="left-table">
            <div class="layui-card">
                <div class="layui-card-body" style="padding: 10px;">
                    <form class="layui-form toolbar">
                        <div class="layui-form-item">
                            <div class="layui-inline" style="max-width: 300px;">
                                <input name="orderNo" class="layui-input" placeholder="输入单据编号" autocomplete="off"/>
                            </div>
                            <div class="layui-inline">
                                <button class="layui-btn icon-btn" lay-filter="originTableSearch" lay-submit>
                                    <i class="layui-icon">&#xe615;</i>搜索
                                </button>
                                <button class="layui-btn icon-btn" lay-filter="originTbReset" lay-submit>
                                    <i class="layui-icon">&#xe666;</i>重置
                                </button>
                            </div>
                        </div>
                    </form>
                    <table id="originTable" lay-filter="originTable"></table>
                </div>
            </div>
        </div>
        <!-- 右 -->
        <div class="layui-col-md9">
            <div class="layui-card">
                <div class="layui-card-body" style="padding: 10px;">
                    <form class="layui-form toolbar">
                        <div class="layui-form-item">
                            <div class="layui-inline">
                                <label class="layui-form-label">商品编码:</label>
                                <div class="layui-input-inline">
                                    <input name="matnr" class="layui-input" placeholder="商品编码"/>
                                </div>
                            </div>
                            <div class="layui-inline">
                                <label class="layui-form-label">商品名称:</label>
                                <div class="layui-input-inline">
                                    <input name="maktx" class="layui-input" placeholder="商品名称"/>
                                </div>
                            </div>
                            <div class="layui-inline">
                                <label class="layui-form-label">序列码:</label>
                                <div class="layui-input-inline">
                                    <input name="batch" class="layui-input" placeholder="序列码"/>
                                </div>
                            </div>
                            <!--                            <div class="layui-inline">-->
                            <!--                                <label class="layui-form-label">状态:</label>-->
                            <!--                                <div class="layui-input-inline">-->
                            <!--                                    <select name="isOnline">-->
                            <!--                                        <option value="1">充电中</option>-->
                            <!--                                        <option value="1">充电中</option>-->
                            <!--                                        <option value="0">不在充电</option>-->
                            <!--                                    </select>-->
                            <!--                                </div>-->
                            <!--                            </div>-->
                            <div class="layui-inline">&emsp;
                                <button class="layui-btn icon-btn" lay-filter="sensorTbSearch" lay-submit>
                                    <i class="layui-icon">&#xe615;</i>搜索
                                </button>
                            </div>
                        </div>
                    </form>
                    <table id="orderDetlTable" lay-filter="orderDetlTable"></table>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- 头工具栏 -->
<script type="text/html" id="orderDetToolbar">
    <!--    <div class="layui-btn-container">-->
    <!--        <div class="layui-col-md3">-->
    <!--            <select id="staNoSelect" lay-verify="required">-->
    <!--                <option value="">请选择站点</option>-->
    <!--            </select>-->
    <!--        </div>-->
    <!--    </div>-->
    <button class="layui-btn layui-btn-sm layui-btn-danger btn-pakoutPreview" id="btn-pakoutPreview" lay-event="pakoutPreview">批量出库</button>
</script>
<!-- 行工具栏 -->
<script type="text/html" id="operate">
    {{#if (d.anfme > d.qty){ }}
    <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>出库</a>
    {{# } }}
</script>
<!-- 出库预览 -->
<script type="text/html" id="pakoutPreviewBox" style="display: none">
    <div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">
        <span style="font-size: large; font-weight: bold">出库预览</span>
    </div>
    <div class="layui-card">
        <div class="layui-card-body" style="padding: 10px">
            <table id="stoPreTab" lay-filter="stoPreTab"></table>
        </div>
        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">
            批量修改
        </button>
    </div>
</script>
<script type="text/html" id="tbBasicTbStaNos">
    <div class="ew-select-fixed">
        <select class="order-sta-select" lay-filter="tbBasicTbStaNos">
            {{#if (d.staNos!=null) {}}
            {{# for(let i=0; i<d.staNos.length; i++) { }}
            <option value="{{d.staNos[i]}}">{{d.staNos[i]}}</option>
            {{# } }}
            {{# } }}
        </select>
    </div>
</script>
<script type="text/html" id="staBatchSelectDialog">
    <form class="layui-form" style="padding: 25px 50px 30px 50px;text-align: center">
        <select id="batchSelectStaBox" name="batchSta" lay-vertype="tips" lay-verify="required" required="">
        </select>
        <button style="margin-top: 30px" class="layui-btn" lay-filter="staBatchSelectConfirm" lay-submit="">确定</button>
    </form>
</script>
<script type="text/html" id="locNoTpl">
    <span name="locNo"
          {{# if( d.lack === false){ }}
          class="layui-badge layui-badge-green" >{{d.locNo}}</span>
    {{# } else { }}
    class="layui-badge layui-badge-red" >库存不足</span>
    {{# } }}
</script>
<!-- 行样式 -->
<script type="text/html" id="orderNoTpl">
    <span name="orderNo" class="layui-badge layui-badge-gray">{{d.orderNo}}</span>
</script>
<script type="text/html" id="statusTpl">
    <input type="checkbox" name="status" value="{{d.status}}" lay-skin="switch" lay-text="正常|禁用" lay-filter="statusSwitch" {{ d.status === 1 ? 'checked' : '' }}>
</script>
<!-- 表单弹窗 -->
<script type="text/html" id="editDialog">
    <form id="detail" lay-filter="detail" class="layui-form admin-form">
        <input name="id" type="hidden">
        <input name="status" type="hidden">
        <div class="layui-row">
            <div class="layui-col-md4">
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">设备编号</label>
                    <div class="layui-input-block">
                        <input name="uuid" placeholder="请输入设备编号" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                    </div>
                </div>
            </div>
            <div class="layui-col-md4">
                <div class="layui-form-item">
                    <label class="layui-form-label">设备类型:</label>
                    <div class="layui-input-block">
                        <div id="modelSel" class="ew-xmselect-tree"></div>
                    </div>
                </div>
            </div>
            <div class="layui-col-md4">
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">所属项目: </label>
                    <div class="layui-input-block cool-auto-complete">
                        <input name="hostId" class="layui-input" style="display: none">
                        <input id="hostId$" name="hostId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请选择所属项目" onfocus=this.blur()>
                        <div class="cool-auto-complete-window">
                            <input class="cool-auto-complete-window-input" data-key="hostQueryByhostId" onkeyup="autoLoad(this.getAttribute('data-key'))">
                            <select class="cool-auto-complete-window-select" data-key="hostQueryByhostIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                            </select>
                        </div>
                    </div>
                </div>
            </div>
            <div class="layui-col-md12">
                <div class="layui-form-item">
                    <label class="layui-form-label">详细地址</label>
                    <div class="layui-input-block">
                        <input name="addr" placeholder="请输入详细地址" class="layui-input">
                    </div>
                </div>
            </div>
            <hr class="layui-bg-gray">
            <div class="layui-col-md12" style="text-align: center">
                <iframe id="mapIframe" src="map.html" scrolling="no" frameborder="0"
                        style="display: inline-block; width: 90%;height: 400px;margin: auto">
                </iframe>
            </div>
        </div>
        <hr class="layui-bg-gray">
        <div class="layui-form-item text-right">
            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">保存</button>
            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
        </div>
    </form>
</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>
<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/tools/md5.js"></script>
<script type="text/javascript" src="../../static/js/orderTable.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/order/outAll.js" charset="utf-8"></script>
<!--<script type="text/template" id="takeSiteSelectTemplate">-->
<!--    {{#each data}}-->
<!--    <option value="{{siteId}}">{{desc}}</option>-->
<!--    {{/each}}-->
<!--</script>-->
<!-- 项目编辑窗口 -->
<script type="text/html" id="hostEditDialog">
    <form id="hostEditForm" lay-filter="hostEditForm" class="layui-form model-form">
        <input name="id" type="hidden"/>
        <div class="layui-form-item">
            <label class="layui-form-label layui-form-required">项目名称:</label>
            <div class="layui-input-block">
                <input name="name" placeholder="请输入类型名称" class="layui-input"
                       lay-verType="tips" lay-verify="required" required/>
            </div>
        </div>
        <div class="layui-form-item text-right">
            <button class="layui-btn" lay-filter="hostEditSubmit" lay-submit>保存</button>
            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
        </div>
    </form>
</script>
</body>
<script type="text/template" id="batchStaSelectTpl">
    <option value="">选择出库站</option>
    {{#each list}}
    <option value="{{this}}">{{this}}</option>
    {{/each}}
</script>
</html>